2 * ITU H263 bitstream encoder
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 FFmpeg.
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.
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.
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
27 * h263 bitstream encoder.
32 #include "libavutil/attributes.h"
34 #include "mpegvideo.h"
39 #include "mpeg4video.h"
43 * Table of number of bits a motion vector component needs.
45 static uint8_t mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
48 * Minimal fcode that a motion vector component would need.
50 static uint8_t fcode_tab[MAX_MV*2+1];
53 * Minimal fcode that a motion vector component would need in umv.
54 * All entries in this table are 1.
56 static uint8_t umv_fcode_tab[MAX_MV*2+1];
58 //unified encoding tables for run length encoding of coefficients
59 //unified in the sense that the specification specifies the encoding in several steps.
60 static uint8_t uni_h263_intra_aic_rl_len [64*64*2*2];
61 static uint8_t uni_h263_inter_rl_len [64*64*2*2];
62 //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128 + (run)*256 + (level))
63 //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run) + (level)*64)
64 #define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level))
66 static const uint8_t wrong_run[102] = {
67 1, 2, 3, 5, 4, 10, 9, 8,
68 11, 15, 17, 16, 23, 22, 21, 20,
69 19, 18, 25, 24, 27, 26, 11, 7,
70 6, 1, 2, 13, 2, 2, 2, 2,
71 6, 12, 3, 9, 1, 3, 4, 3,
72 7, 4, 1, 1, 5, 5, 14, 6,
73 1, 7, 1, 8, 1, 1, 1, 1,
74 10, 1, 1, 5, 9, 17, 25, 24,
75 29, 33, 32, 41, 2, 23, 28, 31,
76 3, 22, 30, 4, 27, 40, 8, 26,
77 6, 39, 7, 38, 16, 37, 15, 10,
78 11, 12, 13, 14, 1, 21, 20, 18,
83 * Return the 4 bit value that specifies the given aspect ratio.
84 * This may be one of the standard aspect ratios or it specifies
85 * that the aspect will be stored explicitly later.
87 av_const int ff_h263_aspect_to_info(AVRational aspect){
90 if(aspect.num==0) aspect= (AVRational){1,1};
93 if(av_cmp_q(ff_h263_pixel_aspect[i], aspect) == 0){
98 return FF_ASPECT_EXTENDED;
101 void ff_h263_encode_picture_header(MpegEncContext * s, int picture_number)
103 int format, coded_frame_rate, coded_frame_rate_base, i, temp_ref;
104 int best_clock_code=1;
106 int best_error= INT_MAX;
111 div= (s->avctx->time_base.num*1800000LL + 500LL*s->avctx->time_base.den) / ((1000LL+i)*s->avctx->time_base.den);
112 div= av_clip(div, 1, 127);
113 error= FFABS(s->avctx->time_base.num*1800000LL - (1000LL+i)*s->avctx->time_base.den*div);
114 if(error < best_error){
121 s->custom_pcf= best_clock_code!=1 || best_divisor!=60;
122 coded_frame_rate= 1800000;
123 coded_frame_rate_base= (1000+best_clock_code)*best_divisor;
125 avpriv_align_put_bits(&s->pb);
127 /* Update the pointer to last GOB */
128 s->ptr_lastgob = put_bits_ptr(&s->pb);
129 put_bits(&s->pb, 22, 0x20); /* PSC */
130 temp_ref= s->picture_number * (int64_t)coded_frame_rate * s->avctx->time_base.num / //FIXME use timestamp
131 (coded_frame_rate_base * (int64_t)s->avctx->time_base.den);
132 put_sbits(&s->pb, 8, temp_ref); /* TemporalReference */
134 put_bits(&s->pb, 1, 1); /* marker */
135 put_bits(&s->pb, 1, 0); /* h263 id */
136 put_bits(&s->pb, 1, 0); /* split screen off */
137 put_bits(&s->pb, 1, 0); /* camera off */
138 put_bits(&s->pb, 1, 0); /* freeze picture release off */
140 format = ff_match_2uint16(ff_h263_format, FF_ARRAY_ELEMS(ff_h263_format), s->width, s->height);
143 put_bits(&s->pb, 3, format);
144 put_bits(&s->pb, 1, (s->pict_type == AV_PICTURE_TYPE_P));
145 /* By now UMV IS DISABLED ON H.263v1, since the restrictions
146 of H.263v1 UMV implies to check the predicted MV after
147 calculation of the current MB to see if we're on the limits */
148 put_bits(&s->pb, 1, 0); /* Unrestricted Motion Vector: off */
149 put_bits(&s->pb, 1, 0); /* SAC: off */
150 put_bits(&s->pb, 1, s->obmc); /* Advanced Prediction */
151 put_bits(&s->pb, 1, 0); /* only I/P frames, no PB frame */
152 put_bits(&s->pb, 5, s->qscale);
153 put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
157 /* H.263 Plus PTYPE */
159 put_bits(&s->pb, 3, 7);
160 put_bits(&s->pb,3,ufep); /* Update Full Extended PTYPE */
162 put_bits(&s->pb,3,6); /* Custom Source Format */
164 put_bits(&s->pb, 3, format);
166 put_bits(&s->pb,1, s->custom_pcf);
167 put_bits(&s->pb,1, s->umvplus); /* Unrestricted Motion Vector */
168 put_bits(&s->pb,1,0); /* SAC: off */
169 put_bits(&s->pb,1,s->obmc); /* Advanced Prediction Mode */
170 put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */
171 put_bits(&s->pb,1,s->loop_filter); /* Deblocking Filter */
172 put_bits(&s->pb,1,s->h263_slice_structured); /* Slice Structured */
173 put_bits(&s->pb,1,0); /* Reference Picture Selection: off */
174 put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */
175 put_bits(&s->pb,1,s->alt_inter_vlc); /* Alternative Inter VLC */
176 put_bits(&s->pb,1,s->modified_quant); /* Modified Quantization: */
177 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
178 put_bits(&s->pb,3,0); /* Reserved */
180 put_bits(&s->pb, 3, s->pict_type == AV_PICTURE_TYPE_P);
182 put_bits(&s->pb,1,0); /* Reference Picture Resampling: off */
183 put_bits(&s->pb,1,0); /* Reduced-Resolution Update: off */
184 put_bits(&s->pb,1,s->no_rounding); /* Rounding Type */
185 put_bits(&s->pb,2,0); /* Reserved */
186 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
188 /* This should be here if PLUSPTYPE */
189 put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
192 /* Custom Picture Format (CPFMT) */
193 s->aspect_ratio_info= ff_h263_aspect_to_info(s->avctx->sample_aspect_ratio);
195 put_bits(&s->pb,4,s->aspect_ratio_info);
196 put_bits(&s->pb,9,(s->width >> 2) - 1);
197 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
198 put_bits(&s->pb,9,(s->height >> 2));
199 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
200 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
201 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
206 put_bits(&s->pb, 1, best_clock_code);
207 put_bits(&s->pb, 7, best_divisor);
209 put_sbits(&s->pb, 2, temp_ref>>8);
212 /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
214 // put_bits(&s->pb,1,1); /* Limited according tables of Annex D */
215 //FIXME check actual requested range
216 put_bits(&s->pb,2,1); /* unlimited */
217 if(s->h263_slice_structured)
218 put_bits(&s->pb,2,0); /* no weird submodes */
220 put_bits(&s->pb, 5, s->qscale);
223 put_bits(&s->pb, 1, 0); /* no PEI */
225 if(s->h263_slice_structured){
226 put_bits(&s->pb, 1, 1);
228 av_assert1(s->mb_x == 0 && s->mb_y == 0);
229 ff_h263_encode_mba(s);
231 put_bits(&s->pb, 1, 1);
236 s->c_dc_scale_table= ff_aic_dc_scale_table;
239 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
244 * Encode a group of blocks header.
246 void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line)
248 put_bits(&s->pb, 17, 1); /* GBSC */
250 if(s->h263_slice_structured){
251 put_bits(&s->pb, 1, 1);
253 ff_h263_encode_mba(s);
256 put_bits(&s->pb, 1, 1);
257 put_bits(&s->pb, 5, s->qscale); /* GQUANT */
258 put_bits(&s->pb, 1, 1);
259 put_bits(&s->pb, 2, s->pict_type == AV_PICTURE_TYPE_I); /* GFID */
261 int gob_number= mb_line / s->gob_index;
263 put_bits(&s->pb, 5, gob_number); /* GN */
264 put_bits(&s->pb, 2, s->pict_type == AV_PICTURE_TYPE_I); /* GFID */
265 put_bits(&s->pb, 5, s->qscale); /* GQUANT */
270 * modify qscale so that encoding is actually possible in h263 (limit difference to -2..2)
272 void ff_clean_h263_qscales(MpegEncContext *s){
274 int8_t * const qscale_table = s->current_picture.qscale_table;
276 ff_init_qscale_tab(s);
278 for(i=1; i<s->mb_num; i++){
279 if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i-1] ] >2)
280 qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i-1] ]+2;
282 for(i=s->mb_num-2; i>=0; i--){
283 if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i+1] ] >2)
284 qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i+1] ]+2;
287 if(s->codec_id != AV_CODEC_ID_H263P){
288 for(i=1; i<s->mb_num; i++){
289 int mb_xy= s->mb_index2xy[i];
291 if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&CANDIDATE_MB_TYPE_INTER4V)){
292 s->mb_type[mb_xy]|= CANDIDATE_MB_TYPE_INTER;
298 static const int dquant_code[5]= {1,0,9,2,3};
301 * Encode an 8x8 block.
302 * @param block the 8x8 block
303 * @param n block index (0-3 are luma, 4-5 are chroma)
305 static void h263_encode_block(MpegEncContext * s, int16_t * block, int n)
307 int level, run, last, i, j, last_index, last_non_zero, sign, slevel, code;
310 rl = &ff_h263_rl_inter;
311 if (s->mb_intra && !s->h263_aic) {
314 /* 255 cannot be represented, so we clamp */
319 /* 0 cannot be represented also */
320 else if (level < 1) {
324 if (level == 128) //FIXME check rv10
325 put_bits(&s->pb, 8, 0xff);
327 put_bits(&s->pb, 8, level);
331 if (s->h263_aic && s->mb_intra)
332 rl = &ff_rl_intra_aic;
334 if(s->alt_inter_vlc && !s->mb_intra){
336 int inter_vlc_bits=0;
340 last_index = s->block_last_index[n];
341 last_non_zero = i - 1;
342 for (; i <= last_index; i++) {
343 j = s->intra_scantable.permutated[i];
346 run = i - last_non_zero - 1;
347 last = (i == last_index);
349 if(level<0) level= -level;
351 code = get_rl_index(rl, last, run, level);
352 aic_code = get_rl_index(&ff_rl_intra_aic, last, run, level);
353 inter_vlc_bits += rl->table_vlc[code][1]+1;
354 aic_vlc_bits += ff_rl_intra_aic.table_vlc[aic_code][1]+1;
357 inter_vlc_bits += 1+6+8-1;
359 if (aic_code == ff_rl_intra_aic.n) {
360 aic_vlc_bits += 1+6+8-1;
361 wrong_pos += run + 1;
363 wrong_pos += wrong_run[aic_code];
368 if(aic_vlc_bits < inter_vlc_bits && wrong_pos > 63)
369 rl = &ff_rl_intra_aic;
374 last_index = s->block_last_index[n];
375 last_non_zero = i - 1;
376 for (; i <= last_index; i++) {
377 j = s->intra_scantable.permutated[i];
380 run = i - last_non_zero - 1;
381 last = (i == last_index);
388 code = get_rl_index(rl, last, run, level);
389 put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
391 if(!CONFIG_FLV_ENCODER || s->h263_flv <= 1){
392 put_bits(&s->pb, 1, last);
393 put_bits(&s->pb, 6, run);
395 av_assert2(slevel != 0);
398 put_sbits(&s->pb, 8, slevel);
400 put_bits(&s->pb, 8, 128);
401 put_sbits(&s->pb, 5, slevel);
402 put_sbits(&s->pb, 6, slevel>>5);
405 ff_flv2_encode_ac_esc(&s->pb, slevel, level, run, last);
408 put_bits(&s->pb, 1, sign);
415 /* Encode MV differences on H.263+ with Unrestricted MV mode */
416 static void h263p_encode_umotion(MpegEncContext * s, int val)
426 put_bits(&s->pb, 1, 1);
428 put_bits(&s->pb, 3, 0);
430 put_bits(&s->pb, 3, 2);
433 sval = ((val < 0) ? (short)(-val):(short)val);
436 while (temp_val != 0) {
437 temp_val = temp_val >> 1;
443 tcode = (sval & (1 << (i-1))) >> (i-1);
444 tcode = (tcode << 1) | 1;
445 code = (code << 2) | tcode;
448 code = ((code << 1) | (val < 0)) << 1;
449 put_bits(&s->pb, (2*n_bits)+1, code);
453 void ff_h263_encode_mb(MpegEncContext * s,
454 int16_t block[6][64],
455 int motion_x, int motion_y)
457 int cbpc, cbpy, i, cbp, pred_x, pred_y;
459 int16_t rec_intradc[6];
461 const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1);
465 cbp= get_p_cbp(s, block, motion_x, motion_y);
467 if ((cbp | motion_x | motion_y | s->dquant | (s->mv_type - MV_TYPE_16X16)) == 0) {
468 /* skip macroblock */
469 put_bits(&s->pb, 1, 1);
470 if(interleaved_stats){
478 put_bits(&s->pb, 1, 0); /* mb coded */
482 if(s->alt_inter_vlc==0 || cbpc!=3)
484 if(s->dquant) cbpc+= 8;
485 if(s->mv_type==MV_TYPE_16X16){
487 ff_h263_inter_MCBPC_bits[cbpc],
488 ff_h263_inter_MCBPC_code[cbpc]);
490 put_bits(&s->pb, ff_h263_cbpy_tab[cbpy][1], ff_h263_cbpy_tab[cbpy][0]);
492 put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
494 if(interleaved_stats){
495 s->misc_bits+= get_bits_diff(s);
498 /* motion vectors: 16x16 mode */
499 ff_h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
502 ff_h263_encode_motion_vector(s, motion_x - pred_x,
503 motion_y - pred_y, 1);
506 h263p_encode_umotion(s, motion_x - pred_x);
507 h263p_encode_umotion(s, motion_y - pred_y);
508 if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
509 /* To prevent Start Code emulation */
510 put_bits(&s->pb,1,1);
514 ff_h263_inter_MCBPC_bits[cbpc+16],
515 ff_h263_inter_MCBPC_code[cbpc+16]);
516 put_bits(&s->pb, ff_h263_cbpy_tab[cbpy][1], ff_h263_cbpy_tab[cbpy][0]);
518 put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
520 if(interleaved_stats){
521 s->misc_bits+= get_bits_diff(s);
525 /* motion vectors: 8x8 mode*/
526 ff_h263_pred_motion(s, i, 0, &pred_x, &pred_y);
528 motion_x = s->current_picture.motion_val[0][s->block_index[i]][0];
529 motion_y = s->current_picture.motion_val[0][s->block_index[i]][1];
531 ff_h263_encode_motion_vector(s, motion_x - pred_x,
532 motion_y - pred_y, 1);
535 h263p_encode_umotion(s, motion_x - pred_x);
536 h263p_encode_umotion(s, motion_y - pred_y);
537 if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
538 /* To prevent Start Code emulation */
539 put_bits(&s->pb,1,1);
544 if(interleaved_stats){
545 s->mv_bits+= get_bits_diff(s);
548 av_assert2(s->mb_intra);
554 int16_t level = block[i][0];
557 if(i<4) scale= s->y_dc_scale;
558 else scale= s->c_dc_scale;
560 pred_dc = ff_h263_pred_dc(s, i, &dc_ptr[i]);
564 level = (level + (scale>>1))/scale;
566 level = (level - (scale>>1))/scale;
568 /* AIC can change CBP */
569 if (level == 0 && s->block_last_index[i] == 0)
570 s->block_last_index[i] = -1;
572 if(!s->modified_quant){
575 else if (level > 127)
581 rec_intradc[i] = scale*level + pred_dc;
584 //if ((rec_intradc[i] % 2) == 0)
587 if (rec_intradc[i] < 0)
589 else if (rec_intradc[i] > 2047)
590 rec_intradc[i] = 2047;
592 /* Update AC/DC tables */
593 *dc_ptr[i] = rec_intradc[i];
594 if (s->block_last_index[i] >= 0)
600 if (s->block_last_index[i] >= 1)
606 if (s->pict_type == AV_PICTURE_TYPE_I) {
607 if(s->dquant) cbpc+=4;
609 ff_h263_intra_MCBPC_bits[cbpc],
610 ff_h263_intra_MCBPC_code[cbpc]);
612 if(s->dquant) cbpc+=8;
613 put_bits(&s->pb, 1, 0); /* mb coded */
615 ff_h263_inter_MCBPC_bits[cbpc + 4],
616 ff_h263_inter_MCBPC_code[cbpc + 4]);
619 /* XXX: currently, we do not try to use ac prediction */
620 put_bits(&s->pb, 1, 0); /* no AC prediction */
623 put_bits(&s->pb, ff_h263_cbpy_tab[cbpy][1], ff_h263_cbpy_tab[cbpy][0]);
625 put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
627 if(interleaved_stats){
628 s->misc_bits+= get_bits_diff(s);
633 /* encode each block */
634 h263_encode_block(s, block[i], i);
636 /* Update INTRADC for decoding */
637 if (s->h263_aic && s->mb_intra) {
638 block[i][0] = rec_intradc[i];
643 if(interleaved_stats){
645 s->p_tex_bits+= get_bits_diff(s);
648 s->i_tex_bits+= get_bits_diff(s);
654 void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code)
656 int range, bit_size, sign, code, bits;
661 put_bits(&s->pb, ff_mvtab[code][1], ff_mvtab[code][0]);
663 bit_size = f_code - 1;
664 range = 1 << bit_size;
665 /* modulo encoding */
666 val = sign_extend(val, 6 + bit_size);
668 val= (val^sign)-sign;
672 code = (val >> bit_size) + 1;
673 bits = val & (range - 1);
675 put_bits(&s->pb, ff_mvtab[code][1] + 1, (ff_mvtab[code][0] << 1) | sign);
677 put_bits(&s->pb, bit_size, bits);
682 static av_cold void init_mv_penalty_and_fcode(MpegEncContext *s)
687 for(f_code=1; f_code<=MAX_FCODE; f_code++){
688 for(mv=-MAX_MV; mv<=MAX_MV; mv++){
691 if(mv==0) len= ff_mvtab[0][1];
693 int val, bit_size, code;
695 bit_size = f_code - 1;
701 code = (val >> bit_size) + 1;
703 len= ff_mvtab[code][1] + 1 + bit_size;
705 len= ff_mvtab[32][1] + av_log2(code>>5) + 2 + bit_size;
709 mv_penalty[f_code][mv+MAX_MV]= len;
713 for(f_code=MAX_FCODE; f_code>0; f_code--){
714 for(mv=-(16<<f_code); mv<(16<<f_code); mv++){
715 fcode_tab[mv+MAX_MV]= f_code;
719 for(mv=0; mv<MAX_MV*2+1; mv++){
720 umv_fcode_tab[mv]= 1;
724 static av_cold void init_uni_h263_rl_tab(RLTable *rl, uint32_t *bits_tab,
727 int slevel, run, last;
729 av_assert0(MAX_LEVEL >= 64);
730 av_assert0(MAX_RUN >= 63);
732 for(slevel=-64; slevel<64; slevel++){
733 if(slevel==0) continue;
734 for(run=0; run<64; run++){
735 for(last=0; last<=1; last++){
736 const int index= UNI_MPEG4_ENC_INDEX(last, run, slevel+64);
737 int level= slevel < 0 ? -slevel : slevel;
738 int sign= slevel < 0 ? 1 : 0;
744 code= get_rl_index(rl, last, run, level);
745 bits= rl->table_vlc[code][0];
746 len= rl->table_vlc[code][1];
747 bits=bits*2+sign; len++;
749 if(code!=rl->n && len < len_tab[index]){
750 if(bits_tab) bits_tab[index]= bits;
751 len_tab [index]= len;
754 bits= rl->table_vlc[rl->n][0];
755 len = rl->table_vlc[rl->n][1];
756 bits=bits*2+last; len++;
757 bits=bits*64+run; len+=6;
758 bits=bits*256+(level&0xff); len+=8;
760 if(len < len_tab[index]){
761 if(bits_tab) bits_tab[index]= bits;
762 len_tab [index]= len;
769 av_cold void ff_h263_encode_init(MpegEncContext *s)
776 ff_init_rl(&ff_h263_rl_inter, ff_h263_static_rl_table_store[0]);
777 ff_init_rl(&ff_rl_intra_aic, ff_h263_static_rl_table_store[1]);
779 init_uni_h263_rl_tab(&ff_rl_intra_aic, NULL, uni_h263_intra_aic_rl_len);
780 init_uni_h263_rl_tab(&ff_h263_rl_inter , NULL, uni_h263_inter_rl_len);
782 init_mv_penalty_and_fcode(s);
784 s->me.mv_penalty= mv_penalty; //FIXME exact table for msmpeg4 & h263p
786 s->intra_ac_vlc_length =s->inter_ac_vlc_length = uni_h263_inter_rl_len;
787 s->intra_ac_vlc_last_length=s->inter_ac_vlc_last_length= uni_h263_inter_rl_len + 128*64;
789 s->intra_ac_vlc_length = uni_h263_intra_aic_rl_len;
790 s->intra_ac_vlc_last_length= uni_h263_intra_aic_rl_len + 128*64;
792 s->ac_esc_length= 7+1+6+8;
794 // use fcodes >1 only for mpeg4 & h263 & h263p FIXME
796 case AV_CODEC_ID_MPEG4:
797 s->fcode_tab= fcode_tab;
799 case AV_CODEC_ID_H263P:
801 s->fcode_tab= umv_fcode_tab;
802 if(s->modified_quant){
803 s->min_qcoeff= -2047;
810 //Note for mpeg4 & h263 the dc-scale table will be set per frame as needed later
811 case AV_CODEC_ID_FLV1:
812 if (s->h263_flv > 1) {
813 s->min_qcoeff= -1023;
820 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
822 default: //nothing needed - default table already set in mpegvideo.c
826 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
830 void ff_h263_encode_mba(MpegEncContext *s)
835 if(s->mb_num-1 <= ff_mba_max[i]) break;
837 mb_pos= s->mb_x + s->mb_width*s->mb_y;
838 put_bits(&s->pb, ff_mba_length[i], mb_pos);