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"
37 #include "mpegutils.h"
40 #include "mpeg4video.h"
44 * Table of number of bits a motion vector component needs.
46 static uint8_t mv_penalty
[MAX_FCODE
+1][MAX_MV
*2+1];
49 * Minimal fcode that a motion vector component would need.
51 static uint8_t fcode_tab
[MAX_MV
*2+1];
54 * Minimal fcode that a motion vector component would need in umv.
55 * All entries in this table are 1.
57 static uint8_t umv_fcode_tab
[MAX_MV
*2+1];
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))
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,
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.
88 av_const
int ff_h263_aspect_to_info(AVRational aspect
){
91 if(aspect
.num
==0) aspect
= (AVRational
){1,1};
94 if(av_cmp_q(ff_h263_pixel_aspect
[i
], aspect
) == 0){
99 return FF_ASPECT_EXTENDED
;
102 void ff_h263_encode_picture_header(MpegEncContext
* s
, int picture_number
)
104 int format
, coded_frame_rate
, coded_frame_rate_base
, i
, temp_ref
;
105 int best_clock_code
=1;
107 int best_error
= INT_MAX
;
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
){
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
;
126 avpriv_align_put_bits(&s
->pb
);
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 */
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 */
141 format
= ff_match_2uint16(ff_h263_format
, FF_ARRAY_ELEMS(ff_h263_format
), s
->width
, s
->height
);
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 */
158 /* H.263 Plus PTYPE */
160 put_bits(&s
->pb
, 3, 7);
161 put_bits(&s
->pb
,3,ufep
); /* Update Full Extended PTYPE */
163 put_bits(&s
->pb
,3,6); /* Custom Source Format */
165 put_bits(&s
->pb
, 3, format
);
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 */
181 put_bits(&s
->pb
, 3, s
->pict_type
== AV_PICTURE_TYPE_P
);
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 */
189 /* This should be here if PLUSPTYPE */
190 put_bits(&s
->pb
, 1, 0); /* Continuous Presence Multipoint mode: off */
193 /* Custom Picture Format (CPFMT) */
194 s
->aspect_ratio_info
= ff_h263_aspect_to_info(s
->avctx
->sample_aspect_ratio
);
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
);
207 put_bits(&s
->pb
, 1, best_clock_code
);
208 put_bits(&s
->pb
, 7, best_divisor
);
210 put_sbits(&s
->pb
, 2, temp_ref
>>8);
213 /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
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 */
221 put_bits(&s
->pb
, 5, s
->qscale
);
224 put_bits(&s
->pb
, 1, 0); /* no PEI */
226 if(s
->h263_slice_structured
){
227 put_bits(&s
->pb
, 1, 1);
229 av_assert1(s
->mb_x
== 0 && s
->mb_y
== 0);
230 ff_h263_encode_mba(s
);
232 put_bits(&s
->pb
, 1, 1);
237 * Encode a group of blocks header.
239 void ff_h263_encode_gob_header(MpegEncContext
* s
, int mb_line
)
241 put_bits(&s
->pb
, 17, 1); /* GBSC */
243 if(s
->h263_slice_structured
){
244 put_bits(&s
->pb
, 1, 1);
246 ff_h263_encode_mba(s
);
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 */
254 int gob_number
= mb_line
/ s
->gob_index
;
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 */
263 * modify qscale so that encoding is actually possible in h263 (limit difference to -2..2)
265 void ff_clean_h263_qscales(MpegEncContext
*s
){
267 int8_t * const qscale_table
= s
->current_picture
.qscale_table
;
269 ff_init_qscale_tab(s
);
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;
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;
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
];
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
;
291 static const int dquant_code
[5]= {1,0,9,2,3};
294 * Encode an 8x8 block.
295 * @param block the 8x8 block
296 * @param n block index (0-3 are luma, 4-5 are chroma)
298 static void h263_encode_block(MpegEncContext
* s
, int16_t * block
, int n
)
300 int level
, run
, last
, i
, j
, last_index
, last_non_zero
, sign
, slevel
, code
;
303 rl
= &ff_h263_rl_inter
;
304 if (s
->mb_intra
&& !s
->h263_aic
) {
307 /* 255 cannot be represented, so we clamp */
312 /* 0 cannot be represented also */
313 else if (level
< 1) {
317 if (level
== 128) //FIXME check rv10
318 put_bits(&s
->pb
, 8, 0xff);
320 put_bits(&s
->pb
, 8, level
);
324 if (s
->h263_aic
&& s
->mb_intra
)
325 rl
= &ff_rl_intra_aic
;
327 if(s
->alt_inter_vlc
&& !s
->mb_intra
){
329 int inter_vlc_bits
=0;
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
];
339 run
= i
- last_non_zero
- 1;
340 last
= (i
== last_index
);
342 if(level
<0) level
= -level
;
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;
350 inter_vlc_bits
+= 1+6+8-1;
352 if (aic_code
== ff_rl_intra_aic
.n
) {
353 aic_vlc_bits
+= 1+6+8-1;
354 wrong_pos
+= run
+ 1;
356 wrong_pos
+= wrong_run
[aic_code
];
361 if(aic_vlc_bits
< inter_vlc_bits
&& wrong_pos
> 63)
362 rl
= &ff_rl_intra_aic
;
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
];
373 run
= i
- last_non_zero
- 1;
374 last
= (i
== last_index
);
381 code
= get_rl_index(rl
, last
, run
, level
);
382 put_bits(&s
->pb
, rl
->table_vlc
[code
][1], rl
->table_vlc
[code
][0]);
384 if(!CONFIG_FLV_ENCODER
|| s
->h263_flv
<= 1){
385 put_bits(&s
->pb
, 1, last
);
386 put_bits(&s
->pb
, 6, run
);
388 av_assert2(slevel
!= 0);
391 put_sbits(&s
->pb
, 8, slevel
);
393 put_bits(&s
->pb
, 8, 128);
394 put_sbits(&s
->pb
, 5, slevel
);
395 put_sbits(&s
->pb
, 6, slevel
>>5);
398 ff_flv2_encode_ac_esc(&s
->pb
, slevel
, level
, run
, last
);
401 put_bits(&s
->pb
, 1, sign
);
408 /* Encode MV differences on H.263+ with Unrestricted MV mode */
409 static void h263p_encode_umotion(MpegEncContext
* s
, int val
)
419 put_bits(&s
->pb
, 1, 1);
421 put_bits(&s
->pb
, 3, 0);
423 put_bits(&s
->pb
, 3, 2);
426 sval
= ((val
< 0) ? (short)(-val
):(short)val
);
429 while (temp_val
!= 0) {
430 temp_val
= temp_val
>> 1;
436 tcode
= (sval
& (1 << (i
-1))) >> (i
-1);
437 tcode
= (tcode
<< 1) | 1;
438 code
= (code
<< 2) | tcode
;
441 code
= ((code
<< 1) | (val
< 0)) << 1;
442 put_bits(&s
->pb
, (2*n_bits
)+1, code
);
446 void ff_h263_encode_mb(MpegEncContext
* s
,
447 int16_t block
[6][64],
448 int motion_x
, int motion_y
)
450 int cbpc
, cbpy
, i
, cbp
, pred_x
, pred_y
;
452 int16_t rec_intradc
[6];
454 const int interleaved_stats
= (s
->flags
&CODEC_FLAG_PASS1
);
458 cbp
= get_p_cbp(s
, block
, motion_x
, motion_y
);
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
){
471 put_bits(&s
->pb
, 1, 0); /* mb coded */
475 if(s
->alt_inter_vlc
==0 || cbpc
!=3)
477 if(s
->dquant
) cbpc
+= 8;
478 if(s
->mv_type
==MV_TYPE_16X16
){
480 ff_h263_inter_MCBPC_bits
[cbpc
],
481 ff_h263_inter_MCBPC_code
[cbpc
]);
483 put_bits(&s
->pb
, ff_h263_cbpy_tab
[cbpy
][1], ff_h263_cbpy_tab
[cbpy
][0]);
485 put_bits(&s
->pb
, 2, dquant_code
[s
->dquant
+2]);
487 if(interleaved_stats
){
488 s
->misc_bits
+= get_bits_diff(s
);
491 /* motion vectors: 16x16 mode */
492 ff_h263_pred_motion(s
, 0, 0, &pred_x
, &pred_y
);
495 ff_h263_encode_motion_vector(s
, motion_x
- pred_x
,
496 motion_y
- pred_y
, 1);
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);
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]);
511 put_bits(&s
->pb
, 2, dquant_code
[s
->dquant
+2]);
513 if(interleaved_stats
){
514 s
->misc_bits
+= get_bits_diff(s
);
518 /* motion vectors: 8x8 mode*/
519 ff_h263_pred_motion(s
, i
, 0, &pred_x
, &pred_y
);
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];
524 ff_h263_encode_motion_vector(s
, motion_x
- pred_x
,
525 motion_y
- pred_y
, 1);
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);
537 if(interleaved_stats
){
538 s
->mv_bits
+= get_bits_diff(s
);
541 av_assert2(s
->mb_intra
);
547 int16_t level
= block
[i
][0];
550 if(i
<4) scale
= s
->y_dc_scale
;
551 else scale
= s
->c_dc_scale
;
553 pred_dc
= ff_h263_pred_dc(s
, i
, &dc_ptr
[i
]);
557 level
= (level
+ (scale
>>1))/scale
;
559 level
= (level
- (scale
>>1))/scale
;
561 if(!s
->modified_quant
){
564 else if (level
> 127)
570 rec_intradc
[i
] = scale
*level
+ pred_dc
;
573 //if ((rec_intradc[i] % 2) == 0)
576 if (rec_intradc
[i
] < 0)
578 else if (rec_intradc
[i
] > 2047)
579 rec_intradc
[i
] = 2047;
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))
591 if (s
->block_last_index
[i
] >= 1)
597 if (s
->pict_type
== AV_PICTURE_TYPE_I
) {
598 if(s
->dquant
) cbpc
+=4;
600 ff_h263_intra_MCBPC_bits
[cbpc
],
601 ff_h263_intra_MCBPC_code
[cbpc
]);
603 if(s
->dquant
) cbpc
+=8;
604 put_bits(&s
->pb
, 1, 0); /* mb coded */
606 ff_h263_inter_MCBPC_bits
[cbpc
+ 4],
607 ff_h263_inter_MCBPC_code
[cbpc
+ 4]);
610 /* XXX: currently, we do not try to use ac prediction */
611 put_bits(&s
->pb
, 1, 0); /* no AC prediction */
614 put_bits(&s
->pb
, ff_h263_cbpy_tab
[cbpy
][1], ff_h263_cbpy_tab
[cbpy
][0]);
616 put_bits(&s
->pb
, 2, dquant_code
[s
->dquant
+2]);
618 if(interleaved_stats
){
619 s
->misc_bits
+= get_bits_diff(s
);
624 /* encode each block */
625 h263_encode_block(s
, block
[i
], i
);
627 /* Update INTRADC for decoding */
628 if (s
->h263_aic
&& s
->mb_intra
) {
629 block
[i
][0] = rec_intradc
[i
];
634 if(interleaved_stats
){
636 s
->p_tex_bits
+= get_bits_diff(s
);
639 s
->i_tex_bits
+= get_bits_diff(s
);
645 void ff_h263_encode_motion(MpegEncContext
* s
, int val
, int f_code
)
647 int range
, bit_size
, sign
, code
, bits
;
652 put_bits(&s
->pb
, ff_mvtab
[code
][1], ff_mvtab
[code
][0]);
654 bit_size
= f_code
- 1;
655 range
= 1 << bit_size
;
656 /* modulo encoding */
657 val
= sign_extend(val
, 6 + bit_size
);
659 val
= (val
^sign
)-sign
;
663 code
= (val
>> bit_size
) + 1;
664 bits
= val
& (range
- 1);
666 put_bits(&s
->pb
, ff_mvtab
[code
][1] + 1, (ff_mvtab
[code
][0] << 1) | sign
);
668 put_bits(&s
->pb
, bit_size
, bits
);
673 static av_cold
void init_mv_penalty_and_fcode(MpegEncContext
*s
)
678 for(f_code
=1; f_code
<=MAX_FCODE
; f_code
++){
679 for(mv
=-MAX_MV
; mv
<=MAX_MV
; mv
++){
682 if(mv
==0) len
= ff_mvtab
[0][1];
684 int val
, bit_size
, code
;
686 bit_size
= f_code
- 1;
692 code
= (val
>> bit_size
) + 1;
694 len
= ff_mvtab
[code
][1] + 1 + bit_size
;
696 len
= ff_mvtab
[32][1] + av_log2(code
>>5) + 2 + bit_size
;
700 mv_penalty
[f_code
][mv
+MAX_MV
]= len
;
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
;
710 for(mv
=0; mv
<MAX_MV
*2+1; mv
++){
711 umv_fcode_tab
[mv
]= 1;
715 static av_cold
void init_uni_h263_rl_tab(RLTable
*rl
, uint32_t *bits_tab
,
718 int slevel
, run
, last
;
720 av_assert0(MAX_LEVEL
>= 64);
721 av_assert0(MAX_RUN
>= 63);
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;
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
++;
740 if(code
!=rl
->n
&& len
< len_tab
[index
]){
741 if(bits_tab
) bits_tab
[index
]= bits
;
742 len_tab
[index
]= len
;
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;
751 if(len
< len_tab
[index
]){
752 if(bits_tab
) bits_tab
[index
]= bits
;
753 len_tab
[index
]= len
;
760 av_cold
void ff_h263_encode_init(MpegEncContext
*s
)
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]);
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
);
773 init_mv_penalty_and_fcode(s
);
775 s
->me
.mv_penalty
= mv_penalty
; //FIXME exact table for msmpeg4 & h263p
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;
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;
783 s
->ac_esc_length
= 7+1+6+8;
785 // use fcodes >1 only for mpeg4 & h263 & h263p FIXME
787 case AV_CODEC_ID_MPEG4
:
788 s
->fcode_tab
= fcode_tab
;
790 case AV_CODEC_ID_H263P
:
792 s
->fcode_tab
= umv_fcode_tab
;
793 if(s
->modified_quant
){
794 s
->min_qcoeff
= -2047;
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;
811 default: //nothing needed - default table already set in mpegvideo.c
817 s
->c_dc_scale_table
= ff_aic_dc_scale_table
;
820 s
->c_dc_scale_table
= ff_mpeg1_dc_scale_table
;
824 void ff_h263_encode_mba(MpegEncContext
*s
)
829 if(s
->mb_num
-1 <= ff_mba_max
[i
]) break;
831 mb_pos
= s
->mb_x
+ s
->mb_width
*s
->mb_y
;
832 put_bits(&s
->pb
, ff_mba_length
[i
], mb_pos
);