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 */