5.16是什么星座| 突然的反义词是什么| 来褐色分泌物是什么原因| 专科有什么专业| 失眠吃什么食物最有效| sj是什么| 晚上11点到12点是什么时辰| 什么字五行属金| 茧子是什么意思| h是什么意思| 今年是农历的什么年| jones是什么意思| 吃菌子不能吃什么| 女性私下有苦味主要是什么原因| 无机磷偏低有什么影响| 王加玉念什么| 什么泡水喝降甘油三酯| 放疗后不能吃什么| 靖康耻指的是什么历史事件| 针眼长什么样子图片| mic是什么单位| 双什么意思| 五谷有什么| 律的右边读什么| 生肖羊生什么生肖最好| 尿多是什么病| 美国为什么要打伊拉克| 失眠什么药最好| 健康证什么时候可以办| 脱臼是指什么从什么中滑脱| 袢是什么意思| 69是什么意思| 孕妇喝什么汤最好最有营养| 聚首一堂是指什么生肖| 宫颈hsil是什么意思| 女人右手中指有痣代表什么| 脐橙什么意思| 怀孕乳头会有什么变化| 从头再来什么意思| 什么叫盗汗| 老鹰的绝症是什么| 超负荷是什么意思| 蓝莓是什么颜色| 什么叫换手率| 什么是尿毒症啊| 盆腔炎是什么症状| 竹字头均念什么名字| 对节木是什么树| 聚聚什么意思| 礼物送什么| 二十年婚姻是什么婚| 然五行属什么| 什么药可降尿酸| 输卵管造影是什么意思| 什么是双向抑郁| 怀孕什么时候能测出来| n是什么牌子| 解脲支原体阳性吃什么药| 脸颊两侧长斑是什么原因怎么调理| noa是什么意思| 什么情况下需要做胃镜| 梦见恐龙是什么意思| 单活胎是什么意思| 牙痛吃什么药| 蛋蛋疼是什么原因| 珍珠疹是什么原因引起的| 肚子大挂什么科| 舌苔厚口臭吃什么药好| 令坦是对方什么人的尊称| tc是什么| 这是什么虫子| 宜余事勿取是什么意思| 鼻子两侧毛孔粗大是什么原因造成的| 墓志铭什么意思| 曲酒是什么酒| 什么是基数| cra是什么| 黑豆有什么作用| 苏轼是什么派词人| 哈欠是什么意思| 优生优育是什么意思| 娃娃鱼是什么动物| 419是什么意思| 床上出现蜈蚣什么原因| 脑鸣去医院挂什么科| 耳鸣和脑鸣有什么区别| 皮肤黑吃什么会变白| 得不偿失是什么意思| 生气对身体有什么危害| 尿失禁是什么症状| gbs检查是什么| 鼻窦粘膜增厚什么意思| 教师节什么时候| 纣王叫什么名字| 属鸡本命佛是什么佛| 乌梅是什么水果做的| 怀孕吸烟对胎儿有什么影响| 头晕目眩是什么意思| 发挥是什么意思| 幼稚细胞是什么意思| 女人左眼下有痣代表什么| 女的排卵期一般是什么时间| skg是什么品牌| 子宫切除后对身体有什么影响| 怎么知道自己五行属什么| 什么上什么下| 翡翠的五行属性是什么| 半衰期什么意思| 嗓子有黄痰是什么原因| 脑死亡是什么原因引起的| 伤口为什么会痒| 短裤搭配什么鞋子| 普陀山求什么最灵| 排湿气最快的方法吃什么| 火麻是什么植物| 男人喜欢女人什么| 皮肤软组织感染是什么意思| 51年属什么生肖| 梦见海水是什么意思| 胸部正侧位片检查什么| 9月28号什么星座| 5月12日什么星座| 舒俱来是什么宝石| 水厄痣是什么意思| syp是什么意思| 如意丹的作用是什么| 小狗肚子里有虫子吃什么药| 力不从心什么意思| 左枕前位是什么意思| 18K金什么意思| 牙疼吃什么药止痛快| 脚趾甲真菌感染用什么药| 孤注一掷什么意思| 智多星是什么意思| 黑毛茶是什么茶| 体细胞是什么意思| 口腔溃疡吃什么中成药| 魂牵梦萦是什么意思| 慢性胃炎吃什么药好| 照身份证穿什么衣服| 做颈动脉彩超挂什么科| 什么地叹气| 苯甲酸钠是什么东西| 翡翠属于什么玉| 二次元谷子是什么意思| 解体是什么意思| 溜溜是什么意思| 梦见蛇蛋是什么意思啊| ada医学上是什么意思| 五月二十五是什么星座| 拜忏是什么意思| 睡觉磨牙是什么原因引起的| 抗核抗体谱检测查什么的| 疱疹是什么原因长的| dave是什么意思| 胃胀是什么原因引起的| 女生下面什么样| pro是什么的缩写| 经常吃蜂蜜有什么好处| 复原乳是什么意思| 什么情况下吃丹参滴丸| 老年人脚肿挂什么科| 梦到墓地什么预兆| 降血压吃什么药| jerry英文名什么意思| 绘本是什么意思| nl是什么单位| 滋阴补肾是什么意思| 桂林山水下一句是什么| 轧戏什么意思| 小学生什么时候放假| 成本倒挂什么意思| 儿童淋巴结肿大挂什么科| 小孩感冒挂什么科| 排骨炖什么汤好喝| ecc是什么意思| 不均质脂肪肝是什么意思| 鸡精和鸡粉有什么区别| 寻麻疹涂抹什么药膏| 本虚标实是什么意思| 前列腺炎要吃什么药| wl是什么意思| 月经先期是什么意思| 十一月二十六是什么星座| 体检尿常规查什么| 00后是什么意思| 高粱是什么粮食| 女性肾虚是什么原因导致的| 血脂高看什么科| 冬至为什么吃水饺| 阿咖酚散是什么药| 尿道炎是什么原因引起的| 尿胆原弱阳性是什么意思| 女人梦见掉牙齿是什么征兆| 什么是屈光不正| 胃痉挛是什么| 西泮片是什么药| 楚楚动人是什么意思| 起湿疹是什么原因造成的| mary是什么意思| 霉菌孢子是什么意思| 朝野是什么意思| 诠释的意思是什么| 银手镯变黑是什么原因| 土茯苓和什么煲汤最好| 蟾宫是什么意思| 黑豚肉是什么肉| 汇总压缩是什么意思| 送女朋友什么礼物| 烧心吃什么药效果最好| 女性解脲支原体阳性是什么意思| 肝是起什么作用的| 肺癌积水意味什么结果| 流年花开讲的什么| 川崎病是什么病| 脑瘤是什么原因引起的| 女生隐私长什么样| 什么是介入手术| 功能是什么意思| 血常规用什么颜色的试管| 顶胯是什么意思| 拉拉秧学名叫什么| 脑浆是什么颜色| 五味子长什么样| 小苏打有什么作用| 医院挂号用什么app| 什么是蛋白尿| 甲减是什么意思| 杠杠滴是什么意思| 有因必有果什么意思| 杨梅有什么功效| 防晒衣的面料是什么| 孕早期不能吃什么| 黑京念什么| 检查头部挂什么科室| 自然堂适合什么年龄| 晚上咳嗽什么原因| 男人勃不起是什么原因造成的| 724是什么意思| 1933年属什么| 日主是什么意思| 冰乙酸是什么| 崩大碗配什么煲汤最好| 双侧卵巢多卵泡是什么意思| 比基尼是什么| 并驾齐驱什么意思| 肿瘤病人不能吃什么| 每天吃维生素c有什么好处| 为什么洗头发时会掉很多头发| 东方不败练的什么武功| 晚上睡觉老做梦是什么原因| 鼻中隔偏曲是什么意思| 麦粒肿滴什么眼药水| 舌苔厚白用什么泡水喝| 打嗝医学术语是什么| 常吃生花生有什么好处| 乌克兰和俄罗斯为什么打仗| 为什么肾阳虚很难恢复| 后羿属什么生肖| 步后尘是什么意思| 心脏早搏挂什么科| 肌肉酸痛用什么膏药| 蜱虫咬人后有什么症状| 良知是什么意思| 百度

