FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/ituh263dec.c
Date: 2025-07-04 04:13:13
Exec Total Coverage
Lines: 557 796 70.0%
Functions: 15 18 83.3%
Branches: 285 538 53.0%

Line Branch Exec Source
1 /*
2 * ITU H.263 bitstream decoder
3 * Copyright (c) 2000,2001 Fabrice Bellard
4 * H.263+ support.
5 * Copyright (c) 2001 Juan J. Sierralta P
6 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
7 *
8 * This file is part of FFmpeg.
9 *
10 * FFmpeg is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * FFmpeg is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with FFmpeg; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 */
24
25 /**
26 * @file
27 * H.263 decoder.
28 */
29
30 #define UNCHECKED_BITSTREAM_READER 1
31
32 #include "config_components.h"
33
34 #include "libavutil/attributes.h"
35 #include "libavutil/imgutils.h"
36 #include "libavutil/internal.h"
37 #include "libavutil/mathematics.h"
38 #include "libavutil/mem_internal.h"
39 #include "libavutil/thread.h"
40 #include "avcodec.h"
41 #include "mpegvideo.h"
42 #include "h263.h"
43 #include "h263data.h"
44 #include "h263dec.h"
45 #include "mathops.h"
46 #include "mpegutils.h"
47 #include "unary.h"
48 #include "rv10dec.h"
49 #include "mpeg4video.h"
50 #include "mpegvideodata.h"
51 #include "mpegvideodec.h"
52 #include "mpeg4videodec.h"
53 #include "mpeg4videodefs.h"
54
55 // The defines below define the number of bits that are read at once for
56 // reading vlc values. Changing these may improve speed and data cache needs
57 // be aware though that decreasing them may need the number of stages that is
58 // passed to get_vlc* to be increased.
59 #define H263_MBTYPE_B_VLC_BITS 6
60 #define CBPC_B_VLC_BITS 3
61
62 static const int16_t h263_mb_type_b_map[15]= {
63 MB_TYPE_DIRECT2 | MB_TYPE_BIDIR_MV,
64 MB_TYPE_DIRECT2 | MB_TYPE_BIDIR_MV | MB_TYPE_CBP,
65 MB_TYPE_DIRECT2 | MB_TYPE_BIDIR_MV | MB_TYPE_CBP | MB_TYPE_QUANT,
66 MB_TYPE_FORWARD_MV | MB_TYPE_16x16,
67 MB_TYPE_FORWARD_MV | MB_TYPE_CBP | MB_TYPE_16x16,
68 MB_TYPE_FORWARD_MV | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
69 MB_TYPE_BACKWARD_MV | MB_TYPE_16x16,
70 MB_TYPE_BACKWARD_MV | MB_TYPE_CBP | MB_TYPE_16x16,
71 MB_TYPE_BACKWARD_MV | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
72 MB_TYPE_BIDIR_MV | MB_TYPE_16x16,
73 MB_TYPE_BIDIR_MV | MB_TYPE_CBP | MB_TYPE_16x16,
74 MB_TYPE_BIDIR_MV | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
75 0, //stuffing
76 MB_TYPE_INTRA4x4 | MB_TYPE_CBP,
77 MB_TYPE_INTRA4x4 | MB_TYPE_CBP | MB_TYPE_QUANT,
78 };
79
80 461 void ff_h263_show_pict_info(H263DecContext *const h, int h263_plus)
81 {
82
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 461 times.
461 if (h->c.avctx->debug&FF_DEBUG_PICT_INFO) {
83 av_log(h->c.avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n",
84 h->c.qscale, av_get_picture_type_char(h->c.pict_type),
85 h->gb.size_in_bits, 1-h->c.no_rounding,
86 h->c.obmc ? " AP" : "",
87 h->umvplus ? " UMV" : "",
88 h->h263_long_vectors ? " LONG" : "",
89 h263_plus ? " +" : "",
90 h->c.h263_aic ? " AIC" : "",
91 h->alt_inter_vlc ? " AIV" : "",
92 h->modified_quant ? " MQ" : "",
93 h->loop_filter ? " LOOP" : "",
94 h->h263_slice_structured ? " SS" : "",
95 h->c.avctx->framerate.num, h->c.avctx->framerate.den);
96 }
97 461 }
98
99 /***********************************************/
100 /* decoding */
101
102 VLCElem ff_h263_intra_MCBPC_vlc[72];
103 VLCElem ff_h263_inter_MCBPC_vlc[198];
104 VLCElem ff_h263_cbpy_vlc[64];
105 VLCElem ff_h263_mv_vlc[538];
106 static VLCElem h263_mbtype_b_vlc[80];
107 static VLCElem cbpc_b_vlc[8];
108
109 /* init vlcs */
110
111 164 static av_cold void h263_decode_init_vlc(void)
112 {
113 164 VLC_INIT_STATIC_TABLE(ff_h263_intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 9,
114 ff_h263_intra_MCBPC_bits, 1, 1,
115 ff_h263_intra_MCBPC_code, 1, 1, 0);
116 164 VLC_INIT_STATIC_TABLE(ff_h263_inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 28,
117 ff_h263_inter_MCBPC_bits, 1, 1,
118 ff_h263_inter_MCBPC_code, 1, 1, 0);
119 164 VLC_INIT_STATIC_TABLE(ff_h263_cbpy_vlc, CBPY_VLC_BITS, 16,
120 &ff_h263_cbpy_tab[0][1], 2, 1,
121 &ff_h263_cbpy_tab[0][0], 2, 1, 0);
122 164 VLC_INIT_STATIC_TABLE(ff_h263_mv_vlc, H263_MV_VLC_BITS, 33,
123 &ff_mvtab[0][1], 2, 1,
124 &ff_mvtab[0][0], 2, 1, 0);
125
2/2
✓ Branch 0 taken 5248 times.
✓ Branch 1 taken 164 times.
5412 VLC_INIT_RL(ff_h263_rl_inter, 554);
126 164 INIT_FIRST_VLC_RL(ff_rl_intra_aic, 554);
127 164 VLC_INIT_STATIC_SPARSE_TABLE(h263_mbtype_b_vlc, H263_MBTYPE_B_VLC_BITS, 15,
128 &ff_h263_mbtype_b_tab[0][1], 2, 1,
129 &ff_h263_mbtype_b_tab[0][0], 2, 1,
130 h263_mb_type_b_map, 2, 2, 0);
131 164 VLC_INIT_STATIC_TABLE(cbpc_b_vlc, CBPC_B_VLC_BITS, 4,
132 &ff_cbpc_b_tab[0][1], 2, 1,
133 &ff_cbpc_b_tab[0][0], 2, 1, 0);
134 164 }
135
136 290 av_cold void ff_h263_decode_init_vlc(void)
137 {
138 static AVOnce init_static_once = AV_ONCE_INIT;
139 290 ff_thread_once(&init_static_once, h263_decode_init_vlc);
140 290 }
141
142 742 int ff_h263_decode_mba(H263DecContext *const h)
143 {
144 int i, mb_pos;
145
146
1/2
✓ Branch 0 taken 2226 times.
✗ Branch 1 not taken.
2226 for (i = 0; i < 6; i++)
147
2/2
✓ Branch 0 taken 742 times.
✓ Branch 1 taken 1484 times.
2226 if (h->c.mb_num - 1 <= ff_mba_max[i])
148 742 break;
149 742 mb_pos = get_bits(&h->gb, ff_mba_length[i]);
150 742 h->c.mb_x = mb_pos % h->c.mb_width;
151 742 h->c.mb_y = mb_pos / h->c.mb_width;
152
153 742 return mb_pos;
154 }
155
156 /**
157 * Decode the group of blocks header or slice header.
158 * @return <0 if an error occurred
159 */
160 2544 static int h263_decode_gob_header(H263DecContext *const h)
161 {
162 unsigned int val, gob_number;
163 int left;
164
165 /* Check for GOB Start Code */
166 2544 val = show_bits(&h->gb, 16);
167
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2544 times.
2544 if(val)
168 return -1;
169
170 /* We have a GBSC probably with GSTUFF */
171 2544 skip_bits(&h->gb, 16); /* Drop the zeros */
172 2544 left = get_bits_left(&h->gb);
173 2544 left = FFMIN(left, 32);
174 //MN: we must check the bits left or we might end in an infinite loop (or segfault)
175
1/2
✓ Branch 0 taken 11538 times.
✗ Branch 1 not taken.
11538 for(;left>13; left--){
176
2/2
✓ Branch 1 taken 2544 times.
✓ Branch 2 taken 8994 times.
11538 if (get_bits1(&h->gb))
177 2544 break; /* Seek the '1' bit */
178 }
179
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2544 times.
2544 if(left<=13)
180 return -1;
181
182
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2544 times.
2544 if (h->h263_slice_structured) {
183 if (check_marker(h->c.avctx, &h->gb, "before MBA")==0)
184 return -1;
185
186 ff_h263_decode_mba(h);
187
188 if (h->c.mb_num > 1583)
189 if (check_marker(h->c.avctx, &h->gb, "after MBA")==0)
190 return -1;
191
192 h->c.qscale = get_bits(&h->gb, 5); /* SQUANT */
193 if (check_marker(h->c.avctx, &h->gb, "after SQUANT")==0)
194 return -1;
195 skip_bits(&h->gb, 2); /* GFID */
196 }else{
197 2544 gob_number = get_bits(&h->gb, 5); /* GN */
198 2544 h->c.mb_x = 0;
199 2544 h->c.mb_y = h->gob_index* gob_number;
200 2544 skip_bits(&h->gb, 2); /* GFID */
201 2544 h->c.qscale = get_bits(&h->gb, 5); /* GQUANT */
202 }
203
204
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2544 times.
2544 if (h->c.mb_y >= h->c.mb_height)
205 return -1;
206
207
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2544 times.
2544 if (h->c.qscale==0)
208 return -1;
209
210 2544 return 0;
211 }
212
213 /**
214 * Decode the group of blocks / video packet header / slice header (MPEG-4 Studio).
215 * @return bit position of the resync_marker, or <0 if none was found
216 */
217 6480 int ff_h263_resync(H263DecContext *const h)
218 {
219 int left, pos, ret;
220
221 /* In MPEG-4 studio mode look for a new slice startcode
222 * and decode slice header */
223
4/4
✓ Branch 0 taken 3936 times.
✓ Branch 1 taken 2544 times.
✓ Branch 2 taken 29 times.
✓ Branch 3 taken 3907 times.
6480 if (h->c.codec_id==AV_CODEC_ID_MPEG4 && h->c.studio_profile) {
224 29 align_get_bits(&h->gb);
225
226
2/4
✓ Branch 1 taken 29 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 29 times.
29 while (get_bits_left(&h->gb) >= 32 && show_bits_long(&h->gb, 32) != SLICE_STARTCODE) {
227 get_bits(&h->gb, 8);
228 }
229
230
2/4
✓ Branch 1 taken 29 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
29 if (get_bits_left(&h->gb) >= 32 && show_bits_long(&h->gb, 32) == SLICE_STARTCODE)
231 29 return get_bits_count(&h->gb);
232 else
233 return -1;
234 }
235
236
2/2
✓ Branch 0 taken 3907 times.
✓ Branch 1 taken 2544 times.
6451 if (h->c.codec_id==AV_CODEC_ID_MPEG4){
237 3907 skip_bits1(&h->gb);
238 3907 align_get_bits(&h->gb);
239 }
240
241
1/2
✓ Branch 1 taken 6451 times.
✗ Branch 2 not taken.
6451 if (show_bits(&h->gb, 16) ==0) {
242 6451 pos = get_bits_count(&h->gb);
243
2/2
✓ Branch 0 taken 3907 times.
✓ Branch 1 taken 2544 times.
6451 if(CONFIG_MPEG4_DECODER && h->c.codec_id==AV_CODEC_ID_MPEG4)
244 3907 ret = ff_mpeg4_decode_video_packet_header(h);
245 else
246 2544 ret = h263_decode_gob_header(h);
247
1/2
✓ Branch 0 taken 6451 times.
✗ Branch 1 not taken.
6451 if(ret>=0)
248 6451 return pos;
249 }
250 //OK, it's not where it is supposed to be ...
251 h->gb = h->last_resync_gb;
252 align_get_bits(&h->gb);
253 left = get_bits_left(&h->gb);
254
255 for(;left>16+1+5+5; left-=8){
256 if (show_bits(&h->gb, 16) == 0){
257 GetBitContext bak = h->gb;
258
259 pos = get_bits_count(&h->gb);
260 if(CONFIG_MPEG4_DECODER && h->c.codec_id==AV_CODEC_ID_MPEG4)
261 ret = ff_mpeg4_decode_video_packet_header(h);
262 else
263 ret = h263_decode_gob_header(h);
264 if(ret>=0)
265 return pos;
266
267 h->gb = bak;
268 }
269 skip_bits(&h->gb, 8);
270 }
271
272 return -1;
273 }
274
275 3786118 int ff_h263_decode_motion(H263DecContext *const h, int pred, int f_code)
276 {
277 int code, val, sign, shift;
278 3786118 code = get_vlc2(&h->gb, ff_h263_mv_vlc, H263_MV_VLC_BITS, 2);
279
280
2/2
✓ Branch 0 taken 1858349 times.
✓ Branch 1 taken 1927769 times.
3786118 if (code == 0)
281 1858349 return pred;
282
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1927769 times.
1927769 if (code < 0)
283 return 0xffff;
284
285 1927769 sign = get_bits1(&h->gb);
286 1927769 shift = f_code - 1;
287 1927769 val = code;
288
2/2
✓ Branch 0 taken 211602 times.
✓ Branch 1 taken 1716167 times.
1927769 if (shift) {
289 211602 val = (val - 1) << shift;
290 211602 val |= get_bits(&h->gb, shift);
291 211602 val++;
292 }
293
2/2
✓ Branch 0 taken 807616 times.
✓ Branch 1 taken 1120153 times.
1927769 if (sign)
294 807616 val = -val;
295 1927769 val += pred;
296
297 /* modulo decoding */
298
1/2
✓ Branch 0 taken 1927769 times.
✗ Branch 1 not taken.
1927769 if (!h->h263_long_vectors) {
299 1927769 val = sign_extend(val, 5 + f_code);
300 } else {
301 /* horrible H.263 long vector mode */
302 if (pred < -31 && val < -63)
303 val += 64;
304 if (pred > 32 && val > 63)
305 val -= 64;
306
307 }
308 1927769 return val;
309 }
310
311
312 /* Decode RVLC of H.263+ UMV */
313 103298 static int h263p_decode_umotion(H263DecContext *const h, int pred)
314 {
315 103298 int code = 0, sign;
316
317
2/2
✓ Branch 1 taken 51255 times.
✓ Branch 2 taken 52043 times.
103298 if (get_bits1(&h->gb)) /* Motion difference = 0 */
318 51255 return pred;
319
320 52043 code = 2 + get_bits1(&h->gb);
321
322
2/2
✓ Branch 1 taken 28759 times.
✓ Branch 2 taken 52043 times.
80802 while (get_bits1(&h->gb))
323 {
324 28759 code <<= 1;
325 28759 code += get_bits1(&h->gb);
326
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 28759 times.
28759 if (code >= 32768) {
327 avpriv_request_sample(h->c.avctx, "Huge DMV");
328 return 0xffff;
329 }
330 }
331 52043 sign = code & 1;
332 52043 code >>= 1;
333
334
2/2
✓ Branch 0 taken 30417 times.
✓ Branch 1 taken 21626 times.
52043 code = (sign) ? (pred - code) : (pred + code);
335 ff_tlog(h->c.avctx,"H.263+ UMV Motion = %d\n", code);
336 52043 return code;
337
338 }
339
340 /**
341 * read the next MVs for OBMC. yes this is an ugly hack, feel free to send a patch :)
342 */
343 48550 static void preview_obmc(H263DecContext *const h)
344 {
345 48550 GetBitContext gb = h->gb;
346
347 int cbpc, i, pred_x, pred_y, mx, my;
348 int16_t *mot_val;
349 48550 const int xy = h->c.mb_x + 1 + h->c.mb_y * h->c.mb_stride;
350 48550 const int stride = h->c.b8_stride * 2;
351
352
2/2
✓ Branch 0 taken 194200 times.
✓ Branch 1 taken 48550 times.
242750 for(i=0; i<4; i++)
353 194200 h->c.block_index[i] += 2;
354
2/2
✓ Branch 0 taken 97100 times.
✓ Branch 1 taken 48550 times.
145650 for(i=4; i<6; i++)
355 97100 h->c.block_index[i] += 1;
356 48550 h->c.mb_x++;
357
358 av_assert2(h->c.pict_type == AV_PICTURE_TYPE_P);
359
360 do{
361
2/2
✓ Branch 1 taken 654 times.
✓ Branch 2 taken 47896 times.
48550 if (get_bits1(&h->gb)) {
362 /* skip mb */
363 654 mot_val = h->c.cur_pic.motion_val[0][h->c.block_index[0]];
364 654 mot_val[0 ]= mot_val[2 ]=
365 654 mot_val[0+stride]= mot_val[2+stride]= 0;
366 654 mot_val[1 ]= mot_val[3 ]=
367 654 mot_val[1+stride]= mot_val[3+stride]= 0;
368
369 654 h->c.cur_pic.mb_type[xy] = MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_FORWARD_MV;
370 654 goto end;
371 }
372 47896 cbpc = get_vlc2(&h->gb, ff_h263_inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 2);
373
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47896 times.
47896 }while(cbpc == 20);
374
375
2/2
✓ Branch 0 taken 957 times.
✓ Branch 1 taken 46939 times.
47896 if(cbpc & 4){
376 957 h->c.cur_pic.mb_type[xy] = MB_TYPE_INTRA;
377 }else{
378 46939 get_vlc2(&h->gb, ff_h263_cbpy_vlc, CBPY_VLC_BITS, 1);
379
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 46939 times.
46939 if (cbpc & 8) {
380 skip_bits(&h->gb, h->modified_quant ? (get_bits1(&h->gb) ? 1 : 5) : 2);
381 }
382
383
1/2
✓ Branch 0 taken 46939 times.
✗ Branch 1 not taken.
46939 if ((cbpc & 16) == 0) {
384 46939 h->c.cur_pic.mb_type[xy] = MB_TYPE_16x16 | MB_TYPE_FORWARD_MV;
385 /* 16x16 motion prediction */
386 46939 mot_val= ff_h263_pred_motion(&h->c, 0, 0, &pred_x, &pred_y);
387
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 46939 times.
46939 if (h->umvplus)
388 mx = h263p_decode_umotion(h, pred_x);
389 else
390 46939 mx = ff_h263_decode_motion(h, pred_x, 1);
391
392
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 46939 times.
46939 if (h->umvplus)
393 my = h263p_decode_umotion(h, pred_y);
394 else
395 46939 my = ff_h263_decode_motion(h, pred_y, 1);
396
397 46939 mot_val[0 ]= mot_val[2 ]=
398 46939 mot_val[0+stride]= mot_val[2+stride]= mx;
399 46939 mot_val[1 ]= mot_val[3 ]=
400 46939 mot_val[1+stride]= mot_val[3+stride]= my;
401 } else {
402 h->c.cur_pic.mb_type[xy] = MB_TYPE_8x8 | MB_TYPE_FORWARD_MV;
403 for(i=0;i<4;i++) {
404 mot_val = ff_h263_pred_motion(&h->c, i, 0, &pred_x, &pred_y);
405 if (h->umvplus)
406 mx = h263p_decode_umotion(h, pred_x);
407 else
408 mx = ff_h263_decode_motion(h, pred_x, 1);
409
410 if (h->umvplus)
411 my = h263p_decode_umotion(h, pred_y);
412 else
413 my = ff_h263_decode_motion(h, pred_y, 1);
414 if (h->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
415 skip_bits1(&h->gb); /* Bit stuffing to prevent PSC */
416 mot_val[0] = mx;
417 mot_val[1] = my;
418 }
419 }
420 }
421 end:
422
423
2/2
✓ Branch 0 taken 194200 times.
✓ Branch 1 taken 48550 times.
242750 for(i=0; i<4; i++)
424 194200 h->c.block_index[i] -= 2;
425
2/2
✓ Branch 0 taken 97100 times.
✓ Branch 1 taken 48550 times.
145650 for(i=4; i<6; i++)
426 97100 h->c.block_index[i] -= 1;
427 48550 h->c.mb_x--;
428
429 48550 h->gb = gb;
430 48550 }
431
432 static void h263_decode_dquant(H263DecContext *const h)
433 {
434 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
435 int qscale;
436
437 if (h->modified_quant) {
438 if (get_bits1(&h->gb))
439 qscale = ff_modified_quant_tab[get_bits1(&h->gb)][h->c.qscale];
440 else
441 qscale = get_bits(&h->gb, 5);
442 }else
443 qscale = h->c.qscale + quant_tab[get_bits(&h->gb, 2)];
444 ff_set_qscale(&h->c, qscale);
445 }
446
447 91098 static void h263_pred_acdc(MpegEncContext * s, int16_t *block, int n)
448 {
449 int wrap, a, c, pred_dc, scale;
450 91098 const int xy = s->block_index[n];
451 91098 int16_t *const dc_val = s->dc_val + xy;
452 91098 int16_t *const ac_val = (s->ac_val + xy)[0];
453
454 /* find prediction */
455
2/2
✓ Branch 0 taken 60732 times.
✓ Branch 1 taken 30366 times.
91098 if (n < 4) {
456 60732 wrap = s->b8_stride;
457 60732 scale = s->y_dc_scale;
458 } else {
459 30366 wrap = s->mb_stride;
460 30366 scale = s->c_dc_scale;
461 }
462
463 /* B C
464 * A X
465 */
466 91098 a = dc_val[-1];
467 91098 c = dc_val[-wrap];
468
469 /* No prediction outside GOB boundary */
470
4/4
✓ Branch 0 taken 54174 times.
✓ Branch 1 taken 36924 times.
✓ Branch 2 taken 45145 times.
✓ Branch 3 taken 9029 times.
91098 if (s->first_slice_line && n != 3) {
471
2/2
✓ Branch 0 taken 36116 times.
✓ Branch 1 taken 9029 times.
45145 if (n != 2) c= 1024;
472
4/4
✓ Branch 0 taken 36116 times.
✓ Branch 1 taken 9029 times.
✓ Branch 2 taken 1348 times.
✓ Branch 3 taken 34768 times.
45145 if (n != 1 && s->mb_x == s->resync_mb_x) a= 1024;
473 }
474
475
2/2
✓ Branch 0 taken 4434 times.
✓ Branch 1 taken 86664 times.
91098 if (s->ac_pred) {
476 4434 pred_dc = 1024;
477
2/2
✓ Branch 0 taken 1596 times.
✓ Branch 1 taken 2838 times.
4434 if (s->h263_aic_dir) {
478 /* left prediction */
479
2/2
✓ Branch 0 taken 1576 times.
✓ Branch 1 taken 20 times.
1596 if (a != 1024) {
480 1576 int16_t *const ac_val2 = ac_val - 16;
481
2/2
✓ Branch 0 taken 11032 times.
✓ Branch 1 taken 1576 times.
12608 for (int i = 1; i < 8; i++) {
482 11032 block[s->idsp.idct_permutation[i << 3]] += ac_val2[i];
483 }
484 1576 pred_dc = a;
485 }
486 } else {
487 /* top prediction */
488
2/2
✓ Branch 0 taken 1910 times.
✓ Branch 1 taken 928 times.
2838 if (c != 1024) {
489 1910 int16_t *const ac_val2 = ac_val - 16 * wrap;
490
2/2
✓ Branch 0 taken 13370 times.
✓ Branch 1 taken 1910 times.
15280 for (int i = 1; i < 8; i++) {
491 13370 block[s->idsp.idct_permutation[i]] += ac_val2[i + 8];
492 }
493 1910 pred_dc = c;
494 }
495 }
496 } else {
497 /* just DC prediction */
498
4/4
✓ Branch 0 taken 81140 times.
✓ Branch 1 taken 5524 times.
✓ Branch 2 taken 50003 times.
✓ Branch 3 taken 31137 times.
86664 if (a != 1024 && c != 1024)
499 50003 pred_dc = (a + c) >> 1;
500
2/2
✓ Branch 0 taken 31137 times.
✓ Branch 1 taken 5524 times.
36661 else if (a != 1024)
501 31137 pred_dc = a;
502 else
503 5524 pred_dc = c;
504 }
505
506 /* we assume pred is positive */
507 91098 block[0] = block[0] * scale + pred_dc;
508
509
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 91098 times.
91098 if (block[0] < 0)
510 block[0] = 0;
511 else
512 91098 block[0] |= 1;
513
514 /* Update AC/DC tables */
515 91098 *dc_val = block[0];
516
517 /* left copy */
518
2/2
✓ Branch 0 taken 637686 times.
✓ Branch 1 taken 91098 times.
728784 for (int i = 1; i < 8; i++)
519 637686 ac_val[i] = block[s->idsp.idct_permutation[i << 3]];
520 /* top copy */
521
2/2
✓ Branch 0 taken 637686 times.
✓ Branch 1 taken 91098 times.
728784 for (int i = 1; i < 8; i++)
522 637686 ac_val[8 + i] = block[s->idsp.idct_permutation[i]];
523 91098 }
524
525 2590998 static int h263_decode_block(H263DecContext *const h, int16_t block[64],
526 int n, int coded)
527 {
528 int level, i, j, run;
529 2590998 const RLTable *rl = &ff_h263_rl_inter;
530 const uint8_t *scan_table;
531 2590998 GetBitContext gb = h->gb;
532
533 2590998 scan_table = h->c.intra_scantable.permutated;
534
4/4
✓ Branch 0 taken 400992 times.
✓ Branch 1 taken 2190006 times.
✓ Branch 2 taken 91098 times.
✓ Branch 3 taken 309894 times.
2590998 if (h->c.h263_aic && h->c.mb_intra) {
535 91098 i = 0;
536
2/2
✓ Branch 0 taken 3823 times.
✓ Branch 1 taken 87275 times.
91098 if (!coded)
537 3823 goto not_coded;
538 87275 rl = &ff_rl_intra_aic;
539
2/2
✓ Branch 0 taken 3073 times.
✓ Branch 1 taken 84202 times.
87275 if (h->c.ac_pred) {
540
2/2
✓ Branch 0 taken 1148 times.
✓ Branch 1 taken 1925 times.
3073 if (h->c.h263_aic_dir)
541 1148 scan_table = h->c.permutated_intra_v_scantable; /* left */
542 else
543 1925 scan_table = h->c.permutated_intra_h_scantable; /* top */
544 }
545
2/2
✓ Branch 0 taken 300744 times.
✓ Branch 1 taken 2199156 times.
2499900 } else if (h->c.mb_intra) {
546 /* DC coef */
547
2/2
✓ Branch 0 taken 46710 times.
✓ Branch 1 taken 254034 times.
300744 if (CONFIG_RV10_DECODER && h->c.codec_id == AV_CODEC_ID_RV10) {
548
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 46710 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
46710 if (h->rv10_version == 3 && h->c.pict_type == AV_PICTURE_TYPE_I) {
549 int component = (n <= 3 ? 0 : n - 4 + 1);
550 level = h->c.last_dc[component];
551 if (h->rv10_first_dc_coded[component]) {
552 int diff = ff_rv_decode_dc(h, n);
553 if (diff < 0)
554 return -1;
555 level += diff;
556 level = level & 0xff; /* handle wrap round */
557 h->c.last_dc[component] = level;
558 } else {
559 h->rv10_first_dc_coded[component] = 1;
560 }
561 } else {
562 46710 level = get_bits(&h->gb, 8);
563
2/2
✓ Branch 0 taken 542 times.
✓ Branch 1 taken 46168 times.
46710 if (level == 255)
564 542 level = 128;
565 }
566 }else{
567 254034 level = get_bits(&h->gb, 8);
568
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 254034 times.
254034 if((level&0x7F) == 0){
569 av_log(h->c.avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n",
570 level, h->c.mb_x, h->c.mb_y);
571 if (h->c.avctx->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT))
572 return -1;
573 }
574
2/2
✓ Branch 0 taken 3049 times.
✓ Branch 1 taken 250985 times.
254034 if (level == 255)
575 3049 level = 128;
576 }
577 300744 block[0] = level;
578 300744 i = 1;
579 } else {
580 2199156 i = 0;
581 }
582
2/2
✓ Branch 0 taken 1345756 times.
✓ Branch 1 taken 1241419 times.
2587175 if (!coded) {
583 1241419 h->c.block_last_index[n] = i - 1;
584 1241419 return 0;
585 }
586 1345756 retry:
587 {
588 1412215 OPEN_READER(re, &h->gb);
589 1412215 i--; // offset by -1 to allow direct indexing of scan_table
590 for(;;) {
591 26689671 UPDATE_CACHE(re, &h->gb);
592
2/2
✓ Branch 1 taken 893282 times.
✓ Branch 2 taken 13157661 times.
14050943 GET_RL_VLC(level, run, re, &h->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
593
2/2
✓ Branch 0 taken 587695 times.
✓ Branch 1 taken 13463248 times.
14050943 if (run == 66) {
594
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 587695 times.
587695 if (level){
595 CLOSE_READER(re, &h->gb);
596 av_log(h->c.avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n",
597 h->c.mb_x, h->c.mb_y);
598 return -1;
599 }
600 /* escape */
601
2/2
✓ Branch 0 taken 117640 times.
✓ Branch 1 taken 470055 times.
587695 if (CONFIG_FLV_DECODER && h->flv) {
602 117640 int is11 = SHOW_UBITS(re, &h->gb, 1);
603 117640 SKIP_CACHE(re, &h->gb, 1);
604 117640 run = SHOW_UBITS(re, &h->gb, 7) + 1;
605
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 117640 times.
117640 if (is11) {
606 SKIP_COUNTER(re, &h->gb, 1 + 7);
607 UPDATE_CACHE(re, &h->gb);
608 level = SHOW_SBITS(re, &h->gb, 11);
609 SKIP_COUNTER(re, &h->gb, 11);
610 } else {
611 117640 SKIP_CACHE(re, &h->gb, 7);
612 117640 level = SHOW_SBITS(re, &h->gb, 7);
613 117640 SKIP_COUNTER(re, &h->gb, 1 + 7 + 7);
614 }
615 } else {
616 470055 run = SHOW_UBITS(re, &h->gb, 7) + 1;
617 470055 SKIP_CACHE(re, &h->gb, 7);
618 470055 level = (int8_t)SHOW_UBITS(re, &h->gb, 8);
619 470055 SKIP_COUNTER(re, &h->gb, 7 + 8);
620
2/2
✓ Branch 0 taken 3157 times.
✓ Branch 1 taken 466898 times.
470055 if(level == -128){
621 3157 UPDATE_CACHE(re, &h->gb);
622
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3157 times.
3157 if (h->c.codec_id == AV_CODEC_ID_RV10) {
623 /* XXX: should patch encoder too */
624 level = SHOW_SBITS(re, &h->gb, 12);
625 SKIP_COUNTER(re, &h->gb, 12);
626 }else{
627 3157 level = SHOW_UBITS(re, &h->gb, 5);
628 3157 SKIP_CACHE(re, &h->gb, 5);
629 3157 level |= SHOW_SBITS(re, &h->gb, 6) * (1<<5);
630 3157 SKIP_COUNTER(re, &h->gb, 5 + 6);
631 }
632 }
633 }
634 } else {
635
2/2
✓ Branch 1 taken 6708475 times.
✓ Branch 2 taken 6754773 times.
13463248 if (SHOW_UBITS(re, &h->gb, 1))
636 6708475 level = -level;
637 13463248 SKIP_COUNTER(re, &h->gb, 1);
638 }
639 14050943 i += run;
640
2/2
✓ Branch 0 taken 1412215 times.
✓ Branch 1 taken 12638728 times.
14050943 if (i >= 64){
641 1412215 CLOSE_READER(re, &h->gb);
642 // redo update without last flag, revert -1 offset
643 1412215 i = i - run + ((run-1)&63) + 1;
644
2/2
✓ Branch 0 taken 1345756 times.
✓ Branch 1 taken 66459 times.
1412215 if (i < 64) {
645 // only last marker, no overrun
646 1345756 block[scan_table[i]] = level;
647 1345756 break;
648 }
649
3/6
✓ Branch 0 taken 66459 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 66459 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 66459 times.
✗ Branch 5 not taken.
66459 if(h->alt_inter_vlc && rl == &ff_h263_rl_inter && !h->c.mb_intra){
650 //Looks like a hack but no, it's the way it is supposed to work ...
651 66459 rl = &ff_rl_intra_aic;
652 66459 i = 0;
653 66459 h->gb = gb;
654 66459 h->c.bdsp.clear_block(block);
655 66459 goto retry;
656 }
657 av_log(h->c.avctx, AV_LOG_ERROR, "run overflow at %dx%d i:%d\n",
658 h->c.mb_x, h->c.mb_y, h->c.mb_intra);
659 return -1;
660 }
661 12638728 j = scan_table[i];
662 12638728 block[j] = level;
663 }
664 }
665
4/4
✓ Branch 0 taken 350482 times.
✓ Branch 1 taken 995274 times.
✓ Branch 2 taken 87275 times.
✓ Branch 3 taken 263207 times.
1345756 if (h->c.mb_intra && h->c.h263_aic) {
666 87275 not_coded:
667 91098 h263_pred_acdc(&h->c, block, n);
668 }
669 1349579 h->c.block_last_index[n] = i;
670 1349579 return 0;
671 }
672
673 static int h263_skip_b_part(H263DecContext *const h, int cbp)
674 {
675 LOCAL_ALIGNED_32(int16_t, dblock, [64]);
676 int i, mbi;
677 int bli[6];
678
679 /* we have to set h->c.mb_intra to zero to decode B-part of PB-frame correctly
680 * but real value should be restored in order to be used later (in OBMC condition)
681 */
682 mbi = h->c.mb_intra;
683 memcpy(bli, h->c.block_last_index, sizeof(bli));
684 h->c.mb_intra = 0;
685 for (i = 0; i < 6; i++) {
686 if (h263_decode_block(h, dblock, i, cbp&32) < 0)
687 return -1;
688 cbp+=cbp;
689 }
690 h->c.mb_intra = mbi;
691 memcpy(h->c.block_last_index, bli, sizeof(bli));
692 return 0;
693 }
694
695 static int h263_get_modb(GetBitContext *gb, int pb_frame, int *cbpb)
696 {
697 int c, mv = 1;
698
699 if (pb_frame < 3) { // h.263 Annex G and i263 PB-frame
700 c = get_bits1(gb);
701 if (pb_frame == 2 && c)
702 mv = !get_bits1(gb);
703 } else { // h.263 Annex M improved PB-frame
704 mv = get_unary(gb, 0, 4) + 1;
705 c = mv & 1;
706 mv = !!(mv & 2);
707 }
708 if(c)
709 *cbpb = get_bits(gb, 6);
710 return mv;
711 }
712
713 #define tab_size ((signed)FF_ARRAY_ELEMS(s->direct_scale_mv[0]))
714 #define tab_bias (tab_size / 2)
715 15407 static inline void set_one_direct_mv(MpegEncContext *s, const MPVPicture *p, int i)
716 {
717 15407 int xy = s->block_index[i];
718 15407 uint16_t time_pp = s->pp_time;
719 15407 uint16_t time_pb = s->pb_time;
720 int p_mx, p_my;
721
722 15407 p_mx = p->motion_val[0][xy][0];
723
1/2
✓ Branch 0 taken 15407 times.
✗ Branch 1 not taken.
15407 if ((unsigned)(p_mx + tab_bias) < tab_size) {
724 15407 s->mv[0][i][0] = s->direct_scale_mv[0][p_mx + tab_bias];
725 15407 s->mv[1][i][0] = s->direct_scale_mv[1][p_mx + tab_bias];
726 } else {
727 s->mv[0][i][0] = p_mx * time_pb / time_pp;
728 s->mv[1][i][0] = p_mx * (time_pb - time_pp) / time_pp;
729 }
730 15407 p_my = p->motion_val[0][xy][1];
731
1/2
✓ Branch 0 taken 15407 times.
✗ Branch 1 not taken.
15407 if ((unsigned)(p_my + tab_bias) < tab_size) {
732 15407 s->mv[0][i][1] = s->direct_scale_mv[0][p_my + tab_bias];
733 15407 s->mv[1][i][1] = s->direct_scale_mv[1][p_my + tab_bias];
734 } else {
735 s->mv[0][i][1] = p_my * time_pb / time_pp;
736 s->mv[1][i][1] = p_my * (time_pb - time_pp) / time_pp;
737 }
738 15407 }
739
740 /**
741 * @return the mb_type
742 */
743 15266 static int set_direct_mv(MpegEncContext *s)
744 {
745 15266 const int mb_index = s->mb_x + s->mb_y * s->mb_stride;
746 15266 const MPVPicture *p = s->next_pic.ptr;
747 15266 int colocated_mb_type = p->mb_type[mb_index];
748 int i;
749
750
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 15266 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
15266 if (s->codec_tag == AV_RL32("U263") && p->f->pict_type == AV_PICTURE_TYPE_I) {
751 p = s->last_pic.ptr;
752 colocated_mb_type = p->mb_type[mb_index];
753 }
754
755
2/2
✓ Branch 0 taken 47 times.
✓ Branch 1 taken 15219 times.
15266 if (IS_8X8(colocated_mb_type)) {
756 47 s->mv_type = MV_TYPE_8X8;
757
2/2
✓ Branch 0 taken 188 times.
✓ Branch 1 taken 47 times.
235 for (i = 0; i < 4; i++)
758 188 set_one_direct_mv(s, p, i);
759 47 return MB_TYPE_DIRECT2 | MB_TYPE_8x8 | MB_TYPE_BIDIR_MV;
760 } else {
761 15219 set_one_direct_mv(s, p, 0);
762 15219 s->mv[0][1][0] =
763 15219 s->mv[0][2][0] =
764 15219 s->mv[0][3][0] = s->mv[0][0][0];
765 15219 s->mv[0][1][1] =
766 15219 s->mv[0][2][1] =
767 15219 s->mv[0][3][1] = s->mv[0][0][1];
768 15219 s->mv[1][1][0] =
769 15219 s->mv[1][2][0] =
770 15219 s->mv[1][3][0] = s->mv[1][0][0];
771 15219 s->mv[1][1][1] =
772 15219 s->mv[1][2][1] =
773 15219 s->mv[1][3][1] = s->mv[1][0][1];
774 15219 s->mv_type = MV_TYPE_8X8;
775 // Note see prev line
776 15219 return MB_TYPE_DIRECT2 | MB_TYPE_16x16 | MB_TYPE_BIDIR_MV;
777 }
778 }
779
780 441138 int ff_h263_decode_mb(H263DecContext *const h)
781 {
782 int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
783 int16_t *mot_val;
784 441138 const int xy = h->c.mb_x + h->c.mb_y * h->c.mb_stride;
785 441138 int cbpb = 0, pb_mv_count = 0;
786
787 av_assert2(!h->c.h263_pred);
788
789
2/2
✓ Branch 0 taken 367701 times.
✓ Branch 1 taken 73437 times.
441138 if (h->c.pict_type == AV_PICTURE_TYPE_P) {
790 do{
791
2/2
✓ Branch 1 taken 9305 times.
✓ Branch 2 taken 358396 times.
367701 if (get_bits1(&h->gb)) {
792 /* skip mb */
793 9305 h->c.mb_intra = 0;
794
2/2
✓ Branch 0 taken 55830 times.
✓ Branch 1 taken 9305 times.
65135 for(i=0;i<6;i++)
795 55830 h->c.block_last_index[i] = -1;
796 9305 h->c.mv_dir = MV_DIR_FORWARD;
797 9305 h->c.mv_type = MV_TYPE_16X16;
798 9305 h->c.cur_pic.mb_type[xy] = MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_FORWARD_MV;
799 9305 h->c.mv[0][0][0] = 0;
800 9305 h->c.mv[0][0][1] = 0;
801 9305 h->c.mb_skipped = !(h->c.obmc | h->loop_filter);
802 9305 goto end;
803 }
804 358396 cbpc = get_vlc2(&h->gb, ff_h263_inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 2);
805
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 358396 times.
358396 if (cbpc < 0){
806 av_log(h->c.avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n",
807 h->c.mb_x, h->c.mb_y);
808 return SLICE_ERROR;
809 }
810
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 358396 times.
358396 }while(cbpc == 20);
811
812 358396 h->c.bdsp.clear_blocks(h->block[0]);
813
814 358396 dquant = cbpc & 8;
815 358396 h->c.mb_intra = ((cbpc & 4) != 0);
816
2/2
✓ Branch 0 taken 13424 times.
✓ Branch 1 taken 344972 times.
358396 if (h->c.mb_intra)
817 13424 goto intra;
818
819
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 344972 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
344972 if (h->pb_frame && get_bits1(&h->gb))
820 pb_mv_count = h263_get_modb(&h->gb, h->pb_frame, &cbpb);
821 344972 cbpy = get_vlc2(&h->gb, ff_h263_cbpy_vlc, CBPY_VLC_BITS, 1);
822
823
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 344972 times.
344972 if (cbpy < 0) {
824 av_log(h->c.avctx, AV_LOG_ERROR, "cbpy damaged at %d %d\n",
825 h->c.mb_x, h->c.mb_y);
826 return SLICE_ERROR;
827 }
828
829
4/4
✓ Branch 0 taken 51649 times.
✓ Branch 1 taken 293323 times.
✓ Branch 2 taken 13805 times.
✓ Branch 3 taken 37844 times.
344972 if (!h->alt_inter_vlc|| (cbpc & 3)!=3)
830 307128 cbpy ^= 0xF;
831
832 344972 cbp = (cbpc & 3) | (cbpy << 2);
833
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 344972 times.
344972 if (dquant) {
834 h263_decode_dquant(h);
835 }
836
837 344972 h->c.mv_dir = MV_DIR_FORWARD;
838
2/2
✓ Branch 0 taken 343929 times.
✓ Branch 1 taken 1043 times.
344972 if ((cbpc & 16) == 0) {
839 343929 h->c.cur_pic.mb_type[xy] = MB_TYPE_16x16 | MB_TYPE_FORWARD_MV;
840 /* 16x16 motion prediction */
841 343929 h->c.mv_type = MV_TYPE_16X16;
842 343929 ff_h263_pred_motion(&h->c, 0, 0, &pred_x, &pred_y);
843
2/2
✓ Branch 0 taken 51649 times.
✓ Branch 1 taken 292280 times.
343929 if (h->umvplus)
844 51649 mx = h263p_decode_umotion(h, pred_x);
845 else
846 292280 mx = ff_h263_decode_motion(h, pred_x, 1);
847
848
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 343929 times.
343929 if (mx >= 0xffff)
849 return SLICE_ERROR;
850
851
2/2
✓ Branch 0 taken 51649 times.
✓ Branch 1 taken 292280 times.
343929 if (h->umvplus)
852 51649 my = h263p_decode_umotion(h, pred_y);
853 else
854 292280 my = ff_h263_decode_motion(h, pred_y, 1);
855
856
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 343929 times.
343929 if (my >= 0xffff)
857 return SLICE_ERROR;
858 343929 h->c.mv[0][0][0] = mx;
859 343929 h->c.mv[0][0][1] = my;
860
861
6/6
✓ Branch 0 taken 51649 times.
✓ Branch 1 taken 292280 times.
✓ Branch 2 taken 10131 times.
✓ Branch 3 taken 41518 times.
✓ Branch 4 taken 340 times.
✓ Branch 5 taken 9791 times.
343929 if (h->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
862 340 skip_bits1(&h->gb); /* Bit stuffing to prevent PSC */
863 } else {
864 1043 h->c.cur_pic.mb_type[xy] = MB_TYPE_8x8 | MB_TYPE_FORWARD_MV;
865 1043 h->c.mv_type = MV_TYPE_8X8;
866
2/2
✓ Branch 0 taken 4172 times.
✓ Branch 1 taken 1043 times.
5215 for(i=0;i<4;i++) {
867 4172 mot_val = ff_h263_pred_motion(&h->c, i, 0, &pred_x, &pred_y);
868
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4172 times.
4172 if (h->umvplus)
869 mx = h263p_decode_umotion(h, pred_x);
870 else
871 4172 mx = ff_h263_decode_motion(h, pred_x, 1);
872
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4172 times.
4172 if (mx >= 0xffff)
873 return SLICE_ERROR;
874
875
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4172 times.
4172 if (h->umvplus)
876 my = h263p_decode_umotion(h, pred_y);
877 else
878 4172 my = ff_h263_decode_motion(h, pred_y, 1);
879
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4172 times.
4172 if (my >= 0xffff)
880 return SLICE_ERROR;
881 4172 h->c.mv[0][i][0] = mx;
882 4172 h->c.mv[0][i][1] = my;
883
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 4172 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
4172 if (h->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
884 skip_bits1(&h->gb); /* Bit stuffing to prevent PSC */
885 4172 mot_val[0] = mx;
886 4172 mot_val[1] = my;
887 }
888 }
889
2/2
✓ Branch 0 taken 21600 times.
✓ Branch 1 taken 51837 times.
73437 } else if (h->c.pict_type==AV_PICTURE_TYPE_B) {
890 int mb_type;
891 21600 const int stride = h->c.b8_stride;
892 21600 int16_t *mot_val0 = h->c.cur_pic.motion_val[0][2 * (h->c.mb_x + h->c.mb_y * stride)];
893 21600 int16_t *mot_val1 = h->c.cur_pic.motion_val[1][2 * (h->c.mb_x + h->c.mb_y * stride)];
894 // const int mv_xy = h->c.mb_x + 1 + h->c.mb_y * h->c.mb_stride;
895
896 //FIXME ugly
897 21600 mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+2*stride]= mot_val0[2+2*stride]=
898 21600 mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+2*stride]= mot_val0[3+2*stride]=
899 21600 mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+2*stride]= mot_val1[2+2*stride]=
900 21600 mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+2*stride]= mot_val1[3+2*stride]= 0;
901
902 do{
903 21600 mb_type = get_vlc2(&h->gb, h263_mbtype_b_vlc,
904 H263_MBTYPE_B_VLC_BITS, 2);
905
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 21600 times.
21600 if (mb_type < 0){
906 av_log(h->c.avctx, AV_LOG_ERROR, "b mb_type damaged at %d %d\n",
907 h->c.mb_x, h->c.mb_y);
908 return SLICE_ERROR;
909 }
910
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 21600 times.
21600 }while(!mb_type);
911
912 21600 h->c.mb_intra = IS_INTRA(mb_type);
913
2/2
✓ Branch 0 taken 11402 times.
✓ Branch 1 taken 10198 times.
21600 if(HAS_CBP(mb_type)){
914 11402 h->c.bdsp.clear_blocks(h->block[0]);
915 11402 cbpc = get_vlc2(&h->gb, cbpc_b_vlc, CBPC_B_VLC_BITS, 1);
916
2/2
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 11356 times.
11402 if (h->c.mb_intra) {
917 46 dquant = IS_QUANT(mb_type);
918 46 goto intra;
919 }
920
921 11356 cbpy = get_vlc2(&h->gb, ff_h263_cbpy_vlc, CBPY_VLC_BITS, 1);
922
923
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 11356 times.
11356 if (cbpy < 0){
924 av_log(h->c.avctx, AV_LOG_ERROR, "b cbpy damaged at %d %d\n",
925 h->c.mb_x, h->c.mb_y);
926 return SLICE_ERROR;
927 }
928
929
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 11356 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
11356 if (!h->alt_inter_vlc || (cbpc & 3)!=3)
930 11356 cbpy ^= 0xF;
931
932 11356 cbp = (cbpc & 3) | (cbpy << 2);
933 }else
934 10198 cbp=0;
935
936 av_assert2(!h->c.mb_intra);
937
938
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 21554 times.
21554 if(IS_QUANT(mb_type)){
939 h263_decode_dquant(h);
940 }
941
942
2/2
✓ Branch 0 taken 15266 times.
✓ Branch 1 taken 6288 times.
21554 if(IS_DIRECT(mb_type)){
943 15266 h->c.mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
944 15266 mb_type |= set_direct_mv(&h->c);
945 }else{
946 6288 h->c.mv_dir = 0;
947 6288 h->c.mv_type = MV_TYPE_16X16;
948 //FIXME UMV
949
950
2/2
✓ Branch 0 taken 2594 times.
✓ Branch 1 taken 3694 times.
6288 if (HAS_FORWARD_MV(mb_type)) {
951 2594 int16_t *mot_val = ff_h263_pred_motion(&h->c, 0, 0, &pred_x, &pred_y);
952 2594 h->c.mv_dir = MV_DIR_FORWARD;
953
954
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2594 times.
2594 if (h->umvplus)
955 mx = h263p_decode_umotion(h, pred_x);
956 else
957 2594 mx = ff_h263_decode_motion(h, pred_x, 1);
958
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2594 times.
2594 if (mx >= 0xffff)
959 return SLICE_ERROR;
960
961
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2594 times.
2594 if (h->umvplus)
962 my = h263p_decode_umotion(h, pred_y);
963 else
964 2594 my = ff_h263_decode_motion(h, pred_y, 1);
965
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2594 times.
2594 if (my >= 0xffff)
966 return SLICE_ERROR;
967
968
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 2594 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
2594 if (h->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
969 skip_bits1(&h->gb); /* Bit stuffing to prevent PSC */
970
971 2594 h->c.mv[0][0][0] = mx;
972 2594 h->c.mv[0][0][1] = my;
973 2594 mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
974 2594 mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
975 }
976
977
2/2
✓ Branch 0 taken 3694 times.
✓ Branch 1 taken 2594 times.
6288 if (HAS_BACKWARD_MV(mb_type)) {
978 3694 int16_t *mot_val = ff_h263_pred_motion(&h->c, 0, 1, &pred_x, &pred_y);
979 3694 h->c.mv_dir |= MV_DIR_BACKWARD;
980
981
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3694 times.
3694 if (h->umvplus)
982 mx = h263p_decode_umotion(h, pred_x);
983 else
984 3694 mx = ff_h263_decode_motion(h, pred_x, 1);
985
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3694 times.
3694 if (mx >= 0xffff)
986 return SLICE_ERROR;
987
988
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3694 times.
3694 if (h->umvplus)
989 my = h263p_decode_umotion(h, pred_y);
990 else
991 3694 my = ff_h263_decode_motion(h, pred_y, 1);
992
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3694 times.
3694 if (my >= 0xffff)
993 return SLICE_ERROR;
994
995
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 3694 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
3694 if (h->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
996 skip_bits1(&h->gb); /* Bit stuffing to prevent PSC */
997
998 3694 h->c.mv[1][0][0] = mx;
999 3694 h->c.mv[1][0][1] = my;
1000 3694 mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
1001 3694 mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
1002 }
1003 }
1004
1005 21554 h->c.cur_pic.mb_type[xy] = mb_type;
1006 } else { /* I-Frame */
1007 do{
1008 51837 cbpc = get_vlc2(&h->gb, ff_h263_intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 2);
1009
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 51837 times.
51837 if (cbpc < 0){
1010 av_log(h->c.avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n",
1011 h->c.mb_x, h->c.mb_y);
1012 return SLICE_ERROR;
1013 }
1014
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 51837 times.
51837 }while(cbpc == 8);
1015
1016 51837 h->c.bdsp.clear_blocks(h->block[0]);
1017
1018 51837 dquant = cbpc & 4;
1019 51837 h->c.mb_intra = 1;
1020 65307 intra:
1021 65307 h->c.cur_pic.mb_type[xy] = MB_TYPE_INTRA;
1022
2/2
✓ Branch 0 taken 15183 times.
✓ Branch 1 taken 50124 times.
65307 if (h->c.h263_aic) {
1023 15183 h->c.ac_pred = get_bits1(&h->gb);
1024
2/2
✓ Branch 0 taken 739 times.
✓ Branch 1 taken 14444 times.
15183 if (h->c.ac_pred) {
1025 739 h->c.cur_pic.mb_type[xy] = MB_TYPE_INTRA | MB_TYPE_ACPRED;
1026
1027 739 h->c.h263_aic_dir = get_bits1(&h->gb);
1028 }
1029 }else
1030 50124 h->c.ac_pred = 0;
1031
1032
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 65307 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
65307 if (h->pb_frame && get_bits1(&h->gb))
1033 pb_mv_count = h263_get_modb(&h->gb, h->pb_frame, &cbpb);
1034 65307 cbpy = get_vlc2(&h->gb, ff_h263_cbpy_vlc, CBPY_VLC_BITS, 1);
1035
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 65307 times.
65307 if(cbpy<0){
1036 av_log(h->c.avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n",
1037 h->c.mb_x, h->c.mb_y);
1038 return SLICE_ERROR;
1039 }
1040 65307 cbp = (cbpc & 3) | (cbpy << 2);
1041
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 65307 times.
65307 if (dquant) {
1042 h263_decode_dquant(h);
1043 }
1044
1045 65307 pb_mv_count += !!h->pb_frame;
1046 }
1047
1048
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 431833 times.
431833 while(pb_mv_count--){
1049 ff_h263_decode_motion(h, 0, 1);
1050 ff_h263_decode_motion(h, 0, 1);
1051 }
1052
1053 /* decode each block */
1054
2/2
✓ Branch 0 taken 2590998 times.
✓ Branch 1 taken 431833 times.
3022831 for (i = 0; i < 6; i++) {
1055
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2590998 times.
2590998 if (h263_decode_block(h, h->block[i], i, cbp&32) < 0)
1056 return -1;
1057 2590998 cbp+=cbp;
1058 }
1059
1060
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 431833 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
431833 if (h->pb_frame && h263_skip_b_part(h, cbpb) < 0)
1061 return -1;
1062
4/4
✓ Branch 0 taken 373249 times.
✓ Branch 1 taken 58584 times.
✓ Branch 2 taken 7779 times.
✓ Branch 3 taken 50805 times.
431833 if (h->c.obmc && !h->c.mb_intra) {
1063
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 50805 times.
50805 if (h->c.pict_type == AV_PICTURE_TYPE_P &&
1064
3/4
✓ Branch 0 taken 2255 times.
✓ Branch 1 taken 48550 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 48550 times.
50805 h->c.mb_x + 1 < h->c.mb_width && h->mb_num_left != 1)
1065 48550 preview_obmc(h);
1066 }
1067 383283 end:
1068
1069
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 441138 times.
441138 if (get_bits_left(&h->gb) < 0)
1070 return AVERROR_INVALIDDATA;
1071
1072 /* per-MB end of slice check */
1073 {
1074 441138 int v = show_bits(&h->gb, 16);
1075
1076
2/2
✓ Branch 1 taken 1616 times.
✓ Branch 2 taken 439522 times.
441138 if (get_bits_left(&h->gb) < 16) {
1077 1616 v >>= 16 - get_bits_left(&h->gb);
1078 }
1079
1080
2/2
✓ Branch 0 taken 3742 times.
✓ Branch 1 taken 437396 times.
441138 if(v==0)
1081 3742 return SLICE_END;
1082 }
1083
1084 437396 return SLICE_OK;
1085 }
1086
1087 /* Most is hardcoded; should extend to handle all H.263 streams. */
1088 461 int ff_h263_decode_picture_header(H263DecContext *const h)
1089 {
1090 int width, height, i, ret;
1091 int h263_plus;
1092
1093 461 align_get_bits(&h->gb);
1094
1095
1/4
✗ Branch 1 not taken.
✓ Branch 2 taken 461 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
461 if (show_bits(&h->gb, 2) == 2 && h->c.avctx->frame_num == 0) {
1096 av_log(h->c.avctx, AV_LOG_WARNING, "Header looks like RTP instead of H.263\n");
1097 }
1098
1099 461 uint32_t startcode = get_bits(&h->gb, 22-8);
1100
1101
1/2
✓ Branch 1 taken 461 times.
✗ Branch 2 not taken.
461 for (i = get_bits_left(&h->gb); i>24; i -= 8) {
1102 461 startcode = ((startcode << 8) | get_bits(&h->gb, 8)) & 0x003FFFFF;
1103
1104
1/2
✓ Branch 0 taken 461 times.
✗ Branch 1 not taken.
461 if(startcode == 0x20)
1105 461 break;
1106 }
1107
1108
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 461 times.
461 if (startcode != 0x20) {
1109 av_log(h->c.avctx, AV_LOG_ERROR, "Bad picture start code\n");
1110 return -1;
1111 }
1112 /* temporal reference */
1113 461 i = get_bits(&h->gb, 8); /* picture timestamp */
1114
1115 461 i -= (i - (h->picture_number & 0xFF) + 128) & ~0xFF;
1116
1117 461 h->picture_number = (h->picture_number&~0xFF) + i;
1118
1119 /* PTYPE starts here */
1120
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 461 times.
461 if (check_marker(h->c.avctx, &h->gb, "in PTYPE") != 1) {
1121 return -1;
1122 }
1123
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 461 times.
461 if (get_bits1(&h->gb) != 0) {
1124 av_log(h->c.avctx, AV_LOG_ERROR, "Bad H.263 id\n");
1125 return -1; /* H.263 id */
1126 }
1127 461 skip_bits1(&h->gb); /* split screen off */
1128 461 skip_bits1(&h->gb); /* camera off */
1129 461 skip_bits1(&h->gb); /* freeze picture release off */
1130
1131 461 int format = get_bits(&h->gb, 3);
1132 /*
1133 0 forbidden
1134 1 sub-QCIF
1135 10 QCIF
1136 7 extended PTYPE (PLUSPTYPE)
1137 */
1138
1139
3/4
✓ Branch 0 taken 307 times.
✓ Branch 1 taken 154 times.
✓ Branch 2 taken 307 times.
✗ Branch 3 not taken.
461 if (format != 7 && format != 6) {
1140 307 h263_plus = 0;
1141 /* H.263v1 */
1142 307 width = ff_h263_format[format][0];
1143 307 height = ff_h263_format[format][1];
1144
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 307 times.
307 if (!width)
1145 return -1;
1146
1147 307 h->c.pict_type = AV_PICTURE_TYPE_I + get_bits1(&h->gb);
1148
1149 307 h->h263_long_vectors = get_bits1(&h->gb);
1150
1151
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 307 times.
307 if (get_bits1(&h->gb) != 0) {
1152 av_log(h->c.avctx, AV_LOG_ERROR, "H.263 SAC not supported\n");
1153 return -1; /* SAC: off */
1154 }
1155 307 h->c.obmc = get_bits1(&h->gb); /* Advanced prediction mode */
1156
1157 307 h->pb_frame = get_bits1(&h->gb);
1158 307 h->c.chroma_qscale = h->c.qscale = get_bits(&h->gb, 5);
1159 307 skip_bits1(&h->gb); /* Continuous Presence Multipoint mode: off */
1160
1161 307 h->c.width = width;
1162 307 h->c.height = height;
1163 307 h->c.avctx->sample_aspect_ratio= (AVRational){12,11};
1164 307 h->c.avctx->framerate = (AVRational){ 30000, 1001 };
1165 } else {
1166 int ufep;
1167
1168 /* H.263v2 */
1169 154 h263_plus = 1;
1170 154 ufep = get_bits(&h->gb, 3); /* Update Full Extended PTYPE */
1171
1172 /* ufep other than 0 and 1 are reserved */
1173
1/2
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
154 if (ufep == 1) {
1174 /* OPPTYPE */
1175 154 format = get_bits(&h->gb, 3);
1176 ff_dlog(h->c.avctx, "ufep=1, format: %d\n", format);
1177 154 h->custom_pcf = get_bits1(&h->gb);
1178 154 h->umvplus = get_bits1(&h->gb); /* Unrestricted Motion Vector */
1179
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 154 times.
154 if (get_bits1(&h->gb) != 0) {
1180 av_log(h->c.avctx, AV_LOG_ERROR, "Syntax-based Arithmetic Coding (SAC) not supported\n");
1181 }
1182 154 h->c.obmc = get_bits1(&h->gb); /* Advanced prediction mode */
1183 154 h->c.h263_aic = get_bits1(&h->gb); /* Advanced Intra Coding (AIC) */
1184 154 h->loop_filter = get_bits1(&h->gb);
1185
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 154 times.
154 if (h->c.avctx->lowres)
1186 h->loop_filter = 0;
1187
1188 154 h->h263_slice_structured = get_bits1(&h->gb);
1189
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 154 times.
154 if (get_bits1(&h->gb) != 0) {
1190 av_log(h->c.avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n");
1191 }
1192
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 154 times.
154 if (get_bits1(&h->gb) != 0) {
1193 av_log(h->c.avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n");
1194 }
1195 154 h->alt_inter_vlc = get_bits1(&h->gb);
1196 154 h->modified_quant = get_bits1(&h->gb);
1197
1/2
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
154 if (h->modified_quant)
1198 154 h->c.chroma_qscale_table= ff_h263_chroma_qscale_table;
1199
1200 154 skip_bits(&h->gb, 1); /* Prevent start code emulation */
1201
1202 154 skip_bits(&h->gb, 3); /* Reserved */
1203 } else if (ufep != 0) {
1204 av_log(h->c.avctx, AV_LOG_ERROR, "Bad UFEP type (%d)\n", ufep);
1205 return -1;
1206 }
1207
1208 /* MPPTYPE */
1209 154 h->c.pict_type = get_bits(&h->gb, 3);
1210
2/6
✓ Branch 0 taken 19 times.
✓ Branch 1 taken 135 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
154 switch (h->c.pict_type) {
1211 19 case 0: h->c.pict_type = AV_PICTURE_TYPE_I; break;
1212 135 case 1: h->c.pict_type = AV_PICTURE_TYPE_P; break;
1213 case 2: h->c.pict_type = AV_PICTURE_TYPE_P; h->pb_frame = 3; break;
1214 case 3: h->c.pict_type = AV_PICTURE_TYPE_B; break;
1215 case 7: h->c.pict_type = AV_PICTURE_TYPE_I; break; //ZYGO
1216 default:
1217 return -1;
1218 }
1219 154 skip_bits(&h->gb, 2);
1220 154 h->c.no_rounding = get_bits1(&h->gb);
1221 154 skip_bits(&h->gb, 4);
1222
1223 /* Get the picture dimensions */
1224
1/2
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
154 if (ufep) {
1225
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 154 times.
154 if (format == 6) {
1226 /* Custom Picture Format (CPFMT) */
1227 int aspect_ratio_info = get_bits(&h->gb, 4);
1228 ff_dlog(h->c.avctx, "aspect: %d\n", aspect_ratio_info);
1229 /* aspect ratios:
1230 0 - forbidden
1231 1 - 1:1
1232 2 - 12:11 (CIF 4:3)
1233 3 - 10:11 (525-type 4:3)
1234 4 - 16:11 (CIF 16:9)
1235 5 - 40:33 (525-type 16:9)
1236 6-14 - reserved
1237 */
1238 width = (get_bits(&h->gb, 9) + 1) * 4;
1239 check_marker(h->c.avctx, &h->gb, "in dimensions");
1240 height = get_bits(&h->gb, 9) * 4;
1241 ff_dlog(h->c.avctx, "\nH.263+ Custom picture: %dx%d\n",width,height);
1242 if (aspect_ratio_info == FF_ASPECT_EXTENDED) {
1243 /* expected dimensions */
1244 h->c.avctx->sample_aspect_ratio.num = get_bits(&h->gb, 8);
1245 h->c.avctx->sample_aspect_ratio.den = get_bits(&h->gb, 8);
1246 }else{
1247 h->c.avctx->sample_aspect_ratio= ff_h263_pixel_aspect[aspect_ratio_info];
1248 }
1249 } else {
1250 154 width = ff_h263_format[format][0];
1251 154 height = ff_h263_format[format][1];
1252 154 h->c.avctx->sample_aspect_ratio = (AVRational){12,11};
1253 }
1254 154 h->c.avctx->sample_aspect_ratio.den <<= h->ehc_mode;
1255
2/4
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 154 times.
154 if ((width == 0) || (height == 0))
1256 return -1;
1257 154 h->c.width = width;
1258 154 h->c.height = height;
1259
1260
1/2
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
154 if (h->custom_pcf) {
1261 154 h->c.avctx->framerate.num = 1800000;
1262 154 h->c.avctx->framerate.den = 1000 + get_bits1(&h->gb);
1263 154 h->c.avctx->framerate.den *= get_bits(&h->gb, 7);
1264
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 154 times.
154 if (h->c.avctx->framerate.den == 0) {
1265 av_log(h->c.avctx, AV_LOG_ERROR, "zero framerate\n");
1266 return -1;
1267 }
1268 154 int gcd = av_gcd(h->c.avctx->framerate.den, h->c.avctx->framerate.num);
1269 154 h->c.avctx->framerate.den /= gcd;
1270 154 h->c.avctx->framerate.num /= gcd;
1271 }else{
1272 h->c.avctx->framerate = (AVRational){ 30000, 1001 };
1273 }
1274 }
1275
1276
1/2
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
154 if (h->custom_pcf)
1277 154 skip_bits(&h->gb, 2); //extended Temporal reference
1278
1279
1/2
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
154 if (ufep) {
1280
1/2
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
154 if (h->umvplus) {
1281
1/2
✓ Branch 1 taken 154 times.
✗ Branch 2 not taken.
154 if (get_bits1(&h->gb)==0) /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
1282 154 skip_bits1(&h->gb);
1283 }
1284
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 154 times.
154 if (h->h263_slice_structured) {
1285 if (get_bits1(&h->gb) != 0) {
1286 av_log(h->c.avctx, AV_LOG_ERROR, "rectangular slices not supported\n");
1287 }
1288 if (get_bits1(&h->gb) != 0) {
1289 av_log(h->c.avctx, AV_LOG_ERROR, "unordered slices not supported\n");
1290 }
1291 }
1292
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 154 times.
154 if (h->c.pict_type == AV_PICTURE_TYPE_B) {
1293 skip_bits(&h->gb, 4); //ELNUM
1294 if (ufep == 1) {
1295 skip_bits(&h->gb, 4); // RLNUM
1296 }
1297 }
1298 }
1299
1300 154 h->c.qscale = get_bits(&h->gb, 5);
1301 }
1302
1303 461 ret = av_image_check_size(h->c.width, h->c.height, 0, h->c.avctx);
1304
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 461 times.
461 if (ret < 0)
1305 return ret;
1306
1307
1/2
✓ Branch 0 taken 461 times.
✗ Branch 1 not taken.
461 if (!(h->c.avctx->flags2 & AV_CODEC_FLAG2_CHUNKS)) {
1308
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 461 times.
461 if ((h->c.width * h->c.height / 256 / 8) > get_bits_left(&h->gb))
1309 return AVERROR_INVALIDDATA;
1310 }
1311
1312 461 h->c.mb_width = (h->c.width + 15U) / 16;
1313 461 h->c.mb_height = (h->c.height + 15U) / 16;
1314 461 h->c.mb_num = h->c.mb_width * h->c.mb_height;
1315
1316
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 461 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
461 h->gob_index = H263_GOB_HEIGHT(h->c.height);
1317
1318
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 461 times.
461 if (h->pb_frame) {
1319 skip_bits(&h->gb, 3); /* Temporal reference for B-pictures */
1320 if (h->custom_pcf)
1321 skip_bits(&h->gb, 2); //extended Temporal reference
1322 skip_bits(&h->gb, 2); /* Quantization information for B-pictures */
1323 }
1324
1325
1/2
✓ Branch 0 taken 461 times.
✗ Branch 1 not taken.
461 if (h->c.pict_type!=AV_PICTURE_TYPE_B) {
1326 461 h->c.time = h->picture_number;
1327 461 h->c.pp_time = h->c.time - h->c.last_non_b_time;
1328 461 h->c.last_non_b_time = h->c.time;
1329 }else{
1330 h->c.time = h->picture_number;
1331 h->c.pb_time = h->c.pp_time - (h->c.last_non_b_time - h->c.time);
1332 if (h->c.pp_time <= h->c.pb_time ||
1333 h->c.pp_time <= h->c.pp_time - h->c.pb_time ||
1334 h->c.pp_time <= 0) {
1335 h->c.pp_time = 2;
1336 h->c.pb_time = 1;
1337 }
1338 ff_mpeg4_init_direct_mv(&h->c);
1339 }
1340
1341 /* PEI */
1342
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 461 times.
461 if (skip_1stop_8data_bits(&h->gb) < 0)
1343 return AVERROR_INVALIDDATA;
1344
1345
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 461 times.
461 if (h->h263_slice_structured) {
1346 if (check_marker(h->c.avctx, &h->gb, "SEPB1") != 1) {
1347 return -1;
1348 }
1349
1350 ff_h263_decode_mba(h);
1351
1352 if (check_marker(h->c.avctx, &h->gb, "SEPB2") != 1) {
1353 return -1;
1354 }
1355 }
1356
1357
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 461 times.
461 if (h->c.pict_type == AV_PICTURE_TYPE_B)
1358 h->c.low_delay = 0;
1359
1360
2/2
✓ Branch 0 taken 154 times.
✓ Branch 1 taken 307 times.
461 if (h->c.h263_aic) {
1361 154 h->c.y_dc_scale_table =
1362 154 h->c.c_dc_scale_table = ff_aic_dc_scale_table;
1363 }else{
1364 307 h->c.y_dc_scale_table =
1365 307 h->c.c_dc_scale_table = ff_mpeg1_dc_scale_table;
1366 }
1367
1368 461 ff_h263_show_pict_info(h, h263_plus);
1369
1370
3/6
✓ Branch 0 taken 56 times.
✓ Branch 1 taken 405 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 56 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
461 if (h->c.pict_type == AV_PICTURE_TYPE_I && h->c.codec_tag == AV_RL32("ZYGO") && get_bits_left(&h->gb) >= 85 + 13*3*16 + 50){
1371 int i,j;
1372 for(i=0; i<85; i++) av_log(h->c.avctx, AV_LOG_DEBUG, "%d", get_bits1(&h->gb));
1373 av_log(h->c.avctx, AV_LOG_DEBUG, "\n");
1374 for(i=0; i<13; i++){
1375 for(j=0; j<3; j++){
1376 int v= get_bits(&h->gb, 8);
1377 v |= get_sbits(&h->gb, 8) * (1 << 8);
1378 av_log(h->c.avctx, AV_LOG_DEBUG, " %5d", v);
1379 }
1380 av_log(h->c.avctx, AV_LOG_DEBUG, "\n");
1381 }
1382 for(i=0; i<50; i++) av_log(h->c.avctx, AV_LOG_DEBUG, "%d", get_bits1(&h->gb));
1383 }
1384
1385 461 return 0;
1386 }
1387