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 } |
