2 * MSMPEG4 backend for ffmpeg encoder and decoder
3 * Copyright (c) 2001 Fabrice Bellard.
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * msmpeg4v1 & v2 stuff by Michael Niedermayer <michaelni@gmx.at>
25 * MSMPEG4 backend for ffmpeg encoder and decoder.
30 #include "mpegvideo.h"
33 * You can also call this codec : MPEG4 with a twist !
36 * - (encoding) select best mv table (two choices)
37 * - (encoding) select best vlc/dc table
42 #define CBPY_VLC_BITS 6
43 #define INTER_INTRA_VLC_BITS 3
44 #define V1_INTRA_CBPC_VLC_BITS 6
45 #define V1_INTER_CBPC_VLC_BITS 6
46 #define V2_INTRA_CBPC_VLC_BITS 3
47 #define V2_MB_TYPE_VLC_BITS 7
49 #define V2_MV_VLC_BITS 9
50 #define TEX_VLC_BITS 9
51 #define MB_NON_INTRA_VLC_BITS 9
52 #define MB_INTRA_VLC_BITS 9
54 #define II_BITRATE 128*1024
55 #define MBAC_BITRATE 50*1024
57 #define DEFAULT_INTER_INDEX 3
59 static uint32_t v2_dc_lum_table[512][2];
60 static uint32_t v2_dc_chroma_table[512][2];
62 static inline void msmpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n);
63 static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
64 int n, int coded, const uint8_t *scantable);
65 static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr);
66 static int msmpeg4_decode_motion(MpegEncContext * s,
67 int *mx_ptr, int *my_ptr);
68 static void init_h263_dc_for_msmpeg4(void);
69 static inline void msmpeg4_memsetw(short *tab, int val, int n);
70 #ifdef CONFIG_ENCODERS
71 static void msmpeg4v2_encode_motion(MpegEncContext * s, int val);
72 static int get_size_of_code(MpegEncContext * s, RLTable *rl, int last, int run, int level, int intra);
73 #endif //CONFIG_ENCODERS
74 static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);
75 static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);
76 static int wmv2_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);
79 extern uint8_t wmv3_dc_scale_table[32];
86 #include "msmpeg4data.h"
88 #ifdef CONFIG_ENCODERS //strangely gcc includes this even if its not references
89 static uint8_t rl_length[NB_RL_TABLES][MAX_LEVEL+1][MAX_RUN+1][2];
90 #endif //CONFIG_ENCODERS
92 static void common_init(MpegEncContext * s)
96 switch(s->msmpeg4_version){
100 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
103 if(s->workaround_bugs){
104 s->y_dc_scale_table= old_ff_y_dc_scale_table;
105 s->c_dc_scale_table= old_ff_c_dc_scale_table;
107 s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table;
108 s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
113 s->y_dc_scale_table= wmv1_y_dc_scale_table;
114 s->c_dc_scale_table= wmv1_c_dc_scale_table;
116 #if defined(CONFIG_WMV3_DECODER)||defined(CONFIG_VC1_DECODER)
118 s->y_dc_scale_table= wmv3_dc_scale_table;
119 s->c_dc_scale_table= wmv3_dc_scale_table;
126 if(s->msmpeg4_version>=4){
127 ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable , wmv1_scantable[1]);
128 ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, wmv1_scantable[2]);
129 ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, wmv1_scantable[3]);
130 ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable , wmv1_scantable[0]);
132 //Note the default tables are set in common_init in mpegvideo.c
137 init_h263_dc_for_msmpeg4();
141 #ifdef CONFIG_ENCODERS
143 /* build the table which associate a (x,y) motion vector to a vlc */
144 static void init_mv_table(MVTable *tab)
148 tab->table_mv_index = av_malloc(sizeof(uint16_t) * 4096);
149 /* mark all entries as not used */
151 tab->table_mv_index[i] = tab->n;
153 for(i=0;i<tab->n;i++) {
154 x = tab->table_mvx[i];
155 y = tab->table_mvy[i];
156 tab->table_mv_index[(x << 6) | y] = i;
160 static void code012(PutBitContext *pb, int n)
166 put_bits(pb, 1, (n >= 2));
170 void ff_msmpeg4_encode_init(MpegEncContext *s)
172 static int init_done=0;
176 if(s->msmpeg4_version>=4){
182 /* init various encoding tables */
184 init_mv_table(&mv_tables[0]);
185 init_mv_table(&mv_tables[1]);
186 for(i=0;i<NB_RL_TABLES;i++)
187 init_rl(&rl_table[i], 1);
189 for(i=0; i<NB_RL_TABLES; i++){
191 for(level=0; level<=MAX_LEVEL; level++){
193 for(run=0; run<=MAX_RUN; run++){
195 for(last=0; last<2; last++){
196 rl_length[i][level][run][last]= get_size_of_code(s, &rl_table[ i], last, run, level, 0);
204 static int get_size_of_code(MpegEncContext * s, RLTable *rl, int last, int run, int level, int intra){
207 int run_diff= intra ? 0 : 1;
209 code = get_rl_index(rl, last, run, level);
210 size+= rl->table_vlc[code][1];
214 level1 = level - rl->max_level[last][run];
217 code = get_rl_index(rl, last, run, level1);
221 if (level > MAX_LEVEL)
223 run1 = run - rl->max_run[last][level] - run_diff;
226 code = get_rl_index(rl, last, run1, level);
233 size+= 1+1+ rl->table_vlc[code][1];
237 size+= 1+1+ rl->table_vlc[code][1];
245 static void find_best_tables(MpegEncContext * s)
248 int best =-1, best_size =9999999;
249 int chroma_best=-1, best_chroma_size=9999999;
260 for(level=0; level<=MAX_LEVEL; level++){
262 for(run=0; run<=MAX_RUN; run++){
264 const int last_size= size + chroma_size;
265 for(last=0; last<2; last++){
266 int inter_count = s->ac_stats[0][0][level][run][last] + s->ac_stats[0][1][level][run][last];
267 int intra_luma_count = s->ac_stats[1][0][level][run][last];
268 int intra_chroma_count= s->ac_stats[1][1][level][run][last];
270 if(s->pict_type==I_TYPE){
271 size += intra_luma_count *rl_length[i ][level][run][last];
272 chroma_size+= intra_chroma_count*rl_length[i+3][level][run][last];
274 size+= intra_luma_count *rl_length[i ][level][run][last]
275 +intra_chroma_count*rl_length[i+3][level][run][last]
276 +inter_count *rl_length[i+3][level][run][last];
279 if(last_size == size+chroma_size) break;
286 if(chroma_size<best_chroma_size){
287 best_chroma_size= chroma_size;
292 // printf("type:%d, best:%d, qp:%d, var:%d, mcvar:%d, size:%d //\n",
293 // s->pict_type, best, s->qscale, s->mb_var_sum, s->mc_mb_var_sum, best_size);
295 if(s->pict_type==P_TYPE) chroma_best= best;
297 memset(s->ac_stats, 0, sizeof(int)*(MAX_LEVEL+1)*(MAX_RUN+1)*2*2*2);
299 s->rl_table_index = best;
300 s->rl_chroma_table_index= chroma_best;
302 if(s->pict_type != s->last_non_b_pict_type){
303 s->rl_table_index= 2;
304 if(s->pict_type==I_TYPE)
305 s->rl_chroma_table_index= 1;
307 s->rl_chroma_table_index= 2;
312 /* write MSMPEG4 compatible frame header */
313 void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number)
317 align_put_bits(&s->pb);
318 put_bits(&s->pb, 2, s->pict_type - 1);
320 put_bits(&s->pb, 5, s->qscale);
321 if(s->msmpeg4_version<=2){
322 s->rl_table_index = 2;
323 s->rl_chroma_table_index = 2;
326 s->dc_table_index = 1;
327 s->mv_table_index = 1; /* only if P frame */
328 s->use_skip_mb_code = 1; /* only if P frame */
329 s->per_mb_rl_table = 0;
330 if(s->msmpeg4_version==4)
331 s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE && s->pict_type==P_TYPE);
332 //printf("%d %d %d %d %d\n", s->pict_type, s->bit_rate, s->inter_intra_pred, s->width, s->height);
334 if (s->pict_type == I_TYPE) {
335 s->slice_height= s->mb_height/1;
336 put_bits(&s->pb, 5, 0x16 + s->mb_height/s->slice_height);
338 if(s->msmpeg4_version==4){
339 msmpeg4_encode_ext_header(s);
340 if(s->bit_rate>MBAC_BITRATE)
341 put_bits(&s->pb, 1, s->per_mb_rl_table);
344 if(s->msmpeg4_version>2){
345 if(!s->per_mb_rl_table){
346 code012(&s->pb, s->rl_chroma_table_index);
347 code012(&s->pb, s->rl_table_index);
350 put_bits(&s->pb, 1, s->dc_table_index);
353 put_bits(&s->pb, 1, s->use_skip_mb_code);
355 if(s->msmpeg4_version==4 && s->bit_rate>MBAC_BITRATE)
356 put_bits(&s->pb, 1, s->per_mb_rl_table);
358 if(s->msmpeg4_version>2){
359 if(!s->per_mb_rl_table)
360 code012(&s->pb, s->rl_table_index);
362 put_bits(&s->pb, 1, s->dc_table_index);
364 put_bits(&s->pb, 1, s->mv_table_index);
368 s->esc3_level_length= 0;
369 s->esc3_run_length= 0;
373 av_log(s->avctx, AV_LOG_DEBUG, "*****frame %d:\n", frame_count++);
377 void msmpeg4_encode_ext_header(MpegEncContext * s)
379 put_bits(&s->pb, 5, s->avctx->time_base.den / s->avctx->time_base.num); //yes 29.97 -> 29
381 put_bits(&s->pb, 11, FFMIN(s->bit_rate/1024, 2047));
383 if(s->msmpeg4_version>=3)
384 put_bits(&s->pb, 1, s->flipflop_rounding);
386 assert(s->flipflop_rounding==0);
389 #endif //CONFIG_ENCODERS
391 /* predict coded block */
392 static inline int coded_block_pred(MpegEncContext * s, int n, uint8_t **coded_block_ptr)
394 int xy, wrap, pred, a, b, c;
396 xy = s->block_index[n];
402 a = s->coded_block[xy - 1 ];
403 b = s->coded_block[xy - 1 - wrap];
404 c = s->coded_block[xy - wrap];
413 *coded_block_ptr = &s->coded_block[xy];
418 #ifdef CONFIG_ENCODERS
420 static void msmpeg4_encode_motion(MpegEncContext * s,
426 /* modulo encoding */
427 /* WARNING : you cannot reach all the MVs even with the modulo
428 encoding. This is a somewhat strange compromise they took !!! */
441 if ((unsigned)mx >= 64 ||
443 av_log(s->avctx, AV_LOG_ERROR, "error mx=%d my=%d\n", mx, my);
445 mv = &mv_tables[s->mv_table_index];
447 code = mv->table_mv_index[(mx << 6) | my];
449 mv->table_mv_bits[code],
450 mv->table_mv_code[code]);
452 /* escape : code litterally */
453 put_bits(&s->pb, 6, mx);
454 put_bits(&s->pb, 6, my);
458 static inline void handle_slices(MpegEncContext *s){
460 if (s->slice_height && (s->mb_y % s->slice_height) == 0) {
461 if(s->msmpeg4_version < 4){
462 ff_mpeg4_clean_buffers(s);
464 s->first_slice_line = 1;
466 s->first_slice_line = 0;
471 void msmpeg4_encode_mb(MpegEncContext * s,
472 DCTELEM block[6][64],
473 int motion_x, int motion_y)
475 int cbp, coded_cbp, i;
477 uint8_t *coded_block;
484 for (i = 0; i < 6; i++) {
485 if (s->block_last_index[i] >= 0)
488 if (s->use_skip_mb_code && (cbp | motion_x | motion_y) == 0) {
489 /* skip macroblock */
490 put_bits(&s->pb, 1, 1);
497 if (s->use_skip_mb_code)
498 put_bits(&s->pb, 1, 0); /* mb coded */
500 if(s->msmpeg4_version<=2){
502 v2_mb_type[cbp&3][1],
503 v2_mb_type[cbp&3][0]);
504 if((cbp&3) != 3) coded_cbp= cbp ^ 0x3C;
508 cbpy_tab[coded_cbp>>2][1],
509 cbpy_tab[coded_cbp>>2][0]);
511 s->misc_bits += get_bits_diff(s);
513 h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
514 msmpeg4v2_encode_motion(s, motion_x - pred_x);
515 msmpeg4v2_encode_motion(s, motion_y - pred_y);
518 table_mb_non_intra[cbp + 64][1],
519 table_mb_non_intra[cbp + 64][0]);
521 s->misc_bits += get_bits_diff(s);
524 h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
525 msmpeg4_encode_motion(s, motion_x - pred_x,
529 s->mv_bits += get_bits_diff(s);
531 for (i = 0; i < 6; i++) {
532 msmpeg4_encode_block(s, block[i], i);
534 s->p_tex_bits += get_bits_diff(s);
539 for (i = 0; i < 6; i++) {
541 val = (s->block_last_index[i] >= 1);
542 cbp |= val << (5 - i);
544 /* predict value for close blocks only for luma */
545 pred = coded_block_pred(s, i, &coded_block);
549 coded_cbp |= val << (5 - i);
553 printf("cbp=%x %x\n", cbp, coded_cbp);
556 if(s->msmpeg4_version<=2){
557 if (s->pict_type == I_TYPE) {
559 v2_intra_cbpc[cbp&3][1], v2_intra_cbpc[cbp&3][0]);
561 if (s->use_skip_mb_code)
562 put_bits(&s->pb, 1, 0); /* mb coded */
564 v2_mb_type[(cbp&3) + 4][1],
565 v2_mb_type[(cbp&3) + 4][0]);
567 put_bits(&s->pb, 1, 0); /* no AC prediction yet */
570 cbpy_tab[cbp>>2][0]);
572 if (s->pict_type == I_TYPE) {
574 ff_msmp4_mb_i_table[coded_cbp][1], ff_msmp4_mb_i_table[coded_cbp][0]);
576 if (s->use_skip_mb_code)
577 put_bits(&s->pb, 1, 0); /* mb coded */
579 table_mb_non_intra[cbp][1],
580 table_mb_non_intra[cbp][0]);
582 put_bits(&s->pb, 1, 0); /* no AC prediction yet */
583 if(s->inter_intra_pred){
585 put_bits(&s->pb, table_inter_intra[s->h263_aic_dir][1], table_inter_intra[s->h263_aic_dir][0]);
588 s->misc_bits += get_bits_diff(s);
590 for (i = 0; i < 6; i++) {
591 msmpeg4_encode_block(s, block[i], i);
593 s->i_tex_bits += get_bits_diff(s);
598 #endif //CONFIG_ENCODERS
600 static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n,
601 int32_t **dc_val_ptr)
611 *dc_val_ptr= &s->last_dc[i];
612 return s->last_dc[i];
615 static int get_dc(uint8_t *src, int stride, int scale)
622 sum+=src[x + y*stride];
625 return FASTDIV((sum + (scale>>1)), scale);
628 /* dir = 0: left, dir = 1: top prediction */
629 static inline int msmpeg4_pred_dc(MpegEncContext * s, int n,
630 int16_t **dc_val_ptr, int *dir_ptr)
632 int a, b, c, wrap, pred, scale;
635 /* find prediction */
637 scale = s->y_dc_scale;
639 scale = s->c_dc_scale;
642 wrap = s->block_wrap[n];
643 dc_val= s->dc_val[0] + s->block_index[n];
649 b = dc_val[ - 1 - wrap];
652 if(s->first_slice_line && (n&2)==0 && s->msmpeg4_version<4){
656 /* XXX: the following solution consumes divisions, but it does not
657 necessitate to modify mpegvideo.c. The problem comes from the
658 fact they decided to store the quantized DC (which would lead
659 to problems if Q could vary !) */
660 #if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined PIC
662 "movl %3, %%eax \n\t"
663 "shrl $1, %%eax \n\t"
664 "addl %%eax, %2 \n\t"
665 "addl %%eax, %1 \n\t"
666 "addl %0, %%eax \n\t"
668 "movl %%edx, %0 \n\t"
669 "movl %1, %%eax \n\t"
671 "movl %%edx, %1 \n\t"
672 "movl %2, %%eax \n\t"
674 "movl %%edx, %2 \n\t"
675 : "+b" (a), "+c" (b), "+D" (c)
676 : "g" (scale), "S" (inverse[scale])
680 /* #elif defined (ARCH_ALPHA) */
681 /* Divisions are extremely costly on Alpha; optimize the most
682 common case. But they are costly everywhere...
685 a = (a + (8 >> 1)) / 8;
686 b = (b + (8 >> 1)) / 8;
687 c = (c + (8 >> 1)) / 8;
689 a = FASTDIV((a + (scale >> 1)), scale);
690 b = FASTDIV((b + (scale >> 1)), scale);
691 c = FASTDIV((c + (scale >> 1)), scale);
694 /* XXX: WARNING: they did not choose the same test as MPEG4. This
695 is very important ! */
696 if(s->msmpeg4_version>3){
697 if(s->inter_intra_pred){
708 if (abs(a - b) < abs(b - c)) {
718 dest= s->current_picture.data[0] + (((n>>1) + 2*s->mb_y) * 8* wrap ) + ((n&1) + 2*s->mb_x) * 8;
721 dest= s->current_picture.data[n-3] + (s->mb_y * 8 * wrap) + s->mb_x * 8;
723 if(s->mb_x==0) a= (1024 + (scale>>1))/scale;
724 else a= get_dc(dest-8, wrap, scale*8);
725 if(s->mb_y==0) c= (1024 + (scale>>1))/scale;
726 else c= get_dc(dest-8*wrap, wrap, scale*8);
728 if (s->h263_aic_dir==0) {
731 }else if (s->h263_aic_dir==1) {
739 }else if (s->h263_aic_dir==2) {
753 if (abs(a - b) < abs(b - c)) {
762 if (abs(a - b) <= abs(b - c)) {
771 /* update predictor */
772 *dc_val_ptr = &dc_val[0];
778 static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr)
783 if(s->msmpeg4_version==1){
785 pred = msmpeg4v1_pred_dc(s, n, &dc_val);
787 /* update predictor */
791 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr);
793 /* update predictor */
795 *dc_val = level * s->y_dc_scale;
797 *dc_val = level * s->c_dc_scale;
801 /* do the prediction */
804 if(s->msmpeg4_version<=2){
807 v2_dc_lum_table[level+256][1],
808 v2_dc_lum_table[level+256][0]);
811 v2_dc_chroma_table[level+256][1],
812 v2_dc_chroma_table[level+256][0]);
824 if (s->dc_table_index == 0) {
826 put_bits(&s->pb, ff_table0_dc_lum[code][1], ff_table0_dc_lum[code][0]);
828 put_bits(&s->pb, ff_table0_dc_chroma[code][1], ff_table0_dc_chroma[code][0]);
832 put_bits(&s->pb, ff_table1_dc_lum[code][1], ff_table1_dc_lum[code][0]);
834 put_bits(&s->pb, ff_table1_dc_chroma[code][1], ff_table1_dc_chroma[code][0]);
839 put_bits(&s->pb, 8, level);
842 put_bits(&s->pb, 1, sign);
847 /* Encoding of a block. Very similar to MPEG4 except for a different
848 escape coding (same as H263) and more vlc tables.
850 static inline void msmpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n)
852 int level, run, last, i, j, last_index;
853 int last_non_zero, sign, slevel;
854 int code, run_diff, dc_pred_dir;
856 const uint8_t *scantable;
859 msmpeg4_encode_dc(s, block[0], n, &dc_pred_dir);
862 rl = &rl_table[s->rl_table_index];
864 rl = &rl_table[3 + s->rl_chroma_table_index];
867 scantable= s->intra_scantable.permutated;
870 rl = &rl_table[3 + s->rl_table_index];
871 if(s->msmpeg4_version<=2)
875 scantable= s->inter_scantable.permutated;
878 /* recalculate block_last_index for M$ wmv1 */
879 if(s->msmpeg4_version>=4 && s->block_last_index[n]>0){
880 for(last_index=63; last_index>=0; last_index--){
881 if(block[scantable[last_index]]) break;
883 s->block_last_index[n]= last_index;
885 last_index = s->block_last_index[n];
887 last_non_zero = i - 1;
888 for (; i <= last_index; i++) {
892 run = i - last_non_zero - 1;
893 last = (i == last_index);
901 if(level<=MAX_LEVEL && run<=MAX_RUN){
902 s->ac_stats[s->mb_intra][n>3][level][run][last]++;
906 s->ac_stats[s->mb_intra][n>3][40][63][0]++; //esc3 like
908 code = get_rl_index(rl, last, run, level);
909 put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
913 level1 = level - rl->max_level[last][run];
916 code = get_rl_index(rl, last, run, level1);
919 put_bits(&s->pb, 1, 0);
920 if (level > MAX_LEVEL)
922 run1 = run - rl->max_run[last][level] - run_diff;
925 code = get_rl_index(rl, last, run1, level);
929 put_bits(&s->pb, 1, 0);
930 put_bits(&s->pb, 1, last);
931 if(s->msmpeg4_version>=4){
932 if(s->esc3_level_length==0){
933 s->esc3_level_length=8;
934 s->esc3_run_length= 6;
936 put_bits(&s->pb, 6, 3);
938 put_bits(&s->pb, 8, 3);
940 put_bits(&s->pb, s->esc3_run_length, run);
941 put_bits(&s->pb, 1, sign);
942 put_bits(&s->pb, s->esc3_level_length, level);
944 put_bits(&s->pb, 6, run);
945 put_bits(&s->pb, 8, slevel & 0xff);
949 put_bits(&s->pb, 1, 1);
950 put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
951 put_bits(&s->pb, 1, sign);
955 put_bits(&s->pb, 1, 1);
956 put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
957 put_bits(&s->pb, 1, sign);
960 put_bits(&s->pb, 1, sign);
967 /****************************************/
970 static VLC mb_non_intra_vlc[4];
971 VLC ff_msmp4_mb_i_vlc;
972 VLC ff_msmp4_dc_luma_vlc[2];
973 VLC ff_msmp4_dc_chroma_vlc[2];
974 static VLC v2_dc_lum_vlc;
975 static VLC v2_dc_chroma_vlc;
977 static VLC v2_intra_cbpc_vlc;
978 static VLC v2_mb_type_vlc;
979 static VLC v2_mv_vlc;
980 static VLC v1_intra_cbpc_vlc;
981 static VLC v1_inter_cbpc_vlc;
982 static VLC inter_intra_vlc;
984 /* this table is practically identical to the one from h263 except that its inverted */
985 static void init_h263_dc_for_msmpeg4(void)
987 int level, uni_code, uni_len;
989 for(level=-256; level<256; level++){
991 /* find number of bits */
1000 l= (-level) ^ ((1 << size) - 1);
1004 /* luminance h263 */
1005 uni_code= DCtab_lum[size][0];
1006 uni_len = DCtab_lum[size][1];
1007 uni_code ^= (1<<uni_len)-1; //M$ doesnt like compatibility
1010 uni_code<<=size; uni_code|=l;
1013 uni_code<<=1; uni_code|=1;
1017 v2_dc_lum_table[level+256][0]= uni_code;
1018 v2_dc_lum_table[level+256][1]= uni_len;
1020 /* chrominance h263 */
1021 uni_code= DCtab_chrom[size][0];
1022 uni_len = DCtab_chrom[size][1];
1023 uni_code ^= (1<<uni_len)-1; //M$ doesnt like compatibility
1026 uni_code<<=size; uni_code|=l;
1029 uni_code<<=1; uni_code|=1;
1033 v2_dc_chroma_table[level+256][0]= uni_code;
1034 v2_dc_chroma_table[level+256][1]= uni_len;
1039 /* init all vlc decoding tables */
1040 int ff_msmpeg4_decode_init(MpegEncContext *s)
1042 static int done = 0;
1051 for(i=0;i<NB_RL_TABLES;i++) {
1052 init_rl(&rl_table[i], 1);
1053 init_vlc_rl(&rl_table[i], 1);
1057 init_vlc(&mv->vlc, MV_VLC_BITS, mv->n + 1,
1058 mv->table_mv_bits, 1, 1,
1059 mv->table_mv_code, 2, 2, 1);
1062 init_vlc(&ff_msmp4_dc_luma_vlc[0], DC_VLC_BITS, 120,
1063 &ff_table0_dc_lum[0][1], 8, 4,
1064 &ff_table0_dc_lum[0][0], 8, 4, 1);
1065 init_vlc(&ff_msmp4_dc_chroma_vlc[0], DC_VLC_BITS, 120,
1066 &ff_table0_dc_chroma[0][1], 8, 4,
1067 &ff_table0_dc_chroma[0][0], 8, 4, 1);
1068 init_vlc(&ff_msmp4_dc_luma_vlc[1], DC_VLC_BITS, 120,
1069 &ff_table1_dc_lum[0][1], 8, 4,
1070 &ff_table1_dc_lum[0][0], 8, 4, 1);
1071 init_vlc(&ff_msmp4_dc_chroma_vlc[1], DC_VLC_BITS, 120,
1072 &ff_table1_dc_chroma[0][1], 8, 4,
1073 &ff_table1_dc_chroma[0][0], 8, 4, 1);
1075 init_vlc(&v2_dc_lum_vlc, DC_VLC_BITS, 512,
1076 &v2_dc_lum_table[0][1], 8, 4,
1077 &v2_dc_lum_table[0][0], 8, 4, 1);
1078 init_vlc(&v2_dc_chroma_vlc, DC_VLC_BITS, 512,
1079 &v2_dc_chroma_table[0][1], 8, 4,
1080 &v2_dc_chroma_table[0][0], 8, 4, 1);
1082 init_vlc(&cbpy_vlc, CBPY_VLC_BITS, 16,
1083 &cbpy_tab[0][1], 2, 1,
1084 &cbpy_tab[0][0], 2, 1, 1);
1085 init_vlc(&v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 4,
1086 &v2_intra_cbpc[0][1], 2, 1,
1087 &v2_intra_cbpc[0][0], 2, 1, 1);
1088 init_vlc(&v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 8,
1089 &v2_mb_type[0][1], 2, 1,
1090 &v2_mb_type[0][0], 2, 1, 1);
1091 init_vlc(&v2_mv_vlc, V2_MV_VLC_BITS, 33,
1093 &mvtab[0][0], 2, 1, 1);
1096 init_vlc(&mb_non_intra_vlc[i], MB_NON_INTRA_VLC_BITS, 128,
1097 &wmv2_inter_table[i][0][1], 8, 4,
1098 &wmv2_inter_table[i][0][0], 8, 4, 1); //FIXME name?
1101 init_vlc(&ff_msmp4_mb_i_vlc, MB_INTRA_VLC_BITS, 64,
1102 &ff_msmp4_mb_i_table[0][1], 4, 2,
1103 &ff_msmp4_mb_i_table[0][0], 4, 2, 1);
1105 init_vlc(&v1_intra_cbpc_vlc, V1_INTRA_CBPC_VLC_BITS, 8,
1106 intra_MCBPC_bits, 1, 1,
1107 intra_MCBPC_code, 1, 1, 1);
1108 init_vlc(&v1_inter_cbpc_vlc, V1_INTER_CBPC_VLC_BITS, 25,
1109 inter_MCBPC_bits, 1, 1,
1110 inter_MCBPC_code, 1, 1, 1);
1112 init_vlc(&inter_intra_vlc, INTER_INTRA_VLC_BITS, 4,
1113 &table_inter_intra[0][1], 2, 1,
1114 &table_inter_intra[0][0], 2, 1, 1);
1117 switch(s->msmpeg4_version){
1120 s->decode_mb= msmpeg4v12_decode_mb;
1124 s->decode_mb= msmpeg4v34_decode_mb;
1127 s->decode_mb= wmv2_decode_mb;
1129 //FIXME + TODO VC1 decode mb
1133 s->slice_height= s->mb_height; //to avoid 1/0 if the first frame isnt a keyframe
1138 int msmpeg4_decode_picture_header(MpegEncContext * s)
1145 for(i=0; i<s->gb.size_in_bits; i++)
1146 av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
1147 // get_bits1(&s->gb);
1148 av_log(s->avctx, AV_LOG_DEBUG, "END\n");
1153 if(s->msmpeg4_version==1){
1154 int start_code, num;
1155 start_code = (get_bits(&s->gb, 16)<<16) | get_bits(&s->gb, 16);
1156 if(start_code!=0x00000100){
1157 av_log(s->avctx, AV_LOG_ERROR, "invalid startcode\n");
1161 num= get_bits(&s->gb, 5); // frame number */
1164 s->pict_type = get_bits(&s->gb, 2) + 1;
1165 if (s->pict_type != I_TYPE &&
1166 s->pict_type != P_TYPE){
1167 av_log(s->avctx, AV_LOG_ERROR, "invalid picture type\n");
1173 if(s->pict_type == I_TYPE) had_i=1;
1174 if(!had_i) return -1;
1177 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
1179 av_log(s->avctx, AV_LOG_ERROR, "invalid qscale\n");
1183 if (s->pict_type == I_TYPE) {
1184 code = get_bits(&s->gb, 5);
1185 if(s->msmpeg4_version==1){
1186 if(code==0 || code>s->mb_height){
1187 av_log(s->avctx, AV_LOG_ERROR, "invalid slice height %d\n", code);
1191 s->slice_height = code;
1193 /* 0x17: one slice, 0x18: two slices, ... */
1195 av_log(s->avctx, AV_LOG_ERROR, "error, slice code was %X\n", code);
1199 s->slice_height = s->mb_height / (code - 0x16);
1202 switch(s->msmpeg4_version){
1205 s->rl_chroma_table_index = 2;
1206 s->rl_table_index = 2;
1208 s->dc_table_index = 0; //not used
1211 s->rl_chroma_table_index = decode012(&s->gb);
1212 s->rl_table_index = decode012(&s->gb);
1214 s->dc_table_index = get_bits1(&s->gb);
1217 msmpeg4_decode_ext_header(s, (2+5+5+17+7)/8);
1219 if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
1220 else s->per_mb_rl_table= 0;
1222 if(!s->per_mb_rl_table){
1223 s->rl_chroma_table_index = decode012(&s->gb);
1224 s->rl_table_index = decode012(&s->gb);
1227 s->dc_table_index = get_bits1(&s->gb);
1228 s->inter_intra_pred= 0;
1232 if(s->avctx->debug&FF_DEBUG_PICT_INFO)
1233 av_log(s->avctx, AV_LOG_DEBUG, "qscale:%d rlc:%d rl:%d dc:%d mbrl:%d slice:%d \n",
1235 s->rl_chroma_table_index,
1241 switch(s->msmpeg4_version){
1244 if(s->msmpeg4_version==1)
1245 s->use_skip_mb_code = 1;
1247 s->use_skip_mb_code = get_bits1(&s->gb);
1248 s->rl_table_index = 2;
1249 s->rl_chroma_table_index = s->rl_table_index;
1250 s->dc_table_index = 0; //not used
1251 s->mv_table_index = 0;
1254 s->use_skip_mb_code = get_bits1(&s->gb);
1255 s->rl_table_index = decode012(&s->gb);
1256 s->rl_chroma_table_index = s->rl_table_index;
1258 s->dc_table_index = get_bits1(&s->gb);
1260 s->mv_table_index = get_bits1(&s->gb);
1263 s->use_skip_mb_code = get_bits1(&s->gb);
1265 if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
1266 else s->per_mb_rl_table= 0;
1268 if(!s->per_mb_rl_table){
1269 s->rl_table_index = decode012(&s->gb);
1270 s->rl_chroma_table_index = s->rl_table_index;
1273 s->dc_table_index = get_bits1(&s->gb);
1275 s->mv_table_index = get_bits1(&s->gb);
1276 s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE);
1280 if(s->avctx->debug&FF_DEBUG_PICT_INFO)
1281 av_log(s->avctx, AV_LOG_DEBUG, "skip:%d rl:%d rlc:%d dc:%d mv:%d mbrl:%d qp:%d \n",
1282 s->use_skip_mb_code,
1284 s->rl_chroma_table_index,
1290 if(s->flipflop_rounding){
1291 s->no_rounding ^= 1;
1296 //printf("%d %d %d %d %d\n", s->pict_type, s->bit_rate, s->inter_intra_pred, s->width, s->height);
1298 s->esc3_level_length= 0;
1299 s->esc3_run_length= 0;
1302 av_log(s->avctx, AV_LOG_DEBUG, "*****frame %d:\n", frame_count++);
1307 int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size)
1309 int left= buf_size*8 - get_bits_count(&s->gb);
1310 int length= s->msmpeg4_version>=3 ? 17 : 16;
1311 /* the alt_bitstream reader could read over the end so we need to check it */
1312 if(left>=length && left<length+8)
1316 fps= get_bits(&s->gb, 5);
1317 s->bit_rate= get_bits(&s->gb, 11)*1024;
1318 if(s->msmpeg4_version>=3)
1319 s->flipflop_rounding= get_bits1(&s->gb);
1321 s->flipflop_rounding= 0;
1323 // printf("fps:%2d bps:%2d roundingType:%1d\n", fps, s->bit_rate/1024, s->flipflop_rounding);
1325 else if(left<length+8)
1327 s->flipflop_rounding= 0;
1328 if(s->msmpeg4_version != 2)
1329 av_log(s->avctx, AV_LOG_ERROR, "ext header missing, %d left\n", left);
1333 av_log(s->avctx, AV_LOG_ERROR, "I frame too long, ignoring ext header\n");
1339 static inline void msmpeg4_memsetw(short *tab, int val, int n)
1346 #ifdef CONFIG_ENCODERS
1347 static void msmpeg4v2_encode_motion(MpegEncContext * s, int val)
1349 int range, bit_size, sign, code, bits;
1354 put_bits(&s->pb, mvtab[code][1], mvtab[code][0]);
1356 bit_size = s->f_code - 1;
1357 range = 1 << bit_size;
1370 code = (val >> bit_size) + 1;
1371 bits = val & (range - 1);
1373 put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign);
1375 put_bits(&s->pb, bit_size, bits);
1381 /* this is identical to h263 except that its range is multiplied by 2 */
1382 static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code)
1384 int code, val, sign, shift;
1386 code = get_vlc2(&s->gb, v2_mv_vlc.table, V2_MV_VLC_BITS, 2);
1387 // printf("MV code %d at %d %d pred: %d\n", code, s->mb_x,s->mb_y, pred);
1393 sign = get_bits1(&s->gb);
1397 val = (val - 1) << shift;
1398 val |= get_bits(&s->gb, shift);
1413 static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
1417 if (s->pict_type == P_TYPE) {
1418 if (s->use_skip_mb_code) {
1419 if (get_bits1(&s->gb)) {
1423 s->block_last_index[i] = -1;
1424 s->mv_dir = MV_DIR_FORWARD;
1425 s->mv_type = MV_TYPE_16X16;
1433 if(s->msmpeg4_version==2)
1434 code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1);
1436 code = get_vlc2(&s->gb, v1_inter_cbpc_vlc.table, V1_INTER_CBPC_VLC_BITS, 3);
1437 if(code<0 || code>7){
1438 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y);
1442 s->mb_intra = code >>2;
1447 if(s->msmpeg4_version==2)
1448 cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1);
1450 cbp= get_vlc2(&s->gb, v1_intra_cbpc_vlc.table, V1_INTRA_CBPC_VLC_BITS, 1);
1452 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1460 cbpy= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
1462 av_log(s->avctx, AV_LOG_ERROR, "cbpy %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1467 if(s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C;
1469 h263_pred_motion(s, 0, 0, &mx, &my);
1470 mx= msmpeg4v2_decode_motion(s, mx, 1);
1471 my= msmpeg4v2_decode_motion(s, my, 1);
1473 s->mv_dir = MV_DIR_FORWARD;
1474 s->mv_type = MV_TYPE_16X16;
1475 s->mv[0][0][0] = mx;
1476 s->mv[0][0][1] = my;
1478 if(s->msmpeg4_version==2){
1479 s->ac_pred = get_bits1(&s->gb);
1480 cbp|= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
1483 cbp|= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
1484 if(s->pict_type==P_TYPE) cbp^=0x3C;
1488 s->dsp.clear_blocks(s->block[0]);
1489 for (i = 0; i < 6; i++) {
1490 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1492 av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1499 static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
1503 uint32_t * const mb_type_ptr= &s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ];
1505 if (s->pict_type == P_TYPE) {
1506 if (s->use_skip_mb_code) {
1507 if (get_bits1(&s->gb)) {
1511 s->block_last_index[i] = -1;
1512 s->mv_dir = MV_DIR_FORWARD;
1513 s->mv_type = MV_TYPE_16X16;
1517 *mb_type_ptr = MB_TYPE_SKIP | MB_TYPE_L0 | MB_TYPE_16x16;
1523 code = get_vlc2(&s->gb, mb_non_intra_vlc[DEFAULT_INTER_INDEX].table, MB_NON_INTRA_VLC_BITS, 3);
1526 //s->mb_intra = (code & 0x40) ? 0 : 1;
1527 s->mb_intra = (~code & 0x40) >> 6;
1532 code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2);
1535 /* predict coded block pattern */
1538 int val = ((code >> (5 - i)) & 1);
1540 int pred = coded_block_pred(s, i, &coded_val);
1544 cbp |= val << (5 - i);
1550 //printf("P at %d %d\n", s->mb_x, s->mb_y);
1551 if(s->per_mb_rl_table && cbp){
1552 s->rl_table_index = decode012(&s->gb);
1553 s->rl_chroma_table_index = s->rl_table_index;
1555 h263_pred_motion(s, 0, 0, &mx, &my);
1556 if (msmpeg4_decode_motion(s, &mx, &my) < 0)
1558 s->mv_dir = MV_DIR_FORWARD;
1559 s->mv_type = MV_TYPE_16X16;
1560 s->mv[0][0][0] = mx;
1561 s->mv[0][0][1] = my;
1562 *mb_type_ptr = MB_TYPE_L0 | MB_TYPE_16x16;
1564 //printf("I at %d %d %d %06X\n", s->mb_x, s->mb_y, ((cbp&3)? 1 : 0) +((cbp&0x3C)? 2 : 0), show_bits(&s->gb, 24));
1565 s->ac_pred = get_bits1(&s->gb);
1566 *mb_type_ptr = MB_TYPE_INTRA;
1567 if(s->inter_intra_pred){
1568 s->h263_aic_dir= get_vlc2(&s->gb, inter_intra_vlc.table, INTER_INTRA_VLC_BITS, 1);
1569 // printf("%d%d %d %d/", s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y);
1571 if(s->per_mb_rl_table && cbp){
1572 s->rl_table_index = decode012(&s->gb);
1573 s->rl_chroma_table_index = s->rl_table_index;
1577 s->dsp.clear_blocks(s->block[0]);
1578 for (i = 0; i < 6; i++) {
1579 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1581 av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1588 //#define ERROR_DETAILS
1589 static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
1590 int n, int coded, const uint8_t *scan_table)
1592 int level, i, last, run, run_diff;
1595 RL_VLC_ELEM *rl_vlc;
1603 level = msmpeg4_decode_dc(s, n, &dc_pred_dir);
1606 av_log(s->avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, s->qscale);
1607 if(s->inter_intra_pred) level=0;
1611 rl = &rl_table[s->rl_table_index];
1612 if(level > 256*s->y_dc_scale){
1613 av_log(s->avctx, AV_LOG_ERROR, "dc overflow+ L qscale: %d//\n", s->qscale);
1614 if(!s->inter_intra_pred) return -1;
1617 rl = &rl_table[3 + s->rl_chroma_table_index];
1618 if(level > 256*s->c_dc_scale){
1619 av_log(s->avctx, AV_LOG_ERROR, "dc overflow+ C qscale: %d//\n", s->qscale);
1620 if(!s->inter_intra_pred) return -1;
1631 if (dc_pred_dir == 0)
1632 scan_table = s->intra_v_scantable.permutated; /* left */
1634 scan_table = s->intra_h_scantable.permutated; /* top */
1636 scan_table = s->intra_scantable.permutated;
1638 rl_vlc= rl->rl_vlc[0];
1640 qmul = s->qscale << 1;
1641 qadd = (s->qscale - 1) | 1;
1643 rl = &rl_table[3 + s->rl_table_index];
1645 if(s->msmpeg4_version==2)
1651 s->block_last_index[n] = i;
1655 scan_table = s->inter_scantable.permutated;
1656 rl_vlc= rl->rl_vlc[s->qscale];
1659 OPEN_READER(re, &s->gb);
1661 UPDATE_CACHE(re, &s->gb);
1662 GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 0);
1665 cache= GET_CACHE(re, &s->gb);
1667 if (s->msmpeg4_version==1 || (cache&0x80000000)==0) {
1668 if (s->msmpeg4_version==1 || (cache&0x40000000)==0) {
1670 if(s->msmpeg4_version!=1) LAST_SKIP_BITS(re, &s->gb, 2);
1671 UPDATE_CACHE(re, &s->gb);
1672 if(s->msmpeg4_version<=3){
1673 last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
1674 run= SHOW_UBITS(re, &s->gb, 6); SKIP_CACHE(re, &s->gb, 6);
1675 level= SHOW_SBITS(re, &s->gb, 8); LAST_SKIP_CACHE(re, &s->gb, 8);
1676 SKIP_COUNTER(re, &s->gb, 1+6+8);
1679 last= SHOW_UBITS(re, &s->gb, 1); SKIP_BITS(re, &s->gb, 1);
1680 if(!s->esc3_level_length){
1682 //printf("ESC-3 %X at %d %d\n", show_bits(&s->gb, 24), s->mb_x, s->mb_y);
1684 ll= SHOW_UBITS(re, &s->gb, 3); SKIP_BITS(re, &s->gb, 3);
1686 if(SHOW_UBITS(re, &s->gb, 1)) av_log(s->avctx, AV_LOG_ERROR, "cool a new vlc code ,contact the ffmpeg developers and upload the file\n");
1687 SKIP_BITS(re, &s->gb, 1);
1692 while(ll<8 && SHOW_UBITS(re, &s->gb, 1)==0){
1694 SKIP_BITS(re, &s->gb, 1);
1696 if(ll<8) SKIP_BITS(re, &s->gb, 1);
1699 s->esc3_level_length= ll;
1700 s->esc3_run_length= SHOW_UBITS(re, &s->gb, 2) + 3; SKIP_BITS(re, &s->gb, 2);
1701 //printf("level length:%d, run length: %d\n", ll, s->esc3_run_length);
1702 UPDATE_CACHE(re, &s->gb);
1704 run= SHOW_UBITS(re, &s->gb, s->esc3_run_length);
1705 SKIP_BITS(re, &s->gb, s->esc3_run_length);
1707 sign= SHOW_UBITS(re, &s->gb, 1);
1708 SKIP_BITS(re, &s->gb, 1);
1710 level= SHOW_UBITS(re, &s->gb, s->esc3_level_length);
1711 SKIP_BITS(re, &s->gb, s->esc3_level_length);
1712 if(sign) level= -level;
1714 //printf("level: %d, run: %d at %d %d\n", level, run, s->mb_x, s->mb_y);
1715 #if 0 // waste of time / this will detect very few errors
1717 const int abs_level= ABS(level);
1718 const int run1= run - rl->max_run[last][abs_level] - run_diff;
1719 if(abs_level<=MAX_LEVEL && run<=MAX_RUN){
1720 if(abs_level <= rl->max_level[last][run]){
1721 av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n");
1722 return DECODING_AC_LOST;
1724 if(abs_level <= rl->max_level[last][run]*2){
1725 av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 1 encoding possible\n");
1726 return DECODING_AC_LOST;
1728 if(run1>=0 && abs_level <= rl->max_level[last][run1]){
1729 av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 2 encoding possible\n");
1730 return DECODING_AC_LOST;
1735 //level = level * qmul + (level>0) * qadd - (level<=0) * qadd ;
1736 if (level>0) level= level * qmul + qadd;
1737 else level= level * qmul - qadd;
1738 #if 0 // waste of time too :(
1739 if(level>2048 || level<-2048){
1740 av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc\n");
1741 return DECODING_AC_LOST;
1746 #ifdef ERROR_DETAILS
1748 av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC3 level=%d\n", level);
1749 else if((i>62 && i<192) || i>192+63)
1750 av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC3 i=%d run=%d level=%d\n", i, run, level);
1754 #if MIN_CACHE_BITS < 23
1755 LAST_SKIP_BITS(re, &s->gb, 2);
1756 UPDATE_CACHE(re, &s->gb);
1758 SKIP_BITS(re, &s->gb, 2);
1760 GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
1761 i+= run + rl->max_run[run>>7][level/qmul] + run_diff; //FIXME opt indexing
1762 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1763 LAST_SKIP_BITS(re, &s->gb, 1);
1764 #ifdef ERROR_DETAILS
1766 av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC2 level=%d\n", level);
1767 else if((i>62 && i<192) || i>192+63)
1768 av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC2 i=%d run=%d level=%d\n", i, run, level);
1773 #if MIN_CACHE_BITS < 22
1774 LAST_SKIP_BITS(re, &s->gb, 1);
1775 UPDATE_CACHE(re, &s->gb);
1777 SKIP_BITS(re, &s->gb, 1);
1779 GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
1781 level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
1782 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1783 LAST_SKIP_BITS(re, &s->gb, 1);
1784 #ifdef ERROR_DETAILS
1786 av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC1 level=%d\n", level);
1787 else if((i>62 && i<192) || i>192+63)
1788 av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC1 i=%d run=%d level=%d\n", i, run, level);
1793 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1794 LAST_SKIP_BITS(re, &s->gb, 1);
1795 #ifdef ERROR_DETAILS
1797 av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code level=%d\n", level);
1798 else if((i>62 && i<192) || i>192+63)
1799 av_log(s->avctx, AV_LOG_ERROR, "run overflow i=%d run=%d level=%d\n", i, run, level);
1805 const int left= s->gb.size_in_bits - get_bits_count(&s->gb);
1806 if(((i+192 == 64 && level/qmul==-1) || s->error_resilience<=1) && left>=0){
1807 av_log(s->avctx, AV_LOG_ERROR, "ignoring overflow at %d %d\n", s->mb_x, s->mb_y);
1810 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
1815 block[scan_table[i]] = level;
1819 block[scan_table[i]] = level;
1821 CLOSE_READER(re, &s->gb);
1825 mpeg4_pred_ac(s, block, n, dc_pred_dir);
1827 i = 63; /* XXX: not optimal */
1830 if(s->msmpeg4_version>=4 && i>0) i=63; //FIXME/XXX optimize
1831 s->block_last_index[n] = i;
1836 static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
1840 if(s->msmpeg4_version<=2){
1842 level = get_vlc2(&s->gb, v2_dc_lum_vlc.table, DC_VLC_BITS, 3);
1844 level = get_vlc2(&s->gb, v2_dc_chroma_vlc.table, DC_VLC_BITS, 3);
1849 }else{ //FIXME optimize use unified tables & index
1851 level = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3);
1853 level = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3);
1856 av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n");
1860 if (level == DC_MAX) {
1861 level = get_bits(&s->gb, 8);
1862 if (get_bits1(&s->gb))
1864 } else if (level != 0) {
1865 if (get_bits1(&s->gb))
1870 if(s->msmpeg4_version==1){
1872 pred = msmpeg4v1_pred_dc(s, n, &dc_val);
1875 /* update predictor */
1879 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr);
1882 /* update predictor */
1884 *dc_val = level * s->y_dc_scale;
1886 *dc_val = level * s->c_dc_scale;
1893 static int msmpeg4_decode_motion(MpegEncContext * s,
1894 int *mx_ptr, int *my_ptr)
1899 mv = &mv_tables[s->mv_table_index];
1901 code = get_vlc2(&s->gb, mv->vlc.table, MV_VLC_BITS, 2);
1903 av_log(s->avctx, AV_LOG_ERROR, "illegal MV code at %d %d\n", s->mb_x, s->mb_y);
1906 if (code == mv->n) {
1907 //printf("MV ESC %X at %d %d\n", show_bits(&s->gb, 24), s->mb_x, s->mb_y);
1908 mx = get_bits(&s->gb, 6);
1909 my = get_bits(&s->gb, 6);
1911 mx = mv->table_mvx[code];
1912 my = mv->table_mvy[code];
1917 /* WARNING : they do not do exactly modulo encoding */
1932 /* cleanest way to support it
1933 * there is too much shared between versions so that we cant have 1 file per version & 1 common
1934 * as allmost everything would be in the common file