diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/msmpeg4.c')
-rw-r--r-- | src/libffmpeg/libavcodec/msmpeg4.c | 408 |
1 files changed, 204 insertions, 204 deletions
diff --git a/src/libffmpeg/libavcodec/msmpeg4.c b/src/libffmpeg/libavcodec/msmpeg4.c index 81f147918..5bb7158e6 100644 --- a/src/libffmpeg/libavcodec/msmpeg4.c +++ b/src/libffmpeg/libavcodec/msmpeg4.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * msmpeg4v1 & v2 stuff by Michael Niedermayer <michaelni@gmx.at> */ @@ -30,11 +30,11 @@ #include "mpegvideo.h" /* - * You can also call this codec : MPEG4 with a twist ! + * You can also call this codec : MPEG4 with a twist ! * - * TODO: + * TODO: * - (encoding) select best mv table (two choices) - * - (encoding) select best vlc/dc table + * - (encoding) select best vlc/dc table */ //#define DEBUG @@ -63,7 +63,7 @@ static inline void msmpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, int n, int coded, const uint8_t *scantable); static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr); -static int msmpeg4_decode_motion(MpegEncContext * s, +static int msmpeg4_decode_motion(MpegEncContext * s, int *mx_ptr, int *my_ptr); static void msmpeg4v2_encode_motion(MpegEncContext * s, int val); static void init_h263_dc_for_msmpeg4(void); @@ -119,14 +119,14 @@ void print_stats(void) if (total == 0) total = 1; for(i=0;i<ST_NB;i++) { - printf("%-10s : %10.1f %5.1f%%\n", - st_names[i], - (double)st_bit_counts[i] / 8.0, + printf("%-10s : %10.1f %5.1f%%\n", + st_names[i], + (double)st_bit_counts[i] / 8.0, (double)st_bit_counts[i] * 100.0 / total); } printf("%-10s : %10.1f %5.1f%%\n", - "total", - (double)total / 8.0, + "total", + (double)total / 8.0, 100.0); printf("Output:\n"); @@ -136,14 +136,14 @@ void print_stats(void) if (total == 0) total = 1; for(i=0;i<ST_NB;i++) { - printf("%-10s : %10.1f %5.1f%%\n", - st_names[i], - (double)st_out_bit_counts[i] / 8.0, + printf("%-10s : %10.1f %5.1f%%\n", + st_names[i], + (double)st_out_bit_counts[i] / 8.0, (double)st_out_bit_counts[i] * 100.0 / total); } printf("%-10s : %10.1f %5.1f%%\n", - "total", - (double)total / 8.0, + "total", + (double)total / 8.0, 100.0); } @@ -156,7 +156,7 @@ void print_stats(void) static void common_init(MpegEncContext * s) { static int inited=0; - + switch(s->msmpeg4_version){ case 1: case 2: @@ -186,7 +186,7 @@ static void common_init(MpegEncContext * s) } - + if(s->msmpeg4_version>=4){ ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable , wmv1_scantable[1]); ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, wmv1_scantable[2]); @@ -194,7 +194,7 @@ static void common_init(MpegEncContext * s) ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable , wmv1_scantable[0]); } //Note the default tables are set in common_init in mpegvideo.c - + if(!inited){ inited=1; @@ -213,7 +213,7 @@ static void init_mv_table(MVTable *tab) /* mark all entries as not used */ for(i=0;i<4096;i++) tab->table_mv_index[i] = tab->n; - + for(i=0;i<tab->n;i++) { x = tab->table_mvx[i]; y = tab->table_mvy[i]; @@ -269,14 +269,14 @@ static int get_size_of_code(MpegEncContext * s, RLTable *rl, int last, int run, int size=0; int code; int run_diff= intra ? 0 : 1; - + code = get_rl_index(rl, last, run, level); size+= rl->table_vlc[code][1]; if (code == rl->n) { int level1, run1; level1 = level - rl->max_level[last][run]; - if (level1 < 1) + if (level1 < 1) goto esc2; code = get_rl_index(rl, last, run, level1); if (code == rl->n) { @@ -318,7 +318,7 @@ static void find_best_tables(MpegEncContext * s) int size=0; if(i>0){// ;) - size++; + size++; chroma_size++; } for(level=0; level<=MAX_LEVEL; level++){ @@ -330,7 +330,7 @@ static void find_best_tables(MpegEncContext * s) int inter_count = s->ac_stats[0][0][level][run][last] + s->ac_stats[0][1][level][run][last]; int intra_luma_count = s->ac_stats[1][0][level][run][last]; int intra_chroma_count= s->ac_stats[1][1][level][run][last]; - + if(s->pict_type==I_TYPE){ size += intra_luma_count *rl_length[i ][level][run][last]; chroma_size+= intra_chroma_count*rl_length[i+3][level][run][last]; @@ -338,7 +338,7 @@ static void find_best_tables(MpegEncContext * s) size+= intra_luma_count *rl_length[i ][level][run][last] +intra_chroma_count*rl_length[i+3][level][run][last] +inter_count *rl_length[i+3][level][run][last]; - } + } } if(last_size == size+chroma_size) break; } @@ -353,16 +353,16 @@ static void find_best_tables(MpegEncContext * s) } } -// printf("type:%d, best:%d, qp:%d, var:%d, mcvar:%d, size:%d //\n", +// printf("type:%d, best:%d, qp:%d, var:%d, mcvar:%d, size:%d //\n", // s->pict_type, best, s->qscale, s->mb_var_sum, s->mc_mb_var_sum, best_size); - + if(s->pict_type==P_TYPE) chroma_best= best; memset(s->ac_stats, 0, sizeof(int)*(MAX_LEVEL+1)*(MAX_RUN+1)*2*2*2); s->rl_table_index = best; s->rl_chroma_table_index= chroma_best; - + if(s->pict_type != s->last_non_b_pict_type){ s->rl_table_index= 2; if(s->pict_type==I_TYPE) @@ -398,7 +398,7 @@ void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number) if (s->pict_type == I_TYPE) { s->slice_height= s->mb_height/1; put_bits(&s->pb, 5, 0x16 + s->mb_height/s->slice_height); - + if(s->msmpeg4_version==4){ msmpeg4_encode_ext_header(s); if(s->bit_rate>MBAC_BITRATE) @@ -415,7 +415,7 @@ void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number) } } else { put_bits(&s->pb, 1, s->use_skip_mb_code); - + if(s->msmpeg4_version==4 && s->bit_rate>MBAC_BITRATE) put_bits(&s->pb, 1, s->per_mb_rl_table); @@ -461,18 +461,18 @@ static inline int coded_block_pred(MpegEncContext * s, int n, uint8_t **coded_bl wrap = s->b8_stride; /* B C - * A X + * A X */ a = s->coded_block[xy - 1 ]; b = s->coded_block[xy - 1 - wrap]; c = s->coded_block[xy - wrap]; - + if (b == c) { pred = a; } else { pred = c; } - + /* store value */ *coded_block_ptr = &s->coded_block[xy]; @@ -481,7 +481,7 @@ static inline int coded_block_pred(MpegEncContext * s, int n, uint8_t **coded_bl #ifdef CONFIG_ENCODERS -static void msmpeg4_encode_motion(MpegEncContext * s, +static void msmpeg4_encode_motion(MpegEncContext * s, int mx, int my) { int code; @@ -498,20 +498,20 @@ static void msmpeg4_encode_motion(MpegEncContext * s, my += 64; else if (my >= 64) my -= 64; - + mx += 32; my += 32; #if 0 if ((unsigned)mx >= 64 || - (unsigned)my >= 64) + (unsigned)my >= 64) fprintf(stderr, "error mx=%d my=%d\n", mx, my); #endif mv = &mv_tables[s->mv_table_index]; code = mv->table_mv_index[(mx << 6) | my]; set_stat(ST_MV); - put_bits(&s->pb, - mv->table_mv_bits[code], + put_bits(&s->pb, + mv->table_mv_bits[code], mv->table_mv_code[code]); if (code == mv->n) { /* escape : code litterally */ @@ -528,12 +528,12 @@ static inline void handle_slices(MpegEncContext *s){ } s->first_slice_line = 1; } else { - s->first_slice_line = 0; + s->first_slice_line = 0; } } } -void msmpeg4_encode_mb(MpegEncContext * s, +void msmpeg4_encode_mb(MpegEncContext * s, DCTELEM block[6][64], int motion_x, int motion_y) { @@ -542,36 +542,36 @@ void msmpeg4_encode_mb(MpegEncContext * s, uint8_t *coded_block; handle_slices(s); - + if (!s->mb_intra) { - /* compute cbp */ + /* compute cbp */ set_stat(ST_INTER_MB); - cbp = 0; - for (i = 0; i < 6; i++) { - if (s->block_last_index[i] >= 0) - cbp |= 1 << (5 - i); - } - if (s->use_skip_mb_code && (cbp | motion_x | motion_y) == 0) { - /* skip macroblock */ - put_bits(&s->pb, 1, 1); + cbp = 0; + for (i = 0; i < 6; i++) { + if (s->block_last_index[i] >= 0) + cbp |= 1 << (5 - i); + } + if (s->use_skip_mb_code && (cbp | motion_x | motion_y) == 0) { + /* skip macroblock */ + put_bits(&s->pb, 1, 1); s->last_bits++; - s->misc_bits++; + s->misc_bits++; s->skip_count++; - return; - } + return; + } if (s->use_skip_mb_code) - put_bits(&s->pb, 1, 0); /* mb coded */ - + put_bits(&s->pb, 1, 0); /* mb coded */ + if(s->msmpeg4_version<=2){ - put_bits(&s->pb, - v2_mb_type[cbp&3][1], + put_bits(&s->pb, + v2_mb_type[cbp&3][1], v2_mb_type[cbp&3][0]); if((cbp&3) != 3) coded_cbp= cbp ^ 0x3C; else coded_cbp= cbp; - put_bits(&s->pb, - cbpy_tab[coded_cbp>>2][1], + put_bits(&s->pb, + cbpy_tab[coded_cbp>>2][1], cbpy_tab[coded_cbp>>2][0]); s->misc_bits += get_bits_diff(s); @@ -580,15 +580,15 @@ void msmpeg4_encode_mb(MpegEncContext * s, msmpeg4v2_encode_motion(s, motion_x - pred_x); msmpeg4v2_encode_motion(s, motion_y - pred_y); }else{ - put_bits(&s->pb, - table_mb_non_intra[cbp + 64][1], + put_bits(&s->pb, + table_mb_non_intra[cbp + 64][1], table_mb_non_intra[cbp + 64][0]); s->misc_bits += get_bits_diff(s); /* motion vector */ h263_pred_motion(s, 0, 0, &pred_x, &pred_y); - msmpeg4_encode_motion(s, motion_x - pred_x, + msmpeg4_encode_motion(s, motion_x - pred_x, motion_y - pred_y); } @@ -599,10 +599,10 @@ void msmpeg4_encode_mb(MpegEncContext * s, } s->p_tex_bits += get_bits_diff(s); } else { - /* compute cbp */ - cbp = 0; + /* compute cbp */ + cbp = 0; coded_cbp = 0; - for (i = 0; i < 6; i++) { + for (i = 0; i < 6; i++) { int val, pred; val = (s->block_last_index[i] >= 1); cbp |= val << (5 - i); @@ -613,7 +613,7 @@ void msmpeg4_encode_mb(MpegEncContext * s, val = val ^ pred; } coded_cbp |= val << (5 - i); - } + } #if 0 if (coded_cbp) printf("cbp=%x %x\n", cbp, coded_cbp); @@ -621,33 +621,33 @@ void msmpeg4_encode_mb(MpegEncContext * s, if(s->msmpeg4_version<=2){ if (s->pict_type == I_TYPE) { - put_bits(&s->pb, + put_bits(&s->pb, v2_intra_cbpc[cbp&3][1], v2_intra_cbpc[cbp&3][0]); } else { if (s->use_skip_mb_code) - put_bits(&s->pb, 1, 0); /* mb coded */ - put_bits(&s->pb, - v2_mb_type[(cbp&3) + 4][1], + put_bits(&s->pb, 1, 0); /* mb coded */ + put_bits(&s->pb, + v2_mb_type[(cbp&3) + 4][1], v2_mb_type[(cbp&3) + 4][0]); } - put_bits(&s->pb, 1, 0); /* no AC prediction yet */ - put_bits(&s->pb, - cbpy_tab[cbp>>2][1], + put_bits(&s->pb, 1, 0); /* no AC prediction yet */ + put_bits(&s->pb, + cbpy_tab[cbp>>2][1], cbpy_tab[cbp>>2][0]); }else{ if (s->pict_type == I_TYPE) { set_stat(ST_INTRA_MB); - put_bits(&s->pb, + put_bits(&s->pb, ff_msmp4_mb_i_table[coded_cbp][1], ff_msmp4_mb_i_table[coded_cbp][0]); } else { if (s->use_skip_mb_code) - put_bits(&s->pb, 1, 0); /* mb coded */ - put_bits(&s->pb, - table_mb_non_intra[cbp][1], + put_bits(&s->pb, 1, 0); /* mb coded */ + put_bits(&s->pb, + table_mb_non_intra[cbp][1], table_mb_non_intra[cbp][0]); } set_stat(ST_INTRA_MB); - put_bits(&s->pb, 1, 0); /* no AC prediction yet */ + put_bits(&s->pb, 1, 0); /* no AC prediction yet */ if(s->inter_intra_pred){ s->h263_aic_dir=0; put_bits(&s->pb, table_inter_intra[s->h263_aic_dir][1], table_inter_intra[s->h263_aic_dir][0]); @@ -665,7 +665,7 @@ void msmpeg4_encode_mb(MpegEncContext * s, #endif //CONFIG_ENCODERS -static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n, +static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n, int32_t **dc_val_ptr) { int i; @@ -675,9 +675,9 @@ static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n, } else { i= n-3; } - + *dc_val_ptr= &s->last_dc[i]; - return s->last_dc[i]; + return s->last_dc[i]; } static int get_dc(uint8_t *src, int stride, int scale) @@ -694,7 +694,7 @@ static int get_dc(uint8_t *src, int stride, int scale) } /* dir = 0: left, dir = 1: top prediction */ -static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, +static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr, int *dir_ptr) { int a, b, c, wrap, pred, scale; @@ -702,21 +702,21 @@ static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, /* find prediction */ if (n < 4) { - scale = s->y_dc_scale; + scale = s->y_dc_scale; } else { - scale = s->c_dc_scale; + scale = s->c_dc_scale; } - + wrap = s->block_wrap[n]; dc_val= s->dc_val[0] + s->block_index[n]; /* B C - * A X + * A X */ a = dc_val[ - 1]; b = dc_val[ - 1 - wrap]; c = dc_val[ - wrap]; - + if(s->first_slice_line && (n&2)==0 && s->msmpeg4_version<4){ b=c=1024; } @@ -727,22 +727,22 @@ static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, to problems if Q could vary !) */ #if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined PIC asm volatile( - "movl %3, %%eax \n\t" - "shrl $1, %%eax \n\t" - "addl %%eax, %2 \n\t" - "addl %%eax, %1 \n\t" - "addl %0, %%eax \n\t" - "mull %4 \n\t" - "movl %%edx, %0 \n\t" - "movl %1, %%eax \n\t" - "mull %4 \n\t" - "movl %%edx, %1 \n\t" - "movl %2, %%eax \n\t" - "mull %4 \n\t" - "movl %%edx, %2 \n\t" - : "+b" (a), "+c" (b), "+D" (c) - : "g" (scale), "S" (inverse[scale]) - : "%eax", "%edx" + "movl %3, %%eax \n\t" + "shrl $1, %%eax \n\t" + "addl %%eax, %2 \n\t" + "addl %%eax, %1 \n\t" + "addl %0, %%eax \n\t" + "mull %4 \n\t" + "movl %%edx, %0 \n\t" + "movl %1, %%eax \n\t" + "mull %4 \n\t" + "movl %%edx, %1 \n\t" + "movl %2, %%eax \n\t" + "mull %4 \n\t" + "movl %%edx, %2 \n\t" + : "+b" (a), "+c" (b), "+D" (c) + : "g" (scale), "S" (inverse[scale]) + : "%eax", "%edx" ); #else /* #elif defined (ARCH_ALPHA) */ @@ -750,13 +750,13 @@ static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, common case. But they are costly everywhere... */ if (scale == 8) { - a = (a + (8 >> 1)) / 8; - b = (b + (8 >> 1)) / 8; - c = (c + (8 >> 1)) / 8; + a = (a + (8 >> 1)) / 8; + b = (b + (8 >> 1)) / 8; + c = (c + (8 >> 1)) / 8; } else { - a = FASTDIV((a + (scale >> 1)), scale); - b = FASTDIV((b + (scale >> 1)), scale); - c = FASTDIV((c + (scale >> 1)), scale); + a = FASTDIV((a + (scale >> 1)), scale); + b = FASTDIV((b + (scale >> 1)), scale); + c = FASTDIV((c + (scale >> 1)), scale); } #endif /* XXX: WARNING: they did not choose the same test as MPEG4. This @@ -765,7 +765,7 @@ static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, if(s->inter_intra_pred){ uint8_t *dest; int wrap; - + if(n==1){ pred=a; *dir_ptr = 0; @@ -792,7 +792,7 @@ static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, else a= get_dc(dest-8, wrap, scale*8); if(s->mb_y==0) c= (1024 + (scale>>1))/scale; else c= get_dc(dest-8*wrap, wrap, scale*8); - + if (s->h263_aic_dir==0) { pred= a; *dir_ptr = 0; @@ -851,7 +851,7 @@ static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr if(s->msmpeg4_version==1){ int32_t *dc_val; pred = msmpeg4v1_pred_dc(s, n, &dc_val); - + /* update predictor */ *dc_val= level; }else{ @@ -871,11 +871,11 @@ static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr if(s->msmpeg4_version<=2){ if (n < 4) { - put_bits(&s->pb, + put_bits(&s->pb, v2_dc_lum_table[level+256][1], v2_dc_lum_table[level+256][0]); }else{ - put_bits(&s->pb, + put_bits(&s->pb, v2_dc_chroma_table[level+256][1], v2_dc_chroma_table[level+256][0]); } @@ -886,7 +886,7 @@ static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr sign = 1; } code = level; - if (code > DC_MAX) + if (code > DC_MAX) code = DC_MAX; if (s->dc_table_index == 0) { @@ -902,10 +902,10 @@ static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr put_bits(&s->pb, ff_table1_dc_chroma[code][1], ff_table1_dc_chroma[code][0]); } } - + if (code == DC_MAX) put_bits(&s->pb, 8, level); - + if (level != 0) { put_bits(&s->pb, 1, sign); } @@ -957,17 +957,17 @@ static inline void msmpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int /* AC coefs */ last_non_zero = i - 1; for (; i <= last_index; i++) { - j = scantable[i]; - level = block[j]; - if (level) { - run = i - last_non_zero - 1; - last = (i == last_index); - sign = 0; - slevel = level; - if (level < 0) { - sign = 1; - level = -level; - } + j = scantable[i]; + level = block[j]; + if (level) { + run = i - last_non_zero - 1; + last = (i == last_index); + sign = 0; + slevel = level; + if (level < 0) { + sign = 1; + level = -level; + } if(level<=MAX_LEVEL && run<=MAX_RUN){ s->ac_stats[s->mb_intra][n>3][level][run][last]++; @@ -982,7 +982,7 @@ else int level1, run1; level1 = level - rl->max_level[last][run]; - if (level1 < 1) + if (level1 < 1) goto esc2; code = get_rl_index(rl, last, run, level1); if (code == rl->n) { @@ -1030,8 +1030,8 @@ else } else { put_bits(&s->pb, 1, sign); } - last_non_zero = i; - } + last_non_zero = i; + } } } @@ -1064,7 +1064,7 @@ static void init_h263_dc_for_msmpeg4(void) v = abs(level); while (v) { v >>= 1; - size++; + size++; } if (level < 0) @@ -1092,7 +1092,7 @@ static void init_h263_dc_for_msmpeg4(void) uni_code= DCtab_chrom[size][0]; uni_len = DCtab_chrom[size][1]; uni_code ^= (1<<uni_len)-1; //M$ doesnt like compatibility - + if (size > 0) { uni_code<<=size; uni_code|=l; uni_len+=size; @@ -1125,31 +1125,31 @@ int ff_msmpeg4_decode_init(MpegEncContext *s) } for(i=0;i<2;i++) { mv = &mv_tables[i]; - init_vlc(&mv->vlc, MV_VLC_BITS, mv->n + 1, + init_vlc(&mv->vlc, MV_VLC_BITS, mv->n + 1, mv->table_mv_bits, 1, 1, mv->table_mv_code, 2, 2, 1); } - init_vlc(&ff_msmp4_dc_luma_vlc[0], DC_VLC_BITS, 120, + init_vlc(&ff_msmp4_dc_luma_vlc[0], DC_VLC_BITS, 120, &ff_table0_dc_lum[0][1], 8, 4, &ff_table0_dc_lum[0][0], 8, 4, 1); - init_vlc(&ff_msmp4_dc_chroma_vlc[0], DC_VLC_BITS, 120, + init_vlc(&ff_msmp4_dc_chroma_vlc[0], DC_VLC_BITS, 120, &ff_table0_dc_chroma[0][1], 8, 4, &ff_table0_dc_chroma[0][0], 8, 4, 1); - init_vlc(&ff_msmp4_dc_luma_vlc[1], DC_VLC_BITS, 120, + init_vlc(&ff_msmp4_dc_luma_vlc[1], DC_VLC_BITS, 120, &ff_table1_dc_lum[0][1], 8, 4, &ff_table1_dc_lum[0][0], 8, 4, 1); - init_vlc(&ff_msmp4_dc_chroma_vlc[1], DC_VLC_BITS, 120, + init_vlc(&ff_msmp4_dc_chroma_vlc[1], DC_VLC_BITS, 120, &ff_table1_dc_chroma[0][1], 8, 4, &ff_table1_dc_chroma[0][0], 8, 4, 1); - - init_vlc(&v2_dc_lum_vlc, DC_VLC_BITS, 512, + + init_vlc(&v2_dc_lum_vlc, DC_VLC_BITS, 512, &v2_dc_lum_table[0][1], 8, 4, &v2_dc_lum_table[0][0], 8, 4, 1); - init_vlc(&v2_dc_chroma_vlc, DC_VLC_BITS, 512, + init_vlc(&v2_dc_chroma_vlc, DC_VLC_BITS, 512, &v2_dc_chroma_table[0][1], 8, 4, &v2_dc_chroma_table[0][0], 8, 4, 1); - + init_vlc(&cbpy_vlc, CBPY_VLC_BITS, 16, &cbpy_tab[0][1], 2, 1, &cbpy_tab[0][0], 2, 1, 1); @@ -1164,27 +1164,27 @@ int ff_msmpeg4_decode_init(MpegEncContext *s) &mvtab[0][0], 2, 1, 1); for(i=0; i<4; i++){ - init_vlc(&mb_non_intra_vlc[i], MB_NON_INTRA_VLC_BITS, 128, + init_vlc(&mb_non_intra_vlc[i], MB_NON_INTRA_VLC_BITS, 128, &wmv2_inter_table[i][0][1], 8, 4, &wmv2_inter_table[i][0][0], 8, 4, 1); //FIXME name? } - - init_vlc(&ff_msmp4_mb_i_vlc, MB_INTRA_VLC_BITS, 64, + + init_vlc(&ff_msmp4_mb_i_vlc, MB_INTRA_VLC_BITS, 64, &ff_msmp4_mb_i_table[0][1], 4, 2, &ff_msmp4_mb_i_table[0][0], 4, 2, 1); - - init_vlc(&v1_intra_cbpc_vlc, V1_INTRA_CBPC_VLC_BITS, 8, + + init_vlc(&v1_intra_cbpc_vlc, V1_INTRA_CBPC_VLC_BITS, 8, intra_MCBPC_bits, 1, 1, intra_MCBPC_code, 1, 1, 1); - init_vlc(&v1_inter_cbpc_vlc, V1_INTER_CBPC_VLC_BITS, 25, + init_vlc(&v1_inter_cbpc_vlc, V1_INTER_CBPC_VLC_BITS, 25, inter_MCBPC_bits, 1, 1, inter_MCBPC_code, 1, 1, 1); - - init_vlc(&inter_intra_vlc, INTER_INTRA_VLC_BITS, 4, + + init_vlc(&inter_intra_vlc, INTER_INTRA_VLC_BITS, 4, &table_inter_intra[0][1], 2, 1, &table_inter_intra[0][0], 2, 1, 1); } - + switch(s->msmpeg4_version){ case 1: case 2: @@ -1200,9 +1200,9 @@ int ff_msmpeg4_decode_init(MpegEncContext *s) //FIXME + TODO VC9 decode mb break; } - + s->slice_height= s->mb_height; //to avoid 1/0 if the first frame isnt a keyframe - + return 0; } @@ -1252,7 +1252,7 @@ return -1; } if (s->pict_type == I_TYPE) { - code = get_bits(&s->gb, 5); + code = get_bits(&s->gb, 5); if(s->msmpeg4_version==1){ if(code==0 || code>s->mb_height){ av_log(s->avctx, AV_LOG_ERROR, "invalid slice height %d\n", code); @@ -1289,7 +1289,7 @@ return -1; if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb); else s->per_mb_rl_table= 0; - + if(!s->per_mb_rl_table){ s->rl_chroma_table_index = decode012(&s->gb); s->rl_table_index = decode012(&s->gb); @@ -1301,11 +1301,11 @@ return -1; } s->no_rounding = 1; if(s->avctx->debug&FF_DEBUG_PICT_INFO) - av_log(s->avctx, AV_LOG_DEBUG, "qscale:%d rlc:%d rl:%d dc:%d mbrl:%d slice:%d \n", - s->qscale, - s->rl_chroma_table_index, - s->rl_table_index, - s->dc_table_index, + av_log(s->avctx, AV_LOG_DEBUG, "qscale:%d rlc:%d rl:%d dc:%d mbrl:%d slice:%d \n", + s->qscale, + s->rl_chroma_table_index, + s->rl_table_index, + s->dc_table_index, s->per_mb_rl_table, s->slice_height); } else { @@ -1347,22 +1347,22 @@ return -1; s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE); break; } - + if(s->avctx->debug&FF_DEBUG_PICT_INFO) - av_log(s->avctx, AV_LOG_DEBUG, "skip:%d rl:%d rlc:%d dc:%d mv:%d mbrl:%d qp:%d \n", - s->use_skip_mb_code, - s->rl_table_index, - s->rl_chroma_table_index, - s->dc_table_index, - s->mv_table_index, + av_log(s->avctx, AV_LOG_DEBUG, "skip:%d rl:%d rlc:%d dc:%d mv:%d mbrl:%d qp:%d \n", + s->use_skip_mb_code, + s->rl_table_index, + s->rl_chroma_table_index, + s->dc_table_index, + s->mv_table_index, s->per_mb_rl_table, s->qscale); - if(s->flipflop_rounding){ - s->no_rounding ^= 1; - }else{ - s->no_rounding = 0; - } + if(s->flipflop_rounding){ + s->no_rounding ^= 1; + }else{ + s->no_rounding = 0; + } } //printf("%d %d %d %d %d\n", s->pict_type, s->bit_rate, s->inter_intra_pred, s->width, s->height); @@ -1440,7 +1440,7 @@ static void msmpeg4v2_encode_motion(MpegEncContext * s, int val) code = (val >> bit_size) + 1; bits = val & (range - 1); - put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign); + put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign); if (bit_size > 0) { put_bits(&s->pb, bit_size, bits); } @@ -1482,7 +1482,7 @@ static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code) static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) { int cbp, code, i; - + if (s->pict_type == P_TYPE) { if (s->use_skip_mb_code) { if (get_bits1(&s->gb)) { @@ -1509,7 +1509,7 @@ static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) } s->mb_intra = code >>2; - + cbp = code & 0x3; } else { s->mb_intra = 1; @@ -1525,7 +1525,7 @@ static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) if (!s->mb_intra) { int mx, my, cbpy; - + cbpy= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); if(cbpy<0){ av_log(s->avctx, AV_LOG_ERROR, "cbpy %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y); @@ -1534,11 +1534,11 @@ static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) cbp|= cbpy<<2; if(s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C; - + h263_pred_motion(s, 0, 0, &mx, &my); mx= msmpeg4v2_decode_motion(s, mx, 1); my= msmpeg4v2_decode_motion(s, my, 1); - + s->mv_dir = MV_DIR_FORWARD; s->mv_type = MV_TYPE_16X16; s->mv[0][0][0] = mx; @@ -1557,10 +1557,10 @@ static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) s->dsp.clear_blocks(s->block[0]); for (i = 0; i < 6; i++) { if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0) - { + { av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i); return -1; - } + } } return 0; } @@ -1589,13 +1589,13 @@ static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) return 0; } } - + code = get_vlc2(&s->gb, mb_non_intra_vlc[DEFAULT_INTER_INDEX].table, MB_NON_INTRA_VLC_BITS, 3); if (code < 0) return -1; - //s->mb_intra = (code & 0x40) ? 0 : 1; - s->mb_intra = (~code & 0x40) >> 6; - + //s->mb_intra = (code & 0x40) ? 0 : 1; + s->mb_intra = (~code & 0x40) >> 6; + cbp = code & 0x3f; } else { set_stat(ST_INTRA_MB); @@ -1650,12 +1650,12 @@ static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) s->dsp.clear_blocks(s->block[0]); for (i = 0; i < 6; i++) { if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0) - { - av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i); - return -1; - } + { + av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i); + return -1; + } } - + return 0; } //#define ERROR_DETAILS @@ -1672,10 +1672,10 @@ static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, qmul=1; qadd=0; - /* DC coef */ + /* DC coef */ set_stat(ST_DC); level = msmpeg4_decode_dc(s, n, &dc_pred_dir); - + if (level < 0){ av_log(s->avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, s->qscale); if(s->inter_intra_pred) level=0; @@ -1702,7 +1702,7 @@ static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, goto not_coded; } if (s->ac_pred) { - if (dc_pred_dir == 0) + if (dc_pred_dir == 0) scan_table = s->intra_v_scantable.permutated; /* left */ else scan_table = s->intra_h_scantable.permutated; /* top */ @@ -1750,7 +1750,7 @@ static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, run= SHOW_UBITS(re, &s->gb, 6); SKIP_CACHE(re, &s->gb, 6); level= SHOW_SBITS(re, &s->gb, 8); LAST_SKIP_CACHE(re, &s->gb, 8); SKIP_COUNTER(re, &s->gb, 1+6+8); - }else{ + }else{ int sign; last= SHOW_UBITS(re, &s->gb, 1); SKIP_BITS(re, &s->gb, 1); if(!s->esc3_level_length){ @@ -1777,13 +1777,13 @@ static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, //printf("level length:%d, run length: %d\n", ll, s->esc3_run_length); UPDATE_CACHE(re, &s->gb); } - run= SHOW_UBITS(re, &s->gb, s->esc3_run_length); + run= SHOW_UBITS(re, &s->gb, s->esc3_run_length); SKIP_BITS(re, &s->gb, s->esc3_run_length); - - sign= SHOW_UBITS(re, &s->gb, 1); + + sign= SHOW_UBITS(re, &s->gb, 1); SKIP_BITS(re, &s->gb, 1); - - level= SHOW_UBITS(re, &s->gb, s->esc3_level_length); + + level= SHOW_UBITS(re, &s->gb, s->esc3_level_length); SKIP_BITS(re, &s->gb, s->esc3_level_length); if(sign) level= -level; } @@ -1808,8 +1808,8 @@ static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, } } #endif - //level = level * qmul + (level>0) * qadd - (level<=0) * qadd ; - if (level>0) level= level * qmul + qadd; + //level = level * qmul + (level>0) * qadd - (level<=0) * qadd ; + if (level>0) level= level * qmul + qadd; else level= level * qmul - qadd; #if 0 // waste of time too :( if(level>2048 || level<-2048){ @@ -1905,7 +1905,7 @@ static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, } if(s->msmpeg4_version>=4 && i>0) i=63; //FIXME/XXX optimize s->block_last_index[n] = i; - + return 0; } @@ -1919,7 +1919,7 @@ static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr) } else { level = get_vlc2(&s->gb, v2_dc_chroma_vlc.table, DC_VLC_BITS, 3); } - if (level < 0) + if (level < 0) return -1; level-=256; }else{ //FIXME optimize use unified tables & index @@ -1947,7 +1947,7 @@ static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr) int32_t *dc_val; pred = msmpeg4v1_pred_dc(s, n, &dc_val); level += pred; - + /* update predictor */ *dc_val= level; }else{ @@ -1966,7 +1966,7 @@ static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr) return level; } -static int msmpeg4_decode_motion(MpegEncContext * s, +static int msmpeg4_decode_motion(MpegEncContext * s, int *mx_ptr, int *my_ptr) { MVTable *mv; @@ -2007,6 +2007,6 @@ static int msmpeg4_decode_motion(MpegEncContext * s, /* cleanest way to support it * there is too much shared between versions so that we cant have 1 file per version & 1 common - * as allmost everything would be in the common file + * as allmost everything would be in the common file */ #include "wmv2.c" |