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 msmpeg4v2_encode_motion(MpegEncContext * s, int val);
69 static void init_h263_dc_for_msmpeg4(void);
70 static inline void msmpeg4_memsetw(short *tab, int val, int n);
71 #ifdef CONFIG_ENCODERS
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 uint16_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 static void msmpeg4v2_encode_motion(MpegEncContext * s, int val)
1348 int range, bit_size, sign, code, bits;
1353 put_bits(&s->pb, mvtab[code][1], mvtab[code][0]);
1355 bit_size = s->f_code - 1;
1356 range = 1 << bit_size;
1369 code = (val >> bit_size) + 1;
1370 bits = val & (range - 1);
1372 put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign);
1374 put_bits(&s->pb, bit_size, bits);
1379 /* this is identical to h263 except that its range is multiplied by 2 */
1380 static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code)
1382 int code, val, sign, shift;
1384 code = get_vlc2(&s->gb, v2_mv_vlc.table, V2_MV_VLC_BITS, 2);
1385 // printf("MV code %d at %d %d pred: %d\n", code, s->mb_x,s->mb_y, pred);
1391 sign = get_bits1(&s->gb);
1395 val = (val - 1) << shift;
1396 val |= get_bits(&s->gb, shift);
1411 static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
1415 if (s->pict_type == P_TYPE) {
1416 if (s->use_skip_mb_code) {
1417 if (get_bits1(&s->gb)) {
1421 s->block_last_index[i] = -1;
1422 s->mv_dir = MV_DIR_FORWARD;
1423 s->mv_type = MV_TYPE_16X16;
1431 if(s->msmpeg4_version==2)
1432 code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1);
1434 code = get_vlc2(&s->gb, v1_inter_cbpc_vlc.table, V1_INTER_CBPC_VLC_BITS, 3);
1435 if(code<0 || code>7){
1436 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y);
1440 s->mb_intra = code >>2;
1445 if(s->msmpeg4_version==2)
1446 cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1);
1448 cbp= get_vlc2(&s->gb, v1_intra_cbpc_vlc.table, V1_INTRA_CBPC_VLC_BITS, 1);
1450 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1458 cbpy= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
1460 av_log(s->avctx, AV_LOG_ERROR, "cbpy %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1465 if(s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C;
1467 h263_pred_motion(s, 0, 0, &mx, &my);
1468 mx= msmpeg4v2_decode_motion(s, mx, 1);
1469 my= msmpeg4v2_decode_motion(s, my, 1);
1471 s->mv_dir = MV_DIR_FORWARD;
1472 s->mv_type = MV_TYPE_16X16;
1473 s->mv[0][0][0] = mx;
1474 s->mv[0][0][1] = my;
1476 if(s->msmpeg4_version==2){
1477 s->ac_pred = get_bits1(&s->gb);
1478 cbp|= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
1481 cbp|= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
1482 if(s->pict_type==P_TYPE) cbp^=0x3C;
1486 s->dsp.clear_blocks(s->block[0]);
1487 for (i = 0; i < 6; i++) {
1488 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1490 av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1497 static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
1501 uint32_t * const mb_type_ptr= &s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ];
1503 if (s->pict_type == P_TYPE) {
1504 if (s->use_skip_mb_code) {
1505 if (get_bits1(&s->gb)) {
1509 s->block_last_index[i] = -1;
1510 s->mv_dir = MV_DIR_FORWARD;
1511 s->mv_type = MV_TYPE_16X16;
1515 *mb_type_ptr = MB_TYPE_SKIP | MB_TYPE_L0 | MB_TYPE_16x16;
1521 code = get_vlc2(&s->gb, mb_non_intra_vlc[DEFAULT_INTER_INDEX].table, MB_NON_INTRA_VLC_BITS, 3);
1524 //s->mb_intra = (code & 0x40) ? 0 : 1;
1525 s->mb_intra = (~code & 0x40) >> 6;
1530 code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2);
1533 /* predict coded block pattern */
1536 int val = ((code >> (5 - i)) & 1);
1538 int pred = coded_block_pred(s, i, &coded_val);
1542 cbp |= val << (5 - i);
1548 //printf("P at %d %d\n", s->mb_x, s->mb_y);
1549 if(s->per_mb_rl_table && cbp){
1550 s->rl_table_index = decode012(&s->gb);
1551 s->rl_chroma_table_index = s->rl_table_index;
1553 h263_pred_motion(s, 0, 0, &mx, &my);
1554 if (msmpeg4_decode_motion(s, &mx, &my) < 0)
1556 s->mv_dir = MV_DIR_FORWARD;
1557 s->mv_type = MV_TYPE_16X16;
1558 s->mv[0][0][0] = mx;
1559 s->mv[0][0][1] = my;
1560 *mb_type_ptr = MB_TYPE_L0 | MB_TYPE_16x16;
1562 //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));
1563 s->ac_pred = get_bits1(&s->gb);
1564 *mb_type_ptr = MB_TYPE_INTRA;
1565 if(s->inter_intra_pred){
1566 s->h263_aic_dir= get_vlc2(&s->gb, inter_intra_vlc.table, INTER_INTRA_VLC_BITS, 1);
1567 // printf("%d%d %d %d/", s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y);
1569 if(s->per_mb_rl_table && cbp){
1570 s->rl_table_index = decode012(&s->gb);
1571 s->rl_chroma_table_index = s->rl_table_index;
1575 s->dsp.clear_blocks(s->block[0]);
1576 for (i = 0; i < 6; i++) {
1577 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1579 av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1586 //#define ERROR_DETAILS
1587 static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
1588 int n, int coded, const uint8_t *scan_table)
1590 int level, i, last, run, run_diff;
1593 RL_VLC_ELEM *rl_vlc;
1601 level = msmpeg4_decode_dc(s, n, &dc_pred_dir);
1604 av_log(s->avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, s->qscale);
1605 if(s->inter_intra_pred) level=0;
1609 rl = &rl_table[s->rl_table_index];
1610 if(level > 256*s->y_dc_scale){
1611 av_log(s->avctx, AV_LOG_ERROR, "dc overflow+ L qscale: %d//\n", s->qscale);
1612 if(!s->inter_intra_pred) return -1;
1615 rl = &rl_table[3 + s->rl_chroma_table_index];
1616 if(level > 256*s->c_dc_scale){
1617 av_log(s->avctx, AV_LOG_ERROR, "dc overflow+ C qscale: %d//\n", s->qscale);
1618 if(!s->inter_intra_pred) return -1;
1629 if (dc_pred_dir == 0)
1630 scan_table = s->intra_v_scantable.permutated; /* left */
1632 scan_table = s->intra_h_scantable.permutated; /* top */
1634 scan_table = s->intra_scantable.permutated;
1636 rl_vlc= rl->rl_vlc[0];
1638 qmul = s->qscale << 1;
1639 qadd = (s->qscale - 1) | 1;
1641 rl = &rl_table[3 + s->rl_table_index];
1643 if(s->msmpeg4_version==2)
1649 s->block_last_index[n] = i;
1653 scan_table = s->inter_scantable.permutated;
1654 rl_vlc= rl->rl_vlc[s->qscale];
1657 OPEN_READER(re, &s->gb);
1659 UPDATE_CACHE(re, &s->gb);
1660 GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 0);
1663 cache= GET_CACHE(re, &s->gb);
1665 if (s->msmpeg4_version==1 || (cache&0x80000000)==0) {
1666 if (s->msmpeg4_version==1 || (cache&0x40000000)==0) {
1668 if(s->msmpeg4_version!=1) LAST_SKIP_BITS(re, &s->gb, 2);
1669 UPDATE_CACHE(re, &s->gb);
1670 if(s->msmpeg4_version<=3){
1671 last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
1672 run= SHOW_UBITS(re, &s->gb, 6); SKIP_CACHE(re, &s->gb, 6);
1673 level= SHOW_SBITS(re, &s->gb, 8); LAST_SKIP_CACHE(re, &s->gb, 8);
1674 SKIP_COUNTER(re, &s->gb, 1+6+8);
1677 last= SHOW_UBITS(re, &s->gb, 1); SKIP_BITS(re, &s->gb, 1);
1678 if(!s->esc3_level_length){
1680 //printf("ESC-3 %X at %d %d\n", show_bits(&s->gb, 24), s->mb_x, s->mb_y);
1682 ll= SHOW_UBITS(re, &s->gb, 3); SKIP_BITS(re, &s->gb, 3);
1684 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");
1685 SKIP_BITS(re, &s->gb, 1);
1690 while(ll<8 && SHOW_UBITS(re, &s->gb, 1)==0){
1692 SKIP_BITS(re, &s->gb, 1);
1694 if(ll<8) SKIP_BITS(re, &s->gb, 1);
1697 s->esc3_level_length= ll;
1698 s->esc3_run_length= SHOW_UBITS(re, &s->gb, 2) + 3; SKIP_BITS(re, &s->gb, 2);
1699 //printf("level length:%d, run length: %d\n", ll, s->esc3_run_length);
1700 UPDATE_CACHE(re, &s->gb);
1702 run= SHOW_UBITS(re, &s->gb, s->esc3_run_length);
1703 SKIP_BITS(re, &s->gb, s->esc3_run_length);
1705 sign= SHOW_UBITS(re, &s->gb, 1);
1706 SKIP_BITS(re, &s->gb, 1);
1708 level= SHOW_UBITS(re, &s->gb, s->esc3_level_length);
1709 SKIP_BITS(re, &s->gb, s->esc3_level_length);
1710 if(sign) level= -level;
1712 //printf("level: %d, run: %d at %d %d\n", level, run, s->mb_x, s->mb_y);
1713 #if 0 // waste of time / this will detect very few errors
1715 const int abs_level= ABS(level);
1716 const int run1= run - rl->max_run[last][abs_level] - run_diff;
1717 if(abs_level<=MAX_LEVEL && run<=MAX_RUN){
1718 if(abs_level <= rl->max_level[last][run]){
1719 av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n");
1720 return DECODING_AC_LOST;
1722 if(abs_level <= rl->max_level[last][run]*2){
1723 av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 1 encoding possible\n");
1724 return DECODING_AC_LOST;
1726 if(run1>=0 && abs_level <= rl->max_level[last][run1]){
1727 av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 2 encoding possible\n");
1728 return DECODING_AC_LOST;
1733 //level = level * qmul + (level>0) * qadd - (level<=0) * qadd ;
1734 if (level>0) level= level * qmul + qadd;
1735 else level= level * qmul - qadd;
1736 #if 0 // waste of time too :(
1737 if(level>2048 || level<-2048){
1738 av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc\n");
1739 return DECODING_AC_LOST;
1744 #ifdef ERROR_DETAILS
1746 av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC3 level=%d\n", level);
1747 else if((i>62 && i<192) || i>192+63)
1748 av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC3 i=%d run=%d level=%d\n", i, run, level);
1752 #if MIN_CACHE_BITS < 23
1753 LAST_SKIP_BITS(re, &s->gb, 2);
1754 UPDATE_CACHE(re, &s->gb);
1756 SKIP_BITS(re, &s->gb, 2);
1758 GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
1759 i+= run + rl->max_run[run>>7][level/qmul] + run_diff; //FIXME opt indexing
1760 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1761 LAST_SKIP_BITS(re, &s->gb, 1);
1762 #ifdef ERROR_DETAILS
1764 av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC2 level=%d\n", level);
1765 else if((i>62 && i<192) || i>192+63)
1766 av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC2 i=%d run=%d level=%d\n", i, run, level);
1771 #if MIN_CACHE_BITS < 22
1772 LAST_SKIP_BITS(re, &s->gb, 1);
1773 UPDATE_CACHE(re, &s->gb);
1775 SKIP_BITS(re, &s->gb, 1);
1777 GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
1779 level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
1780 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1781 LAST_SKIP_BITS(re, &s->gb, 1);
1782 #ifdef ERROR_DETAILS
1784 av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC1 level=%d\n", level);
1785 else if((i>62 && i<192) || i>192+63)
1786 av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC1 i=%d run=%d level=%d\n", i, run, level);
1791 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1792 LAST_SKIP_BITS(re, &s->gb, 1);
1793 #ifdef ERROR_DETAILS
1795 av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code level=%d\n", level);
1796 else if((i>62 && i<192) || i>192+63)
1797 av_log(s->avctx, AV_LOG_ERROR, "run overflow i=%d run=%d level=%d\n", i, run, level);
1803 const int left= s->gb.size_in_bits - get_bits_count(&s->gb);
1804 if(((i+192 == 64 && level/qmul==-1) || s->error_resilience<=1) && left>=0){
1805 av_log(s->avctx, AV_LOG_ERROR, "ignoring overflow at %d %d\n", s->mb_x, s->mb_y);
1808 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
1813 block[scan_table[i]] = level;
1817 block[scan_table[i]] = level;
1819 CLOSE_READER(re, &s->gb);
1823 mpeg4_pred_ac(s, block, n, dc_pred_dir);
1825 i = 63; /* XXX: not optimal */
1828 if(s->msmpeg4_version>=4 && i>0) i=63; //FIXME/XXX optimize
1829 s->block_last_index[n] = i;
1834 static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
1838 if(s->msmpeg4_version<=2){
1840 level = get_vlc2(&s->gb, v2_dc_lum_vlc.table, DC_VLC_BITS, 3);
1842 level = get_vlc2(&s->gb, v2_dc_chroma_vlc.table, DC_VLC_BITS, 3);
1847 }else{ //FIXME optimize use unified tables & index
1849 level = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3);
1851 level = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3);
1854 av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n");
1858 if (level == DC_MAX) {
1859 level = get_bits(&s->gb, 8);
1860 if (get_bits1(&s->gb))
1862 } else if (level != 0) {
1863 if (get_bits1(&s->gb))
1868 if(s->msmpeg4_version==1){
1870 pred = msmpeg4v1_pred_dc(s, n, &dc_val);
1873 /* update predictor */
1877 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr);
1880 /* update predictor */
1882 *dc_val = level * s->y_dc_scale;
1884 *dc_val = level * s->c_dc_scale;
1891 static int msmpeg4_decode_motion(MpegEncContext * s,
1892 int *mx_ptr, int *my_ptr)
1897 mv = &mv_tables[s->mv_table_index];
1899 code = get_vlc2(&s->gb, mv->vlc.table, MV_VLC_BITS, 2);
1901 av_log(s->avctx, AV_LOG_ERROR, "illegal MV code at %d %d\n", s->mb_x, s->mb_y);
1904 if (code == mv->n) {
1905 //printf("MV ESC %X at %d %d\n", show_bits(&s->gb, 24), s->mb_x, s->mb_y);
1906 mx = get_bits(&s->gb, 6);
1907 my = get_bits(&s->gb, 6);
1909 mx = mv->table_mvx[code];
1910 my = mv->table_mvy[code];
1915 /* WARNING : they do not do exactly modulo encoding */
1930 /* cleanest way to support it
1931 * there is too much shared between versions so that we cant have 1 file per version & 1 common
1932 * as allmost everything would be in the common file