2 * H263/MPEG4 backend for ffmpeg encoder and 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 * ac prediction encoding, B-frame support, error resilience, optimizations,
9 * qpel decoding, gmc decoding, interlaced decoding
10 * by Michael Niedermayer <michaelni@gmx.at>
12 * This file is part of FFmpeg.
14 * FFmpeg is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU Lesser General Public
16 * License as published by the Free Software Foundation; either
17 * version 2.1 of the License, or (at your option) any later version.
19 * FFmpeg is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * Lesser General Public License for more details.
24 * You should have received a copy of the GNU Lesser General Public
25 * License along with FFmpeg; if not, write to the Free Software
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30 * @file libavcodec/h263.c
39 #include "mpegvideo.h"
45 #include "mpeg4video.h"
50 // The defines below define the number of bits that are read at once for
51 // reading vlc values. Changing these may improve speed and data cache needs
52 // be aware though that decreasing them may need the number of stages that is
53 // passed to get_vlc* to be increased.
55 #define H263_MBTYPE_B_VLC_BITS 6
56 #define CBPC_B_VLC_BITS 3
61 * Table of number of bits a motion vector component needs.
63 static uint8_t mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
66 * Minimal fcode that a motion vector component would need.
68 static uint8_t fcode_tab[MAX_MV*2+1];
71 * Minimal fcode that a motion vector component would need in umv.
72 * All entries in this table are 1.
74 static uint8_t umv_fcode_tab[MAX_MV*2+1];
76 //unified encoding tables for run length encoding of coefficients
77 //unified in the sense that the specification specifies the encoding in several steps.
78 static uint8_t uni_h263_intra_aic_rl_len [64*64*2*2];
79 static uint8_t uni_h263_inter_rl_len [64*64*2*2];
80 //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128 + (run)*256 + (level))
81 //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run) + (level)*64)
82 #define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level))
86 static uint8_t static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3];
89 int h263_get_picture_format(int width, int height)
91 if (width == 128 && height == 96)
93 else if (width == 176 && height == 144)
95 else if (width == 352 && height == 288)
97 else if (width == 704 && height == 576)
99 else if (width == 1408 && height == 1152)
105 void ff_h263_show_pict_info(MpegEncContext *s){
106 if(s->avctx->debug&FF_DEBUG_PICT_INFO){
107 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",
108 s->qscale, av_get_pict_type_char(s->pict_type),
109 s->gb.size_in_bits, 1-s->no_rounding,
110 s->obmc ? " AP" : "",
111 s->umvplus ? " UMV" : "",
112 s->h263_long_vectors ? " LONG" : "",
113 s->h263_plus ? " +" : "",
114 s->h263_aic ? " AIC" : "",
115 s->alt_inter_vlc ? " AIV" : "",
116 s->modified_quant ? " MQ" : "",
117 s->loop_filter ? " LOOP" : "",
118 s->h263_slice_structured ? " SS" : "",
119 s->avctx->time_base.den, s->avctx->time_base.num
127 * Returns the 4 bit value that specifies the given aspect ratio.
128 * This may be one of the standard aspect ratios or it specifies
129 * that the aspect will be stored explicitly later.
131 av_const int ff_h263_aspect_to_info(AVRational aspect){
134 if(aspect.num==0) aspect= (AVRational){1,1};
137 if(av_cmp_q(ff_h263_pixel_aspect[i], aspect) == 0){
142 return FF_ASPECT_EXTENDED;
145 void h263_encode_picture_header(MpegEncContext * s, int picture_number)
147 int format, coded_frame_rate, coded_frame_rate_base, i, temp_ref;
148 int best_clock_code=1;
150 int best_error= INT_MAX;
155 div= (s->avctx->time_base.num*1800000LL + 500LL*s->avctx->time_base.den) / ((1000LL+i)*s->avctx->time_base.den);
156 div= av_clip(div, 1, 127);
157 error= FFABS(s->avctx->time_base.num*1800000LL - (1000LL+i)*s->avctx->time_base.den*div);
158 if(error < best_error){
165 s->custom_pcf= best_clock_code!=1 || best_divisor!=60;
166 coded_frame_rate= 1800000;
167 coded_frame_rate_base= (1000+best_clock_code)*best_divisor;
169 align_put_bits(&s->pb);
171 /* Update the pointer to last GOB */
172 s->ptr_lastgob = put_bits_ptr(&s->pb);
173 put_bits(&s->pb, 22, 0x20); /* PSC */
174 temp_ref= s->picture_number * (int64_t)coded_frame_rate * s->avctx->time_base.num / //FIXME use timestamp
175 (coded_frame_rate_base * (int64_t)s->avctx->time_base.den);
176 put_sbits(&s->pb, 8, temp_ref); /* TemporalReference */
178 put_bits(&s->pb, 1, 1); /* marker */
179 put_bits(&s->pb, 1, 0); /* h263 id */
180 put_bits(&s->pb, 1, 0); /* split screen off */
181 put_bits(&s->pb, 1, 0); /* camera off */
182 put_bits(&s->pb, 1, 0); /* freeze picture release off */
184 format = h263_get_picture_format(s->width, s->height);
187 put_bits(&s->pb, 3, format);
188 put_bits(&s->pb, 1, (s->pict_type == FF_P_TYPE));
189 /* By now UMV IS DISABLED ON H.263v1, since the restrictions
190 of H.263v1 UMV implies to check the predicted MV after
191 calculation of the current MB to see if we're on the limits */
192 put_bits(&s->pb, 1, 0); /* Unrestricted Motion Vector: off */
193 put_bits(&s->pb, 1, 0); /* SAC: off */
194 put_bits(&s->pb, 1, s->obmc); /* Advanced Prediction */
195 put_bits(&s->pb, 1, 0); /* only I/P frames, no PB frame */
196 put_bits(&s->pb, 5, s->qscale);
197 put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
201 /* H.263 Plus PTYPE */
203 put_bits(&s->pb, 3, 7);
204 put_bits(&s->pb,3,ufep); /* Update Full Extended PTYPE */
206 put_bits(&s->pb,3,6); /* Custom Source Format */
208 put_bits(&s->pb, 3, format);
210 put_bits(&s->pb,1, s->custom_pcf);
211 put_bits(&s->pb,1, s->umvplus); /* Unrestricted Motion Vector */
212 put_bits(&s->pb,1,0); /* SAC: off */
213 put_bits(&s->pb,1,s->obmc); /* Advanced Prediction Mode */
214 put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */
215 put_bits(&s->pb,1,s->loop_filter); /* Deblocking Filter */
216 put_bits(&s->pb,1,s->h263_slice_structured); /* Slice Structured */
217 put_bits(&s->pb,1,0); /* Reference Picture Selection: off */
218 put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */
219 put_bits(&s->pb,1,s->alt_inter_vlc); /* Alternative Inter VLC */
220 put_bits(&s->pb,1,s->modified_quant); /* Modified Quantization: */
221 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
222 put_bits(&s->pb,3,0); /* Reserved */
224 put_bits(&s->pb, 3, s->pict_type == FF_P_TYPE);
226 put_bits(&s->pb,1,0); /* Reference Picture Resampling: off */
227 put_bits(&s->pb,1,0); /* Reduced-Resolution Update: off */
228 put_bits(&s->pb,1,s->no_rounding); /* Rounding Type */
229 put_bits(&s->pb,2,0); /* Reserved */
230 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
232 /* This should be here if PLUSPTYPE */
233 put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
236 /* Custom Picture Format (CPFMT) */
237 s->aspect_ratio_info= ff_h263_aspect_to_info(s->avctx->sample_aspect_ratio);
239 put_bits(&s->pb,4,s->aspect_ratio_info);
240 put_bits(&s->pb,9,(s->width >> 2) - 1);
241 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
242 put_bits(&s->pb,9,(s->height >> 2));
243 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
244 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
245 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
250 put_bits(&s->pb, 1, best_clock_code);
251 put_bits(&s->pb, 7, best_divisor);
253 put_sbits(&s->pb, 2, temp_ref>>8);
256 /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
258 // put_bits(&s->pb,1,1); /* Limited according tables of Annex D */
259 //FIXME check actual requested range
260 put_bits(&s->pb,2,1); /* unlimited */
261 if(s->h263_slice_structured)
262 put_bits(&s->pb,2,0); /* no weird submodes */
264 put_bits(&s->pb, 5, s->qscale);
267 put_bits(&s->pb, 1, 0); /* no PEI */
269 if(s->h263_slice_structured){
270 put_bits(&s->pb, 1, 1);
272 assert(s->mb_x == 0 && s->mb_y == 0);
273 ff_h263_encode_mba(s);
275 put_bits(&s->pb, 1, 1);
280 s->c_dc_scale_table= ff_aic_dc_scale_table;
283 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
288 * Encodes a group of blocks header.
290 void h263_encode_gob_header(MpegEncContext * s, int mb_line)
292 put_bits(&s->pb, 17, 1); /* GBSC */
294 if(s->h263_slice_structured){
295 put_bits(&s->pb, 1, 1);
297 ff_h263_encode_mba(s);
300 put_bits(&s->pb, 1, 1);
301 put_bits(&s->pb, 5, s->qscale); /* GQUANT */
302 put_bits(&s->pb, 1, 1);
303 put_bits(&s->pb, 2, s->pict_type == FF_I_TYPE); /* GFID */
305 int gob_number= mb_line / s->gob_index;
307 put_bits(&s->pb, 5, gob_number); /* GN */
308 put_bits(&s->pb, 2, s->pict_type == FF_I_TYPE); /* GFID */
309 put_bits(&s->pb, 5, s->qscale); /* GQUANT */
314 * modify qscale so that encoding is acually possible in h263 (limit difference to -2..2)
316 void ff_clean_h263_qscales(MpegEncContext *s){
318 int8_t * const qscale_table= s->current_picture.qscale_table;
320 ff_init_qscale_tab(s);
322 for(i=1; i<s->mb_num; i++){
323 if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i-1] ] >2)
324 qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i-1] ]+2;
326 for(i=s->mb_num-2; i>=0; i--){
327 if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i+1] ] >2)
328 qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i+1] ]+2;
331 if(s->codec_id != CODEC_ID_H263P){
332 for(i=1; i<s->mb_num; i++){
333 int mb_xy= s->mb_index2xy[i];
335 if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&CANDIDATE_MB_TYPE_INTER4V)){
336 s->mb_type[mb_xy]|= CANDIDATE_MB_TYPE_INTER;
342 #endif //CONFIG_ENCODERS
344 #define tab_size ((signed)FF_ARRAY_ELEMS(s->direct_scale_mv[0]))
345 #define tab_bias (tab_size/2)
347 //used by mpeg4 and rv10 decoder
348 void ff_mpeg4_init_direct_mv(MpegEncContext *s){
350 for(i=0; i<tab_size; i++){
351 s->direct_scale_mv[0][i] = (i-tab_bias)*s->pb_time/s->pp_time;
352 s->direct_scale_mv[1][i] = (i-tab_bias)*(s->pb_time-s->pp_time)/s->pp_time;
356 static inline void ff_mpeg4_set_one_direct_mv(MpegEncContext *s, int mx, int my, int i){
357 int xy= s->block_index[i];
358 uint16_t time_pp= s->pp_time;
359 uint16_t time_pb= s->pb_time;
362 p_mx= s->next_picture.motion_val[0][xy][0];
363 if((unsigned)(p_mx + tab_bias) < tab_size){
364 s->mv[0][i][0] = s->direct_scale_mv[0][p_mx + tab_bias] + mx;
365 s->mv[1][i][0] = mx ? s->mv[0][i][0] - p_mx
366 : s->direct_scale_mv[1][p_mx + tab_bias];
368 s->mv[0][i][0] = p_mx*time_pb/time_pp + mx;
369 s->mv[1][i][0] = mx ? s->mv[0][i][0] - p_mx
370 : p_mx*(time_pb - time_pp)/time_pp;
372 p_my= s->next_picture.motion_val[0][xy][1];
373 if((unsigned)(p_my + tab_bias) < tab_size){
374 s->mv[0][i][1] = s->direct_scale_mv[0][p_my + tab_bias] + my;
375 s->mv[1][i][1] = my ? s->mv[0][i][1] - p_my
376 : s->direct_scale_mv[1][p_my + tab_bias];
378 s->mv[0][i][1] = p_my*time_pb/time_pp + my;
379 s->mv[1][i][1] = my ? s->mv[0][i][1] - p_my
380 : p_my*(time_pb - time_pp)/time_pp;
389 * @return the mb_type
391 int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my){
392 const int mb_index= s->mb_x + s->mb_y*s->mb_stride;
393 const int colocated_mb_type= s->next_picture.mb_type[mb_index];
398 //FIXME avoid divides
399 // try special case with shifts for 1 and 3 B-frames?
401 if(IS_8X8(colocated_mb_type)){
402 s->mv_type = MV_TYPE_8X8;
404 ff_mpeg4_set_one_direct_mv(s, mx, my, i);
406 return MB_TYPE_DIRECT2 | MB_TYPE_8x8 | MB_TYPE_L0L1;
407 } else if(IS_INTERLACED(colocated_mb_type)){
408 s->mv_type = MV_TYPE_FIELD;
410 int field_select= s->next_picture.ref_index[0][s->block_index[2*i]];
411 s->field_select[0][i]= field_select;
412 s->field_select[1][i]= i;
413 if(s->top_field_first){
414 time_pp= s->pp_field_time - field_select + i;
415 time_pb= s->pb_field_time - field_select + i;
417 time_pp= s->pp_field_time + field_select - i;
418 time_pb= s->pb_field_time + field_select - i;
420 s->mv[0][i][0] = s->p_field_mv_table[i][0][mb_index][0]*time_pb/time_pp + mx;
421 s->mv[0][i][1] = s->p_field_mv_table[i][0][mb_index][1]*time_pb/time_pp + my;
422 s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->p_field_mv_table[i][0][mb_index][0]
423 : s->p_field_mv_table[i][0][mb_index][0]*(time_pb - time_pp)/time_pp;
424 s->mv[1][i][1] = my ? s->mv[0][i][1] - s->p_field_mv_table[i][0][mb_index][1]
425 : s->p_field_mv_table[i][0][mb_index][1]*(time_pb - time_pp)/time_pp;
427 return MB_TYPE_DIRECT2 | MB_TYPE_16x8 | MB_TYPE_L0L1 | MB_TYPE_INTERLACED;
429 ff_mpeg4_set_one_direct_mv(s, mx, my, 0);
430 s->mv[0][1][0] = s->mv[0][2][0] = s->mv[0][3][0] = s->mv[0][0][0];
431 s->mv[0][1][1] = s->mv[0][2][1] = s->mv[0][3][1] = s->mv[0][0][1];
432 s->mv[1][1][0] = s->mv[1][2][0] = s->mv[1][3][0] = s->mv[1][0][0];
433 s->mv[1][1][1] = s->mv[1][2][1] = s->mv[1][3][1] = s->mv[1][0][1];
434 if((s->avctx->workaround_bugs & FF_BUG_DIRECT_BLOCKSIZE) || !s->quarter_sample)
435 s->mv_type= MV_TYPE_16X16;
437 s->mv_type= MV_TYPE_8X8;
438 return MB_TYPE_DIRECT2 | MB_TYPE_16x16 | MB_TYPE_L0L1; //Note see prev line
442 void ff_h263_update_motion_val(MpegEncContext * s){
443 const int mb_xy = s->mb_y * s->mb_stride + s->mb_x;
444 //FIXME a lot of that is only needed for !low_delay
445 const int wrap = s->b8_stride;
446 const int xy = s->block_index[0];
448 s->current_picture.mbskip_table[mb_xy]= s->mb_skipped;
450 if(s->mv_type != MV_TYPE_8X8){
451 int motion_x, motion_y;
455 } else if (s->mv_type == MV_TYPE_16X16) {
456 motion_x = s->mv[0][0][0];
457 motion_y = s->mv[0][0][1];
458 } else /*if (s->mv_type == MV_TYPE_FIELD)*/ {
460 motion_x = s->mv[0][0][0] + s->mv[0][1][0];
461 motion_y = s->mv[0][0][1] + s->mv[0][1][1];
462 motion_x = (motion_x>>1) | (motion_x&1);
464 s->p_field_mv_table[i][0][mb_xy][0]= s->mv[0][i][0];
465 s->p_field_mv_table[i][0][mb_xy][1]= s->mv[0][i][1];
467 s->current_picture.ref_index[0][xy ]=
468 s->current_picture.ref_index[0][xy + 1]= s->field_select[0][0];
469 s->current_picture.ref_index[0][xy + wrap ]=
470 s->current_picture.ref_index[0][xy + wrap + 1]= s->field_select[0][1];
473 /* no update if 8X8 because it has been done during parsing */
474 s->current_picture.motion_val[0][xy][0] = motion_x;
475 s->current_picture.motion_val[0][xy][1] = motion_y;
476 s->current_picture.motion_val[0][xy + 1][0] = motion_x;
477 s->current_picture.motion_val[0][xy + 1][1] = motion_y;
478 s->current_picture.motion_val[0][xy + wrap][0] = motion_x;
479 s->current_picture.motion_val[0][xy + wrap][1] = motion_y;
480 s->current_picture.motion_val[0][xy + 1 + wrap][0] = motion_x;
481 s->current_picture.motion_val[0][xy + 1 + wrap][1] = motion_y;
484 if(s->encoding){ //FIXME encoding MUST be cleaned up
485 if (s->mv_type == MV_TYPE_8X8)
486 s->current_picture.mb_type[mb_xy]= MB_TYPE_L0 | MB_TYPE_8x8;
488 s->current_picture.mb_type[mb_xy]= MB_TYPE_INTRA;
490 s->current_picture.mb_type[mb_xy]= MB_TYPE_L0 | MB_TYPE_16x16;
496 static const int dquant_code[5]= {1,0,9,2,3};
499 * encodes a 8x8 block.
500 * @param block the 8x8 block
501 * @param n block index (0-3 are luma, 4-5 are chroma)
503 static void h263_encode_block(MpegEncContext * s, DCTELEM * block, int n)
505 int level, run, last, i, j, last_index, last_non_zero, sign, slevel, code;
509 if (s->mb_intra && !s->h263_aic) {
512 /* 255 cannot be represented, so we clamp */
517 /* 0 cannot be represented also */
518 else if (level < 1) {
522 if (level == 128) //FIXME check rv10
523 put_bits(&s->pb, 8, 0xff);
525 put_bits(&s->pb, 8, level);
529 if (s->h263_aic && s->mb_intra)
532 if(s->alt_inter_vlc && !s->mb_intra){
534 int inter_vlc_bits=0;
538 last_index = s->block_last_index[n];
539 last_non_zero = i - 1;
540 for (; i <= last_index; i++) {
541 j = s->intra_scantable.permutated[i];
544 run = i - last_non_zero - 1;
545 last = (i == last_index);
547 if(level<0) level= -level;
549 code = get_rl_index(rl, last, run, level);
550 aic_code = get_rl_index(&rl_intra_aic, last, run, level);
551 inter_vlc_bits += rl->table_vlc[code][1]+1;
552 aic_vlc_bits += rl_intra_aic.table_vlc[aic_code][1]+1;
555 inter_vlc_bits += 1+6+8-1;
557 if (aic_code == rl_intra_aic.n) {
558 aic_vlc_bits += 1+6+8-1;
559 wrong_pos += run + 1;
561 wrong_pos += wrong_run[aic_code];
566 if(aic_vlc_bits < inter_vlc_bits && wrong_pos > 63)
572 last_index = s->block_last_index[n];
573 last_non_zero = i - 1;
574 for (; i <= last_index; i++) {
575 j = s->intra_scantable.permutated[i];
578 run = i - last_non_zero - 1;
579 last = (i == last_index);
586 code = get_rl_index(rl, last, run, level);
587 put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
589 if(!CONFIG_FLV_ENCODER || s->h263_flv <= 1){
590 put_bits(&s->pb, 1, last);
591 put_bits(&s->pb, 6, run);
596 put_sbits(&s->pb, 8, slevel);
598 put_bits(&s->pb, 8, 128);
599 put_sbits(&s->pb, 5, slevel);
600 put_sbits(&s->pb, 6, slevel>>5);
603 ff_flv2_encode_ac_esc(&s->pb, slevel, level, run, last);
606 put_bits(&s->pb, 1, sign);
613 /* Encode MV differences on H.263+ with Unrestricted MV mode */
614 static void h263p_encode_umotion(MpegEncContext * s, int val)
624 put_bits(&s->pb, 1, 1);
626 put_bits(&s->pb, 3, 0);
628 put_bits(&s->pb, 3, 2);
631 sval = ((val < 0) ? (short)(-val):(short)val);
634 while (temp_val != 0) {
635 temp_val = temp_val >> 1;
641 tcode = (sval & (1 << (i-1))) >> (i-1);
642 tcode = (tcode << 1) | 1;
643 code = (code << 2) | tcode;
646 code = ((code << 1) | (val < 0)) << 1;
647 put_bits(&s->pb, (2*n_bits)+1, code);
651 static int h263_pred_dc(MpegEncContext * s, int n, int16_t **dc_val_ptr)
653 int x, y, wrap, a, c, pred_dc;
656 /* find prediction */
658 x = 2 * s->mb_x + (n & 1);
659 y = 2 * s->mb_y + ((n & 2) >> 1);
661 dc_val = s->dc_val[0];
666 dc_val = s->dc_val[n - 4 + 1];
671 a = dc_val[(x - 1) + (y) * wrap];
672 c = dc_val[(x) + (y - 1) * wrap];
674 /* No prediction outside GOB boundary */
675 if(s->first_slice_line && n!=3){
677 if(n!=1 && s->mb_x == s->resync_mb_x) a= 1024;
679 /* just DC prediction */
680 if (a != 1024 && c != 1024)
681 pred_dc = (a + c) >> 1;
687 /* we assume pred is positive */
688 *dc_val_ptr = &dc_val[x + y * wrap];
692 void h263_encode_mb(MpegEncContext * s,
693 DCTELEM block[6][64],
694 int motion_x, int motion_y)
696 int cbpc, cbpy, i, cbp, pred_x, pred_y;
698 int16_t rec_intradc[6];
700 const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1);
704 cbp= get_p_cbp(s, block, motion_x, motion_y);
706 if ((cbp | motion_x | motion_y | s->dquant | (s->mv_type - MV_TYPE_16X16)) == 0) {
707 /* skip macroblock */
708 put_bits(&s->pb, 1, 1);
709 if(interleaved_stats){
717 put_bits(&s->pb, 1, 0); /* mb coded */
721 if(s->alt_inter_vlc==0 || cbpc!=3)
723 if(s->dquant) cbpc+= 8;
724 if(s->mv_type==MV_TYPE_16X16){
726 inter_MCBPC_bits[cbpc],
727 inter_MCBPC_code[cbpc]);
729 put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
731 put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
733 if(interleaved_stats){
734 s->misc_bits+= get_bits_diff(s);
737 /* motion vectors: 16x16 mode */
738 h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
741 ff_h263_encode_motion_vector(s, motion_x - pred_x,
742 motion_y - pred_y, 1);
745 h263p_encode_umotion(s, motion_x - pred_x);
746 h263p_encode_umotion(s, motion_y - pred_y);
747 if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
748 /* To prevent Start Code emulation */
749 put_bits(&s->pb,1,1);
753 inter_MCBPC_bits[cbpc+16],
754 inter_MCBPC_code[cbpc+16]);
755 put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
757 put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
759 if(interleaved_stats){
760 s->misc_bits+= get_bits_diff(s);
764 /* motion vectors: 8x8 mode*/
765 h263_pred_motion(s, i, 0, &pred_x, &pred_y);
767 motion_x= s->current_picture.motion_val[0][ s->block_index[i] ][0];
768 motion_y= s->current_picture.motion_val[0][ s->block_index[i] ][1];
770 ff_h263_encode_motion_vector(s, motion_x - pred_x,
771 motion_y - pred_y, 1);
774 h263p_encode_umotion(s, motion_x - pred_x);
775 h263p_encode_umotion(s, motion_y - pred_y);
776 if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
777 /* To prevent Start Code emulation */
778 put_bits(&s->pb,1,1);
783 if(interleaved_stats){
784 s->mv_bits+= get_bits_diff(s);
793 int16_t level = block[i][0];
796 if(i<4) scale= s->y_dc_scale;
797 else scale= s->c_dc_scale;
799 pred_dc = h263_pred_dc(s, i, &dc_ptr[i]);
803 level = (level + (scale>>1))/scale;
805 level = (level - (scale>>1))/scale;
807 /* AIC can change CBP */
808 if (level == 0 && s->block_last_index[i] == 0)
809 s->block_last_index[i] = -1;
811 if(!s->modified_quant){
814 else if (level > 127)
820 rec_intradc[i] = scale*level + pred_dc;
823 //if ((rec_intradc[i] % 2) == 0)
826 if (rec_intradc[i] < 0)
828 else if (rec_intradc[i] > 2047)
829 rec_intradc[i] = 2047;
831 /* Update AC/DC tables */
832 *dc_ptr[i] = rec_intradc[i];
833 if (s->block_last_index[i] >= 0)
839 if (s->block_last_index[i] >= 1)
845 if (s->pict_type == FF_I_TYPE) {
846 if(s->dquant) cbpc+=4;
848 intra_MCBPC_bits[cbpc],
849 intra_MCBPC_code[cbpc]);
851 if(s->dquant) cbpc+=8;
852 put_bits(&s->pb, 1, 0); /* mb coded */
854 inter_MCBPC_bits[cbpc + 4],
855 inter_MCBPC_code[cbpc + 4]);
858 /* XXX: currently, we do not try to use ac prediction */
859 put_bits(&s->pb, 1, 0); /* no AC prediction */
862 put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
864 put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
866 if(interleaved_stats){
867 s->misc_bits+= get_bits_diff(s);
872 /* encode each block */
873 h263_encode_block(s, block[i], i);
875 /* Update INTRADC for decoding */
876 if (s->h263_aic && s->mb_intra) {
877 block[i][0] = rec_intradc[i];
882 if(interleaved_stats){
884 s->p_tex_bits+= get_bits_diff(s);
887 s->i_tex_bits+= get_bits_diff(s);
894 void ff_h263_loop_filter(MpegEncContext * s){
896 const int linesize = s->linesize;
897 const int uvlinesize= s->uvlinesize;
898 const int xy = s->mb_y * s->mb_stride + s->mb_x;
899 uint8_t *dest_y = s->dest[0];
900 uint8_t *dest_cb= s->dest[1];
901 uint8_t *dest_cr= s->dest[2];
903 // if(s->pict_type==FF_B_TYPE && !s->readable) return;
909 if(!IS_SKIP(s->current_picture.mb_type[xy])){
911 s->dsp.h263_v_loop_filter(dest_y+8*linesize , linesize, qp_c);
912 s->dsp.h263_v_loop_filter(dest_y+8*linesize+8, linesize, qp_c);
917 int qp_dt, qp_tt, qp_tc;
919 if(IS_SKIP(s->current_picture.mb_type[xy-s->mb_stride]))
922 qp_tt= s->current_picture.qscale_table[xy-s->mb_stride];
930 const int chroma_qp= s->chroma_qscale_table[qp_tc];
931 s->dsp.h263_v_loop_filter(dest_y , linesize, qp_tc);
932 s->dsp.h263_v_loop_filter(dest_y+8, linesize, qp_tc);
934 s->dsp.h263_v_loop_filter(dest_cb , uvlinesize, chroma_qp);
935 s->dsp.h263_v_loop_filter(dest_cr , uvlinesize, chroma_qp);
939 s->dsp.h263_h_loop_filter(dest_y-8*linesize+8 , linesize, qp_tt);
942 if(qp_tt || IS_SKIP(s->current_picture.mb_type[xy-1-s->mb_stride]))
945 qp_dt= s->current_picture.qscale_table[xy-1-s->mb_stride];
948 const int chroma_qp= s->chroma_qscale_table[qp_dt];
949 s->dsp.h263_h_loop_filter(dest_y -8*linesize , linesize, qp_dt);
950 s->dsp.h263_h_loop_filter(dest_cb-8*uvlinesize, uvlinesize, chroma_qp);
951 s->dsp.h263_h_loop_filter(dest_cr-8*uvlinesize, uvlinesize, chroma_qp);
957 s->dsp.h263_h_loop_filter(dest_y +8, linesize, qp_c);
958 if(s->mb_y + 1 == s->mb_height)
959 s->dsp.h263_h_loop_filter(dest_y+8*linesize+8, linesize, qp_c);
964 if(qp_c || IS_SKIP(s->current_picture.mb_type[xy-1]))
967 qp_lc= s->current_picture.qscale_table[xy-1];
970 s->dsp.h263_h_loop_filter(dest_y, linesize, qp_lc);
971 if(s->mb_y + 1 == s->mb_height){
972 const int chroma_qp= s->chroma_qscale_table[qp_lc];
973 s->dsp.h263_h_loop_filter(dest_y +8* linesize, linesize, qp_lc);
974 s->dsp.h263_h_loop_filter(dest_cb , uvlinesize, chroma_qp);
975 s->dsp.h263_h_loop_filter(dest_cr , uvlinesize, chroma_qp);
981 static void h263_pred_acdc(MpegEncContext * s, DCTELEM *block, int n)
983 int x, y, wrap, a, c, pred_dc, scale, i;
984 int16_t *dc_val, *ac_val, *ac_val1;
986 /* find prediction */
988 x = 2 * s->mb_x + (n & 1);
989 y = 2 * s->mb_y + (n>> 1);
991 dc_val = s->dc_val[0];
992 ac_val = s->ac_val[0][0];
993 scale = s->y_dc_scale;
998 dc_val = s->dc_val[n - 4 + 1];
999 ac_val = s->ac_val[n - 4 + 1][0];
1000 scale = s->c_dc_scale;
1003 ac_val += ((y) * wrap + (x)) * 16;
1009 a = dc_val[(x - 1) + (y) * wrap];
1010 c = dc_val[(x) + (y - 1) * wrap];
1012 /* No prediction outside GOB boundary */
1013 if(s->first_slice_line && n!=3){
1015 if(n!=1 && s->mb_x == s->resync_mb_x) a= 1024;
1020 if (s->h263_aic_dir) {
1021 /* left prediction */
1025 block[s->dsp.idct_permutation[i<<3]] += ac_val[i];
1030 /* top prediction */
1032 ac_val -= 16 * wrap;
1034 block[s->dsp.idct_permutation[i ]] += ac_val[i + 8];
1040 /* just DC prediction */
1041 if (a != 1024 && c != 1024)
1042 pred_dc = (a + c) >> 1;
1049 /* we assume pred is positive */
1050 block[0]=block[0]*scale + pred_dc;
1057 /* Update AC/DC tables */
1058 dc_val[(x) + (y) * wrap] = block[0];
1062 ac_val1[i ] = block[s->dsp.idct_permutation[i<<3]];
1065 ac_val1[8 + i] = block[s->dsp.idct_permutation[i ]];
1068 int16_t *h263_pred_motion(MpegEncContext * s, int block, int dir,
1072 int16_t *A, *B, *C, (*mot_val)[2];
1073 static const int off[4]= {2, 1, 1, -1};
1075 wrap = s->b8_stride;
1076 mot_val = s->current_picture.motion_val[dir] + s->block_index[block];
1079 /* special case for first (slice) line */
1080 if (s->first_slice_line && block<3) {
1081 // we can't just change some MVs to simulate that as we need them for the B frames (and ME)
1082 // and if we ever support non rectangular objects than we need to do a few ifs here anyway :(
1083 if(block==0){ //most common case
1084 if(s->mb_x == s->resync_mb_x){ //rare
1086 }else if(s->mb_x + 1 == s->resync_mb_x && s->h263_pred){ //rare
1087 C = mot_val[off[block] - wrap];
1092 *px = mid_pred(A[0], 0, C[0]);
1093 *py = mid_pred(A[1], 0, C[1]);
1100 if(s->mb_x + 1 == s->resync_mb_x && s->h263_pred){ //rare
1101 C = mot_val[off[block] - wrap];
1102 *px = mid_pred(A[0], 0, C[0]);
1103 *py = mid_pred(A[1], 0, C[1]);
1108 }else{ /* block==2*/
1109 B = mot_val[ - wrap];
1110 C = mot_val[off[block] - wrap];
1111 if(s->mb_x == s->resync_mb_x) //rare
1114 *px = mid_pred(A[0], B[0], C[0]);
1115 *py = mid_pred(A[1], B[1], C[1]);
1118 B = mot_val[ - wrap];
1119 C = mot_val[off[block] - wrap];
1120 *px = mid_pred(A[0], B[0], C[0]);
1121 *py = mid_pred(A[1], B[1], C[1]);
1128 /***************************************************/
1129 void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code)
1131 int range, l, bit_size, sign, code, bits;
1136 put_bits(&s->pb, mvtab[code][1], mvtab[code][0]);
1138 bit_size = f_code - 1;
1139 range = 1 << bit_size;
1140 /* modulo encoding */
1141 l= INT_BIT - 6 - bit_size;
1144 val= (val^sign)-sign;
1148 code = (val >> bit_size) + 1;
1149 bits = val & (range - 1);
1151 put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign);
1153 put_bits(&s->pb, bit_size, bits);
1158 static void init_mv_penalty_and_fcode(MpegEncContext *s)
1163 for(f_code=1; f_code<=MAX_FCODE; f_code++){
1164 for(mv=-MAX_MV; mv<=MAX_MV; mv++){
1167 if(mv==0) len= mvtab[0][1];
1169 int val, bit_size, code;
1171 bit_size = f_code - 1;
1177 code = (val >> bit_size) + 1;
1179 len= mvtab[code][1] + 1 + bit_size;
1181 len= mvtab[32][1] + av_log2(code>>5) + 2 + bit_size;
1185 mv_penalty[f_code][mv+MAX_MV]= len;
1189 for(f_code=MAX_FCODE; f_code>0; f_code--){
1190 for(mv=-(16<<f_code); mv<(16<<f_code); mv++){
1191 fcode_tab[mv+MAX_MV]= f_code;
1195 for(mv=0; mv<MAX_MV*2+1; mv++){
1196 umv_fcode_tab[mv]= 1;
1200 static void init_uni_h263_rl_tab(RLTable *rl, uint32_t *bits_tab, uint8_t *len_tab){
1201 int slevel, run, last;
1203 assert(MAX_LEVEL >= 64);
1204 assert(MAX_RUN >= 63);
1206 for(slevel=-64; slevel<64; slevel++){
1207 if(slevel==0) continue;
1208 for(run=0; run<64; run++){
1209 for(last=0; last<=1; last++){
1210 const int index= UNI_MPEG4_ENC_INDEX(last, run, slevel+64);
1211 int level= slevel < 0 ? -slevel : slevel;
1212 int sign= slevel < 0 ? 1 : 0;
1213 int bits, len, code;
1215 len_tab[index]= 100;
1218 code= get_rl_index(rl, last, run, level);
1219 bits= rl->table_vlc[code][0];
1220 len= rl->table_vlc[code][1];
1221 bits=bits*2+sign; len++;
1223 if(code!=rl->n && len < len_tab[index]){
1224 if(bits_tab) bits_tab[index]= bits;
1225 len_tab [index]= len;
1228 bits= rl->table_vlc[rl->n][0];
1229 len = rl->table_vlc[rl->n][1];
1230 bits=bits*2+last; len++;
1231 bits=bits*64+run; len+=6;
1232 bits=bits*256+(level&0xff); len+=8;
1234 if(len < len_tab[index]){
1235 if(bits_tab) bits_tab[index]= bits;
1236 len_tab [index]= len;
1243 void h263_encode_init(MpegEncContext *s)
1245 static int done = 0;
1250 init_rl(&rl_inter, static_rl_table_store[0]);
1251 init_rl(&rl_intra_aic, static_rl_table_store[1]);
1253 init_uni_h263_rl_tab(&rl_intra_aic, NULL, uni_h263_intra_aic_rl_len);
1254 init_uni_h263_rl_tab(&rl_inter , NULL, uni_h263_inter_rl_len);
1256 init_mv_penalty_and_fcode(s);
1258 s->me.mv_penalty= mv_penalty; //FIXME exact table for msmpeg4 & h263p
1260 s->intra_ac_vlc_length =s->inter_ac_vlc_length = uni_h263_inter_rl_len;
1261 s->intra_ac_vlc_last_length=s->inter_ac_vlc_last_length= uni_h263_inter_rl_len + 128*64;
1263 s->intra_ac_vlc_length = uni_h263_intra_aic_rl_len;
1264 s->intra_ac_vlc_last_length= uni_h263_intra_aic_rl_len + 128*64;
1266 s->ac_esc_length= 7+1+6+8;
1268 // use fcodes >1 only for mpeg4 & h263 & h263p FIXME
1269 switch(s->codec_id){
1270 case CODEC_ID_MPEG4:
1271 s->fcode_tab= fcode_tab;
1273 case CODEC_ID_H263P:
1275 s->fcode_tab= umv_fcode_tab;
1276 if(s->modified_quant){
1277 s->min_qcoeff= -2047;
1278 s->max_qcoeff= 2047;
1280 s->min_qcoeff= -127;
1284 //Note for mpeg4 & h263 the dc-scale table will be set per frame as needed later
1286 if (s->h263_flv > 1) {
1287 s->min_qcoeff= -1023;
1288 s->max_qcoeff= 1023;
1290 s->min_qcoeff= -127;
1293 s->y_dc_scale_table=
1294 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
1296 default: //nothing needed - default table already set in mpegvideo.c
1297 s->min_qcoeff= -127;
1299 s->y_dc_scale_table=
1300 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
1303 #endif //CONFIG_ENCODERS
1305 /***********************************************/
1308 VLC intra_MCBPC_vlc;
1309 VLC inter_MCBPC_vlc;
1312 static VLC h263_mbtype_b_vlc;
1313 static VLC cbpc_b_vlc;
1317 /* XXX: find a better solution to handle static init */
1318 void h263_decode_init_vlc(MpegEncContext *s)
1320 static int done = 0;
1325 INIT_VLC_STATIC(&intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 9,
1326 intra_MCBPC_bits, 1, 1,
1327 intra_MCBPC_code, 1, 1, 72);
1328 INIT_VLC_STATIC(&inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 28,
1329 inter_MCBPC_bits, 1, 1,
1330 inter_MCBPC_code, 1, 1, 198);
1331 INIT_VLC_STATIC(&cbpy_vlc, CBPY_VLC_BITS, 16,
1332 &cbpy_tab[0][1], 2, 1,
1333 &cbpy_tab[0][0], 2, 1, 64);
1334 INIT_VLC_STATIC(&mv_vlc, MV_VLC_BITS, 33,
1336 &mvtab[0][0], 2, 1, 538);
1337 init_rl(&rl_inter, static_rl_table_store[0]);
1338 init_rl(&rl_intra_aic, static_rl_table_store[1]);
1339 INIT_VLC_RL(rl_inter, 554);
1340 INIT_VLC_RL(rl_intra_aic, 554);
1341 INIT_VLC_STATIC(&h263_mbtype_b_vlc, H263_MBTYPE_B_VLC_BITS, 15,
1342 &h263_mbtype_b_tab[0][1], 2, 1,
1343 &h263_mbtype_b_tab[0][0], 2, 1, 80);
1344 INIT_VLC_STATIC(&cbpc_b_vlc, CBPC_B_VLC_BITS, 4,
1345 &cbpc_b_tab[0][1], 2, 1,
1346 &cbpc_b_tab[0][0], 2, 1, 8);
1351 * Get the GOB height based on picture height.
1353 int ff_h263_get_gob_height(MpegEncContext *s){
1354 if (s->height <= 400)
1356 else if (s->height <= 800)
1362 int ff_h263_decode_mba(MpegEncContext *s)
1367 if(s->mb_num-1 <= ff_mba_max[i]) break;
1369 mb_pos= get_bits(&s->gb, ff_mba_length[i]);
1370 s->mb_x= mb_pos % s->mb_width;
1371 s->mb_y= mb_pos / s->mb_width;
1376 void ff_h263_encode_mba(MpegEncContext *s)
1381 if(s->mb_num-1 <= ff_mba_max[i]) break;
1383 mb_pos= s->mb_x + s->mb_width*s->mb_y;
1384 put_bits(&s->pb, ff_mba_length[i], mb_pos);
1388 * decodes the group of blocks header or slice header.
1389 * @return <0 if an error occurred
1391 static int h263_decode_gob_header(MpegEncContext *s)
1393 unsigned int val, gfid, gob_number;
1396 /* Check for GOB Start Code */
1397 val = show_bits(&s->gb, 16);
1401 /* We have a GBSC probably with GSTUFF */
1402 skip_bits(&s->gb, 16); /* Drop the zeros */
1403 left= get_bits_left(&s->gb);
1404 //MN: we must check the bits left or we might end in a infinite loop (or segfault)
1405 for(;left>13; left--){
1406 if(get_bits1(&s->gb)) break; /* Seek the '1' bit */
1411 if(s->h263_slice_structured){
1412 if(get_bits1(&s->gb)==0)
1415 ff_h263_decode_mba(s);
1417 if(s->mb_num > 1583)
1418 if(get_bits1(&s->gb)==0)
1421 s->qscale = get_bits(&s->gb, 5); /* SQUANT */
1422 if(get_bits1(&s->gb)==0)
1424 gfid = get_bits(&s->gb, 2); /* GFID */
1426 gob_number = get_bits(&s->gb, 5); /* GN */
1428 s->mb_y= s->gob_index* gob_number;
1429 gfid = get_bits(&s->gb, 2); /* GFID */
1430 s->qscale = get_bits(&s->gb, 5); /* GQUANT */
1433 if(s->mb_y >= s->mb_height)
1442 static inline void memsetw(short *tab, int val, int n)
1450 * finds the next resync_marker
1451 * @param p pointer to buffer to scan
1452 * @param end pointer to the end of the buffer
1453 * @return pointer to the next resync_marker, or end if none was found
1455 const uint8_t *ff_h263_find_resync_marker(const uint8_t *restrict p, const uint8_t * restrict end)
1463 if (!p[-1] && p[1]) return p - 1;
1464 else if(!p[ 1] && p[2]) return p;
1471 * decodes the group of blocks / video packet header.
1472 * @return bit position of the resync_marker, or <0 if none was found
1474 int ff_h263_resync(MpegEncContext *s){
1477 if(s->codec_id==CODEC_ID_MPEG4){
1479 align_get_bits(&s->gb);
1482 if(show_bits(&s->gb, 16)==0){
1483 pos= get_bits_count(&s->gb);
1484 if(s->codec_id==CODEC_ID_MPEG4)
1485 ret= mpeg4_decode_video_packet_header(s);
1487 ret= h263_decode_gob_header(s);
1491 //OK, it's not where it is supposed to be ...
1492 s->gb= s->last_resync_gb;
1493 align_get_bits(&s->gb);
1494 left= get_bits_left(&s->gb);
1496 for(;left>16+1+5+5; left-=8){
1497 if(show_bits(&s->gb, 16)==0){
1498 GetBitContext bak= s->gb;
1500 pos= get_bits_count(&s->gb);
1501 if(s->codec_id==CODEC_ID_MPEG4)
1502 ret= mpeg4_decode_video_packet_header(s);
1504 ret= h263_decode_gob_header(s);
1510 skip_bits(&s->gb, 8);
1516 int h263_decode_motion(MpegEncContext * s, int pred, int f_code)
1518 int code, val, sign, shift, l;
1519 code = get_vlc2(&s->gb, mv_vlc.table, MV_VLC_BITS, 2);
1526 sign = get_bits1(&s->gb);
1530 val = (val - 1) << shift;
1531 val |= get_bits(&s->gb, shift);
1538 /* modulo decoding */
1539 if (!s->h263_long_vectors) {
1540 l = INT_BIT - 5 - f_code;
1543 /* horrible h263 long vector mode */
1544 if (pred < -31 && val < -63)
1546 if (pred > 32 && val > 63)
1554 /* Decodes RVLC of H.263+ UMV */
1555 static int h263p_decode_umotion(MpegEncContext * s, int pred)
1559 if (get_bits1(&s->gb)) /* Motion difference = 0 */
1562 code = 2 + get_bits1(&s->gb);
1564 while (get_bits1(&s->gb))
1567 code += get_bits1(&s->gb);
1572 code = (sign) ? (pred - code) : (pred + code);
1573 dprintf(s->avctx,"H.263+ UMV Motion = %d\n", code);
1579 * read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
1581 static void preview_obmc(MpegEncContext *s){
1582 GetBitContext gb= s->gb;
1584 int cbpc, i, pred_x, pred_y, mx, my;
1586 const int xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
1587 const int stride= s->b8_stride*2;
1590 s->block_index[i]+= 2;
1592 s->block_index[i]+= 1;
1595 assert(s->pict_type == FF_P_TYPE);
1598 if (get_bits1(&s->gb)) {
1600 mot_val = s->current_picture.motion_val[0][ s->block_index[0] ];
1601 mot_val[0 ]= mot_val[2 ]=
1602 mot_val[0+stride]= mot_val[2+stride]= 0;
1603 mot_val[1 ]= mot_val[3 ]=
1604 mot_val[1+stride]= mot_val[3+stride]= 0;
1606 s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
1609 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
1613 s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
1615 get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
1617 if(s->modified_quant){
1618 if(get_bits1(&s->gb)) skip_bits(&s->gb, 1);
1619 else skip_bits(&s->gb, 5);
1621 skip_bits(&s->gb, 2);
1624 if ((cbpc & 16) == 0) {
1625 s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
1626 /* 16x16 motion prediction */
1627 mot_val= h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
1629 mx = h263p_decode_umotion(s, pred_x);
1631 mx = h263_decode_motion(s, pred_x, 1);
1634 my = h263p_decode_umotion(s, pred_y);
1636 my = h263_decode_motion(s, pred_y, 1);
1638 mot_val[0 ]= mot_val[2 ]=
1639 mot_val[0+stride]= mot_val[2+stride]= mx;
1640 mot_val[1 ]= mot_val[3 ]=
1641 mot_val[1+stride]= mot_val[3+stride]= my;
1643 s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
1645 mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
1647 mx = h263p_decode_umotion(s, pred_x);
1649 mx = h263_decode_motion(s, pred_x, 1);
1652 my = h263p_decode_umotion(s, pred_y);
1654 my = h263_decode_motion(s, pred_y, 1);
1655 if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
1656 skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
1665 s->block_index[i]-= 2;
1667 s->block_index[i]-= 1;
1673 static void h263_decode_dquant(MpegEncContext *s){
1674 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
1676 if(s->modified_quant){
1677 if(get_bits1(&s->gb))
1678 s->qscale= modified_quant_tab[get_bits1(&s->gb)][ s->qscale ];
1680 s->qscale= get_bits(&s->gb, 5);
1682 s->qscale += quant_tab[get_bits(&s->gb, 2)];
1683 ff_set_qscale(s, s->qscale);
1686 static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
1689 int code, level, i, j, last, run;
1690 RLTable *rl = &rl_inter;
1691 const uint8_t *scan_table;
1692 GetBitContext gb= s->gb;
1694 scan_table = s->intra_scantable.permutated;
1695 if (s->h263_aic && s->mb_intra) {
1699 if (s->h263_aic_dir)
1700 scan_table = s->intra_v_scantable.permutated; /* left */
1702 scan_table = s->intra_h_scantable.permutated; /* top */
1704 } else if (s->mb_intra) {
1706 if(s->codec_id == CODEC_ID_RV10){
1707 #if CONFIG_RV10_DECODER
1708 if (s->rv10_version == 3 && s->pict_type == FF_I_TYPE) {
1709 int component, diff;
1710 component = (n <= 3 ? 0 : n - 4 + 1);
1711 level = s->last_dc[component];
1712 if (s->rv10_first_dc_coded[component]) {
1713 diff = rv_decode_dc(s, n);
1717 level = level & 0xff; /* handle wrap round */
1718 s->last_dc[component] = level;
1720 s->rv10_first_dc_coded[component] = 1;
1723 level = get_bits(&s->gb, 8);
1729 level = get_bits(&s->gb, 8);
1730 if((level&0x7F) == 0){
1731 av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n", level, s->mb_x, s->mb_y);
1732 if(s->error_recognition >= FF_ER_COMPLIANT)
1744 if (s->mb_intra && s->h263_aic)
1746 s->block_last_index[n] = i - 1;
1751 code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2);
1753 av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y);
1756 if (code == rl->n) {
1758 if (CONFIG_FLV_DECODER && s->h263_flv > 1) {
1759 ff_flv2_decode_ac_esc(&s->gb, &level, &run, &last);
1761 last = get_bits1(&s->gb);
1762 run = get_bits(&s->gb, 6);
1763 level = (int8_t)get_bits(&s->gb, 8);
1765 if (s->codec_id == CODEC_ID_RV10) {
1766 /* XXX: should patch encoder too */
1767 level = get_sbits(&s->gb, 12);
1769 level = get_bits(&s->gb, 5);
1770 level |= get_sbits(&s->gb, 6)<<5;
1775 run = rl->table_run[code];
1776 level = rl->table_level[code];
1777 last = code >= rl->last;
1778 if (get_bits1(&s->gb))
1783 if(s->alt_inter_vlc && rl == &rl_inter && !s->mb_intra){
1784 //Looks like a hack but no, it's the way it is supposed to work ...
1788 s->dsp.clear_block(block);
1791 av_log(s->avctx, AV_LOG_ERROR, "run overflow at %dx%d i:%d\n", s->mb_x, s->mb_y, s->mb_intra);
1801 if (s->mb_intra && s->h263_aic) {
1802 h263_pred_acdc(s, block, n);
1805 s->block_last_index[n] = i;
1809 static int h263_skip_b_part(MpegEncContext *s, int cbp)
1811 DECLARE_ALIGNED(16, DCTELEM, dblock[64]);
1814 /* we have to set s->mb_intra to zero to decode B-part of PB-frame correctly
1815 * but real value should be restored in order to be used later (in OBMC condition)
1819 for (i = 0; i < 6; i++) {
1820 if (h263_decode_block(s, dblock, i, cbp&32) < 0)
1828 static int h263_get_modb(GetBitContext *gb, int pb_frame, int *cbpb)
1832 if (pb_frame < 3) { // h.263 Annex G and i263 PB-frame
1834 if (pb_frame == 2 && c)
1835 mv = !get_bits1(gb);
1836 } else { // h.263 Annex M improved PB-frame
1837 mv = get_unary(gb, 0, 4) + 1;
1842 *cbpb = get_bits(gb, 6);
1846 int ff_h263_decode_mb(MpegEncContext *s,
1847 DCTELEM block[6][64])
1849 int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
1851 const int xy= s->mb_x + s->mb_y * s->mb_stride;
1852 int cbpb = 0, pb_mv_count = 0;
1854 assert(!s->h263_pred);
1856 if (s->pict_type == FF_P_TYPE) {
1858 if (get_bits1(&s->gb)) {
1862 s->block_last_index[i] = -1;
1863 s->mv_dir = MV_DIR_FORWARD;
1864 s->mv_type = MV_TYPE_16X16;
1865 s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
1868 s->mb_skipped = !(s->obmc | s->loop_filter);
1871 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
1873 av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
1878 s->dsp.clear_blocks(s->block[0]);
1881 s->mb_intra = ((cbpc & 4) != 0);
1882 if (s->mb_intra) goto intra;
1884 if(s->pb_frame && get_bits1(&s->gb))
1885 pb_mv_count = h263_get_modb(&s->gb, s->pb_frame, &cbpb);
1886 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
1888 if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
1891 cbp = (cbpc & 3) | (cbpy << 2);
1893 h263_decode_dquant(s);
1896 s->mv_dir = MV_DIR_FORWARD;
1897 if ((cbpc & 16) == 0) {
1898 s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
1899 /* 16x16 motion prediction */
1900 s->mv_type = MV_TYPE_16X16;
1901 h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
1903 mx = h263p_decode_umotion(s, pred_x);
1905 mx = h263_decode_motion(s, pred_x, 1);
1911 my = h263p_decode_umotion(s, pred_y);
1913 my = h263_decode_motion(s, pred_y, 1);
1917 s->mv[0][0][0] = mx;
1918 s->mv[0][0][1] = my;
1920 if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
1921 skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
1923 s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
1924 s->mv_type = MV_TYPE_8X8;
1926 mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
1928 mx = h263p_decode_umotion(s, pred_x);
1930 mx = h263_decode_motion(s, pred_x, 1);
1935 my = h263p_decode_umotion(s, pred_y);
1937 my = h263_decode_motion(s, pred_y, 1);
1940 s->mv[0][i][0] = mx;
1941 s->mv[0][i][1] = my;
1942 if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
1943 skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
1948 } else if(s->pict_type==FF_B_TYPE) {
1950 const int stride= s->b8_stride;
1951 int16_t *mot_val0 = s->current_picture.motion_val[0][ 2*(s->mb_x + s->mb_y*stride) ];
1952 int16_t *mot_val1 = s->current_picture.motion_val[1][ 2*(s->mb_x + s->mb_y*stride) ];
1953 // const int mv_xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
1956 mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+2*stride]= mot_val0[2+2*stride]=
1957 mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+2*stride]= mot_val0[3+2*stride]=
1958 mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+2*stride]= mot_val1[2+2*stride]=
1959 mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+2*stride]= mot_val1[3+2*stride]= 0;
1962 mb_type= get_vlc2(&s->gb, h263_mbtype_b_vlc.table, H263_MBTYPE_B_VLC_BITS, 2);
1964 av_log(s->avctx, AV_LOG_ERROR, "b mb_type damaged at %d %d\n", s->mb_x, s->mb_y);
1968 mb_type= h263_mb_type_b_map[ mb_type ];
1971 s->mb_intra = IS_INTRA(mb_type);
1972 if(HAS_CBP(mb_type)){
1973 s->dsp.clear_blocks(s->block[0]);
1974 cbpc = get_vlc2(&s->gb, cbpc_b_vlc.table, CBPC_B_VLC_BITS, 1);
1976 dquant = IS_QUANT(mb_type);
1980 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
1983 av_log(s->avctx, AV_LOG_ERROR, "b cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
1987 if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
1990 cbp = (cbpc & 3) | (cbpy << 2);
1994 assert(!s->mb_intra);
1996 if(IS_QUANT(mb_type)){
1997 h263_decode_dquant(s);
2000 if(IS_DIRECT(mb_type)){
2001 s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
2002 mb_type |= ff_mpeg4_set_direct_mv(s, 0, 0);
2005 s->mv_type= MV_TYPE_16X16;
2008 if(USES_LIST(mb_type, 0)){
2009 int16_t *mot_val= h263_pred_motion(s, 0, 0, &mx, &my);
2010 s->mv_dir = MV_DIR_FORWARD;
2012 mx = h263_decode_motion(s, mx, 1);
2013 my = h263_decode_motion(s, my, 1);
2015 s->mv[0][0][0] = mx;
2016 s->mv[0][0][1] = my;
2017 mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
2018 mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
2021 if(USES_LIST(mb_type, 1)){
2022 int16_t *mot_val= h263_pred_motion(s, 0, 1, &mx, &my);
2023 s->mv_dir |= MV_DIR_BACKWARD;
2025 mx = h263_decode_motion(s, mx, 1);
2026 my = h263_decode_motion(s, my, 1);
2028 s->mv[1][0][0] = mx;
2029 s->mv[1][0][1] = my;
2030 mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
2031 mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
2035 s->current_picture.mb_type[xy]= mb_type;
2036 } else { /* I-Frame */
2038 cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
2040 av_log(s->avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
2045 s->dsp.clear_blocks(s->block[0]);
2050 s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
2052 s->ac_pred = get_bits1(&s->gb);
2054 s->current_picture.mb_type[xy]= MB_TYPE_INTRA | MB_TYPE_ACPRED;
2056 s->h263_aic_dir = get_bits1(&s->gb);
2061 if(s->pb_frame && get_bits1(&s->gb))
2062 pb_mv_count = h263_get_modb(&s->gb, s->pb_frame, &cbpb);
2063 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
2065 av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
2068 cbp = (cbpc & 3) | (cbpy << 2);
2070 h263_decode_dquant(s);
2073 pb_mv_count += !!s->pb_frame;
2076 while(pb_mv_count--){
2077 h263_decode_motion(s, 0, 1);
2078 h263_decode_motion(s, 0, 1);
2081 /* decode each block */
2082 for (i = 0; i < 6; i++) {
2083 if (h263_decode_block(s, block[i], i, cbp&32) < 0)
2088 if(s->pb_frame && h263_skip_b_part(s, cbpb) < 0)
2090 if(s->obmc && !s->mb_intra){
2091 if(s->pict_type == FF_P_TYPE && s->mb_x+1<s->mb_width && s->mb_num_left != 1)
2096 /* per-MB end of slice check */
2098 int v= show_bits(&s->gb, 16);
2100 if(get_bits_count(&s->gb) + 16 > s->gb.size_in_bits){
2101 v>>= get_bits_count(&s->gb) + 16 - s->gb.size_in_bits;
2111 /* most is hardcoded. should extend to handle all h263 streams */
2112 int h263_decode_picture_header(MpegEncContext *s)
2114 int format, width, height, i;
2117 align_get_bits(&s->gb);
2119 startcode= get_bits(&s->gb, 22-8);
2121 for(i= get_bits_left(&s->gb); i>24; i-=8) {
2122 startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF;
2124 if(startcode == 0x20)
2128 if (startcode != 0x20) {
2129 av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
2132 /* temporal reference */
2133 i = get_bits(&s->gb, 8); /* picture timestamp */
2134 if( (s->picture_number&~0xFF)+i < s->picture_number)
2136 s->current_picture_ptr->pts=
2137 s->picture_number= (s->picture_number&~0xFF) + i;
2139 /* PTYPE starts here */
2140 if (get_bits1(&s->gb) != 1) {
2142 av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
2145 if (get_bits1(&s->gb) != 0) {
2146 av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
2147 return -1; /* h263 id */
2149 skip_bits1(&s->gb); /* split screen off */
2150 skip_bits1(&s->gb); /* camera off */
2151 skip_bits1(&s->gb); /* freeze picture release off */
2153 format = get_bits(&s->gb, 3);
2158 7 extended PTYPE (PLUSPTYPE)
2161 if (format != 7 && format != 6) {
2164 width = h263_format[format][0];
2165 height = h263_format[format][1];
2169 s->pict_type = FF_I_TYPE + get_bits1(&s->gb);
2171 s->h263_long_vectors = get_bits1(&s->gb);
2173 if (get_bits1(&s->gb) != 0) {
2174 av_log(s->avctx, AV_LOG_ERROR, "H263 SAC not supported\n");
2175 return -1; /* SAC: off */
2177 s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
2178 s->unrestricted_mv = s->h263_long_vectors || s->obmc;
2180 s->pb_frame = get_bits1(&s->gb);
2181 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
2182 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
2186 s->avctx->sample_aspect_ratio= (AVRational){12,11};
2187 s->avctx->time_base= (AVRational){1001, 30000};
2193 ufep = get_bits(&s->gb, 3); /* Update Full Extended PTYPE */
2195 /* ufep other than 0 and 1 are reserved */
2198 format = get_bits(&s->gb, 3);
2199 dprintf(s->avctx, "ufep=1, format: %d\n", format);
2200 s->custom_pcf= get_bits1(&s->gb);
2201 s->umvplus = get_bits1(&s->gb); /* Unrestricted Motion Vector */
2202 if (get_bits1(&s->gb) != 0) {
2203 av_log(s->avctx, AV_LOG_ERROR, "Syntax-based Arithmetic Coding (SAC) not supported\n");
2205 s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
2206 s->h263_aic = get_bits1(&s->gb); /* Advanced Intra Coding (AIC) */
2207 s->loop_filter= get_bits1(&s->gb);
2208 s->unrestricted_mv = s->umvplus || s->obmc || s->loop_filter;
2210 s->h263_slice_structured= get_bits1(&s->gb);
2211 if (get_bits1(&s->gb) != 0) {
2212 av_log(s->avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n");
2214 if (get_bits1(&s->gb) != 0) {
2215 av_log(s->avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n");
2217 s->alt_inter_vlc= get_bits1(&s->gb);
2218 s->modified_quant= get_bits1(&s->gb);
2219 if(s->modified_quant)
2220 s->chroma_qscale_table= ff_h263_chroma_qscale_table;
2222 skip_bits(&s->gb, 1); /* Prevent start code emulation */
2224 skip_bits(&s->gb, 3); /* Reserved */
2225 } else if (ufep != 0) {
2226 av_log(s->avctx, AV_LOG_ERROR, "Bad UFEP type (%d)\n", ufep);
2231 s->pict_type = get_bits(&s->gb, 3);
2232 switch(s->pict_type){
2233 case 0: s->pict_type= FF_I_TYPE;break;
2234 case 1: s->pict_type= FF_P_TYPE;break;
2235 case 2: s->pict_type= FF_P_TYPE;s->pb_frame = 3;break;
2236 case 3: s->pict_type= FF_B_TYPE;break;
2237 case 7: s->pict_type= FF_I_TYPE;break; //ZYGO
2241 skip_bits(&s->gb, 2);
2242 s->no_rounding = get_bits1(&s->gb);
2243 skip_bits(&s->gb, 4);
2245 /* Get the picture dimensions */
2248 /* Custom Picture Format (CPFMT) */
2249 s->aspect_ratio_info = get_bits(&s->gb, 4);
2250 dprintf(s->avctx, "aspect: %d\n", s->aspect_ratio_info);
2255 3 - 10:11 (525-type 4:3)
2256 4 - 16:11 (CIF 16:9)
2257 5 - 40:33 (525-type 16:9)
2260 width = (get_bits(&s->gb, 9) + 1) * 4;
2262 height = get_bits(&s->gb, 9) * 4;
2263 dprintf(s->avctx, "\nH.263+ Custom picture: %dx%d\n",width,height);
2264 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) {
2265 /* aspected dimensions */
2266 s->avctx->sample_aspect_ratio.num= get_bits(&s->gb, 8);
2267 s->avctx->sample_aspect_ratio.den= get_bits(&s->gb, 8);
2269 s->avctx->sample_aspect_ratio= ff_h263_pixel_aspect[s->aspect_ratio_info];
2272 width = h263_format[format][0];
2273 height = h263_format[format][1];
2274 s->avctx->sample_aspect_ratio= (AVRational){12,11};
2276 if ((width == 0) || (height == 0))
2283 s->avctx->time_base.den= 1800000;
2284 s->avctx->time_base.num= 1000 + get_bits1(&s->gb);
2285 s->avctx->time_base.num*= get_bits(&s->gb, 7);
2286 if(s->avctx->time_base.num == 0){
2287 av_log(s, AV_LOG_ERROR, "zero framerate\n");
2290 gcd= av_gcd(s->avctx->time_base.den, s->avctx->time_base.num);
2291 s->avctx->time_base.den /= gcd;
2292 s->avctx->time_base.num /= gcd;
2294 s->avctx->time_base= (AVRational){1001, 30000};
2299 skip_bits(&s->gb, 2); //extended Temporal reference
2304 if(get_bits1(&s->gb)==0) /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
2307 if(s->h263_slice_structured){
2308 if (get_bits1(&s->gb) != 0) {
2309 av_log(s->avctx, AV_LOG_ERROR, "rectangular slices not supported\n");
2311 if (get_bits1(&s->gb) != 0) {
2312 av_log(s->avctx, AV_LOG_ERROR, "unordered slices not supported\n");
2317 s->qscale = get_bits(&s->gb, 5);
2320 s->mb_width = (s->width + 15) / 16;
2321 s->mb_height = (s->height + 15) / 16;
2322 s->mb_num = s->mb_width * s->mb_height;
2325 skip_bits(&s->gb, 3); /* Temporal reference for B-pictures */
2327 skip_bits(&s->gb, 2); //extended Temporal reference
2328 skip_bits(&s->gb, 2); /* Quantization information for B-pictures */
2332 while (get_bits1(&s->gb) != 0) {
2333 skip_bits(&s->gb, 8);
2336 if(s->h263_slice_structured){
2337 if (get_bits1(&s->gb) != 1) {
2338 av_log(s->avctx, AV_LOG_ERROR, "SEPB1 marker missing\n");
2342 ff_h263_decode_mba(s);
2344 if (get_bits1(&s->gb) != 1) {
2345 av_log(s->avctx, AV_LOG_ERROR, "SEPB2 marker missing\n");
2352 s->y_dc_scale_table=
2353 s->c_dc_scale_table= ff_aic_dc_scale_table;
2355 s->y_dc_scale_table=
2356 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
2359 ff_h263_show_pict_info(s);
2360 if (s->pict_type == FF_I_TYPE && s->codec_tag == AV_RL32("ZYGO")){
2362 for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
2363 av_log(s->avctx, AV_LOG_DEBUG, "\n");
2364 for(i=0; i<13; i++){
2366 int v= get_bits(&s->gb, 8);
2367 v |= get_sbits(&s->gb, 8)<<8;
2368 av_log(s->avctx, AV_LOG_DEBUG, " %5d", v);
2370 av_log(s->avctx, AV_LOG_DEBUG, "\n");
2372 for(i=0; i<50; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));