FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/ituh263dec.c
Date: 2024-04-25 05:10:44
Exec Total Coverage
Lines: 563 806 69.9%
Functions: 15 18 83.3%
Branches: 286 536 53.4%

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