教授相当于什么级别


Directory: ../../../ffmpeg/
File: src/libavcodec/faxcompr.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 80 243 32.9%
Functions: 6 8 75.0%
Branches: 35 162 21.6%

Line Branch Exec Source
1 /*
2 * CCITT Fax Group 3 and 4 decompression
3 * Copyright (c) 2008 Konstantin Shishkov
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * CCITT Fax Group 3 and 4 decompression
25 * @author Konstantin Shishkov
26 */
27 #include "libavutil/mem.h"
28 #include "libavutil/thread.h"
29 #include "avcodec.h"
30 #include "get_bits.h"
31 #include "put_bits.h"
32 #include "faxcompr.h"
33
34 #define CCITT_SYMS 104
35
36 static const uint16_t ccitt_syms[CCITT_SYMS] = {
37 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
38 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
39 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
40 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
41 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
42 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896,
43 960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728,
44 1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560
45 };
46
47 static const uint8_t ccitt_codes_bits[2][CCITT_SYMS] =
48 {
49 {
50 0x35, 0x07, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, 0x13, 0x14, 0x07, 0x08, 0x08,
51 0x03, 0x34, 0x35, 0x2A, 0x2B, 0x27, 0x0C, 0x08, 0x17, 0x03, 0x04, 0x28, 0x2B,
52 0x13, 0x24, 0x18, 0x02, 0x03, 0x1A, 0x1B, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
53 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x04, 0x05, 0x0A, 0x0B, 0x52, 0x53, 0x54,
54 0x55, 0x24, 0x25, 0x58, 0x59, 0x5A, 0x5B, 0x4A, 0x4B, 0x32, 0x33, 0x34, 0x1B,
55 0x12, 0x17, 0x37, 0x36, 0x37, 0x64, 0x65, 0x68, 0x67, 0xCC, 0xCD, 0xD2, 0xD3,
56 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0x98, 0x99, 0x9A, 0x18, 0x9B,
57 0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
58 },
59 {
60 0x37, 0x02, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x05, 0x04, 0x04, 0x05, 0x07,
61 0x04, 0x07, 0x18, 0x17, 0x18, 0x08, 0x67, 0x68, 0x6C, 0x37, 0x28, 0x17, 0x18,
62 0xCA, 0xCB, 0xCC, 0xCD, 0x68, 0x69, 0x6A, 0x6B, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
63 0xD7, 0x6C, 0x6D, 0xDA, 0xDB, 0x54, 0x55, 0x56, 0x57, 0x64, 0x65, 0x52, 0x53,
64 0x24, 0x37, 0x38, 0x27, 0x28, 0x58, 0x59, 0x2B, 0x2C, 0x5A, 0x66, 0x67, 0x0F,
65 0xC8, 0xC9, 0x5B, 0x33, 0x34, 0x35, 0x6C, 0x6D, 0x4A, 0x4B, 0x4C, 0x4D, 0x72,
66 0x73, 0x74, 0x75, 0x76, 0x77, 0x52, 0x53, 0x54, 0x55, 0x5A, 0x5B, 0x64, 0x65,
67 0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
68 }
69 };
70
71 static const uint8_t ccitt_codes_lens[2][CCITT_SYMS] =
72 {
73 {
74 8, 6, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7,
75 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
76 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
77 8, 8, 8, 8, 5, 5, 6, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
78 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 11, 11, 11, 12, 12, 12, 12, 12, 12,
79 12, 12, 12, 12
80 },
81 {
82 10, 3, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 10, 10, 10, 11,
83 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
84 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
85 12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
86 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 12, 12, 12, 12, 12, 12,
87 12, 12, 12, 12
88 }
89 };
90
91 static const uint8_t ccitt_group3_2d_bits[11] = {
92 1, 1, 2, 2, 2, 1, 3, 3, 3, 1, 1
93 };
94
95 static const uint8_t ccitt_group3_2d_lens[11] = {
96 4, 3, 7, 6, 3, 1, 3, 6, 7, 7, 9
97 };
98
99 // Also contains the other VLC tables pointed to by ccitt_vlc
100 static VLCElem ccitt_group3_2d_vlc[512 + 528 + 648];
101 static const VLCElem *ccitt_vlc[2];
102
103 11 static av_cold void ccitt_unpack_init(void)
104 {
105 11 VLCInitState state = VLC_INIT_STATE(ccitt_group3_2d_vlc);
106 int i;
107
108 11 ff_vlc_init_tables(&state, 9, 11,
109 ccitt_group3_2d_lens, 1, 1,
110 ccitt_group3_2d_bits, 1, 1, 0);
111
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 11 times.
33 for (i = 0; i < 2; i++) {
112 22 ccitt_vlc[i] = ff_vlc_init_tables_sparse(&state, 9, CCITT_SYMS,
113 22 ccitt_codes_lens[i], 1, 1,
114 22 ccitt_codes_bits[i], 1, 1,
115 ccitt_syms, 2, 2, 0);
116 }
117 11 }
118
119 21 av_cold void ff_ccitt_unpack_init(void)
120 {
121 static AVOnce init_static_once = AV_ONCE_INIT;
122 21 ff_thread_once(&init_static_once, ccitt_unpack_init);
123 21 }
124
125 static int decode_uncompressed(AVCodecContext *avctx, GetBitContext *gb,
126 unsigned int *pix_left, int **runs,
127 const int *runend, int *mode)
128 {
129 int eob = 0;
130 int newmode;
131 int saved_run = 0;
132
133 do {
134 int cwi, k;
135 int cw = 0;
136 int codes[2];
137 do {
138 cwi = show_bits(gb, 11);
139 if (!cwi) {
140 av_log(avctx, AV_LOG_ERROR, "Invalid uncompressed codeword\n");
141 return AVERROR_INVALIDDATA;
142 }
143 cwi = 10 - av_log2(cwi);
144 if (get_bits_left(gb) < cwi + 1)
145 return AVERROR_INVALIDDATA;
146 skip_bits(gb, cwi + 1);
147 if (cwi > 5) {
148 newmode = get_bits1(gb);
149 eob = 1;
150 cwi -= 6;
151 }
152 cw += cwi;
153 } while(cwi == 5);
154
155 codes[0] = cw;
156 codes[1] = !eob;
157
158 for (k = 0; k < 2; k++) {
159 if (codes[k]) {
160 if (*mode == !k) {
161 *(*runs)++ = saved_run;
162 if (*runs >= runend) {
163 av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
164 return AVERROR_INVALIDDATA;
165 }
166 if (*pix_left <= saved_run) {
167 av_log(avctx, AV_LOG_ERROR, "uncompressed run went out of bounds\n");
168 return AVERROR_INVALIDDATA;
169 }
170 *pix_left -= saved_run;
171 saved_run = 0;
172 *mode = !*mode;
173 }
174 saved_run += codes[k];
175 }
176 }
177 } while (!eob);
178 *(*runs)++ = saved_run;
179 if (*runs >= runend) {
180 av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
181 return AVERROR_INVALIDDATA;
182 }
183 if (*pix_left <= saved_run) {
184 if (*pix_left == saved_run)
185 return 1;
186 av_log(avctx, AV_LOG_ERROR, "uncompressed run went out of boundsE\n");
187 return AVERROR_INVALIDDATA;
188 }
189 *pix_left -= saved_run;
190 saved_run = 0;
191 *mode = !*mode;
192 if (newmode != *mode) { //FIXME CHECK
193 *(*runs)++ = 0;
194 if (*runs >= runend) {
195 av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
196 return AVERROR_INVALIDDATA;
197 }
198 *mode = newmode;
199 }
200 return 0;
201 }
202
203 6496 static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb,
204 unsigned int pix_left, int *runs,
205 const int *runend)
206 {
207 6496 int mode = 0;
208 6496 unsigned int run = 0;
209 unsigned int t;
210 for (;;) {
211
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 377768 times.
377768 if (get_bits_left(gb) <= 0)
212 return AVERROR_INVALIDDATA;
213 377768 t = get_vlc2(gb, ccitt_vlc[mode], 9, 2);
214 377768 run += t;
215
2/2
✓ Branch 0 taken 331528 times.
✓ Branch 1 taken 46240 times.
377768 if (t < 64) {
216 331528 *runs++ = run;
217
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 331528 times.
331528 if (runs >= runend) {
218 av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
219 return AVERROR_INVALIDDATA;
220 }
221
2/2
✓ Branch 0 taken 6496 times.
✓ Branch 1 taken 325032 times.
331528 if (pix_left <= run) {
222
1/2
✓ Branch 0 taken 6496 times.
✗ Branch 1 not taken.
6496 if (pix_left == run)
223 6496 break;
224 av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
225 return AVERROR_INVALIDDATA;
226 }
227 325032 pix_left -= run;
228 325032 run = 0;
229 325032 mode = !mode;
230
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 46240 times.
46240 } else if ((int)t == -1) {
231 if (get_bits_left(gb) > 12 && show_bits(gb, 12) == 15) {
232 int ret;
233 skip_bits(gb, 12);
234 ret = decode_uncompressed(avctx, gb, &pix_left, &runs, runend, &mode);
235 if (ret < 0) {
236 return ret;
237 } else if (ret)
238 break;
239 } else {
240 av_log(avctx, AV_LOG_ERROR, "Incorrect code\n");
241 return AVERROR_INVALIDDATA;
242 }
243 }
244 }
245 6496 *runs++ = 0;
246 6496 return 0;
247 }
248
249 static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb,
250 unsigned int width, int *runs,
251 const int *runend, const int *ref)
252 {
253 int mode = 0, saved_run = 0, t;
254 int run_off = *ref++;
255 unsigned int offs = 0, run = 0;
256
257 while (offs < width) {
258 int cmode;
259 if (get_bits_left(gb) <= 0)
260 return AVERROR_INVALIDDATA;
261 cmode = get_vlc2(gb, ccitt_group3_2d_vlc, 9, 1);
262 if (cmode == -1) {
263 av_log(avctx, AV_LOG_ERROR, "Incorrect mode VLC\n");
264 return AVERROR_INVALIDDATA;
265 }
266 if (!cmode) { //pass mode
267 if (run_off < width)
268 run_off += *ref++;
269 run = run_off - offs;
270 offs = run_off;
271 if (run_off < width)
272 run_off += *ref++;
273 if (offs > width) {
274 av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
275 return AVERROR_INVALIDDATA;
276 }
277 saved_run += run;
278 } else if (cmode == 1) { //horizontal mode
279 int k;
280 for (k = 0; k < 2; k++) {
281 run = 0;
282 for (;;) {
283 if (get_bits_left(gb) <= 0)
284 return AVERROR_INVALIDDATA;
285 t = get_vlc2(gb, ccitt_vlc[mode], 9, 2);
286 if (t == -1) {
287 av_log(avctx, AV_LOG_ERROR, "Incorrect code\n");
288 return AVERROR_INVALIDDATA;
289 }
290 run += t;
291 if (t < 64)
292 break;
293 }
294 *runs++ = run + saved_run;
295 if (runs >= runend) {
296 av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
297 return AVERROR_INVALIDDATA;
298 }
299 saved_run = 0;
300 offs += run;
301 if (offs > width || run > width) {
302 av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
303 return AVERROR_INVALIDDATA;
304 }
305 mode = !mode;
306 }
307 } else if (cmode == 9 || cmode == 10) {
308 int xxx;
309 if (get_bits_left(gb) < 3)
310 return AVERROR_INVALIDDATA;
311 xxx = get_bits(gb, 3);
312 if (cmode == 9 && xxx == 7) {
313 int ret;
314 int pix_left = width - offs;
315
316 if (saved_run) {
317 av_log(avctx, AV_LOG_ERROR, "saved run %d on entering uncompressed mode\n", saved_run);
318 return AVERROR_INVALIDDATA;
319 }
320 ret = decode_uncompressed(avctx, gb, &pix_left, &runs, runend, &mode);
321 offs = width - pix_left;
322 if (ret < 0) {
323 return ret;
324 } else if (ret)
325 break;
326 } else {
327 avpriv_report_missing_feature(avctx, "Special mode %d xxx=%d support", cmode, xxx);
328 return AVERROR_PATCHWELCOME;
329 }
330 } else { //vertical mode
331 run = run_off - offs + (cmode - 5);
332 run_off -= *--ref;
333 offs += run;
334 if (offs > width || run > width) {
335 av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
336 return AVERROR_INVALIDDATA;
337 }
338 *runs++ = run + saved_run;
339 if (runs >= runend) {
340 av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
341 return AVERROR_INVALIDDATA;
342 }
343 saved_run = 0;
344 mode = !mode;
345 }
346 //sync line pointers
347 while (offs < width && run_off <= offs) {
348 run_off += *ref++;
349 run_off += *ref++;
350 }
351 }
352 *runs++ = saved_run;
353 if (saved_run) {
354 if (runs >= runend) {
355 av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
356 return -1;
357 }
358 *runs++ = 0;
359 }
360 return 0;
361 }
362
363 6496 static void put_line(uint8_t *dst, int size, int width, const int *runs)
364 {
365 PutBitContext pb;
366 6496 int run, mode = ~0, pix_left = width, run_idx = 0;
367
368 6496 init_put_bits(&pb, dst, size);
369
2/2
✓ Branch 0 taken 331528 times.
✓ Branch 1 taken 6496 times.
338024 while (pix_left > 0) {
370 331528 run = runs[run_idx++];
371 331528 mode = ~mode;
372 331528 pix_left -= run;
373
2/2
✓ Branch 0 taken 901156 times.
✓ Branch 1 taken 331528 times.
1232684 for (; run > 16; run -= 16)
374 901156 put_sbits(&pb, 16, mode);
375
1/2
✓ Branch 0 taken 331528 times.
✗ Branch 1 not taken.
331528 if (run)
376 331528 put_sbits(&pb, run, mode);
377 }
378 6496 flush_put_bits(&pb);
379 6496 }
380
381 6496 static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
382 {
383 6496 unsigned int state = -1;
384 6496 srcsize -= get_bits_count(gb);
385
1/2
✓ Branch 0 taken 77952 times.
✗ Branch 1 not taken.
77952 while (srcsize-- > 0) {
386 77952 state += state + get_bits1(gb);
387
2/2
✓ Branch 0 taken 6496 times.
✓ Branch 1 taken 71456 times.
77952 if ((state & 0xFFF) == 1)
388 6496 return 0;
389 }
390 return -1;
391 }
392
393 18 int ff_ccitt_unpack(AVCodecContext *avctx, const uint8_t *src, int srcsize,
394 uint8_t *dst, int height, int stride,
395 enum TiffCompr compr, int opts)
396 {
397 int j;
398 GetBitContext gb;
399 18 int *runs, *ref = NULL, *runend;
400 int ret;
401 18 int runsize = avctx->width + 2;
402 int has_eol;
403
404 18 runs = av_malloc_array(runsize, sizeof(runs[0]));
405 18 ref = av_malloc_array(runsize, sizeof(ref[0]));
406
2/4
✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 18 times.
18 if (!runs || !ref) {
407 ret = AVERROR(ENOMEM);
408 goto fail;
409 }
410 18 ref[0] = avctx->width;
411 18 ref[1] = 0;
412 18 ref[2] = 0;
413
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 18 times.
18 if ((ret = init_get_bits8(&gb, src, srcsize)) < 0)
414 goto fail;
415
1/4
✗ Branch 1 not taken.
✓ Branch 2 taken 18 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
18 has_eol = show_bits(&gb, 12) == 1 || show_bits(&gb, 16) == 1;
416
417
2/2
✓ Branch 0 taken 6496 times.
✓ Branch 1 taken 18 times.
6514 for (j = 0; j < height; j++) {
418 6496 runend = runs + runsize;
419
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6496 times.
6496 if (compr == TIFF_G4) {
420 ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend,
421 ref);
422 if (ret < 0)
423 goto fail;
424 } else {
425
2/4
✓ Branch 0 taken 6496 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6496 times.
✗ Branch 3 not taken.
6496 int g3d1 = (compr == TIFF_G3) && !(opts & 1);
426
2/4
✓ Branch 0 taken 6496 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6496 times.
✗ Branch 3 not taken.
6496 if (compr != TIFF_CCITT_RLE &&
427
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6496 times.
6496 has_eol &&
428 6496 find_group3_syncmarker(&gb, srcsize * 8) < 0)
429 break;
430
2/6
✓ Branch 0 taken 6496 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 6496 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
6496 if (compr == TIFF_CCITT_RLE || g3d1 || get_bits1(&gb))
431 6496 ret = decode_group3_1d_line(avctx, &gb, avctx->width, runs,
432 runend);
433 else
434 ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs,
435 runend, ref);
436
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6496 times.
6496 if (compr == TIFF_CCITT_RLE)
437 align_get_bits(&gb);
438 }
439
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 6496 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
6496 if (avctx->err_recognition & AV_EF_EXPLODE && ret < 0)
440 goto fail;
441
442
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6496 times.
6496 if (ret < 0) {
443 put_line(dst, stride, avctx->width, ref);
444 } else {
445 6496 put_line(dst, stride, avctx->width, runs);
446 6496 FFSWAP(int *, runs, ref);
447 }
448 6496 dst += stride;
449 }
450 18 ret = 0;
451 18 fail:
452 18 av_free(runs);
453 18 av_free(ref);
454 18 return ret;
455 }
456

