comparison msmpeg4.c @ 10821:030e30b050e4 libavcodec

Use h263 tables in msmpeg4v1 dont duplicate them halfway.
author michael
date Fri, 08 Jan 2010 19:10:11 +0000
parents 514dc1c87b2e
children 9ccc13d1144d
comparison
equal deleted inserted replaced
10820:22afa8a8f4d5 10821:030e30b050e4
43 * - (encoding) select best vlc/dc table 43 * - (encoding) select best vlc/dc table
44 */ 44 */
45 //#define DEBUG 45 //#define DEBUG
46 46
47 #define DC_VLC_BITS 9 47 #define DC_VLC_BITS 9
48 #define V1_INTRA_CBPC_VLC_BITS 6
49 #define V1_INTER_CBPC_VLC_BITS 6
50 #define V2_INTRA_CBPC_VLC_BITS 3 48 #define V2_INTRA_CBPC_VLC_BITS 3
51 #define V2_MB_TYPE_VLC_BITS 7 49 #define V2_MB_TYPE_VLC_BITS 7
52 #define MV_VLC_BITS 9 50 #define MV_VLC_BITS 9
53 #define V2_MV_VLC_BITS 9 51 #define V2_MV_VLC_BITS 9
54 #define TEX_VLC_BITS 9 52 #define TEX_VLC_BITS 9
1061 static VLC v2_dc_lum_vlc; 1059 static VLC v2_dc_lum_vlc;
1062 static VLC v2_dc_chroma_vlc; 1060 static VLC v2_dc_chroma_vlc;
1063 static VLC v2_intra_cbpc_vlc; 1061 static VLC v2_intra_cbpc_vlc;
1064 static VLC v2_mb_type_vlc; 1062 static VLC v2_mb_type_vlc;
1065 static VLC v2_mv_vlc; 1063 static VLC v2_mv_vlc;
1066 static VLC v1_intra_cbpc_vlc;
1067 static VLC v1_inter_cbpc_vlc;
1068 VLC ff_inter_intra_vlc; 1064 VLC ff_inter_intra_vlc;
1069 1065
1070 /* This is identical to h263 except that its range is multiplied by 2. */ 1066 /* This is identical to h263 except that its range is multiplied by 2. */
1071 static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code) 1067 static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code)
1072 { 1068 {
1120 } 1116 }
1121 1117
1122 if(s->msmpeg4_version==2) 1118 if(s->msmpeg4_version==2)
1123 code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1); 1119 code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1);
1124 else 1120 else
1125 code = get_vlc2(&s->gb, v1_inter_cbpc_vlc.table, V1_INTER_CBPC_VLC_BITS, 3); 1121 code = get_vlc2(&s->gb, ff_h263_inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
1126 if(code<0 || code>7){ 1122 if(code<0 || code>7){
1127 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y); 1123 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y);
1128 return -1; 1124 return -1;
1129 } 1125 }
1130 1126
1134 } else { 1130 } else {
1135 s->mb_intra = 1; 1131 s->mb_intra = 1;
1136 if(s->msmpeg4_version==2) 1132 if(s->msmpeg4_version==2)
1137 cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1); 1133 cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1);
1138 else 1134 else
1139 cbp= get_vlc2(&s->gb, v1_intra_cbpc_vlc.table, V1_INTRA_CBPC_VLC_BITS, 1); 1135 cbp= get_vlc2(&s->gb, ff_h263_intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 1);
1140 if(cbp<0 || cbp>3){ 1136 if(cbp<0 || cbp>3){
1141 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y); 1137 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1142 return -1; 1138 return -1;
1143 } 1139 }
1144 } 1140 }
1324 &v2_dc_lum_table[0][0], 8, 4, 1472); 1320 &v2_dc_lum_table[0][0], 8, 4, 1472);
1325 INIT_VLC_STATIC(&v2_dc_chroma_vlc, DC_VLC_BITS, 512, 1321 INIT_VLC_STATIC(&v2_dc_chroma_vlc, DC_VLC_BITS, 512,
1326 &v2_dc_chroma_table[0][1], 8, 4, 1322 &v2_dc_chroma_table[0][1], 8, 4,
1327 &v2_dc_chroma_table[0][0], 8, 4, 1506); 1323 &v2_dc_chroma_table[0][0], 8, 4, 1506);
1328 1324
1329 INIT_VLC_STATIC(&ff_h263_cbpy_vlc, CBPY_VLC_BITS, 16,
1330 &ff_h263_cbpy_tab[0][1], 2, 1,
1331 &ff_h263_cbpy_tab[0][0], 2, 1, 64);
1332 INIT_VLC_STATIC(&v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 4, 1325 INIT_VLC_STATIC(&v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 4,
1333 &v2_intra_cbpc[0][1], 2, 1, 1326 &v2_intra_cbpc[0][1], 2, 1,
1334 &v2_intra_cbpc[0][0], 2, 1, 8); 1327 &v2_intra_cbpc[0][0], 2, 1, 8);
1335 INIT_VLC_STATIC(&v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 8, 1328 INIT_VLC_STATIC(&v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 8,
1336 &v2_mb_type[0][1], 2, 1, 1329 &v2_mb_type[0][1], 2, 1,
1353 &wmv2_inter_table[3][0][0], 8, 4, 2488); 1346 &wmv2_inter_table[3][0][0], 8, 4, 2488);
1354 1347
1355 INIT_VLC_STATIC(&ff_msmp4_mb_i_vlc, MB_INTRA_VLC_BITS, 64, 1348 INIT_VLC_STATIC(&ff_msmp4_mb_i_vlc, MB_INTRA_VLC_BITS, 64,
1356 &ff_msmp4_mb_i_table[0][1], 4, 2, 1349 &ff_msmp4_mb_i_table[0][1], 4, 2,
1357 &ff_msmp4_mb_i_table[0][0], 4, 2, 536); 1350 &ff_msmp4_mb_i_table[0][0], 4, 2, 536);
1358
1359 INIT_VLC_STATIC(&v1_intra_cbpc_vlc, V1_INTRA_CBPC_VLC_BITS, 8,
1360 ff_h263_intra_MCBPC_bits, 1, 1,
1361 ff_h263_intra_MCBPC_code, 1, 1, 64);
1362 INIT_VLC_STATIC(&v1_inter_cbpc_vlc, V1_INTER_CBPC_VLC_BITS, 25,
1363 ff_h263_inter_MCBPC_bits, 1, 1,
1364 ff_h263_inter_MCBPC_code, 1, 1, 104);
1365 1351
1366 INIT_VLC_STATIC(&ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 4, 1352 INIT_VLC_STATIC(&ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 4,
1367 &table_inter_intra[0][1], 2, 1, 1353 &table_inter_intra[0][1], 2, 1,
1368 &table_inter_intra[0][0], 2, 1, 8); 1354 &table_inter_intra[0][0], 2, 1, 8);
1369 } 1355 }