]> git.sesse.net Git - ffmpeg/blob - libavcodec/ituh263enc.c
Merge commit 'fc308b30bb24e623fed042ec78b10803b2362a18'
[ffmpeg] / libavcodec / ituh263enc.c
1 /*
2  * ITU H263 bitstream encoder
3  * Copyright (c) 2000,2001 Fabrice Bellard
4  * H263+ support.
5  * Copyright (c) 2001 Juan J. Sierralta P
6  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
7  *
8  * This file is part of FFmpeg.
9  *
10  * FFmpeg is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * FFmpeg is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with FFmpeg; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  */
24
25 /**
26  * @file
27  * h263 bitstream encoder.
28  */
29
30 #include <limits.h>
31
32 #include "libavutil/attributes.h"
33 #include "avcodec.h"
34 #include "mpegvideo.h"
35 #include "h263.h"
36 #include "mathops.h"
37 #include "mpegutils.h"
38 #include "unary.h"
39 #include "flv.h"
40 #include "mpeg4video.h"
41 #include "internal.h"
42
43 /**
44  * Table of number of bits a motion vector component needs.
45  */
46 static uint8_t mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
47
48 /**
49  * Minimal fcode that a motion vector component would need.
50  */
51 static uint8_t fcode_tab[MAX_MV*2+1];
52
53 /**
54  * Minimal fcode that a motion vector component would need in umv.
55  * All entries in this table are 1.
56  */
57 static uint8_t umv_fcode_tab[MAX_MV*2+1];
58
59 //unified encoding tables for run length encoding of coefficients
60 //unified in the sense that the specification specifies the encoding in several steps.
61 static uint8_t  uni_h263_intra_aic_rl_len [64*64*2*2];
62 static uint8_t  uni_h263_inter_rl_len [64*64*2*2];
63 //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128 + (run)*256 + (level))
64 //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run) + (level)*64)
65 #define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level))
66
67 static const uint8_t wrong_run[102] = {
68  1,  2,  3,  5,  4, 10,  9,  8,
69 11, 15, 17, 16, 23, 22, 21, 20,
70 19, 18, 25, 24, 27, 26, 11,  7,
71  6,  1,  2, 13,  2,  2,  2,  2,
72  6, 12,  3,  9,  1,  3,  4,  3,
73  7,  4,  1,  1,  5,  5, 14,  6,
74  1,  7,  1,  8,  1,  1,  1,  1,
75 10,  1,  1,  5,  9, 17, 25, 24,
76 29, 33, 32, 41,  2, 23, 28, 31,
77  3, 22, 30,  4, 27, 40,  8, 26,
78  6, 39,  7, 38, 16, 37, 15, 10,
79 11, 12, 13, 14,  1, 21, 20, 18,
80 19,  2,  1, 34, 35, 36
81 };
82
83 /**
84  * Return the 4 bit value that specifies the given aspect ratio.
85  * This may be one of the standard aspect ratios or it specifies
86  * that the aspect will be stored explicitly later.
87  */
88 av_const int ff_h263_aspect_to_info(AVRational aspect){
89     int i;
90
91     if(aspect.num==0) aspect= (AVRational){1,1};
92
93     for(i=1; i<6; i++){
94         if(av_cmp_q(ff_h263_pixel_aspect[i], aspect) == 0){
95             return i;
96         }
97     }
98
99     return FF_ASPECT_EXTENDED;
100 }
101
102 void ff_h263_encode_picture_header(MpegEncContext * s, int picture_number)
103 {
104     int format, coded_frame_rate, coded_frame_rate_base, i, temp_ref;
105     int best_clock_code=1;
106     int best_divisor=60;
107     int best_error= INT_MAX;
108
109     if(s->h263_plus){
110         for(i=0; i<2; i++){
111             int div, error;
112             div= (s->avctx->time_base.num*1800000LL + 500LL*s->avctx->time_base.den) / ((1000LL+i)*s->avctx->time_base.den);
113             div= av_clip(div, 1, 127);
114             error= FFABS(s->avctx->time_base.num*1800000LL - (1000LL+i)*s->avctx->time_base.den*div);
115             if(error < best_error){
116                 best_error= error;
117                 best_divisor= div;
118                 best_clock_code= i;
119             }
120         }
121     }
122     s->custom_pcf= best_clock_code!=1 || best_divisor!=60;
123     coded_frame_rate= 1800000;
124     coded_frame_rate_base= (1000+best_clock_code)*best_divisor;
125
126     avpriv_align_put_bits(&s->pb);
127
128     /* Update the pointer to last GOB */
129     s->ptr_lastgob = put_bits_ptr(&s->pb);
130     put_bits(&s->pb, 22, 0x20); /* PSC */
131     temp_ref= s->picture_number * (int64_t)coded_frame_rate * s->avctx->time_base.num / //FIXME use timestamp
132                          (coded_frame_rate_base * (int64_t)s->avctx->time_base.den);
133     put_sbits(&s->pb, 8, temp_ref); /* TemporalReference */
134
135     put_bits(&s->pb, 1, 1);     /* marker */
136     put_bits(&s->pb, 1, 0);     /* h263 id */
137     put_bits(&s->pb, 1, 0);     /* split screen off */
138     put_bits(&s->pb, 1, 0);     /* camera  off */
139     put_bits(&s->pb, 1, 0);     /* freeze picture release off */
140
141     format = ff_match_2uint16(ff_h263_format, FF_ARRAY_ELEMS(ff_h263_format), s->width, s->height);
142     if (!s->h263_plus) {
143         /* H.263v1 */
144         put_bits(&s->pb, 3, format);
145         put_bits(&s->pb, 1, (s->pict_type == AV_PICTURE_TYPE_P));
146         /* By now UMV IS DISABLED ON H.263v1, since the restrictions
147         of H.263v1 UMV implies to check the predicted MV after
148         calculation of the current MB to see if we're on the limits */
149         put_bits(&s->pb, 1, 0);         /* Unrestricted Motion Vector: off */
150         put_bits(&s->pb, 1, 0);         /* SAC: off */
151         put_bits(&s->pb, 1, s->obmc);   /* Advanced Prediction */
152         put_bits(&s->pb, 1, 0);         /* only I/P frames, no PB frame */
153         put_bits(&s->pb, 5, s->qscale);
154         put_bits(&s->pb, 1, 0);         /* Continuous Presence Multipoint mode: off */
155     } else {
156         int ufep=1;
157         /* H.263v2 */
158         /* H.263 Plus PTYPE */
159
160         put_bits(&s->pb, 3, 7);
161         put_bits(&s->pb,3,ufep); /* Update Full Extended PTYPE */
162         if (format == 8)
163             put_bits(&s->pb,3,6); /* Custom Source Format */
164         else
165             put_bits(&s->pb, 3, format);
166
167         put_bits(&s->pb,1, s->custom_pcf);
168         put_bits(&s->pb,1, s->umvplus); /* Unrestricted Motion Vector */
169         put_bits(&s->pb,1,0); /* SAC: off */
170         put_bits(&s->pb,1,s->obmc); /* Advanced Prediction Mode */
171         put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */
172         put_bits(&s->pb,1,s->loop_filter); /* Deblocking Filter */
173         put_bits(&s->pb,1,s->h263_slice_structured); /* Slice Structured */
174         put_bits(&s->pb,1,0); /* Reference Picture Selection: off */
175         put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */
176         put_bits(&s->pb,1,s->alt_inter_vlc); /* Alternative Inter VLC */
177         put_bits(&s->pb,1,s->modified_quant); /* Modified Quantization: */
178         put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
179         put_bits(&s->pb,3,0); /* Reserved */
180
181         put_bits(&s->pb, 3, s->pict_type == AV_PICTURE_TYPE_P);
182
183         put_bits(&s->pb,1,0); /* Reference Picture Resampling: off */
184         put_bits(&s->pb,1,0); /* Reduced-Resolution Update: off */
185         put_bits(&s->pb,1,s->no_rounding); /* Rounding Type */
186         put_bits(&s->pb,2,0); /* Reserved */
187         put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
188
189         /* This should be here if PLUSPTYPE */
190         put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
191
192         if (format == 8) {
193             /* Custom Picture Format (CPFMT) */
194             s->aspect_ratio_info= ff_h263_aspect_to_info(s->avctx->sample_aspect_ratio);
195
196             put_bits(&s->pb,4,s->aspect_ratio_info);
197             put_bits(&s->pb,9,(s->width >> 2) - 1);
198             put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
199             put_bits(&s->pb,9,(s->height >> 2));
200             if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
201                 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
202                 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
203             }
204         }
205         if(s->custom_pcf){
206             if(ufep){
207                 put_bits(&s->pb, 1, best_clock_code);
208                 put_bits(&s->pb, 7, best_divisor);
209             }
210             put_sbits(&s->pb, 2, temp_ref>>8);
211         }
212
213         /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
214         if (s->umvplus)
215 //            put_bits(&s->pb,1,1); /* Limited according tables of Annex D */
216 //FIXME check actual requested range
217             put_bits(&s->pb,2,1); /* unlimited */
218         if(s->h263_slice_structured)
219             put_bits(&s->pb,2,0); /* no weird submodes */
220
221         put_bits(&s->pb, 5, s->qscale);
222     }
223
224     put_bits(&s->pb, 1, 0);     /* no PEI */
225
226     if(s->h263_slice_structured){
227         put_bits(&s->pb, 1, 1);
228
229         av_assert1(s->mb_x == 0 && s->mb_y == 0);
230         ff_h263_encode_mba(s);
231
232         put_bits(&s->pb, 1, 1);
233     }
234 }
235
236 /**
237  * Encode a group of blocks header.
238  */
239 void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line)
240 {
241     put_bits(&s->pb, 17, 1); /* GBSC */
242
243     if(s->h263_slice_structured){
244         put_bits(&s->pb, 1, 1);
245
246         ff_h263_encode_mba(s);
247
248         if(s->mb_num > 1583)
249             put_bits(&s->pb, 1, 1);
250         put_bits(&s->pb, 5, s->qscale); /* GQUANT */
251         put_bits(&s->pb, 1, 1);
252         put_bits(&s->pb, 2, s->pict_type == AV_PICTURE_TYPE_I); /* GFID */
253     }else{
254         int gob_number= mb_line / s->gob_index;
255
256         put_bits(&s->pb, 5, gob_number); /* GN */
257         put_bits(&s->pb, 2, s->pict_type == AV_PICTURE_TYPE_I); /* GFID */
258         put_bits(&s->pb, 5, s->qscale); /* GQUANT */
259     }
260 }
261
262 /**
263  * modify qscale so that encoding is actually possible in h263 (limit difference to -2..2)
264  */
265 void ff_clean_h263_qscales(MpegEncContext *s){
266     int i;
267     int8_t * const qscale_table = s->current_picture.qscale_table;
268
269     ff_init_qscale_tab(s);
270
271     for(i=1; i<s->mb_num; i++){
272         if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i-1] ] >2)
273             qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i-1] ]+2;
274     }
275     for(i=s->mb_num-2; i>=0; i--){
276         if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i+1] ] >2)
277             qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i+1] ]+2;
278     }
279
280     if(s->codec_id != AV_CODEC_ID_H263P){
281         for(i=1; i<s->mb_num; i++){
282             int mb_xy= s->mb_index2xy[i];
283
284             if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&CANDIDATE_MB_TYPE_INTER4V)){
285                 s->mb_type[mb_xy]|= CANDIDATE_MB_TYPE_INTER;
286             }
287         }
288     }
289 }
290
291 static const int dquant_code[5]= {1,0,9,2,3};
292
293 /**
294  * Encode an 8x8 block.
295  * @param block the 8x8 block
296  * @param n block index (0-3 are luma, 4-5 are chroma)
297  */
298 static void h263_encode_block(MpegEncContext * s, int16_t * block, int n)
299 {
300     int level, run, last, i, j, last_index, last_non_zero, sign, slevel, code;
301     RLTable *rl;
302
303     rl = &ff_h263_rl_inter;
304     if (s->mb_intra && !s->h263_aic) {
305         /* DC coef */
306         level = block[0];
307         /* 255 cannot be represented, so we clamp */
308         if (level > 254) {
309             level = 254;
310             block[0] = 254;
311         }
312         /* 0 cannot be represented also */
313         else if (level < 1) {
314             level = 1;
315             block[0] = 1;
316         }
317         if (level == 128) //FIXME check rv10
318             put_bits(&s->pb, 8, 0xff);
319         else
320             put_bits(&s->pb, 8, level);
321         i = 1;
322     } else {
323         i = 0;
324         if (s->h263_aic && s->mb_intra)
325             rl = &ff_rl_intra_aic;
326
327         if(s->alt_inter_vlc && !s->mb_intra){
328             int aic_vlc_bits=0;
329             int inter_vlc_bits=0;
330             int wrong_pos=-1;
331             int aic_code;
332
333             last_index = s->block_last_index[n];
334             last_non_zero = i - 1;
335             for (; i <= last_index; i++) {
336                 j = s->intra_scantable.permutated[i];
337                 level = block[j];
338                 if (level) {
339                     run = i - last_non_zero - 1;
340                     last = (i == last_index);
341
342                     if(level<0) level= -level;
343
344                     code = get_rl_index(rl, last, run, level);
345                     aic_code = get_rl_index(&ff_rl_intra_aic, last, run, level);
346                     inter_vlc_bits += rl->table_vlc[code][1]+1;
347                     aic_vlc_bits   += ff_rl_intra_aic.table_vlc[aic_code][1]+1;
348
349                     if (code == rl->n) {
350                         inter_vlc_bits += 1+6+8-1;
351                     }
352                     if (aic_code == ff_rl_intra_aic.n) {
353                         aic_vlc_bits += 1+6+8-1;
354                         wrong_pos += run + 1;
355                     }else
356                         wrong_pos += wrong_run[aic_code];
357                     last_non_zero = i;
358                 }
359             }
360             i = 0;
361             if(aic_vlc_bits < inter_vlc_bits && wrong_pos > 63)
362                 rl = &ff_rl_intra_aic;
363         }
364     }
365
366     /* AC coefs */
367     last_index = s->block_last_index[n];
368     last_non_zero = i - 1;
369     for (; i <= last_index; i++) {
370         j = s->intra_scantable.permutated[i];
371         level = block[j];
372         if (level) {
373             run = i - last_non_zero - 1;
374             last = (i == last_index);
375             sign = 0;
376             slevel = level;
377             if (level < 0) {
378                 sign = 1;
379                 level = -level;
380             }
381             code = get_rl_index(rl, last, run, level);
382             put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
383             if (code == rl->n) {
384               if(!CONFIG_FLV_ENCODER || s->h263_flv <= 1){
385                 put_bits(&s->pb, 1, last);
386                 put_bits(&s->pb, 6, run);
387
388                 av_assert2(slevel != 0);
389
390                 if(level < 128)
391                     put_sbits(&s->pb, 8, slevel);
392                 else{
393                     put_bits(&s->pb, 8, 128);
394                     put_sbits(&s->pb, 5, slevel);
395                     put_sbits(&s->pb, 6, slevel>>5);
396                 }
397               }else{
398                     ff_flv2_encode_ac_esc(&s->pb, slevel, level, run, last);
399               }
400             } else {
401                 put_bits(&s->pb, 1, sign);
402             }
403             last_non_zero = i;
404         }
405     }
406 }
407
408 /* Encode MV differences on H.263+ with Unrestricted MV mode */
409 static void h263p_encode_umotion(MpegEncContext * s, int val)
410 {
411     short sval = 0;
412     short i = 0;
413     short n_bits = 0;
414     short temp_val;
415     int code = 0;
416     int tcode;
417
418     if ( val == 0)
419         put_bits(&s->pb, 1, 1);
420     else if (val == 1)
421         put_bits(&s->pb, 3, 0);
422     else if (val == -1)
423         put_bits(&s->pb, 3, 2);
424     else {
425
426         sval = ((val < 0) ? (short)(-val):(short)val);
427         temp_val = sval;
428
429         while (temp_val != 0) {
430             temp_val = temp_val >> 1;
431             n_bits++;
432         }
433
434         i = n_bits - 1;
435         while (i > 0) {
436             tcode = (sval & (1 << (i-1))) >> (i-1);
437             tcode = (tcode << 1) | 1;
438             code = (code << 2) | tcode;
439             i--;
440         }
441         code = ((code << 1) | (val < 0)) << 1;
442         put_bits(&s->pb, (2*n_bits)+1, code);
443     }
444 }
445
446 void ff_h263_encode_mb(MpegEncContext * s,
447                        int16_t block[6][64],
448                        int motion_x, int motion_y)
449 {
450     int cbpc, cbpy, i, cbp, pred_x, pred_y;
451     int16_t pred_dc;
452     int16_t rec_intradc[6];
453     int16_t *dc_ptr[6];
454     const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1);
455
456     if (!s->mb_intra) {
457         /* compute cbp */
458         cbp= get_p_cbp(s, block, motion_x, motion_y);
459
460         if ((cbp | motion_x | motion_y | s->dquant | (s->mv_type - MV_TYPE_16X16)) == 0) {
461             /* skip macroblock */
462             put_bits(&s->pb, 1, 1);
463             if(interleaved_stats){
464                 s->misc_bits++;
465                 s->last_bits++;
466             }
467             s->skip_count++;
468
469             return;
470         }
471         put_bits(&s->pb, 1, 0);         /* mb coded */
472
473         cbpc = cbp & 3;
474         cbpy = cbp >> 2;
475         if(s->alt_inter_vlc==0 || cbpc!=3)
476             cbpy ^= 0xF;
477         if(s->dquant) cbpc+= 8;
478         if(s->mv_type==MV_TYPE_16X16){
479             put_bits(&s->pb,
480                     ff_h263_inter_MCBPC_bits[cbpc],
481                     ff_h263_inter_MCBPC_code[cbpc]);
482
483             put_bits(&s->pb, ff_h263_cbpy_tab[cbpy][1], ff_h263_cbpy_tab[cbpy][0]);
484             if(s->dquant)
485                 put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
486
487             if(interleaved_stats){
488                 s->misc_bits+= get_bits_diff(s);
489             }
490
491             /* motion vectors: 16x16 mode */
492             ff_h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
493
494             if (!s->umvplus) {
495                 ff_h263_encode_motion_vector(s, motion_x - pred_x,
496                                                 motion_y - pred_y, 1);
497             }
498             else {
499                 h263p_encode_umotion(s, motion_x - pred_x);
500                 h263p_encode_umotion(s, motion_y - pred_y);
501                 if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
502                     /* To prevent Start Code emulation */
503                     put_bits(&s->pb,1,1);
504             }
505         }else{
506             put_bits(&s->pb,
507                     ff_h263_inter_MCBPC_bits[cbpc+16],
508                     ff_h263_inter_MCBPC_code[cbpc+16]);
509             put_bits(&s->pb, ff_h263_cbpy_tab[cbpy][1], ff_h263_cbpy_tab[cbpy][0]);
510             if(s->dquant)
511                 put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
512
513             if(interleaved_stats){
514                 s->misc_bits+= get_bits_diff(s);
515             }
516
517             for(i=0; i<4; i++){
518                 /* motion vectors: 8x8 mode*/
519                 ff_h263_pred_motion(s, i, 0, &pred_x, &pred_y);
520
521                 motion_x = s->current_picture.motion_val[0][s->block_index[i]][0];
522                 motion_y = s->current_picture.motion_val[0][s->block_index[i]][1];
523                 if (!s->umvplus) {
524                     ff_h263_encode_motion_vector(s, motion_x - pred_x,
525                                                     motion_y - pred_y, 1);
526                 }
527                 else {
528                     h263p_encode_umotion(s, motion_x - pred_x);
529                     h263p_encode_umotion(s, motion_y - pred_y);
530                     if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
531                         /* To prevent Start Code emulation */
532                         put_bits(&s->pb,1,1);
533                 }
534             }
535         }
536
537         if(interleaved_stats){
538             s->mv_bits+= get_bits_diff(s);
539         }
540     } else {
541         av_assert2(s->mb_intra);
542
543         cbp = 0;
544         if (s->h263_aic) {
545             /* Predict DC */
546             for(i=0; i<6; i++) {
547                 int16_t level = block[i][0];
548                 int scale;
549
550                 if(i<4) scale= s->y_dc_scale;
551                 else    scale= s->c_dc_scale;
552
553                 pred_dc = ff_h263_pred_dc(s, i, &dc_ptr[i]);
554                 level -= pred_dc;
555                 /* Quant */
556                 if (level >= 0)
557                     level = (level + (scale>>1))/scale;
558                 else
559                     level = (level - (scale>>1))/scale;
560
561                 if(!s->modified_quant){
562                     if (level < -127)
563                         level = -127;
564                     else if (level > 127)
565                         level = 127;
566                 }
567
568                 block[i][0] = level;
569                 /* Reconstruction */
570                 rec_intradc[i] = scale*level + pred_dc;
571                 /* Oddify */
572                 rec_intradc[i] |= 1;
573                 //if ((rec_intradc[i] % 2) == 0)
574                 //    rec_intradc[i]++;
575                 /* Clipping */
576                 if (rec_intradc[i] < 0)
577                     rec_intradc[i] = 0;
578                 else if (rec_intradc[i] > 2047)
579                     rec_intradc[i] = 2047;
580
581                 /* Update AC/DC tables */
582                 *dc_ptr[i] = rec_intradc[i];
583                 /* AIC can change CBP */
584                 if (s->block_last_index[i] > 0 ||
585                     (s->block_last_index[i] == 0 && level !=0))
586                     cbp |= 1 << (5 - i);
587             }
588         }else{
589             for(i=0; i<6; i++) {
590                 /* compute cbp */
591                 if (s->block_last_index[i] >= 1)
592                     cbp |= 1 << (5 - i);
593             }
594         }
595
596         cbpc = cbp & 3;
597         if (s->pict_type == AV_PICTURE_TYPE_I) {
598             if(s->dquant) cbpc+=4;
599             put_bits(&s->pb,
600                 ff_h263_intra_MCBPC_bits[cbpc],
601                 ff_h263_intra_MCBPC_code[cbpc]);
602         } else {
603             if(s->dquant) cbpc+=8;
604             put_bits(&s->pb, 1, 0);     /* mb coded */
605             put_bits(&s->pb,
606                 ff_h263_inter_MCBPC_bits[cbpc + 4],
607                 ff_h263_inter_MCBPC_code[cbpc + 4]);
608         }
609         if (s->h263_aic) {
610             /* XXX: currently, we do not try to use ac prediction */
611             put_bits(&s->pb, 1, 0);     /* no AC prediction */
612         }
613         cbpy = cbp >> 2;
614         put_bits(&s->pb, ff_h263_cbpy_tab[cbpy][1], ff_h263_cbpy_tab[cbpy][0]);
615         if(s->dquant)
616             put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
617
618         if(interleaved_stats){
619             s->misc_bits+= get_bits_diff(s);
620         }
621     }
622
623     for(i=0; i<6; i++) {
624         /* encode each block */
625         h263_encode_block(s, block[i], i);
626
627         /* Update INTRADC for decoding */
628         if (s->h263_aic && s->mb_intra) {
629             block[i][0] = rec_intradc[i];
630
631         }
632     }
633
634     if(interleaved_stats){
635         if (!s->mb_intra) {
636             s->p_tex_bits+= get_bits_diff(s);
637             s->f_count++;
638         }else{
639             s->i_tex_bits+= get_bits_diff(s);
640             s->i_count++;
641         }
642     }
643 }
644
645 void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code)
646 {
647     int range, bit_size, sign, code, bits;
648
649     if (val == 0) {
650         /* zero vector */
651         code = 0;
652         put_bits(&s->pb, ff_mvtab[code][1], ff_mvtab[code][0]);
653     } else {
654         bit_size = f_code - 1;
655         range = 1 << bit_size;
656         /* modulo encoding */
657         val = sign_extend(val, 6 + bit_size);
658         sign = val>>31;
659         val= (val^sign)-sign;
660         sign&=1;
661
662         val--;
663         code = (val >> bit_size) + 1;
664         bits = val & (range - 1);
665
666         put_bits(&s->pb, ff_mvtab[code][1] + 1, (ff_mvtab[code][0] << 1) | sign);
667         if (bit_size > 0) {
668             put_bits(&s->pb, bit_size, bits);
669         }
670     }
671 }
672
673 static av_cold void init_mv_penalty_and_fcode(MpegEncContext *s)
674 {
675     int f_code;
676     int mv;
677
678     for(f_code=1; f_code<=MAX_FCODE; f_code++){
679         for(mv=-MAX_MV; mv<=MAX_MV; mv++){
680             int len;
681
682             if(mv==0) len= ff_mvtab[0][1];
683             else{
684                 int val, bit_size, code;
685
686                 bit_size = f_code - 1;
687
688                 val=mv;
689                 if (val < 0)
690                     val = -val;
691                 val--;
692                 code = (val >> bit_size) + 1;
693                 if(code<33){
694                     len= ff_mvtab[code][1] + 1 + bit_size;
695                 }else{
696                     len= ff_mvtab[32][1] + av_log2(code>>5) + 2 + bit_size;
697                 }
698             }
699
700             mv_penalty[f_code][mv+MAX_MV]= len;
701         }
702     }
703
704     for(f_code=MAX_FCODE; f_code>0; f_code--){
705         for(mv=-(16<<f_code); mv<(16<<f_code); mv++){
706             fcode_tab[mv+MAX_MV]= f_code;
707         }
708     }
709
710     for(mv=0; mv<MAX_MV*2+1; mv++){
711         umv_fcode_tab[mv]= 1;
712     }
713 }
714
715 static av_cold void init_uni_h263_rl_tab(RLTable *rl, uint32_t *bits_tab,
716                                          uint8_t *len_tab)
717 {
718     int slevel, run, last;
719
720     av_assert0(MAX_LEVEL >= 64);
721     av_assert0(MAX_RUN   >= 63);
722
723     for(slevel=-64; slevel<64; slevel++){
724         if(slevel==0) continue;
725         for(run=0; run<64; run++){
726             for(last=0; last<=1; last++){
727                 const int index= UNI_MPEG4_ENC_INDEX(last, run, slevel+64);
728                 int level= slevel < 0 ? -slevel : slevel;
729                 int sign= slevel < 0 ? 1 : 0;
730                 int bits, len, code;
731
732                 len_tab[index]= 100;
733
734                 /* ESC0 */
735                 code= get_rl_index(rl, last, run, level);
736                 bits= rl->table_vlc[code][0];
737                 len=  rl->table_vlc[code][1];
738                 bits=bits*2+sign; len++;
739
740                 if(code!=rl->n && len < len_tab[index]){
741                     if(bits_tab) bits_tab[index]= bits;
742                     len_tab [index]= len;
743                 }
744                 /* ESC */
745                 bits= rl->table_vlc[rl->n][0];
746                 len = rl->table_vlc[rl->n][1];
747                 bits=bits*2+last; len++;
748                 bits=bits*64+run; len+=6;
749                 bits=bits*256+(level&0xff); len+=8;
750
751                 if(len < len_tab[index]){
752                     if(bits_tab) bits_tab[index]= bits;
753                     len_tab [index]= len;
754                 }
755             }
756         }
757     }
758 }
759
760 av_cold void ff_h263_encode_init(MpegEncContext *s)
761 {
762     static int done = 0;
763
764     if (!done) {
765         done = 1;
766
767         ff_init_rl(&ff_h263_rl_inter, ff_h263_static_rl_table_store[0]);
768         ff_init_rl(&ff_rl_intra_aic, ff_h263_static_rl_table_store[1]);
769
770         init_uni_h263_rl_tab(&ff_rl_intra_aic, NULL, uni_h263_intra_aic_rl_len);
771         init_uni_h263_rl_tab(&ff_h263_rl_inter    , NULL, uni_h263_inter_rl_len);
772
773         init_mv_penalty_and_fcode(s);
774     }
775     s->me.mv_penalty= mv_penalty; //FIXME exact table for msmpeg4 & h263p
776
777     s->intra_ac_vlc_length     =s->inter_ac_vlc_length     = uni_h263_inter_rl_len;
778     s->intra_ac_vlc_last_length=s->inter_ac_vlc_last_length= uni_h263_inter_rl_len + 128*64;
779     if(s->h263_aic){
780         s->intra_ac_vlc_length     = uni_h263_intra_aic_rl_len;
781         s->intra_ac_vlc_last_length= uni_h263_intra_aic_rl_len + 128*64;
782     }
783     s->ac_esc_length= 7+1+6+8;
784
785     // use fcodes >1 only for mpeg4 & h263 & h263p FIXME
786     switch(s->codec_id){
787     case AV_CODEC_ID_MPEG4:
788         s->fcode_tab= fcode_tab;
789         break;
790     case AV_CODEC_ID_H263P:
791         if(s->umvplus)
792             s->fcode_tab= umv_fcode_tab;
793         if(s->modified_quant){
794             s->min_qcoeff= -2047;
795             s->max_qcoeff=  2047;
796         }else{
797             s->min_qcoeff= -127;
798             s->max_qcoeff=  127;
799         }
800         break;
801         //Note for mpeg4 & h263 the dc-scale table will be set per frame as needed later
802     case AV_CODEC_ID_FLV1:
803         if (s->h263_flv > 1) {
804             s->min_qcoeff= -1023;
805             s->max_qcoeff=  1023;
806         } else {
807             s->min_qcoeff= -127;
808             s->max_qcoeff=  127;
809         }
810         break;
811     default: //nothing needed - default table already set in mpegvideo.c
812         s->min_qcoeff= -127;
813         s->max_qcoeff=  127;
814     }
815     if(s->h263_aic){
816          s->y_dc_scale_table=
817          s->c_dc_scale_table= ff_aic_dc_scale_table;
818     }else{
819         s->y_dc_scale_table=
820         s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
821     }
822 }
823
824 void ff_h263_encode_mba(MpegEncContext *s)
825 {
826     int i, mb_pos;
827
828     for(i=0; i<6; i++){
829         if(s->mb_num-1 <= ff_mba_max[i]) break;
830     }
831     mb_pos= s->mb_x + s->mb_width*s->mb_y;
832     put_bits(&s->pb, ff_mba_length[i], mb_pos);
833 }