银饰变黑是什么原因 早上11点是什么时辰 未时左眼跳是什么预兆 大手牵小手是什么菜 出国需要什么手续和证件
黑天天的学名叫什么 半夜口干舌燥是什么原因 豆浆和什么搭配最好 调侃是什么意思 中暑有什么症状
什么花没有叶子 秋天能干什么 cha什么意思 孕妇吃花胶对胎儿有什么好处 两个马念什么
合加龙是什么字 tod是什么 什么叫柞蚕丝 经常吃海带有什么好处和坏处 烧仙草是什么东西
双胞胎是什么意思hcv9jop0ns2r.cn 楚楚动人是什么意思hcv8jop8ns3r.cn oba是什么意思hcv7jop4ns7r.cn 雨五行属什么hcv7jop9ns3r.cn 甲状旁腺分泌什么激素hcv8jop6ns9r.cn
油条配什么好吃hcv9jop8ns0r.cn 104岁属什么生肖hcv9jop5ns4r.cn 膝盖凉是什么原因hcv9jop5ns2r.cn h表示什么hcv8jop4ns0r.cn 盐酸哌替啶是什么药gysmod.com
吃什么才能减肥最快hcv8jop9ns2r.cn 百废待兴是什么意思hcv8jop9ns0r.cn 老爹是什么意思hcv9jop2ns6r.cn 喝啤酒尿多是什么原因hcv9jop4ns3r.cn 3.9是什么星座fenrenren.com
胰腺做什么检查hlguo.com 血压不稳定是什么原因hcv8jop2ns6r.cn 什么原因导致卵巢早衰helloaicloud.com 祈祷是什么意思hcv7jop9ns4r.cn 高尿酸血症是什么病hcv8jop3ns2r.cn
百度