Mercurial > libavcodec.hg
comparison vc1.c @ 3405:58c4fd135462 libavcodec
Correctly choose global transform mode, MV mode and fix bitplane decoding
author | kostya |
---|---|
date | Tue, 04 Jul 2006 15:39:21 +0000 |
parents | 0f56ae23d338 |
children | 75ab0c53742a |
comparison
equal
deleted
inserted
replaced
3404:0f56ae23d338 | 3405:58c4fd135462 |
---|---|
135 { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT }, | 135 { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT }, |
136 { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP }, | 136 { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP }, |
137 { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP } | 137 { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP } |
138 }; | 138 }; |
139 | 139 |
140 static const int ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 }; | |
141 | |
140 /** MV P mode - the 5th element is only used for mode 1 */ | 142 /** MV P mode - the 5th element is only used for mode 1 */ |
141 static const uint8_t mv_pmode_table[2][5] = { | 143 static const uint8_t mv_pmode_table[2][5] = { |
142 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV }, | 144 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV }, |
143 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN } | 145 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN } |
146 }; | |
147 static const uint8_t mv_pmode_table2[2][4] = { | |
148 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV }, | |
149 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN } | |
144 }; | 150 }; |
145 | 151 |
146 /** One more frame type */ | 152 /** One more frame type */ |
147 #define BI_TYPE 7 | 153 #define BI_TYPE 7 |
148 | 154 |
280 int c_ac_table_index; ///< Chroma index from ACFRM element | 286 int c_ac_table_index; ///< Chroma index from ACFRM element |
281 int y_ac_table_index; ///< Luma index from AC2FRM element | 287 int y_ac_table_index; ///< Luma index from AC2FRM element |
282 //@} | 288 //@} |
283 int ttfrm; ///< Transform type info present at frame level | 289 int ttfrm; ///< Transform type info present at frame level |
284 uint8_t ttmbf; ///< Transform type flag | 290 uint8_t ttmbf; ///< Transform type flag |
285 int ttmb; ///< Transform type | |
286 uint8_t ttblk4x4; ///< Value of ttblk which indicates a 4x4 transform | 291 uint8_t ttblk4x4; ///< Value of ttblk which indicates a 4x4 transform |
287 int codingset; ///< index of current table set from 11.8 to use for luma block decoding | 292 int codingset; ///< index of current table set from 11.8 to use for luma block decoding |
288 int codingset2; ///< index of current table set from 11.8 to use for chroma block decoding | 293 int codingset2; ///< index of current table set from 11.8 to use for chroma block decoding |
289 int pqindex; ///< raw pqindex used in coding set selection | 294 int pqindex; ///< raw pqindex used in coding set selection |
290 int a_avail, c_avail; | 295 int a_avail, c_avail; |
605 } | 610 } |
606 planep += stride * 3; | 611 planep += stride * 3; |
607 } | 612 } |
608 if(width & 1) decode_colskip(data, 1, height, stride, &v->s.gb); | 613 if(width & 1) decode_colskip(data, 1, height, stride, &v->s.gb); |
609 } else { // 3x2 | 614 } else { // 3x2 |
615 planep += (height & 1) * stride; | |
610 for(y = height & 1; y < height; y += 2) { | 616 for(y = height & 1; y < height; y += 2) { |
611 for(x = width % 3; x < width; x += 3) { | 617 for(x = width % 3; x < width; x += 3) { |
612 code = get_vlc2(gb, vc1_norm6_vlc.table, VC1_NORM6_VLC_BITS, 2); | 618 code = get_vlc2(gb, vc1_norm6_vlc.table, VC1_NORM6_VLC_BITS, 2); |
613 if(code < 0){ | 619 if(code < 0){ |
614 av_log(v->s.avctx, AV_LOG_DEBUG, "invalid NORM-6 VLC\n"); | 620 av_log(v->s.avctx, AV_LOG_DEBUG, "invalid NORM-6 VLC\n"); |
1364 if (v->vstransform) | 1370 if (v->vstransform) |
1365 { | 1371 { |
1366 v->ttmbf = get_bits(gb, 1); | 1372 v->ttmbf = get_bits(gb, 1); |
1367 if (v->ttmbf) | 1373 if (v->ttmbf) |
1368 { | 1374 { |
1369 v->ttfrm = get_bits(gb, 2); | 1375 v->ttfrm = ttfrm_to_tt[get_bits(gb, 2)]; |
1370 } | 1376 } |
1371 } | 1377 } |
1372 break; | 1378 break; |
1373 case B_TYPE: | 1379 case B_TYPE: |
1374 break; | 1380 break; |
2316 GetBitContext *gb = &s->gb; | 2322 GetBitContext *gb = &s->gb; |
2317 int i, j; | 2323 int i, j; |
2318 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; | 2324 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; |
2319 int cbp; /* cbp decoding stuff */ | 2325 int cbp; /* cbp decoding stuff */ |
2320 int mqdiff, mquant; /* MB quantization */ | 2326 int mqdiff, mquant; /* MB quantization */ |
2321 int ttmb = v->ttmb; /* MB Transform type */ | 2327 int ttmb = v->ttfrm; /* MB Transform type */ |
2322 int status; | 2328 int status; |
2323 | 2329 |
2324 static const int size_table[6] = { 0, 2, 3, 4, 5, 8 }, | 2330 static const int size_table[6] = { 0, 2, 3, 4, 5, 8 }, |
2325 offset_table[6] = { 0, 1, 3, 7, 15, 31 }; | 2331 offset_table[6] = { 0, 1, 3, 7, 15, 31 }; |
2326 int mb_has_coeffs = 1; /* last_flag */ | 2332 int mb_has_coeffs = 1; /* last_flag */ |