微信限额是什么意思| 什么地躺着| 望眼欲穿什么意思| 肚脐周围是什么器官| 一个点念什么| 黑五是什么时候| 外甥像舅舅有什么说法| 男人嘴角有痣代表什么| 绿茶是什么意思| 钻牛角尖什么意思| 芦笋炒什么好吃| 炸鸡用什么油| 什么是免疫治疗| 长湿疹是什么原因引起的| 95年属什么生肖婚配表| 中元节又叫什么节| 烦躁不安的意思是什么| 维生素a中毒是什么症状| dr股票是什么意思| 脑梗原因是什么引起的| 2018是什么生肖| 胸闷气短呼吸困难心慌是什么原因| 日照是什么海| 利而不害为而不争是什么意思| 冰箱冷藏室结冰是什么原因| 阳历1月份是什么星座| 末梢血是什么意思| 宫腔镜检查主要查什么| 三个七念什么| 征信对个人有什么影响| 头皮一阵一阵发麻是什么原因| 马跟什么生肖最配| 高温丝假发是什么材质| g1p1是什么意思| 屁股出血什么原因| 胃癌挂什么科| 无力是什么意思| 看什么看| 女人喝蜂蜜水有什么好处| 为什么乳头会变硬| 筋疼挂什么科| 女人为什么不会怀孕| 胃打嗝是什么原因| 梦见自己洗澡是什么意思| msm是什么意思| 四月十六是什么星座| 门庭若什么| 1946年属什么| 尿细菌高是什么原因| 08是什么生肖| 孕吐吃什么药| 主动脉瓣退行性变是什么意思| 唯爱是什么意思| 微针是什么美容项目| 吃得苦中苦方为人上人是什么意思| 什么叫tct检查| 青瓜炒什么好吃| 硬膜囊受压是什么意思| 九月二十五是什么星座| 罗网是什么意思| 苑什么意思| 什么是芡实| 颈椎压迫神经挂什么科| 心尖尖是什么意思| 为什么掉头发很厉害| 超声是什么检查| 33朵玫瑰花代表什么| 肺纤维化什么意思| 越狱男主角叫什么| 研讨会是什么意思| 疥疮是什么原因造成的| 达字五行属什么| 眼镜框什么材质的好| 呵是什么意思| 女性排卵期是什么时候| 拉稀吃什么食物好| 茉莉茶叶有什么功效和作用| 王晶老婆叫什么名字| 吃什么代谢快有助于减肥| 头痒是什么原因| 化验血挂什么科| 宫颈炎用什么药物治疗比较好| 什么心丧气| 吃什么长胸| 眉毛附近长痘痘是什么原因| 骨质增生是什么原因引起的| bull是什么意思| 做什么动作可以长高| 人文是什么意思| 羽五行属什么| 望闻问切的闻是什么意思| 猪心炖什么补气补血| gamma什么意思| 脑血栓是什么意思| 心气虚吃什么药| 前胸后背长痘痘是什么原因| 芒果是什么季节的| 慢性胃炎是什么原因引起的| 小孩口臭吃什么药效果最好| 杨树林是什么牌子| 蒂芙尼算什么档次| 大姨妈来了吃什么| 掉头发吃什么| 分泌物是褐色是什么原因| 晚上梦到蛇是什么意思| 狗狗狂犬疫苗什么时候打| 口干口苦吃什么药| 腰椎生理曲度变直什么意思| 小儿抽搐是什么原因引起的| 量贩式ktv是什么意思| dunhill是什么品牌| 爱出汗吃什么药| 易孕期是什么意思| 体液是什么| 烦躁是什么原因| 95年的属什么| 女人银屑病一般都长什么地方| 脚上长痣代表什么| 一个金字旁一个先读什么| 下限是什么意思| 过敏性咳嗽吃什么药| 腋下疼痛什么原因| 口水臭吃什么药| 单从属于什么茶| 521是什么星座| 嬉皮士是什么意思| 真菌是什么原因引起的| 此物非彼物是什么意思| 天干指的是什么| 40岁男人性功能减退是什么原因| 头疼头胀是什么原因| 双一流大学是什么意思| 蚂蚁的天敌是什么| 捡帽子有什么说法吗| 尤甚是什么意思| 襁褓是什么意思| 90岁属什么生肖| 潜血试验阳性什么意思| 隔离霜和防晒霜有什么区别| 裕字五行属什么| 梦到女儿死了是什么意思| 梵行是什么意思| 属兔的婚配什么属相好| 大表哥是什么游戏| 未成年改名字需要什么手续| 什么耳机比较好| 2月1日是什么星座| 子时是什么时候| 为什么指甲会凹凸不平| 孙策字什么| 绿茶婊什么意思| 邪不压正什么意思| 脾虚吃什么水果| 头左边痛是什么原因| 秋葵不适宜什么人吃| 上海青是什么菜| 身体怕热是什么原因| 右肾钙化灶是什么意思| 梦见自己吐血是什么征兆| 后背酸疼是什么原因| 杭州有什么景点| spiderking是什么牌子| 山加乘念什么| 什么叫穿刺| 心电图t波改变是什么意思| 喝酒上头是什么原因| ti是什么元素| 马加其念什么| 五月初六是什么星座| 红烧肉可以放什么配菜| 木姜子是什么东西| 喝蜂蜜水对身体有什么好处| 空调开什么模式最凉快| 懦弱什么意思| 男性查hpv挂什么科| 前方高能是什么意思| 睡眠障碍吃什么药最好| 禁令是什么意思| 胃酸分泌过多是什么原因造成的| 梦见杀鸡见血什么征兆| 嘴巴长疱疹用什么药| 查五行缺什么| 偈语是什么意思| 属狗女和什么属相最配| 肠胃不好吃什么菜比较好| 血氨是什么| 甲亢不能吃什么食物| ppl是什么药| 猪脆肠是什么器官| 姨妈期吃什么| 什么情况下需要做肠镜| 真菌感染脚气用什么药| 金疮是什么病| 释迦果吃了有什么好处| 羊水穿刺主要检查什么| 双相情感障碍吃什么药| 杨柳代表什么生肖| 吃什么可以增大阴茎| 反应性细胞改变是什么意思| 勺是什么意思| 诊疗是什么意思| 小朋友膝盖疼是什么原因| 脑内多发缺血灶是什么意思| 荷尔蒙是什么东西| 趣味相投是什么意思| 为什么吃了饭就想睡觉| 面粉可以做什么| 人彘为什么还能活着| 为什么会得荨麻疹呢| 什么是抗性淀粉| 谷草转氨酶偏低是什么原因| 中伏是什么意思| 心源性哮喘首选什么药| 霉菌是什么东西| 小暑是什么时候| 什么动听四字词语| 深蹲有什么好处| 唐筛21三体临界风险是什么意思| ecg什么意思| 冬虫虫念什么| 胸口闷闷的有点疼是什么原因| d2聚体高是什么意思| 花枝是什么食材| 伤口溃烂不愈合用什么药| 宽宏大度是什么生肖| 什么汤| 山楂搭配什么泡水喝好| 宝宝拉肚子吃什么好| 病理性骨折是什么意思| 为什么做噩梦| 杓是什么意思| 与虎谋皮是什么意思| 上海最高楼叫什么大厦有多少米高| 胰岛素是什么意思| 扑救带电火灾应选用什么灭火器| 为什么老想睡觉| 血清和血浆有什么区别| 梦到洗衣服是什么意思| 什么干什么燥| 男生说gg是什么意思| 孩子为什么说话迟| 蹼是什么意思| 背疼应该挂什么科| 什么是天乙贵人| 为什么不呢| 胆囊结石会引起身体什么症状| 手背麻木是什么原因| 舌系带短有什么影响| 2是什么生肖| 4月30号是什么星座| 什么肠小道成语| 梦见虱子是什么意思| 黑眼圈重是什么原因| icp是什么意思| 为什么不娶养猫的女人| 母螳螂为什么要吃公螳螂| 生二胎应该注意什么| dostinex是什么药| 洋葱炒什么好吃| 相宜的意思是什么| 尿血吃什么消炎药| 绿豆什么人不能吃| 膀胱炎吃什么药| 什么地眨眼| 百度

