2 * ITU H263 bitstream decoder
3 * Copyright (c) 2000,2001 Fabrice Bellard
5 * Copyright (c) 2001 Juan J. Sierralta P
6 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
8 * This file is part of Libav.
10 * Libav 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.
15 * Libav 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.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with Libav; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
32 #include "libavutil/attributes.h"
33 #include "libavutil/internal.h"
34 #include "libavutil/mathematics.h"
36 #include "mpegvideo.h"
41 #include "mpegutils.h"
45 #include "mpeg4video.h"
46 #include "mpegvideodata.h"
48 // The defines below define the number of bits that are read at once for
49 // reading vlc values. Changing these may improve speed and data cache needs
50 // be aware though that decreasing them may need the number of stages that is
51 // passed to get_vlc* to be increased.
53 #define H263_MBTYPE_B_VLC_BITS 6
54 #define CBPC_B_VLC_BITS 3
56 static const int h263_mb_type_b_map
[15]= {
57 MB_TYPE_DIRECT2
| MB_TYPE_L0L1
,
58 MB_TYPE_DIRECT2
| MB_TYPE_L0L1
| MB_TYPE_CBP
,
59 MB_TYPE_DIRECT2
| MB_TYPE_L0L1
| MB_TYPE_CBP
| MB_TYPE_QUANT
,
60 MB_TYPE_L0
| MB_TYPE_16x16
,
61 MB_TYPE_L0
| MB_TYPE_CBP
| MB_TYPE_16x16
,
62 MB_TYPE_L0
| MB_TYPE_CBP
| MB_TYPE_QUANT
| MB_TYPE_16x16
,
63 MB_TYPE_L1
| MB_TYPE_16x16
,
64 MB_TYPE_L1
| MB_TYPE_CBP
| MB_TYPE_16x16
,
65 MB_TYPE_L1
| MB_TYPE_CBP
| MB_TYPE_QUANT
| MB_TYPE_16x16
,
66 MB_TYPE_L0L1
| MB_TYPE_16x16
,
67 MB_TYPE_L0L1
| MB_TYPE_CBP
| MB_TYPE_16x16
,
68 MB_TYPE_L0L1
| MB_TYPE_CBP
| MB_TYPE_QUANT
| MB_TYPE_16x16
,
70 MB_TYPE_INTRA4x4
| MB_TYPE_CBP
,
71 MB_TYPE_INTRA4x4
| MB_TYPE_CBP
| MB_TYPE_QUANT
,
74 void ff_h263_show_pict_info(MpegEncContext
*s
){
75 if(s
->avctx
->debug
&FF_DEBUG_PICT_INFO
){
76 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",
77 s
->qscale
, av_get_picture_type_char(s
->pict_type
),
78 s
->gb
.size_in_bits
, 1-s
->no_rounding
,
80 s
->umvplus ?
" UMV" : "",
81 s
->h263_long_vectors ?
" LONG" : "",
82 s
->h263_plus ?
" +" : "",
83 s
->h263_aic ?
" AIC" : "",
84 s
->alt_inter_vlc ?
" AIV" : "",
85 s
->modified_quant ?
" MQ" : "",
86 s
->loop_filter ?
" LOOP" : "",
87 s
->h263_slice_structured ?
" SS" : "",
88 s
->avctx
->framerate
.num
, s
->avctx
->framerate
.den
93 /***********************************************/
96 VLC ff_h263_intra_MCBPC_vlc
;
97 VLC ff_h263_inter_MCBPC_vlc
;
100 static VLC h263_mbtype_b_vlc
;
101 static VLC cbpc_b_vlc
;
105 /* XXX: find a better solution to handle static init */
106 av_cold
void ff_h263_decode_init_vlc(void)
113 INIT_VLC_STATIC(&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, 72);
116 INIT_VLC_STATIC(&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, 198);
119 INIT_VLC_STATIC(&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, 64);
122 INIT_VLC_STATIC(&mv_vlc
, MV_VLC_BITS
, 33,
123 &ff_mvtab
[0][1], 2, 1,
124 &ff_mvtab
[0][0], 2, 1, 538);
125 ff_rl_init(&ff_h263_rl_inter
, ff_h263_static_rl_table_store
[0]);
126 ff_rl_init(&ff_rl_intra_aic
, ff_h263_static_rl_table_store
[1]);
127 INIT_VLC_RL(ff_h263_rl_inter
, 554);
128 INIT_VLC_RL(ff_rl_intra_aic
, 554);
129 INIT_VLC_STATIC(&h263_mbtype_b_vlc
, H263_MBTYPE_B_VLC_BITS
, 15,
130 &ff_h263_mbtype_b_tab
[0][1], 2, 1,
131 &ff_h263_mbtype_b_tab
[0][0], 2, 1, 80);
132 INIT_VLC_STATIC(&cbpc_b_vlc
, CBPC_B_VLC_BITS
, 4,
133 &ff_cbpc_b_tab
[0][1], 2, 1,
134 &ff_cbpc_b_tab
[0][0], 2, 1, 8);
138 int ff_h263_decode_mba(MpegEncContext
*s
)
142 for (i
= 0; i
< 6; i
++)
143 if (s
->mb_num
- 1 <= ff_mba_max
[i
])
145 mb_pos
= get_bits(&s
->gb
, ff_mba_length
[i
]);
146 s
->mb_x
= mb_pos
% s
->mb_width
;
147 s
->mb_y
= mb_pos
/ s
->mb_width
;
153 * Decode the group of blocks header or slice header.
154 * @return <0 if an error occurred
156 static int h263_decode_gob_header(MpegEncContext
*s
)
158 unsigned int val
, gob_number
;
161 /* Check for GOB Start Code */
162 val
= show_bits(&s
->gb
, 16);
166 /* We have a GBSC probably with GSTUFF */
167 skip_bits(&s
->gb
, 16); /* Drop the zeros */
168 left
= get_bits_left(&s
->gb
);
169 //MN: we must check the bits left or we might end in a infinite loop (or segfault)
170 for(;left
>13; left
--){
171 if(get_bits1(&s
->gb
)) break; /* Seek the '1' bit */
176 if(s
->h263_slice_structured
){
177 if(get_bits1(&s
->gb
)==0)
180 ff_h263_decode_mba(s
);
183 if(get_bits1(&s
->gb
)==0)
186 s
->qscale
= get_bits(&s
->gb
, 5); /* SQUANT */
187 if(get_bits1(&s
->gb
)==0)
189 skip_bits(&s
->gb
, 2); /* GFID */
191 gob_number
= get_bits(&s
->gb
, 5); /* GN */
193 s
->mb_y
= s
->gob_index
* gob_number
;
194 skip_bits(&s
->gb
, 2); /* GFID */
195 s
->qscale
= get_bits(&s
->gb
, 5); /* GQUANT */
198 if(s
->mb_y
>= s
->mb_height
)
208 * Find the next resync_marker.
209 * @param p pointer to buffer to scan
210 * @param end pointer to the end of the buffer
211 * @return pointer to the next resync_marker, or end if none was found
213 const uint8_t *ff_h263_find_resync_marker(const uint8_t *restrict p
, const uint8_t * restrict end
)
221 if (!p
[-1] && p
[1]) return p
- 1;
222 else if(!p
[ 1] && p
[2]) return p
;
229 * Decode the group of blocks / video packet header.
230 * @return bit position of the resync_marker, or <0 if none was found
232 int ff_h263_resync(MpegEncContext
*s
){
235 if(s
->codec_id
==AV_CODEC_ID_MPEG4
){
237 align_get_bits(&s
->gb
);
240 if(show_bits(&s
->gb
, 16)==0){
241 pos
= get_bits_count(&s
->gb
);
242 if(CONFIG_MPEG4_DECODER
&& s
->codec_id
==AV_CODEC_ID_MPEG4
)
243 ret
= ff_mpeg4_decode_video_packet_header(s
->avctx
->priv_data
);
245 ret
= h263_decode_gob_header(s
);
249 //OK, it's not where it is supposed to be ...
250 s
->gb
= s
->last_resync_gb
;
251 align_get_bits(&s
->gb
);
252 left
= get_bits_left(&s
->gb
);
254 for(;left
>16+1+5+5; left
-=8){
255 if(show_bits(&s
->gb
, 16)==0){
256 GetBitContext bak
= s
->gb
;
258 pos
= get_bits_count(&s
->gb
);
259 if(CONFIG_MPEG4_DECODER
&& s
->codec_id
==AV_CODEC_ID_MPEG4
)
260 ret
= ff_mpeg4_decode_video_packet_header(s
->avctx
->priv_data
);
262 ret
= h263_decode_gob_header(s
);
268 skip_bits(&s
->gb
, 8);
274 int ff_h263_decode_motion(MpegEncContext
* s
, int pred
, int f_code
)
276 int code
, val
, sign
, shift
;
277 code
= get_vlc2(&s
->gb
, mv_vlc
.table
, MV_VLC_BITS
, 2);
284 sign
= get_bits1(&s
->gb
);
288 val
= (val
- 1) << shift
;
289 val
|= get_bits(&s
->gb
, shift
);
296 /* modulo decoding */
297 if (!s
->h263_long_vectors
) {
298 val
= sign_extend(val
, 5 + f_code
);
300 /* horrible h263 long vector mode */
301 if (pred
< -31 && val
< -63)
303 if (pred
> 32 && val
> 63)
311 /* Decode RVLC of H.263+ UMV */
312 static int h263p_decode_umotion(MpegEncContext
* s
, int pred
)
316 if (get_bits1(&s
->gb
)) /* Motion difference = 0 */
319 code
= 2 + get_bits1(&s
->gb
);
321 while (get_bits1(&s
->gb
))
324 code
+= get_bits1(&s
->gb
);
329 code
= (sign
) ?
(pred
- code
) : (pred
+ code
);
330 ff_dlog(s
->avctx
,"H.263+ UMV Motion = %d\n", code
);
336 * read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
338 static void preview_obmc(MpegEncContext
*s
){
339 GetBitContext gb
= s
->gb
;
341 int cbpc
, i
, pred_x
, pred_y
, mx
, my
;
343 const int xy
= s
->mb_x
+ 1 + s
->mb_y
* s
->mb_stride
;
344 const int stride
= s
->b8_stride
*2;
347 s
->block_index
[i
]+= 2;
349 s
->block_index
[i
]+= 1;
352 assert(s
->pict_type
== AV_PICTURE_TYPE_P
);
355 if (get_bits1(&s
->gb
)) {
357 mot_val
= s
->current_picture
.motion_val
[0][s
->block_index
[0]];
358 mot_val
[0 ]= mot_val
[2 ]=
359 mot_val
[0+stride
]= mot_val
[2+stride
]= 0;
360 mot_val
[1 ]= mot_val
[3 ]=
361 mot_val
[1+stride
]= mot_val
[3+stride
]= 0;
363 s
->current_picture
.mb_type
[xy
] = MB_TYPE_SKIP
| MB_TYPE_16x16
| MB_TYPE_L0
;
366 cbpc
= get_vlc2(&s
->gb
, ff_h263_inter_MCBPC_vlc
.table
, INTER_MCBPC_VLC_BITS
, 2);
370 s
->current_picture
.mb_type
[xy
] = MB_TYPE_INTRA
;
372 get_vlc2(&s
->gb
, ff_h263_cbpy_vlc
.table
, CBPY_VLC_BITS
, 1);
374 if(s
->modified_quant
){
375 if(get_bits1(&s
->gb
)) skip_bits(&s
->gb
, 1);
376 else skip_bits(&s
->gb
, 5);
378 skip_bits(&s
->gb
, 2);
381 if ((cbpc
& 16) == 0) {
382 s
->current_picture
.mb_type
[xy
] = MB_TYPE_16x16
| MB_TYPE_L0
;
383 /* 16x16 motion prediction */
384 mot_val
= ff_h263_pred_motion(s
, 0, 0, &pred_x
, &pred_y
);
386 mx
= h263p_decode_umotion(s
, pred_x
);
388 mx
= ff_h263_decode_motion(s
, pred_x
, 1);
391 my
= h263p_decode_umotion(s
, pred_y
);
393 my
= ff_h263_decode_motion(s
, pred_y
, 1);
395 mot_val
[0 ]= mot_val
[2 ]=
396 mot_val
[0+stride
]= mot_val
[2+stride
]= mx
;
397 mot_val
[1 ]= mot_val
[3 ]=
398 mot_val
[1+stride
]= mot_val
[3+stride
]= my
;
400 s
->current_picture
.mb_type
[xy
] = MB_TYPE_8x8
| MB_TYPE_L0
;
402 mot_val
= ff_h263_pred_motion(s
, i
, 0, &pred_x
, &pred_y
);
404 mx
= h263p_decode_umotion(s
, pred_x
);
406 mx
= ff_h263_decode_motion(s
, pred_x
, 1);
409 my
= h263p_decode_umotion(s
, pred_y
);
411 my
= ff_h263_decode_motion(s
, pred_y
, 1);
412 if (s
->umvplus
&& (mx
- pred_x
) == 1 && (my
- pred_y
) == 1)
413 skip_bits1(&s
->gb
); /* Bit stuffing to prevent PSC */
422 s
->block_index
[i
]-= 2;
424 s
->block_index
[i
]-= 1;
430 static void h263_decode_dquant(MpegEncContext
*s
){
431 static const int8_t quant_tab
[4] = { -1, -2, 1, 2 };
433 if(s
->modified_quant
){
434 if(get_bits1(&s
->gb
))
435 s
->qscale
= ff_modified_quant_tab
[get_bits1(&s
->gb
)][ s
->qscale
];
437 s
->qscale
= get_bits(&s
->gb
, 5);
439 s
->qscale
+= quant_tab
[get_bits(&s
->gb
, 2)];
440 ff_set_qscale(s
, s
->qscale
);
443 static int h263_decode_block(MpegEncContext
* s
, int16_t * block
,
446 int code
, level
, i
, j
, last
, run
;
447 RLTable
*rl
= &ff_h263_rl_inter
;
448 const uint8_t *scan_table
;
449 GetBitContext gb
= s
->gb
;
451 scan_table
= s
->intra_scantable
.permutated
;
452 if (s
->h263_aic
&& s
->mb_intra
) {
453 rl
= &ff_rl_intra_aic
;
457 scan_table
= s
->intra_v_scantable
.permutated
; /* left */
459 scan_table
= s
->intra_h_scantable
.permutated
; /* top */
461 } else if (s
->mb_intra
) {
463 if (CONFIG_RV10_DECODER
&& s
->codec_id
== AV_CODEC_ID_RV10
) {
464 if (s
->rv10_version
== 3 && s
->pict_type
== AV_PICTURE_TYPE_I
) {
466 component
= (n
<= 3 ?
0 : n
- 4 + 1);
467 level
= s
->last_dc
[component
];
468 if (s
->rv10_first_dc_coded
[component
]) {
469 diff
= ff_rv_decode_dc(s
, n
);
473 level
= level
& 0xff; /* handle wrap round */
474 s
->last_dc
[component
] = level
;
476 s
->rv10_first_dc_coded
[component
] = 1;
479 level
= get_bits(&s
->gb
, 8);
484 level
= get_bits(&s
->gb
, 8);
485 if((level
&0x7F) == 0){
486 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal dc %d at %d %d\n", level
, s
->mb_x
, s
->mb_y
);
487 if (s
->avctx
->err_recognition
& AV_EF_BITSTREAM
)
499 if (s
->mb_intra
&& s
->h263_aic
)
501 s
->block_last_index
[n
] = i
- 1;
506 code
= get_vlc2(&s
->gb
, rl
->vlc
.table
, TEX_VLC_BITS
, 2);
508 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal ac vlc code at %dx%d\n", s
->mb_x
, s
->mb_y
);
513 if (CONFIG_FLV_DECODER
&& s
->h263_flv
> 1) {
514 ff_flv2_decode_ac_esc(&s
->gb
, &level
, &run
, &last
);
516 last
= get_bits1(&s
->gb
);
517 run
= get_bits(&s
->gb
, 6);
518 level
= (int8_t)get_bits(&s
->gb
, 8);
520 if (s
->codec_id
== AV_CODEC_ID_RV10
) {
521 /* XXX: should patch encoder too */
522 level
= get_sbits(&s
->gb
, 12);
524 level
= get_bits(&s
->gb
, 5);
525 level
|= get_sbits(&s
->gb
, 6)<<5;
530 run
= rl
->table_run
[code
];
531 level
= rl
->table_level
[code
];
532 last
= code
>= rl
->last
;
533 if (get_bits1(&s
->gb
))
538 if(s
->alt_inter_vlc
&& rl
== &ff_h263_rl_inter
&& !s
->mb_intra
){
539 //Looks like a hack but no, it's the way it is supposed to work ...
540 rl
= &ff_rl_intra_aic
;
543 s
->bdsp
.clear_block(block
);
546 av_log(s
->avctx
, AV_LOG_ERROR
, "run overflow at %dx%d i:%d\n", s
->mb_x
, s
->mb_y
, s
->mb_intra
);
556 if (s
->mb_intra
&& s
->h263_aic
) {
557 ff_h263_pred_acdc(s
, block
, n
);
560 s
->block_last_index
[n
] = i
;
564 static int h263_skip_b_part(MpegEncContext
*s
, int cbp
)
566 LOCAL_ALIGNED_16(int16_t, dblock
, [64]);
569 /* we have to set s->mb_intra to zero to decode B-part of PB-frame correctly
570 * but real value should be restored in order to be used later (in OBMC condition)
574 for (i
= 0; i
< 6; i
++) {
575 if (h263_decode_block(s
, dblock
, i
, cbp
&32) < 0)
583 static int h263_get_modb(GetBitContext
*gb
, int pb_frame
, int *cbpb
)
587 if (pb_frame
< 3) { // h.263 Annex G and i263 PB-frame
589 if (pb_frame
== 2 && c
)
591 } else { // h.263 Annex M improved PB-frame
592 mv
= get_unary(gb
, 0, 4) + 1;
597 *cbpb
= get_bits(gb
, 6);
601 int ff_h263_decode_mb(MpegEncContext
*s
,
602 int16_t block
[6][64])
604 int cbpc
, cbpy
, i
, cbp
, pred_x
, pred_y
, mx
, my
, dquant
;
606 const int xy
= s
->mb_x
+ s
->mb_y
* s
->mb_stride
;
607 int cbpb
= 0, pb_mv_count
= 0;
609 assert(!s
->h263_pred
);
611 if (s
->pict_type
== AV_PICTURE_TYPE_P
) {
613 if (get_bits1(&s
->gb
)) {
617 s
->block_last_index
[i
] = -1;
618 s
->mv_dir
= MV_DIR_FORWARD
;
619 s
->mv_type
= MV_TYPE_16X16
;
620 s
->current_picture
.mb_type
[xy
] = MB_TYPE_SKIP
| MB_TYPE_16x16
| MB_TYPE_L0
;
623 s
->mb_skipped
= !(s
->obmc
| s
->loop_filter
);
626 cbpc
= get_vlc2(&s
->gb
, ff_h263_inter_MCBPC_vlc
.table
, INTER_MCBPC_VLC_BITS
, 2);
628 av_log(s
->avctx
, AV_LOG_ERROR
, "cbpc damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
633 s
->bdsp
.clear_blocks(s
->block
[0]);
636 s
->mb_intra
= ((cbpc
& 4) != 0);
637 if (s
->mb_intra
) goto intra
;
639 if(s
->pb_frame
&& get_bits1(&s
->gb
))
640 pb_mv_count
= h263_get_modb(&s
->gb
, s
->pb_frame
, &cbpb
);
641 cbpy
= get_vlc2(&s
->gb
, ff_h263_cbpy_vlc
.table
, CBPY_VLC_BITS
, 1);
643 if(s
->alt_inter_vlc
==0 || (cbpc
& 3)!=3)
646 cbp
= (cbpc
& 3) | (cbpy
<< 2);
648 h263_decode_dquant(s
);
651 s
->mv_dir
= MV_DIR_FORWARD
;
652 if ((cbpc
& 16) == 0) {
653 s
->current_picture
.mb_type
[xy
] = MB_TYPE_16x16
| MB_TYPE_L0
;
654 /* 16x16 motion prediction */
655 s
->mv_type
= MV_TYPE_16X16
;
656 ff_h263_pred_motion(s
, 0, 0, &pred_x
, &pred_y
);
658 mx
= h263p_decode_umotion(s
, pred_x
);
660 mx
= ff_h263_decode_motion(s
, pred_x
, 1);
666 my
= h263p_decode_umotion(s
, pred_y
);
668 my
= ff_h263_decode_motion(s
, pred_y
, 1);
675 if (s
->umvplus
&& (mx
- pred_x
) == 1 && (my
- pred_y
) == 1)
676 skip_bits1(&s
->gb
); /* Bit stuffing to prevent PSC */
678 s
->current_picture
.mb_type
[xy
] = MB_TYPE_8x8
| MB_TYPE_L0
;
679 s
->mv_type
= MV_TYPE_8X8
;
681 mot_val
= ff_h263_pred_motion(s
, i
, 0, &pred_x
, &pred_y
);
683 mx
= h263p_decode_umotion(s
, pred_x
);
685 mx
= ff_h263_decode_motion(s
, pred_x
, 1);
690 my
= h263p_decode_umotion(s
, pred_y
);
692 my
= ff_h263_decode_motion(s
, pred_y
, 1);
697 if (s
->umvplus
&& (mx
- pred_x
) == 1 && (my
- pred_y
) == 1)
698 skip_bits1(&s
->gb
); /* Bit stuffing to prevent PSC */
703 } else if(s
->pict_type
==AV_PICTURE_TYPE_B
) {
705 const int stride
= s
->b8_stride
;
706 int16_t *mot_val0
= s
->current_picture
.motion_val
[0][2 * (s
->mb_x
+ s
->mb_y
* stride
)];
707 int16_t *mot_val1
= s
->current_picture
.motion_val
[1][2 * (s
->mb_x
+ s
->mb_y
* stride
)];
708 // const int mv_xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
711 mot_val0
[0 ]= mot_val0
[2 ]= mot_val0
[0+2*stride
]= mot_val0
[2+2*stride
]=
712 mot_val0
[1 ]= mot_val0
[3 ]= mot_val0
[1+2*stride
]= mot_val0
[3+2*stride
]=
713 mot_val1
[0 ]= mot_val1
[2 ]= mot_val1
[0+2*stride
]= mot_val1
[2+2*stride
]=
714 mot_val1
[1 ]= mot_val1
[3 ]= mot_val1
[1+2*stride
]= mot_val1
[3+2*stride
]= 0;
717 mb_type
= get_vlc2(&s
->gb
, h263_mbtype_b_vlc
.table
, H263_MBTYPE_B_VLC_BITS
, 2);
719 av_log(s
->avctx
, AV_LOG_ERROR
, "b mb_type damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
723 mb_type
= h263_mb_type_b_map
[ mb_type
];
726 s
->mb_intra
= IS_INTRA(mb_type
);
727 if(HAS_CBP(mb_type
)){
728 s
->bdsp
.clear_blocks(s
->block
[0]);
729 cbpc
= get_vlc2(&s
->gb
, cbpc_b_vlc
.table
, CBPC_B_VLC_BITS
, 1);
731 dquant
= IS_QUANT(mb_type
);
735 cbpy
= get_vlc2(&s
->gb
, ff_h263_cbpy_vlc
.table
, CBPY_VLC_BITS
, 1);
738 av_log(s
->avctx
, AV_LOG_ERROR
, "b cbpy damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
742 if(s
->alt_inter_vlc
==0 || (cbpc
& 3)!=3)
745 cbp
= (cbpc
& 3) | (cbpy
<< 2);
749 assert(!s
->mb_intra
);
751 if(IS_QUANT(mb_type
)){
752 h263_decode_dquant(s
);
755 if(IS_DIRECT(mb_type
)){
757 return AVERROR_INVALIDDATA
;
758 s
->mv_dir
= MV_DIR_FORWARD
| MV_DIR_BACKWARD
| MV_DIRECT
;
759 mb_type
|= ff_mpeg4_set_direct_mv(s
, 0, 0);
762 s
->mv_type
= MV_TYPE_16X16
;
765 if(USES_LIST(mb_type
, 0)){
766 int16_t *mot_val
= ff_h263_pred_motion(s
, 0, 0, &mx
, &my
);
767 s
->mv_dir
= MV_DIR_FORWARD
;
769 mx
= ff_h263_decode_motion(s
, mx
, 1);
770 my
= ff_h263_decode_motion(s
, my
, 1);
774 mot_val
[0 ]= mot_val
[2 ]= mot_val
[0+2*stride
]= mot_val
[2+2*stride
]= mx
;
775 mot_val
[1 ]= mot_val
[3 ]= mot_val
[1+2*stride
]= mot_val
[3+2*stride
]= my
;
778 if(USES_LIST(mb_type
, 1)){
779 int16_t *mot_val
= ff_h263_pred_motion(s
, 0, 1, &mx
, &my
);
780 s
->mv_dir
|= MV_DIR_BACKWARD
;
782 mx
= ff_h263_decode_motion(s
, mx
, 1);
783 my
= ff_h263_decode_motion(s
, my
, 1);
787 mot_val
[0 ]= mot_val
[2 ]= mot_val
[0+2*stride
]= mot_val
[2+2*stride
]= mx
;
788 mot_val
[1 ]= mot_val
[3 ]= mot_val
[1+2*stride
]= mot_val
[3+2*stride
]= my
;
792 s
->current_picture
.mb_type
[xy
] = mb_type
;
793 } else { /* I-Frame */
795 cbpc
= get_vlc2(&s
->gb
, ff_h263_intra_MCBPC_vlc
.table
, INTRA_MCBPC_VLC_BITS
, 2);
797 av_log(s
->avctx
, AV_LOG_ERROR
, "I cbpc damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
802 s
->bdsp
.clear_blocks(s
->block
[0]);
807 s
->current_picture
.mb_type
[xy
] = MB_TYPE_INTRA
;
809 s
->ac_pred
= get_bits1(&s
->gb
);
811 s
->current_picture
.mb_type
[xy
] = MB_TYPE_INTRA
| MB_TYPE_ACPRED
;
813 s
->h263_aic_dir
= get_bits1(&s
->gb
);
818 if(s
->pb_frame
&& get_bits1(&s
->gb
))
819 pb_mv_count
= h263_get_modb(&s
->gb
, s
->pb_frame
, &cbpb
);
820 cbpy
= get_vlc2(&s
->gb
, ff_h263_cbpy_vlc
.table
, CBPY_VLC_BITS
, 1);
822 av_log(s
->avctx
, AV_LOG_ERROR
, "I cbpy damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
825 cbp
= (cbpc
& 3) | (cbpy
<< 2);
827 h263_decode_dquant(s
);
830 pb_mv_count
+= !!s
->pb_frame
;
833 while(pb_mv_count
--){
834 ff_h263_decode_motion(s
, 0, 1);
835 ff_h263_decode_motion(s
, 0, 1);
838 /* decode each block */
839 for (i
= 0; i
< 6; i
++) {
840 if (h263_decode_block(s
, block
[i
], i
, cbp
&32) < 0)
845 if(s
->pb_frame
&& h263_skip_b_part(s
, cbpb
) < 0)
847 if(s
->obmc
&& !s
->mb_intra
){
848 if(s
->pict_type
== AV_PICTURE_TYPE_P
&& s
->mb_x
+1<s
->mb_width
&& s
->mb_num_left
!= 1)
853 /* per-MB end of slice check */
855 int v
= show_bits(&s
->gb
, 16);
857 if (get_bits_left(&s
->gb
) < 16) {
858 v
>>= 16 - get_bits_left(&s
->gb
);
868 /* most is hardcoded. should extend to handle all h263 streams */
869 int ff_h263_decode_picture_header(MpegEncContext
*s
)
871 int format
, width
, height
, i
;
874 align_get_bits(&s
->gb
);
876 startcode
= get_bits(&s
->gb
, 22-8);
878 for(i
= get_bits_left(&s
->gb
); i
>24; i
-=8) {
879 startcode
= ((startcode
<< 8) | get_bits(&s
->gb
, 8)) & 0x003FFFFF;
881 if(startcode
== 0x20)
885 if (startcode
!= 0x20) {
886 av_log(s
->avctx
, AV_LOG_ERROR
, "Bad picture start code\n");
889 /* temporal reference */
890 i
= get_bits(&s
->gb
, 8); /* picture timestamp */
891 if( (s
->picture_number
&~0xFF)+i
< s
->picture_number
)
893 s
->picture_number
= (s
->picture_number
&~0xFF) + i
;
895 /* PTYPE starts here */
896 if (get_bits1(&s
->gb
) != 1) {
898 av_log(s
->avctx
, AV_LOG_ERROR
, "Bad marker\n");
901 if (get_bits1(&s
->gb
) != 0) {
902 av_log(s
->avctx
, AV_LOG_ERROR
, "Bad H263 id\n");
903 return -1; /* h263 id */
905 skip_bits1(&s
->gb
); /* split screen off */
906 skip_bits1(&s
->gb
); /* camera off */
907 skip_bits1(&s
->gb
); /* freeze picture release off */
909 format
= get_bits(&s
->gb
, 3);
914 7 extended PTYPE (PLUSPTYPE)
917 if (format
!= 7 && format
!= 6) {
920 width
= ff_h263_format
[format
][0];
921 height
= ff_h263_format
[format
][1];
925 s
->pict_type
= AV_PICTURE_TYPE_I
+ get_bits1(&s
->gb
);
927 s
->h263_long_vectors
= get_bits1(&s
->gb
);
929 if (get_bits1(&s
->gb
) != 0) {
930 av_log(s
->avctx
, AV_LOG_ERROR
, "H263 SAC not supported\n");
931 return -1; /* SAC: off */
933 s
->obmc
= get_bits1(&s
->gb
); /* Advanced prediction mode */
934 s
->unrestricted_mv
= s
->h263_long_vectors
|| s
->obmc
;
936 s
->pb_frame
= get_bits1(&s
->gb
);
937 s
->chroma_qscale
= s
->qscale
= get_bits(&s
->gb
, 5);
938 skip_bits1(&s
->gb
); /* Continuous Presence Multipoint mode: off */
942 s
->avctx
->sample_aspect_ratio
= (AVRational
){12,11};
943 s
->avctx
->framerate
= (AVRational
){ 30000, 1001 };
949 ufep
= get_bits(&s
->gb
, 3); /* Update Full Extended PTYPE */
951 /* ufep other than 0 and 1 are reserved */
954 format
= get_bits(&s
->gb
, 3);
955 ff_dlog(s
->avctx
, "ufep=1, format: %d\n", format
);
956 s
->custom_pcf
= get_bits1(&s
->gb
);
957 s
->umvplus
= get_bits1(&s
->gb
); /* Unrestricted Motion Vector */
958 if (get_bits1(&s
->gb
) != 0) {
959 av_log(s
->avctx
, AV_LOG_ERROR
, "Syntax-based Arithmetic Coding (SAC) not supported\n");
961 s
->obmc
= get_bits1(&s
->gb
); /* Advanced prediction mode */
962 s
->h263_aic
= get_bits1(&s
->gb
); /* Advanced Intra Coding (AIC) */
963 s
->loop_filter
= get_bits1(&s
->gb
);
964 s
->unrestricted_mv
= s
->umvplus
|| s
->obmc
|| s
->loop_filter
;
966 s
->h263_slice_structured
= get_bits1(&s
->gb
);
967 if (get_bits1(&s
->gb
) != 0) {
968 av_log(s
->avctx
, AV_LOG_ERROR
, "Reference Picture Selection not supported\n");
970 if (get_bits1(&s
->gb
) != 0) {
971 av_log(s
->avctx
, AV_LOG_ERROR
, "Independent Segment Decoding not supported\n");
973 s
->alt_inter_vlc
= get_bits1(&s
->gb
);
974 s
->modified_quant
= get_bits1(&s
->gb
);
975 if(s
->modified_quant
)
976 s
->chroma_qscale_table
= ff_h263_chroma_qscale_table
;
978 skip_bits(&s
->gb
, 1); /* Prevent start code emulation */
980 skip_bits(&s
->gb
, 3); /* Reserved */
981 } else if (ufep
!= 0) {
982 av_log(s
->avctx
, AV_LOG_ERROR
, "Bad UFEP type (%d)\n", ufep
);
987 s
->pict_type
= get_bits(&s
->gb
, 3);
988 switch(s
->pict_type
){
989 case 0: s
->pict_type
= AV_PICTURE_TYPE_I
;break;
990 case 1: s
->pict_type
= AV_PICTURE_TYPE_P
;break;
991 case 2: s
->pict_type
= AV_PICTURE_TYPE_P
;s
->pb_frame
= 3;break;
992 case 3: s
->pict_type
= AV_PICTURE_TYPE_B
;break;
993 case 7: s
->pict_type
= AV_PICTURE_TYPE_I
;break; //ZYGO
997 skip_bits(&s
->gb
, 2);
998 s
->no_rounding
= get_bits1(&s
->gb
);
999 skip_bits(&s
->gb
, 4);
1001 /* Get the picture dimensions */
1004 /* Custom Picture Format (CPFMT) */
1005 s
->aspect_ratio_info
= get_bits(&s
->gb
, 4);
1006 ff_dlog(s
->avctx
, "aspect: %d\n", s
->aspect_ratio_info
);
1011 3 - 10:11 (525-type 4:3)
1012 4 - 16:11 (CIF 16:9)
1013 5 - 40:33 (525-type 16:9)
1016 width
= (get_bits(&s
->gb
, 9) + 1) * 4;
1018 height
= get_bits(&s
->gb
, 9) * 4;
1019 ff_dlog(s
->avctx
, "\nH.263+ Custom picture: %dx%d\n",width
,height
);
1020 if (s
->aspect_ratio_info
== FF_ASPECT_EXTENDED
) {
1021 /* aspected dimensions */
1022 s
->avctx
->sample_aspect_ratio
.num
= get_bits(&s
->gb
, 8);
1023 s
->avctx
->sample_aspect_ratio
.den
= get_bits(&s
->gb
, 8);
1025 s
->avctx
->sample_aspect_ratio
= ff_h263_pixel_aspect
[s
->aspect_ratio_info
];
1028 width
= ff_h263_format
[format
][0];
1029 height
= ff_h263_format
[format
][1];
1030 s
->avctx
->sample_aspect_ratio
= (AVRational
){12,11};
1032 if ((width
== 0) || (height
== 0))
1039 s
->avctx
->framerate
.num
= 1800000;
1040 s
->avctx
->framerate
.den
= 1000 + get_bits1(&s
->gb
);
1041 s
->avctx
->framerate
.den
*= get_bits(&s
->gb
, 7);
1042 if(s
->avctx
->framerate
.den
== 0){
1043 av_log(s
, AV_LOG_ERROR
, "zero framerate\n");
1046 gcd
= av_gcd(s
->avctx
->framerate
.den
, s
->avctx
->framerate
.num
);
1047 s
->avctx
->framerate
.den
/= gcd
;
1048 s
->avctx
->framerate
.num
/= gcd
;
1050 s
->avctx
->framerate
= (AVRational
){ 30000, 1001 };
1055 skip_bits(&s
->gb
, 2); //extended Temporal reference
1060 if(get_bits1(&s
->gb
)==0) /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
1063 if(s
->h263_slice_structured
){
1064 if (get_bits1(&s
->gb
) != 0) {
1065 av_log(s
->avctx
, AV_LOG_ERROR
, "rectangular slices not supported\n");
1067 if (get_bits1(&s
->gb
) != 0) {
1068 av_log(s
->avctx
, AV_LOG_ERROR
, "unordered slices not supported\n");
1073 s
->qscale
= get_bits(&s
->gb
, 5);
1076 s
->mb_width
= (s
->width
+ 15) / 16;
1077 s
->mb_height
= (s
->height
+ 15) / 16;
1078 s
->mb_num
= s
->mb_width
* s
->mb_height
;
1081 skip_bits(&s
->gb
, 3); /* Temporal reference for B-pictures */
1083 skip_bits(&s
->gb
, 2); //extended Temporal reference
1084 skip_bits(&s
->gb
, 2); /* Quantization information for B-pictures */
1087 if (s
->pict_type
!=AV_PICTURE_TYPE_B
) {
1088 s
->time
= s
->picture_number
;
1089 s
->pp_time
= s
->time
- s
->last_non_b_time
;
1090 s
->last_non_b_time
= s
->time
;
1092 s
->time
= s
->picture_number
;
1093 s
->pb_time
= s
->pp_time
- (s
->last_non_b_time
- s
->time
);
1094 if (s
->pp_time
<=s
->pb_time
||
1095 s
->pp_time
<= s
->pp_time
- s
->pb_time
||
1100 ff_mpeg4_init_direct_mv(s
);
1104 while (get_bits1(&s
->gb
) != 0) {
1105 skip_bits(&s
->gb
, 8);
1108 if(s
->h263_slice_structured
){
1109 if (get_bits1(&s
->gb
) != 1) {
1110 av_log(s
->avctx
, AV_LOG_ERROR
, "SEPB1 marker missing\n");
1114 ff_h263_decode_mba(s
);
1116 if (get_bits1(&s
->gb
) != 1) {
1117 av_log(s
->avctx
, AV_LOG_ERROR
, "SEPB2 marker missing\n");
1124 s
->y_dc_scale_table
=
1125 s
->c_dc_scale_table
= ff_aic_dc_scale_table
;
1127 s
->y_dc_scale_table
=
1128 s
->c_dc_scale_table
= ff_mpeg1_dc_scale_table
;
1131 ff_h263_show_pict_info(s
);
1132 if (s
->pict_type
== AV_PICTURE_TYPE_I
&& s
->codec_tag
== AV_RL32("ZYGO")){
1134 for(i
=0; i
<85; i
++) av_log(s
->avctx
, AV_LOG_DEBUG
, "%d", get_bits1(&s
->gb
));
1135 av_log(s
->avctx
, AV_LOG_DEBUG
, "\n");
1136 for(i
=0; i
<13; i
++){
1138 int v
= get_bits(&s
->gb
, 8);
1139 v
|= get_sbits(&s
->gb
, 8)<<8;
1140 av_log(s
->avctx
, AV_LOG_DEBUG
, " %5d", v
);
1142 av_log(s
->avctx
, AV_LOG_DEBUG
, "\n");
1144 for(i
=0; i
<50; i
++) av_log(s
->avctx
, AV_LOG_DEBUG
, "%d", get_bits1(&s
->gb
));