Mercurial > libavcodec.hg
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 } |