5、46号文掀起监管风暴 银行业“三套利”时代


Directory: ../../../ffmpeg/
File: src/libavcodec/mwsc.c
Date: 2025-08-04 11:35:17
Exec Total Coverage
Lines: 0 86 0.0%
Functions: 0 4 0.0%
Branches: 0 42 0.0%

Line Branch Exec Source
1 /*
2 * MatchWare Screen Capture Codec decoder
3 *
4 * Copyright (c) 2018 Paul B Mahol
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 #include <stdio.h>
24
25 #include "libavutil/mem.h"
26 #include "avcodec.h"
27 #include "bytestream.h"
28 #include "codec_internal.h"
29 #include "decode.h"
30 #include "zlib_wrapper.h"
31
32 #include <zlib.h>
33
34 typedef struct MWSCContext {
35 unsigned int decomp_size;
36 uint8_t *decomp_buf;
37 AVFrame *prev_frame;
38 FFZStream zstream;
39 } MWSCContext;
40
41 static int rle_uncompress(GetByteContext *gb, PutByteContext *pb, GetByteContext *gbp,
42 int width, int height, int stride, int pb_linesize, int gbp_linesize)
43 {
44 int intra = 1, w = 0;
45
46 bytestream2_seek_p(pb, (height - 1) * pb_linesize, SEEK_SET);
47
48 while (bytestream2_get_bytes_left(gb) > 0) {
49 uint32_t fill = bytestream2_get_le24(gb);
50 unsigned run = bytestream2_get_byte(gb);
51
52 if (run == 0) {
53 run = bytestream2_get_le32(gb);
54
55 if (bytestream2_tell_p(pb) + width - w < run)
56 return AVERROR_INVALIDDATA;
57
58 for (int j = 0; j < run; j++, w++) {
59 if (w == width) {
60 w = 0;
61 bytestream2_seek_p(pb, -(pb_linesize + stride), SEEK_CUR);
62 }
63 bytestream2_put_le24(pb, fill);
64 }
65 } else if (run == 255) {
66 int pos = bytestream2_tell_p(pb);
67
68 bytestream2_seek(gbp, pos, SEEK_SET);
69
70 if (pos + width - w < fill)
71 return AVERROR_INVALIDDATA;
72
73 for (int j = 0; j < fill; j++, w++) {
74 if (w == width) {
75 w = 0;
76 bytestream2_seek_p(pb, -(pb_linesize + stride), SEEK_CUR);
77 bytestream2_seek(gbp, -(gbp_linesize + stride), SEEK_CUR);
78 }
79 bytestream2_put_le24(pb, bytestream2_get_le24(gbp));
80 }
81
82 intra = 0;
83 } else {
84 if (bytestream2_tell_p(pb) + width - w < run)
85 return AVERROR_INVALIDDATA;
86
87 for (int j = 0; j < run; j++, w++) {
88 if (w == width) {
89 w = 0;
90 bytestream2_seek_p(pb, -(pb_linesize + stride), SEEK_CUR);
91 }
92 bytestream2_put_le24(pb, fill);
93 }
94 }
95 }
96
97 return intra;
98 }
99
100 static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
101 int *got_frame, AVPacket *avpkt)
102 {
103 MWSCContext *s = avctx->priv_data;
104 z_stream *const zstream = &s->zstream.zstream;
105 const uint8_t *buf = avpkt->data;
106 int buf_size = avpkt->size;
107 GetByteContext gb;
108 GetByteContext gbp;
109 PutByteContext pb;
110 int ret;
111
112 ret = inflateReset(zstream);
113 if (ret != Z_OK) {
114 av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret);
115 return AVERROR_EXTERNAL;
116 }
117 zstream->next_in = buf;
118 zstream->avail_in = buf_size;
119 zstream->next_out = s->decomp_buf;
120 zstream->avail_out = s->decomp_size;
121 ret = inflate(zstream, Z_FINISH);
122 if (ret != Z_STREAM_END) {
123 av_log(avctx, AV_LOG_ERROR, "Inflate error: %d\n", ret);
124 return AVERROR_EXTERNAL;
125 }
126
127 if ((ret = ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF)) < 0)
128 return ret;
129
130 bytestream2_init(&gb, s->decomp_buf, zstream->total_out);
131 bytestream2_init(&gbp, s->prev_frame->data[0], avctx->height * s->prev_frame->linesize[0]);
132 bytestream2_init_writer(&pb, frame->data[0], avctx->height * frame->linesize[0]);
133
134 if (rle_uncompress(&gb, &pb, &gbp, avctx->width, avctx->height, avctx->width * 3,
135 frame->linesize[0], s->prev_frame->linesize[0]))
136 frame->flags |= AV_FRAME_FLAG_KEY;
137 else
138 frame->flags &= ~AV_FRAME_FLAG_KEY;
139
140 frame->pict_type = (frame->flags & AV_FRAME_FLAG_KEY) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
141
142 if ((ret = av_frame_replace(s->prev_frame, frame)) < 0)
143 return ret;
144
145 *got_frame = 1;
146
147 return avpkt->size;
148 }
149
150 static av_cold int decode_init(AVCodecContext *avctx)
151 {
152 MWSCContext *s = avctx->priv_data;
153 int64_t size;
154
155 avctx->pix_fmt = AV_PIX_FMT_BGR24;
156
157 size = 32LL * avctx->height * avctx->width;
158 if (size >= INT32_MAX)
159 return AVERROR_INVALIDDATA;
160 s->decomp_size = size;
161 if (!(s->decomp_buf = av_malloc(s->decomp_size)))
162 return AVERROR(ENOMEM);
163
164 s->prev_frame = av_frame_alloc();
165 if (!s->prev_frame)
166 return AVERROR(ENOMEM);
167
168 return ff_inflate_init(&s->zstream, avctx);
169 }
170
171 static av_cold int decode_close(AVCodecContext *avctx)
172 {
173 MWSCContext *s = avctx->priv_data;
174
175 av_frame_free(&s->prev_frame);
176 av_freep(&s->decomp_buf);
177 s->decomp_size = 0;
178 ff_inflate_end(&s->zstream);
179
180 return 0;
181 }
182
183 const FFCodec ff_mwsc_decoder = {
184 .p.name = "mwsc",
185 CODEC_LONG_NAME("MatchWare Screen Capture Codec"),
186 .p.type = AVMEDIA_TYPE_VIDEO,
187 .p.id = AV_CODEC_ID_MWSC,
188 .priv_data_size = sizeof(MWSCContext),
189 .init = decode_init,
190 .close = decode_close,
191 FF_CODEC_DECODE_CB(decode_frame),
192 .p.capabilities = AV_CODEC_CAP_DR1,
193 .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
194 };
195

下午3点到4点是什么时辰 平妻是什么意思 怀孕一个月肚子有什么变化 膳食纤维有什么作用 湖南湖北以什么湖为界
小孩喜欢趴着睡觉是什么原因 打了封闭针后要注意什么事项 北芪与黄芪有什么区别 梦见骑自行车是什么意思 7.14号是什么节日
儿童咳嗽吃什么消炎药 泄泻病是什么意思 手指关节疼痛吃什么药 肋间神经痛什么症状 头晕喝什么饮料
11月9号是什么日子 总价包干是什么意思 cocoon是什么意思 虾仁和什么炒好吃 浅表性胃炎吃什么药效果好
纸可以做什么hcv8jop6ns1r.cn 变爻是什么意思hcv9jop4ns0r.cn 提高什么hcv9jop0ns4r.cn 干眼症用什么药bjcbxg.com 心焦是什么意思hcv7jop6ns4r.cn
十二生肖排第一是什么生肖hcv8jop7ns9r.cn 一九七一年属什么生肖bfb118.com 妊娠纹是什么hcv8jop2ns2r.cn 轻度抑郁症吃什么药hcv9jop5ns9r.cn 正月开什么花hcv8jop3ns9r.cn
常态是什么意思hcv9jop0ns2r.cn 1.18是什么星座hcv7jop7ns3r.cn 胃寒吃点什么药hcv9jop1ns5r.cn 氯雷他定什么时候吃shenchushe.com 芥菜长什么样子图片hcv9jop0ns6r.cn
青年补钙吃什么好hcv9jop6ns0r.cn 纸醉金迷是什么意思hcv9jop1ns3r.cn 男人头发硬说明什么hcv8jop4ns7r.cn 生育保险是什么beikeqingting.com 为什么容易被蚊子咬clwhiglsz.com
百度