• Home
  • Raw
  • Download

Lines Matching +full:- +full:v

2  * VC-1 and WMV3 decoder
4 * Copyright (c) 2006-2007 Konstantin Shishkov
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26 * VC-1 and WMV3 block decoding routines
53 * @name VC-1 Bitplane decoding
59 static inline void init_block_index(VC1Context *v) in init_block_index() argument
61 MpegEncContext *s = &v->s; in init_block_index()
63 if (v->field_mode && !(v->second_field ^ v->tff)) { in init_block_index()
64 s->dest[0] += s->current_picture_ptr->f->linesize[0]; in init_block_index()
65 s->dest[1] += s->current_picture_ptr->f->linesize[1]; in init_block_index()
66 s->dest[2] += s->current_picture_ptr->f->linesize[2]; in init_block_index()
72 static void vc1_put_blocks_clamped(VC1Context *v, int put_signed) in vc1_put_blocks_clamped() argument
74 MpegEncContext *s = &v->s; in vc1_put_blocks_clamped()
76 int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6; in vc1_put_blocks_clamped()
85 if (!s->first_slice_line && v->fcm != ILACE_FRAME) { in vc1_put_blocks_clamped()
86 if (s->mb_x) { in vc1_put_blocks_clamped()
88 if (i > 3 ? v->mb_type[0][s->block_index[i] - s->block_wrap[i] - 1] : in vc1_put_blocks_clamped()
89 v->mb_type[0][s->block_index[i] - 2 * s->block_wrap[i] - 2]) { in vc1_put_blocks_clamped()
90 dest = s->dest[0] + ((i & 2) - 4) * 4 * s->linesize + ((i & 1) - 2) * 8; in vc1_put_blocks_clamped()
92 … s->idsp.put_signed_pixels_clamped(v->block[v->topleft_blk_idx][block_map[i]], in vc1_put_blocks_clamped()
93 … i > 3 ? s->dest[i - 3] - 8 * s->uvlinesize - 8 : dest, in vc1_put_blocks_clamped()
94 i > 3 ? s->uvlinesize : s->linesize); in vc1_put_blocks_clamped()
96 s->idsp.put_pixels_clamped(v->block[v->topleft_blk_idx][block_map[i]], in vc1_put_blocks_clamped()
97 … i > 3 ? s->dest[i - 3] - 8 * s->uvlinesize - 8 : dest, in vc1_put_blocks_clamped()
98 i > 3 ? s->uvlinesize : s->linesize); in vc1_put_blocks_clamped()
102 if (s->mb_x == v->end_mb_x - 1) { in vc1_put_blocks_clamped()
104 if (i > 3 ? v->mb_type[0][s->block_index[i] - s->block_wrap[i]] : in vc1_put_blocks_clamped()
105 v->mb_type[0][s->block_index[i] - 2 * s->block_wrap[i]]) { in vc1_put_blocks_clamped()
106 dest = s->dest[0] + ((i & 2) - 4) * 4 * s->linesize + (i & 1) * 8; in vc1_put_blocks_clamped()
108 s->idsp.put_signed_pixels_clamped(v->block[v->top_blk_idx][block_map[i]], in vc1_put_blocks_clamped()
109 … i > 3 ? s->dest[i - 3] - 8 * s->uvlinesize : dest, in vc1_put_blocks_clamped()
110 i > 3 ? s->uvlinesize : s->linesize); in vc1_put_blocks_clamped()
112 s->idsp.put_pixels_clamped(v->block[v->top_blk_idx][block_map[i]], in vc1_put_blocks_clamped()
113 … i > 3 ? s->dest[i - 3] - 8 * s->uvlinesize : dest, in vc1_put_blocks_clamped()
114 i > 3 ? s->uvlinesize : s->linesize); in vc1_put_blocks_clamped()
119 if (s->mb_y == s->end_mb_y - 1 || v->fcm == ILACE_FRAME) { in vc1_put_blocks_clamped()
120 if (s->mb_x) { in vc1_put_blocks_clamped()
121 if (v->fcm == ILACE_FRAME) in vc1_put_blocks_clamped()
122 fieldtx = v->fieldtx_plane[s->mb_y * s->mb_stride + s->mb_x - 1]; in vc1_put_blocks_clamped()
124 if (i > 3 ? v->mb_type[0][s->block_index[i] - 1] : in vc1_put_blocks_clamped()
125 v->mb_type[0][s->block_index[i] - 2]) { in vc1_put_blocks_clamped()
127 dest = s->dest[0] + ((i & 2) >> 1) * s->linesize + ((i & 1) - 2) * 8; in vc1_put_blocks_clamped()
129 dest = s->dest[0] + (i & 2) * 4 * s->linesize + ((i & 1) - 2) * 8; in vc1_put_blocks_clamped()
131 s->idsp.put_signed_pixels_clamped(v->block[v->left_blk_idx][block_map[i]], in vc1_put_blocks_clamped()
132 i > 3 ? s->dest[i - 3] - 8 : dest, in vc1_put_blocks_clamped()
133 … i > 3 ? s->uvlinesize : s->linesize << fieldtx); in vc1_put_blocks_clamped()
135 s->idsp.put_pixels_clamped(v->block[v->left_blk_idx][block_map[i]], in vc1_put_blocks_clamped()
136 i > 3 ? s->dest[i - 3] - 8 : dest, in vc1_put_blocks_clamped()
137 i > 3 ? s->uvlinesize : s->linesize << fieldtx); in vc1_put_blocks_clamped()
141 if (s->mb_x == v->end_mb_x - 1) { in vc1_put_blocks_clamped()
142 if (v->fcm == ILACE_FRAME) in vc1_put_blocks_clamped()
143 fieldtx = v->fieldtx_plane[s->mb_y * s->mb_stride + s->mb_x]; in vc1_put_blocks_clamped()
145 if (v->mb_type[0][s->block_index[i]]) { in vc1_put_blocks_clamped()
147 dest = s->dest[0] + ((i & 2) >> 1) * s->linesize + (i & 1) * 8; in vc1_put_blocks_clamped()
149 dest = s->dest[0] + (i & 2) * 4 * s->linesize + (i & 1) * 8; in vc1_put_blocks_clamped()
151 s->idsp.put_signed_pixels_clamped(v->block[v->cur_blk_idx][block_map[i]], in vc1_put_blocks_clamped()
152 i > 3 ? s->dest[i - 3] : dest, in vc1_put_blocks_clamped()
153 … i > 3 ? s->uvlinesize : s->linesize << fieldtx); in vc1_put_blocks_clamped()
155 s->idsp.put_pixels_clamped(v->block[v->cur_blk_idx][block_map[i]], in vc1_put_blocks_clamped()
156 i > 3 ? s->dest[i - 3] : dest, in vc1_put_blocks_clamped()
157 i > 3 ? s->uvlinesize : s->linesize << fieldtx); in vc1_put_blocks_clamped()
166 if (idx >= v->n_allocated_blks) \
172 * @name VC-1 Block-level functions
179 * @brief Get macroblock-level quantizer scale
182 if (v->dquantfrm) { \
184 if (v->dqprofile == DQPROFILE_ALL_MBS) { \
185 if (v->dqbilevel) { \
186 mquant = (get_bits1(gb)) ? -v->altpq : v->pq; \
190 mquant = -v->pq - mqdiff; \
192 mquant = -get_bits(gb, 5); \
195 if (v->dqprofile == DQPROFILE_SINGLE_EDGE) \
196 edges = 1 << v->dqsbedge; \
197 else if (v->dqprofile == DQPROFILE_DOUBLE_EDGES) \
198 edges = (3 << v->dqsbedge) % 15; \
199 else if (v->dqprofile == DQPROFILE_FOUR_EDGES) \
201 if ((edges&1) && !s->mb_x) \
202 mquant = -v->altpq; \
203 if ((edges&2) && !s->mb_y) \
204 mquant = -v->altpq; \
205 if ((edges&4) && s->mb_x == (s->mb_width - 1)) \
206 mquant = -v->altpq; \
208 s->mb_y == ((s->mb_height >> v->field_mode) - 1)) \
209 mquant = -v->altpq; \
210 if (!mquant || mquant > 31 || mquant < -31) { \
211 av_log(v->s.avctx, AV_LOG_ERROR, \
225 index = 1 + get_vlc2(gb, ff_vc1_mv_diff_vlc[s->mv_table_index].table, \
229 index -= 37; \
232 s->mb_intra = 0; \
236 _dmv_x = get_bits(gb, v->k_x - 1 + s->quarter_sample); \
237 _dmv_y = get_bits(gb, v->k_y - 1 + s->quarter_sample); \
241 s->mb_intra = 1; \
245 val = size_table[index1] - (!s->quarter_sample && index1 == 5); \
248 sign = 0 - (val & 1); \
249 _dmv_x = (sign ^ ((val >> 1) + _dmv_x)) - sign; \
254 val = size_table[index1] - (!s->quarter_sample && index1 == 5); \
257 sign = 0 - (val & 1); \
258 _dmv_y = (sign ^ ((val >> 1) + _dmv_y)) - sign; \
262 static av_always_inline void get_mvdata_interlaced(VC1Context *v, int *dmv_x, in get_mvdata_interlaced() argument
267 GetBitContext *gb = &v->s.gb; in get_mvdata_interlaced()
271 if (v->numref) { in get_mvdata_interlaced()
278 extend_x = v->dmvrange & 1; in get_mvdata_interlaced()
279 extend_y = (v->dmvrange >> 1) & 1; in get_mvdata_interlaced()
280 index = get_vlc2(gb, v->imv_vlc->table, bits, 3); in get_mvdata_interlaced()
282 *dmv_x = get_bits(gb, v->k_x); in get_mvdata_interlaced()
283 *dmv_y = get_bits(gb, v->k_y); in get_mvdata_interlaced()
284 if (v->numref) { in get_mvdata_interlaced()
295 sign = 0 - (val & 1); in get_mvdata_interlaced()
296 *dmv_x = (sign ^ ((val >> 1) + offset_table[extend_x][index1])) - sign; in get_mvdata_interlaced()
300 if (index1 > v->numref) { in get_mvdata_interlaced()
301 val = get_bits(gb, (index1 >> v->numref) + extend_y); in get_mvdata_interlaced()
302 sign = 0 - (val & 1); in get_mvdata_interlaced()
303 *dmv_y = (sign ^ ((val >> 1) + offset_table[extend_y][index1 >> v->numref])) - sign; in get_mvdata_interlaced()
306 if (v->numref && pred_flag) in get_mvdata_interlaced()
311 /** Reconstruct motion vector for B-frame and do motion compensation
313 static inline void vc1_b_mc(VC1Context *v, int dmv_x[2], int dmv_y[2], in vc1_b_mc() argument
317 ff_vc1_mc_1mv(v, 0); in vc1_b_mc()
318 ff_vc1_interp_mc(v); in vc1_b_mc()
322 ff_vc1_mc_1mv(v, 0); in vc1_b_mc()
323 ff_vc1_interp_mc(v); in vc1_b_mc()
327 ff_vc1_mc_1mv(v, (mode == BMV_TYPE_BACKWARD)); in vc1_b_mc()
330 /** Get predicted DC value for I-frames only
345 -1, 1024, 512, 341, 256, 205, 171, 146, 128, in vc1_i_pred_dc()
351 /* find prediction - wmv3_dc_scale always used here in fact */ in vc1_i_pred_dc()
352 if (n < 4) scale = s->y_dc_scale; in vc1_i_pred_dc()
353 else scale = s->c_dc_scale; in vc1_i_pred_dc()
355 wrap = s->block_wrap[n]; in vc1_i_pred_dc()
356 dc_val = s->dc_val[0] + s->block_index[n]; in vc1_i_pred_dc()
361 c = dc_val[ - 1]; in vc1_i_pred_dc()
362 b = dc_val[ - 1 - wrap]; in vc1_i_pred_dc()
363 a = dc_val[ - wrap]; in vc1_i_pred_dc()
367 if (s->first_slice_line && (n != 2 && n != 3)) in vc1_i_pred_dc()
369 if (s->mb_x == 0 && (n != 1 && n != 3)) in vc1_i_pred_dc()
373 if (s->first_slice_line && (n != 2 && n != 3)) in vc1_i_pred_dc()
375 if (s->mb_x == 0 && (n != 1 && n != 3)) in vc1_i_pred_dc()
379 if (abs(a - b) <= abs(b - c)) { in vc1_i_pred_dc()
410 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in ff_vc1_pred_dc()
415 q1 = FFABS(s->current_picture.qscale_table[mb_pos]); in ff_vc1_pred_dc()
416 dqscale_index = s->y_dc_scale_table[q1] - 1; in ff_vc1_pred_dc()
420 wrap = s->block_wrap[n]; in ff_vc1_pred_dc()
421 dc_val = s->dc_val[0] + s->block_index[n]; in ff_vc1_pred_dc()
426 c = dc_val[ - 1]; in ff_vc1_pred_dc()
427 b = dc_val[ - 1 - wrap]; in ff_vc1_pred_dc()
428 a = dc_val[ - wrap]; in ff_vc1_pred_dc()
431 q2 = FFABS(s->current_picture.qscale_table[mb_pos - 1]); in ff_vc1_pred_dc()
433 … c = (int)((unsigned)c * s->y_dc_scale_table[q2] * ff_vc1_dqscale[dqscale_index] + 0x20000) >> 18; in ff_vc1_pred_dc()
436 q2 = FFABS(s->current_picture.qscale_table[mb_pos - s->mb_stride]); in ff_vc1_pred_dc()
438 … a = (int)((unsigned)a * s->y_dc_scale_table[q2] * ff_vc1_dqscale[dqscale_index] + 0x20000) >> 18; in ff_vc1_pred_dc()
443 off--; in ff_vc1_pred_dc()
445 off -= s->mb_stride; in ff_vc1_pred_dc()
446 q2 = FFABS(s->current_picture.qscale_table[off]); in ff_vc1_pred_dc()
448 … b = (int)((unsigned)b * s->y_dc_scale_table[q2] * ff_vc1_dqscale[dqscale_index] + 0x20000) >> 18; in ff_vc1_pred_dc()
451 if (c_avail && (!a_avail || abs(a - b) <= abs(b - c))) { in ff_vc1_pred_dc()
470 * @name VC1 Macroblock-level functions in Simple/Main Profiles
480 xy = s->block_index[n]; in vc1_coded_block_pred()
481 wrap = s->b8_stride; in vc1_coded_block_pred()
486 a = s->coded_block[xy - 1 ]; in vc1_coded_block_pred()
487 b = s->coded_block[xy - 1 - wrap]; in vc1_coded_block_pred()
488 c = s->coded_block[xy - wrap]; in vc1_coded_block_pred()
497 *coded_block_ptr = &s->coded_block[xy]; in vc1_coded_block_pred()
504 * @param v The VC1 context
511 static int vc1_decode_ac_coeff(VC1Context *v, int *last, int *skip, in vc1_decode_ac_coeff() argument
514 GetBitContext *gb = &v->s.gb; in vc1_decode_ac_coeff()
520 if (index != ff_vc1_ac_sizes[codingset] - 1) { in vc1_decode_ac_coeff()
529 if (index >= ff_vc1_ac_sizes[codingset] - 1U) in vc1_decode_ac_coeff()
548 if (v->s.esc3_level_length == 0) { in vc1_decode_ac_coeff()
549 if (v->pq < 8 || v->dquantfrm) { // table 59 in vc1_decode_ac_coeff()
550 v->s.esc3_level_length = get_bits(gb, 3); in vc1_decode_ac_coeff()
551 if (!v->s.esc3_level_length) in vc1_decode_ac_coeff()
552 v->s.esc3_level_length = get_bits(gb, 2) + 8; in vc1_decode_ac_coeff()
554 v->s.esc3_level_length = get_unary(gb, 1, 6) + 2; in vc1_decode_ac_coeff()
556 v->s.esc3_run_length = 3 + get_bits(gb, 2); in vc1_decode_ac_coeff()
558 run = get_bits(gb, v->s.esc3_run_length); in vc1_decode_ac_coeff()
560 level = get_bits(gb, v->s.esc3_level_length); in vc1_decode_ac_coeff()
566 *value = (level ^ -sign) + sign; in vc1_decode_ac_coeff()
571 /** Decode intra block in intra frames - should be faster than decode_intra_block
572 * @param v VC1Context
578 static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n, in vc1_decode_i_block() argument
581 GetBitContext *gb = &v->s.gb; in vc1_decode_i_block()
582 MpegEncContext *s = &v->s; in vc1_decode_i_block()
591 dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3); in vc1_decode_i_block()
593 dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3); in vc1_decode_i_block()
596 const int m = (v->pq == 1 || v->pq == 2) ? 3 - v->pq : 0; in vc1_decode_i_block()
601 dcdiff = (dcdiff << m) + get_bits(gb, m) - ((1 << m) - 1); in vc1_decode_i_block()
604 dcdiff = -dcdiff; in vc1_decode_i_block()
608 dcdiff += vc1_i_pred_dc(&v->s, v->overlap, v->pq, n, &dc_val, &dc_pred_dir); in vc1_decode_i_block()
613 scale = s->y_dc_scale; in vc1_decode_i_block()
615 scale = s->c_dc_scale; in vc1_decode_i_block()
618 ac_val = s->ac_val[0][s->block_index[n]]; in vc1_decode_i_block()
621 ac_val -= 16; in vc1_decode_i_block()
623 ac_val -= 16 * s->block_wrap[n]; in vc1_decode_i_block()
625 scale = v->pq * 2 + v->halfpq; in vc1_decode_i_block()
635 if (v->s.ac_pred) { in vc1_decode_i_block()
637 zz_table = v->zz_8x8[2]; in vc1_decode_i_block()
639 zz_table = v->zz_8x8[3]; in vc1_decode_i_block()
641 zz_table = v->zz_8x8[1]; in vc1_decode_i_block()
644 int ret = vc1_decode_ac_coeff(v, &last, &skip, &value, codingset); in vc1_decode_i_block()
654 if (s->ac_pred) { in vc1_decode_i_block()
657 sh = v->left_blk_sh; in vc1_decode_i_block()
659 sh = v->top_blk_sh; in vc1_decode_i_block()
667 ac_val2[k] = block[k << v->left_blk_sh]; in vc1_decode_i_block()
668 ac_val2[k + 8] = block[k << v->top_blk_sh]; in vc1_decode_i_block()
675 if (!v->pquantizer) in vc1_decode_i_block()
676 block[k] += (block[k] < 0) ? -v->pq : v->pq; in vc1_decode_i_block()
685 if (s->ac_pred) { in vc1_decode_i_block()
688 sh = v->left_blk_sh; in vc1_decode_i_block()
690 sh = v->top_blk_sh; in vc1_decode_i_block()
697 if (!v->pquantizer && block[k << sh]) in vc1_decode_i_block()
698 block[k << sh] += (block[k << sh] < 0) ? -v->pq : v->pq; in vc1_decode_i_block()
702 if (s->ac_pred) i = 63; in vc1_decode_i_block()
703 s->block_last_index[n] = i; in vc1_decode_i_block()
708 /** Decode intra block in intra frames - should be faster than decode_intra_block
709 * @param v VC1Context
716 static int vc1_decode_i_block_adv(VC1Context *v, int16_t block[64], int n, in vc1_decode_i_block_adv() argument
719 GetBitContext *gb = &v->s.gb; in vc1_decode_i_block_adv()
720 MpegEncContext *s = &v->s; in vc1_decode_i_block_adv()
726 int a_avail = v->a_avail, c_avail = v->c_avail; in vc1_decode_i_block_adv()
727 int use_pred = s->ac_pred; in vc1_decode_i_block_adv()
730 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_i_block_adv()
735 dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3); in vc1_decode_i_block_adv()
737 dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3); in vc1_decode_i_block_adv()
740 const int m = (quant == 1 || quant == 2) ? 3 - quant : 0; in vc1_decode_i_block_adv()
745 dcdiff = (dcdiff << m) + get_bits(gb, m) - ((1 << m) - 1); in vc1_decode_i_block_adv()
748 dcdiff = -dcdiff; in vc1_decode_i_block_adv()
752 …dcdiff += ff_vc1_pred_dc(&v->s, v->overlap, quant, n, v->a_avail, v->c_avail, &dc_val, &dc_pred_di… in vc1_decode_i_block_adv()
757 scale = s->y_dc_scale; in vc1_decode_i_block_adv()
759 scale = s->c_dc_scale; in vc1_decode_i_block_adv()
766 scale = quant * 2 + ((mquant < 0) ? 0 : v->halfpq); in vc1_decode_i_block_adv()
768 ac_val = s->ac_val[0][s->block_index[n]]; in vc1_decode_i_block_adv()
771 ac_val -= 16; in vc1_decode_i_block_adv()
773 ac_val -= 16 * s->block_wrap[n]; in vc1_decode_i_block_adv()
775 q1 = s->current_picture.qscale_table[mb_pos]; in vc1_decode_i_block_adv()
782 q2 = s->current_picture.qscale_table[mb_pos - 1]; in vc1_decode_i_block_adv()
786 else if (a_avail && mb_pos >= s->mb_stride) in vc1_decode_i_block_adv()
787 q2 = s->current_picture.qscale_table[mb_pos - s->mb_stride]; in vc1_decode_i_block_adv()
798 if (v->s.ac_pred) { in vc1_decode_i_block_adv()
799 if (!use_pred && v->fcm == ILACE_FRAME) { in vc1_decode_i_block_adv()
800 zz_table = v->zzi_8x8; in vc1_decode_i_block_adv()
803 zz_table = v->zz_8x8[2]; in vc1_decode_i_block_adv()
805 zz_table = v->zz_8x8[3]; in vc1_decode_i_block_adv()
808 if (v->fcm != ILACE_FRAME) in vc1_decode_i_block_adv()
809 zz_table = v->zz_8x8[1]; in vc1_decode_i_block_adv()
811 zz_table = v->zzi_8x8; in vc1_decode_i_block_adv()
815 int ret = vc1_decode_ac_coeff(v, &last, &skip, &value, codingset); in vc1_decode_i_block_adv()
828 sh = v->left_blk_sh; in vc1_decode_i_block_adv()
830 sh = v->top_blk_sh; in vc1_decode_i_block_adv()
834 q1 = FFABS(q1) * 2 + ((q1 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_i_block_adv()
838 q2 = FFABS(q2) * 2 + ((q2 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_i_block_adv()
841 … block[k << sh] += (int)(ac_val[k] * (unsigned)q2 * ff_vc1_dqscale[q1 - 1] + 0x20000) >> 18; in vc1_decode_i_block_adv()
849 ac_val2[k ] = block[k << v->left_blk_sh]; in vc1_decode_i_block_adv()
850 ac_val2[k + 8] = block[k << v->top_blk_sh]; in vc1_decode_i_block_adv()
857 if (!v->pquantizer) in vc1_decode_i_block_adv()
858 block[k] += (block[k] < 0) ? -quant : quant; in vc1_decode_i_block_adv()
870 sh = v->left_blk_sh; in vc1_decode_i_block_adv()
872 sh = v->top_blk_sh; in vc1_decode_i_block_adv()
877 q1 = FFABS(q1) * 2 + ((q1 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_i_block_adv()
881 q2 = FFABS(q2) * 2 + ((q2 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_i_block_adv()
884 … ac_val2[k] = (int)(ac_val2[k] * q2 * (unsigned)ff_vc1_dqscale[q1 - 1] + 0x20000) >> 18; in vc1_decode_i_block_adv()
888 if (!v->pquantizer && block[k << sh]) in vc1_decode_i_block_adv()
889 block[k << sh] += (block[k << sh] < 0) ? -quant : quant; in vc1_decode_i_block_adv()
894 s->block_last_index[n] = i; in vc1_decode_i_block_adv()
899 /** Decode intra block in inter frames - more generic version than vc1_decode_i_block
900 * @param v VC1Context
907 static int vc1_decode_intra_block(VC1Context *v, int16_t block[64], int n, in vc1_decode_intra_block() argument
910 GetBitContext *gb = &v->s.gb; in vc1_decode_intra_block()
911 MpegEncContext *s = &v->s; in vc1_decode_intra_block()
917 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_intra_block()
918 int a_avail = v->a_avail, c_avail = v->c_avail; in vc1_decode_intra_block()
919 int use_pred = s->ac_pred; in vc1_decode_intra_block()
924 s->bdsp.clear_block(block); in vc1_decode_intra_block()
929 /* Set DC scale - y and c use the same */ in vc1_decode_intra_block()
930 s->y_dc_scale = s->y_dc_scale_table[quant]; in vc1_decode_intra_block()
931 s->c_dc_scale = s->c_dc_scale_table[quant]; in vc1_decode_intra_block()
935 dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3); in vc1_decode_intra_block()
937 dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3); in vc1_decode_intra_block()
940 const int m = (quant == 1 || quant == 2) ? 3 - quant : 0; in vc1_decode_intra_block()
945 dcdiff = (dcdiff << m) + get_bits(gb, m) - ((1 << m) - 1); in vc1_decode_intra_block()
948 dcdiff = -dcdiff; in vc1_decode_intra_block()
952 dcdiff += ff_vc1_pred_dc(&v->s, v->overlap, quant, n, a_avail, c_avail, &dc_val, &dc_pred_dir); in vc1_decode_intra_block()
958 block[0] = dcdiff * s->y_dc_scale; in vc1_decode_intra_block()
960 block[0] = dcdiff * s->c_dc_scale; in vc1_decode_intra_block()
970 ac_val = s->ac_val[0][s->block_index[n]]; in vc1_decode_intra_block()
973 scale = quant * 2 + ((mquant < 0) ? 0 : v->halfpq); in vc1_decode_intra_block()
976 ac_val -= 16; in vc1_decode_intra_block()
978 ac_val -= 16 * s->block_wrap[n]; in vc1_decode_intra_block()
980 q1 = s->current_picture.qscale_table[mb_pos]; in vc1_decode_intra_block()
982 q2 = s->current_picture.qscale_table[mb_pos - 1]; in vc1_decode_intra_block()
983 if (!dc_pred_dir && a_avail && mb_pos >= s->mb_stride) in vc1_decode_intra_block()
984 q2 = s->current_picture.qscale_table[mb_pos - s->mb_stride]; in vc1_decode_intra_block()
996 int ret = vc1_decode_ac_coeff(v, &last, &skip, &value, codingset); in vc1_decode_intra_block()
1002 if (v->fcm == PROGRESSIVE) in vc1_decode_intra_block()
1003 block[v->zz_8x8[0][i++]] = value; in vc1_decode_intra_block()
1005 if (use_pred && (v->fcm == ILACE_FRAME)) { in vc1_decode_intra_block()
1007 block[v->zz_8x8[2][i++]] = value; in vc1_decode_intra_block()
1009 block[v->zz_8x8[3][i++]] = value; in vc1_decode_intra_block()
1011 block[v->zzi_8x8[i++]] = value; in vc1_decode_intra_block()
1019 q1 = FFABS(q1) * 2 + ((q1 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_intra_block()
1023 q2 = FFABS(q2) * 2 + ((q2 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_intra_block()
1027 …block[k << v->left_blk_sh] += (int)(ac_val[k] * q2 * (unsigned)ff_vc1_dqscale[q1 - 1] + 0x20000) >… in vc1_decode_intra_block()
1030 …block[k << v->top_blk_sh] += (int)(ac_val[k + 8] * q2 * (unsigned)ff_vc1_dqscale[q1 - 1] + 0x20000… in vc1_decode_intra_block()
1035 block[k << v->left_blk_sh] += ac_val[k]; in vc1_decode_intra_block()
1038 block[k << v->top_blk_sh] += ac_val[k + 8]; in vc1_decode_intra_block()
1044 ac_val2[k ] = block[k << v->left_blk_sh]; in vc1_decode_intra_block()
1045 ac_val2[k + 8] = block[k << v->top_blk_sh]; in vc1_decode_intra_block()
1052 if (!v->pquantizer) in vc1_decode_intra_block()
1053 block[k] += (block[k] < 0) ? -quant : quant; in vc1_decode_intra_block()
1064 q1 = FFABS(q1) * 2 + ((q1 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_intra_block()
1068 q2 = FFABS(q2) * 2 + ((q2 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_intra_block()
1071 … ac_val2[k] = (int)(ac_val2[k] * (unsigned)q2 * ff_vc1_dqscale[q1 - 1] + 0x20000) >> 18; in vc1_decode_intra_block()
1077 q1 = FFABS(q1) * 2 + ((q1 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_intra_block()
1081 q2 = FFABS(q2) * 2 + ((q2 < 0) ? 0 : v->halfpq) - 1; in vc1_decode_intra_block()
1084 … ac_val2[k + 8] = (int)(ac_val2[k + 8] * (unsigned)q2 * ff_vc1_dqscale[q1 - 1] + 0x20000) >> 18; in vc1_decode_intra_block()
1093 block[k << v->left_blk_sh] = ac_val2[k] * scale; in vc1_decode_intra_block()
1094 if (!v->pquantizer && block[k << v->left_blk_sh]) in vc1_decode_intra_block()
1095 … block[k << v->left_blk_sh] += (block[k << v->left_blk_sh] < 0) ? -quant : quant; in vc1_decode_intra_block()
1099 block[k << v->top_blk_sh] = ac_val2[k + 8] * scale; in vc1_decode_intra_block()
1100 if (!v->pquantizer && block[k << v->top_blk_sh]) in vc1_decode_intra_block()
1101 … block[k << v->top_blk_sh] += (block[k << v->top_blk_sh] < 0) ? -quant : quant; in vc1_decode_intra_block()
1107 s->block_last_index[n] = i; in vc1_decode_intra_block()
1114 static int vc1_decode_p_block(VC1Context *v, int16_t block[64], int n, in vc1_decode_p_block() argument
1119 MpegEncContext *s = &v->s; in vc1_decode_p_block()
1120 GetBitContext *gb = &s->gb; in vc1_decode_p_block()
1128 s->bdsp.clear_block(block); in vc1_decode_p_block()
1130 if (ttmb == -1) { in vc1_decode_p_block()
1131 …ttblk = ff_vc1_ttblk_to_tt[v->tt_index][get_vlc2(gb, ff_vc1_ttblk_vlc[v->tt_index].table, VC1_TTBL… in vc1_decode_p_block()
1134 …subblkpat = ~(get_vlc2(gb, ff_vc1_subblkpat_vlc[v->tt_index].table, VC1_SUBBLKPAT_VLC_BITS, 1) + 1… in vc1_decode_p_block()
1137 && ((v->ttmbf || (ttmb != -1 && (ttmb & 8) && !first_block)) in vc1_decode_p_block()
1138 || (!v->res_rtm_flag && !first_block))) { in vc1_decode_p_block()
1147 scale = quant * 2 + ((mquant < 0) ? 0 : v->halfpq); in vc1_decode_p_block()
1151 subblkpat = 2 - (ttblk == TT_8X4_TOP); in vc1_decode_p_block()
1155 subblkpat = 2 - (ttblk == TT_4X8_LEFT); in vc1_decode_p_block()
1164 int ret = vc1_decode_ac_coeff(v, &last, &skip, &value, v->codingset2); in vc1_decode_p_block()
1170 if (!v->fcm) in vc1_decode_p_block()
1171 idx = v->zz_8x8[0][i++]; in vc1_decode_p_block()
1173 idx = v->zzi_8x8[i++]; in vc1_decode_p_block()
1175 if (!v->pquantizer) in vc1_decode_p_block()
1176 block[idx] += (block[idx] < 0) ? -quant : quant; in vc1_decode_p_block()
1180 v->vc1dsp.vc1_inv_trans_8x8_dc(dst, linesize, block); in vc1_decode_p_block()
1182 v->vc1dsp.vc1_inv_trans_8x8(block); in vc1_decode_p_block()
1183 s->idsp.add_pixels_clamped(block, dst, linesize); in vc1_decode_p_block()
1190 last = subblkpat & (1 << (3 - j)); in vc1_decode_p_block()
1194 int ret = vc1_decode_ac_coeff(v, &last, &skip, &value, v->codingset2); in vc1_decode_p_block()
1200 if (!v->fcm) in vc1_decode_p_block()
1205 if (!v->pquantizer) in vc1_decode_p_block()
1206 block[idx + off] += (block[idx + off] < 0) ? -quant : quant; in vc1_decode_p_block()
1208 if (!(subblkpat & (1 << (3 - j))) && !skip_block) { in vc1_decode_p_block()
1210v->vc1dsp.vc1_inv_trans_4x4_dc(dst + (j & 1) * 4 + (j & 2) * 2 * linesize, linesize, block + off); in vc1_decode_p_block()
1212v->vc1dsp.vc1_inv_trans_4x4(dst + (j & 1) * 4 + (j & 2) * 2 * linesize, linesize, block + off); in vc1_decode_p_block()
1219 last = subblkpat & (1 << (1 - j)); in vc1_decode_p_block()
1223 int ret = vc1_decode_ac_coeff(v, &last, &skip, &value, v->codingset2); in vc1_decode_p_block()
1229 if (!v->fcm) in vc1_decode_p_block()
1230 idx = v->zz_8x4[i++] + off; in vc1_decode_p_block()
1234 if (!v->pquantizer) in vc1_decode_p_block()
1235 block[idx] += (block[idx] < 0) ? -quant : quant; in vc1_decode_p_block()
1237 if (!(subblkpat & (1 << (1 - j))) && !skip_block) { in vc1_decode_p_block()
1239 v->vc1dsp.vc1_inv_trans_8x4_dc(dst + j * 4 * linesize, linesize, block + off); in vc1_decode_p_block()
1241 v->vc1dsp.vc1_inv_trans_8x4(dst + j * 4 * linesize, linesize, block + off); in vc1_decode_p_block()
1248 last = subblkpat & (1 << (1 - j)); in vc1_decode_p_block()
1252 int ret = vc1_decode_ac_coeff(v, &last, &skip, &value, v->codingset2); in vc1_decode_p_block()
1258 if (!v->fcm) in vc1_decode_p_block()
1259 idx = v->zz_4x8[i++] + off; in vc1_decode_p_block()
1263 if (!v->pquantizer) in vc1_decode_p_block()
1264 block[idx] += (block[idx] < 0) ? -quant : quant; in vc1_decode_p_block()
1266 if (!(subblkpat & (1 << (1 - j))) && !skip_block) { in vc1_decode_p_block()
1268 v->vc1dsp.vc1_inv_trans_4x8_dc(dst + j * 4, linesize, block + off); in vc1_decode_p_block()
1270 v->vc1dsp.vc1_inv_trans_4x8(dst + j*4, linesize, block + off); in vc1_decode_p_block()
1284 /** Decode one P-frame MB
1286 static int vc1_decode_p_mb(VC1Context *v) in vc1_decode_p_mb() argument
1288 MpegEncContext *s = &v->s; in vc1_decode_p_mb()
1289 GetBitContext *gb = &s->gb; in vc1_decode_p_mb()
1291 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_p_mb()
1294 int ttmb = v->ttfrm; /* MB Transform type */ in vc1_decode_p_mb()
1305 mquant = v->pq; /* lossy initialization */ in vc1_decode_p_mb()
1307 if (v->mv_type_is_raw) in vc1_decode_p_mb()
1310 fourmv = v->mv_type_mb_plane[mb_pos]; in vc1_decode_p_mb()
1311 if (v->skip_is_raw) in vc1_decode_p_mb()
1314 skipped = v->s.mbskip_table[mb_pos]; in vc1_decode_p_mb()
1320 if (s->mb_intra) { in vc1_decode_p_mb()
1321 s->current_picture.motion_val[1][s->block_index[0]][0] = 0; in vc1_decode_p_mb()
1322 s->current_picture.motion_val[1][s->block_index[0]][1] = 0; in vc1_decode_p_mb()
1324 s->current_picture.mb_type[mb_pos] = s->mb_intra ? MB_TYPE_INTRA : MB_TYPE_16x16; in vc1_decode_p_mb()
1325 ff_vc1_pred_mv(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], 0, 0); in vc1_decode_p_mb()
1328 if (s->mb_intra && !mb_has_coeffs) { in vc1_decode_p_mb()
1330 s->ac_pred = get_bits1(gb); in vc1_decode_p_mb()
1333 if (s->mb_intra) in vc1_decode_p_mb()
1334 s->ac_pred = get_bits1(gb); in vc1_decode_p_mb()
1335 cbp = get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_p_mb()
1338 mquant = v->pq; in vc1_decode_p_mb()
1341 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_p_mb()
1343 if (!v->ttmbf && !s->mb_intra && mb_has_coeffs) in vc1_decode_p_mb()
1344 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, in vc1_decode_p_mb()
1346 if (!s->mb_intra) ff_vc1_mc_1mv(v, 0); in vc1_decode_p_mb()
1349 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb()
1351 val = ((cbp >> (5 - i)) & 1); in vc1_decode_p_mb()
1352 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); in vc1_decode_p_mb()
1353 v->mb_type[0][s->block_index[i]] = s->mb_intra; in vc1_decode_p_mb()
1354 if (s->mb_intra) { in vc1_decode_p_mb()
1356 v->a_avail = v->c_avail = 0; in vc1_decode_p_mb()
1357 if (i == 2 || i == 3 || !s->first_slice_line) in vc1_decode_p_mb()
1358 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; in vc1_decode_p_mb()
1359 if (i == 1 || i == 3 || s->mb_x) in vc1_decode_p_mb()
1360 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; in vc1_decode_p_mb()
1362 … vc1_decode_intra_block(v, v->block[v->cur_blk_idx][block_map[i]], i, val, mquant, in vc1_decode_p_mb()
1363 (i & 4) ? v->codingset2 : v->codingset); in vc1_decode_p_mb()
1364 if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_p_mb()
1366 v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][block_map[i]]); in vc1_decode_p_mb()
1367 if (v->rangeredfrm) in vc1_decode_p_mb()
1369 v->block[v->cur_blk_idx][block_map[i]][j] *= 2; in vc1_decode_p_mb()
1373 … pat = vc1_decode_p_block(v, v->block[v->cur_blk_idx][block_map[i]], i, mquant, ttmb, first_block, in vc1_decode_p_mb()
1374 … s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : s->linesize, in vc1_decode_p_mb()
1375 … CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), &block_tt); in vc1_decode_p_mb()
1379 if (!v->ttmbf && ttmb < 8) in vc1_decode_p_mb()
1380 ttmb = -1; in vc1_decode_p_mb()
1385 s->mb_intra = 0; in vc1_decode_p_mb()
1387 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_p_mb()
1388 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb()
1390 s->current_picture.mb_type[mb_pos] = MB_TYPE_SKIP; in vc1_decode_p_mb()
1391 s->current_picture.qscale_table[mb_pos] = 0; in vc1_decode_p_mb()
1392 ff_vc1_pred_mv(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], 0, 0); in vc1_decode_p_mb()
1393 ff_vc1_mc_1mv(v, 0); in vc1_decode_p_mb()
1400 cbp = get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_p_mb()
1402 val = ((cbp >> (5 - i)) & 1); in vc1_decode_p_mb()
1403 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb()
1404 s->mb_intra = 0; in vc1_decode_p_mb()
1407 s->mb_intra = 0; in vc1_decode_p_mb()
1412 … ff_vc1_pred_mv(v, i, dmv_x, dmv_y, 0, v->range_x, v->range_y, v->mb_type[0], 0, 0); in vc1_decode_p_mb()
1413 if (!s->mb_intra) in vc1_decode_p_mb()
1414 ff_vc1_mc_4mv_luma(v, i, 0, 0); in vc1_decode_p_mb()
1415 intra_count += s->mb_intra; in vc1_decode_p_mb()
1416 is_intra[i] = s->mb_intra; in vc1_decode_p_mb()
1424 ff_vc1_mc_4mv_chroma(v, 0); in vc1_decode_p_mb()
1425 v->mb_type[0][s->block_index[i]] = is_intra[i]; in vc1_decode_p_mb()
1434 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_p_mb()
1440 …if (((!s->first_slice_line || (i == 2 || i == 3)) && v->mb_type[0][s->block_index[i] - s->block_wr… in vc1_decode_p_mb()
1441 … || ((s->mb_x || (i == 1 || i == 3)) && v->mb_type[0][s->block_index[i] - 1])) { in vc1_decode_p_mb()
1447 s->ac_pred = get_bits1(gb); in vc1_decode_p_mb()
1449 s->ac_pred = 0; in vc1_decode_p_mb()
1451 if (!v->ttmbf && coded_inter) in vc1_decode_p_mb()
1452 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, VC1_TTMB_VLC_BITS, 2); in vc1_decode_p_mb()
1455 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); in vc1_decode_p_mb()
1456 s->mb_intra = is_intra[i]; in vc1_decode_p_mb()
1459 v->a_avail = v->c_avail = 0; in vc1_decode_p_mb()
1460 if (i == 2 || i == 3 || !s->first_slice_line) in vc1_decode_p_mb()
1461 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; in vc1_decode_p_mb()
1462 if (i == 1 || i == 3 || s->mb_x) in vc1_decode_p_mb()
1463 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; in vc1_decode_p_mb()
1465 … vc1_decode_intra_block(v, v->block[v->cur_blk_idx][block_map[i]], i, is_coded[i], mquant, in vc1_decode_p_mb()
1466 (i & 4) ? v->codingset2 : v->codingset); in vc1_decode_p_mb()
1467 if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_p_mb()
1469 v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][block_map[i]]); in vc1_decode_p_mb()
1470 if (v->rangeredfrm) in vc1_decode_p_mb()
1472 v->block[v->cur_blk_idx][block_map[i]][j] *= 2; in vc1_decode_p_mb()
1476 … pat = vc1_decode_p_block(v, v->block[v->cur_blk_idx][block_map[i]], i, mquant, ttmb, in vc1_decode_p_mb()
1477 first_block, s->dest[dst_idx] + off, in vc1_decode_p_mb()
1478 (i & 4) ? s->uvlinesize : s->linesize, in vc1_decode_p_mb()
1479 … CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), in vc1_decode_p_mb()
1484 if (!v->ttmbf && ttmb < 8) in vc1_decode_p_mb()
1485 ttmb = -1; in vc1_decode_p_mb()
1490 s->mb_intra = 0; in vc1_decode_p_mb()
1491 s->current_picture.qscale_table[mb_pos] = 0; in vc1_decode_p_mb()
1493 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_p_mb()
1494 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb()
1497 ff_vc1_pred_mv(v, i, 0, 0, 0, v->range_x, v->range_y, v->mb_type[0], 0, 0); in vc1_decode_p_mb()
1498 ff_vc1_mc_4mv_luma(v, i, 0, 0); in vc1_decode_p_mb()
1500 ff_vc1_mc_4mv_chroma(v, 0); in vc1_decode_p_mb()
1501 s->current_picture.qscale_table[mb_pos] = 0; in vc1_decode_p_mb()
1505 if (v->overlap && v->pq >= 9) in vc1_decode_p_mb()
1506 ff_vc1_p_overlap_filter(v); in vc1_decode_p_mb()
1507 vc1_put_blocks_clamped(v, 1); in vc1_decode_p_mb()
1509 v->cbp[s->mb_x] = block_cbp; in vc1_decode_p_mb()
1510 v->ttblk[s->mb_x] = block_tt; in vc1_decode_p_mb()
1511 v->is_intra[s->mb_x] = block_intra; in vc1_decode_p_mb()
1518 static int vc1_decode_p_mb_intfr(VC1Context *v) in vc1_decode_p_mb_intfr() argument
1520 MpegEncContext *s = &v->s; in vc1_decode_p_mb_intfr()
1521 GetBitContext *gb = &s->gb; in vc1_decode_p_mb_intfr()
1523 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_p_mb_intfr()
1526 int ttmb = v->ttfrm; /* MB Transform type */ in vc1_decode_p_mb_intfr()
1538 mquant = v->pq; /* Lossy initialization */ in vc1_decode_p_mb_intfr()
1540 if (v->skip_is_raw) in vc1_decode_p_mb_intfr()
1543 skipped = v->s.mbskip_table[mb_pos]; in vc1_decode_p_mb_intfr()
1545 if (v->fourmvswitch) in vc1_decode_p_mb_intfr()
1546 …idx_mbmode = get_vlc2(gb, v->mbmode_vlc->table, VC1_INTFR_4MV_MBMODE_VLC_BITS, 2); // try getting … in vc1_decode_p_mb_intfr()
1548 …idx_mbmode = get_vlc2(gb, v->mbmode_vlc->table, VC1_INTFR_NON4MV_MBMODE_VLC_BITS, 2); // in a sing… in vc1_decode_p_mb_intfr()
1549 switch (ff_vc1_mbmode_intfrp[v->fourmvswitch][idx_mbmode][0]) { in vc1_decode_p_mb_intfr()
1553 v->blk_mv_type[s->block_index[0]] = 0; in vc1_decode_p_mb_intfr()
1554 v->blk_mv_type[s->block_index[1]] = 0; in vc1_decode_p_mb_intfr()
1555 v->blk_mv_type[s->block_index[2]] = 0; in vc1_decode_p_mb_intfr()
1556 v->blk_mv_type[s->block_index[3]] = 0; in vc1_decode_p_mb_intfr()
1560 v->blk_mv_type[s->block_index[0]] = 1; in vc1_decode_p_mb_intfr()
1561 v->blk_mv_type[s->block_index[1]] = 1; in vc1_decode_p_mb_intfr()
1562 v->blk_mv_type[s->block_index[2]] = 1; in vc1_decode_p_mb_intfr()
1563 v->blk_mv_type[s->block_index[3]] = 1; in vc1_decode_p_mb_intfr()
1567 v->blk_mv_type[s->block_index[0]] = 1; in vc1_decode_p_mb_intfr()
1568 v->blk_mv_type[s->block_index[1]] = 1; in vc1_decode_p_mb_intfr()
1569 v->blk_mv_type[s->block_index[2]] = 1; in vc1_decode_p_mb_intfr()
1570 v->blk_mv_type[s->block_index[3]] = 1; in vc1_decode_p_mb_intfr()
1573 v->blk_mv_type[s->block_index[0]] = 0; in vc1_decode_p_mb_intfr()
1574 v->blk_mv_type[s->block_index[1]] = 0; in vc1_decode_p_mb_intfr()
1575 v->blk_mv_type[s->block_index[2]] = 0; in vc1_decode_p_mb_intfr()
1576 v->blk_mv_type[s->block_index[3]] = 0; in vc1_decode_p_mb_intfr()
1579 … if (ff_vc1_mbmode_intfrp[v->fourmvswitch][idx_mbmode][0] == MV_PMODE_INTFR_INTRA) { // intra MB in vc1_decode_p_mb_intfr()
1581 s->current_picture.motion_val[1][s->block_index[i]][0] = 0; in vc1_decode_p_mb_intfr()
1582 s->current_picture.motion_val[1][s->block_index[i]][1] = 0; in vc1_decode_p_mb_intfr()
1584 v->is_intra[s->mb_x] = 0x3f; // Set the bitfield to all 1. in vc1_decode_p_mb_intfr()
1585 s->mb_intra = 1; in vc1_decode_p_mb_intfr()
1586 s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; in vc1_decode_p_mb_intfr()
1587 fieldtx = v->fieldtx_plane[mb_pos] = get_bits1(gb); in vc1_decode_p_mb_intfr()
1590 cbp = 1 + get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_p_mb_intfr()
1591 v->s.ac_pred = v->acpred_plane[mb_pos] = get_bits1(gb); in vc1_decode_p_mb_intfr()
1593 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_p_mb_intfr()
1594 /* Set DC scale - y and c use the same (not sure if necessary here) */ in vc1_decode_p_mb_intfr()
1595 s->y_dc_scale = s->y_dc_scale_table[FFABS(mquant)]; in vc1_decode_p_mb_intfr()
1596 s->c_dc_scale = s->c_dc_scale_table[FFABS(mquant)]; in vc1_decode_p_mb_intfr()
1599 v->a_avail = v->c_avail = 0; in vc1_decode_p_mb_intfr()
1600 v->mb_type[0][s->block_index[i]] = 1; in vc1_decode_p_mb_intfr()
1601 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb_intfr()
1603 val = ((cbp >> (5 - i)) & 1); in vc1_decode_p_mb_intfr()
1604 if (i == 2 || i == 3 || !s->first_slice_line) in vc1_decode_p_mb_intfr()
1605 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; in vc1_decode_p_mb_intfr()
1606 if (i == 1 || i == 3 || s->mb_x) in vc1_decode_p_mb_intfr()
1607 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; in vc1_decode_p_mb_intfr()
1609 vc1_decode_intra_block(v, v->block[v->cur_blk_idx][block_map[i]], i, val, mquant, in vc1_decode_p_mb_intfr()
1610 (i & 4) ? v->codingset2 : v->codingset); in vc1_decode_p_mb_intfr()
1611 if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_p_mb_intfr()
1613 v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][block_map[i]]); in vc1_decode_p_mb_intfr()
1615 …off = (fieldtx) ? ((i & 1) * 8) + ((i & 2) >> 1) * s->linesize : (i & 1) * 8 + 4 * (i & 2) * s->li… in vc1_decode_p_mb_intfr()
1622 mb_has_coeffs = ff_vc1_mbmode_intfrp[v->fourmvswitch][idx_mbmode][3]; in vc1_decode_p_mb_intfr()
1624 cbp = 1 + get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_p_mb_intfr()
1625 if (ff_vc1_mbmode_intfrp[v->fourmvswitch][idx_mbmode][0] == MV_PMODE_INTFR_2MV_FIELD) { in vc1_decode_p_mb_intfr()
1626 v->twomvbp = get_vlc2(gb, v->twomvbp_vlc->table, VC1_2MV_BLOCK_PATTERN_VLC_BITS, 1); in vc1_decode_p_mb_intfr()
1628 if ((ff_vc1_mbmode_intfrp[v->fourmvswitch][idx_mbmode][0] == MV_PMODE_INTFR_4MV) in vc1_decode_p_mb_intfr()
1629 … || (ff_vc1_mbmode_intfrp[v->fourmvswitch][idx_mbmode][0] == MV_PMODE_INTFR_4MV_FIELD)) { in vc1_decode_p_mb_intfr()
1630v->fourmvbp = get_vlc2(gb, v->fourmvbp_vlc->table, VC1_4MV_BLOCK_PATTERN_VLC_BITS, 1); in vc1_decode_p_mb_intfr()
1633 s->mb_intra = v->is_intra[s->mb_x] = 0; in vc1_decode_p_mb_intfr()
1635 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_p_mb_intfr()
1636 … fieldtx = v->fieldtx_plane[mb_pos] = ff_vc1_mbmode_intfrp[v->fourmvswitch][idx_mbmode][1]; in vc1_decode_p_mb_intfr()
1640 mvbp = v->fourmvbp; in vc1_decode_p_mb_intfr()
1644 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_p_mb_intfr()
1645 … ff_vc1_pred_mv_intfr(v, i, dmv_x, dmv_y, 0, v->range_x, v->range_y, v->mb_type[0], 0); in vc1_decode_p_mb_intfr()
1646 ff_vc1_mc_4mv_luma(v, i, 0, 0); in vc1_decode_p_mb_intfr()
1648 ff_vc1_mc_4mv_chroma4(v, 0, 0, 0); in vc1_decode_p_mb_intfr()
1650 mvbp = v->twomvbp; in vc1_decode_p_mb_intfr()
1653 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_p_mb_intfr()
1655 … ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], 0); in vc1_decode_p_mb_intfr()
1656 ff_vc1_mc_4mv_luma(v, 0, 0, 0); in vc1_decode_p_mb_intfr()
1657 ff_vc1_mc_4mv_luma(v, 1, 0, 0); in vc1_decode_p_mb_intfr()
1660 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_p_mb_intfr()
1662 … ff_vc1_pred_mv_intfr(v, 2, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], 0); in vc1_decode_p_mb_intfr()
1663 ff_vc1_mc_4mv_luma(v, 2, 0, 0); in vc1_decode_p_mb_intfr()
1664 ff_vc1_mc_4mv_luma(v, 3, 0, 0); in vc1_decode_p_mb_intfr()
1665 ff_vc1_mc_4mv_chroma4(v, 0, 0, 0); in vc1_decode_p_mb_intfr()
1667 mvbp = ff_vc1_mbmode_intfrp[v->fourmvswitch][idx_mbmode][2]; in vc1_decode_p_mb_intfr()
1670 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_p_mb_intfr()
1672 … ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], 0); in vc1_decode_p_mb_intfr()
1673 ff_vc1_mc_1mv(v, 0); in vc1_decode_p_mb_intfr()
1677 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_p_mb_intfr()
1678 if (!v->ttmbf && cbp) in vc1_decode_p_mb_intfr()
1679 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, VC1_TTMB_VLC_BITS, 2); in vc1_decode_p_mb_intfr()
1681 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb_intfr()
1683 val = ((cbp >> (5 - i)) & 1); in vc1_decode_p_mb_intfr()
1685 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); in vc1_decode_p_mb_intfr()
1687 off = (i & 4) ? 0 : ((i & 1) * 8 + ((i > 1) * s->linesize)); in vc1_decode_p_mb_intfr()
1689 … pat = vc1_decode_p_block(v, v->block[v->cur_blk_idx][block_map[i]], i, mquant, ttmb, in vc1_decode_p_mb_intfr()
1690 first_block, s->dest[dst_idx] + off, in vc1_decode_p_mb_intfr()
1691 (i & 4) ? s->uvlinesize : (s->linesize << fieldtx), in vc1_decode_p_mb_intfr()
1692 … CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), &block_tt); in vc1_decode_p_mb_intfr()
1696 if (!v->ttmbf && ttmb < 8) in vc1_decode_p_mb_intfr()
1697 ttmb = -1; in vc1_decode_p_mb_intfr()
1703 s->mb_intra = v->is_intra[s->mb_x] = 0; in vc1_decode_p_mb_intfr()
1705 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_p_mb_intfr()
1706 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb_intfr()
1708 s->current_picture.mb_type[mb_pos] = MB_TYPE_SKIP; in vc1_decode_p_mb_intfr()
1709 s->current_picture.qscale_table[mb_pos] = 0; in vc1_decode_p_mb_intfr()
1710 v->blk_mv_type[s->block_index[0]] = 0; in vc1_decode_p_mb_intfr()
1711 v->blk_mv_type[s->block_index[1]] = 0; in vc1_decode_p_mb_intfr()
1712 v->blk_mv_type[s->block_index[2]] = 0; in vc1_decode_p_mb_intfr()
1713 v->blk_mv_type[s->block_index[3]] = 0; in vc1_decode_p_mb_intfr()
1714 ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], 0); in vc1_decode_p_mb_intfr()
1715 ff_vc1_mc_1mv(v, 0); in vc1_decode_p_mb_intfr()
1716 v->fieldtx_plane[mb_pos] = 0; in vc1_decode_p_mb_intfr()
1718 if (v->overlap && v->pq >= 9) in vc1_decode_p_mb_intfr()
1719 ff_vc1_p_overlap_filter(v); in vc1_decode_p_mb_intfr()
1720 vc1_put_blocks_clamped(v, 1); in vc1_decode_p_mb_intfr()
1722 v->cbp[s->mb_x] = block_cbp; in vc1_decode_p_mb_intfr()
1723 v->ttblk[s->mb_x] = block_tt; in vc1_decode_p_mb_intfr()
1728 static int vc1_decode_p_mb_intfi(VC1Context *v) in vc1_decode_p_mb_intfi() argument
1730 MpegEncContext *s = &v->s; in vc1_decode_p_mb_intfi()
1731 GetBitContext *gb = &s->gb; in vc1_decode_p_mb_intfi()
1733 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_p_mb_intfi()
1736 int ttmb = v->ttfrm; /* MB Transform type */ in vc1_decode_p_mb_intfi()
1747 mquant = v->pq; /* Lossy initialization */ in vc1_decode_p_mb_intfi()
1749 idx_mbmode = get_vlc2(gb, v->mbmode_vlc->table, VC1_IF_MBMODE_VLC_BITS, 2); in vc1_decode_p_mb_intfi()
1751 v->is_intra[s->mb_x] = 0x3f; // Set the bitfield to all 1. in vc1_decode_p_mb_intfi()
1752 s->mb_intra = 1; in vc1_decode_p_mb_intfi()
1753 s->current_picture.motion_val[1][s->block_index[0] + v->blocks_off][0] = 0; in vc1_decode_p_mb_intfi()
1754 s->current_picture.motion_val[1][s->block_index[0] + v->blocks_off][1] = 0; in vc1_decode_p_mb_intfi()
1755 s->current_picture.mb_type[mb_pos + v->mb_off] = MB_TYPE_INTRA; in vc1_decode_p_mb_intfi()
1757 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_p_mb_intfi()
1758 /* Set DC scale - y and c use the same (not sure if necessary here) */ in vc1_decode_p_mb_intfi()
1759 s->y_dc_scale = s->y_dc_scale_table[FFABS(mquant)]; in vc1_decode_p_mb_intfi()
1760 s->c_dc_scale = s->c_dc_scale_table[FFABS(mquant)]; in vc1_decode_p_mb_intfi()
1761 v->s.ac_pred = v->acpred_plane[mb_pos] = get_bits1(gb); in vc1_decode_p_mb_intfi()
1764 cbp = 1 + get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_ICBPCY_VLC_BITS, 2); in vc1_decode_p_mb_intfi()
1767 v->a_avail = v->c_avail = 0; in vc1_decode_p_mb_intfi()
1768 v->mb_type[0][s->block_index[i]] = 1; in vc1_decode_p_mb_intfi()
1769 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb_intfi()
1771 val = ((cbp >> (5 - i)) & 1); in vc1_decode_p_mb_intfi()
1772 if (i == 2 || i == 3 || !s->first_slice_line) in vc1_decode_p_mb_intfi()
1773 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; in vc1_decode_p_mb_intfi()
1774 if (i == 1 || i == 3 || s->mb_x) in vc1_decode_p_mb_intfi()
1775 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; in vc1_decode_p_mb_intfi()
1777 vc1_decode_intra_block(v, v->block[v->cur_blk_idx][block_map[i]], i, val, mquant, in vc1_decode_p_mb_intfi()
1778 (i & 4) ? v->codingset2 : v->codingset); in vc1_decode_p_mb_intfi()
1779 if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_p_mb_intfi()
1781 v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][block_map[i]]); in vc1_decode_p_mb_intfi()
1782 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); in vc1_decode_p_mb_intfi()
1786 s->mb_intra = v->is_intra[s->mb_x] = 0; in vc1_decode_p_mb_intfi()
1787 s->current_picture.mb_type[mb_pos + v->mb_off] = MB_TYPE_16x16; in vc1_decode_p_mb_intfi()
1789 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_p_mb_intfi()
1790 if (idx_mbmode <= 5) { // 1-MV in vc1_decode_p_mb_intfi()
1793 get_mvdata_interlaced(v, &dmv_x, &dmv_y, &pred_flag); in vc1_decode_p_mb_intfi()
1795 … ff_vc1_pred_mv(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], pred_flag, 0); in vc1_decode_p_mb_intfi()
1796 ff_vc1_mc_1mv(v, 0); in vc1_decode_p_mb_intfi()
1798 } else { // 4-MV in vc1_decode_p_mb_intfi()
1799 v->fourmvbp = get_vlc2(gb, v->fourmvbp_vlc->table, VC1_4MV_BLOCK_PATTERN_VLC_BITS, 1); in vc1_decode_p_mb_intfi()
1802 if (v->fourmvbp & (8 >> i)) in vc1_decode_p_mb_intfi()
1803 get_mvdata_interlaced(v, &dmv_x, &dmv_y, &pred_flag); in vc1_decode_p_mb_intfi()
1804 … ff_vc1_pred_mv(v, i, dmv_x, dmv_y, 0, v->range_x, v->range_y, v->mb_type[0], pred_flag, 0); in vc1_decode_p_mb_intfi()
1805 ff_vc1_mc_4mv_luma(v, i, 0, 0); in vc1_decode_p_mb_intfi()
1807 ff_vc1_mc_4mv_chroma(v, 0); in vc1_decode_p_mb_intfi()
1811 cbp = 1 + get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_p_mb_intfi()
1815 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_p_mb_intfi()
1816 if (!v->ttmbf && cbp) { in vc1_decode_p_mb_intfi()
1817 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, VC1_TTMB_VLC_BITS, 2); in vc1_decode_p_mb_intfi()
1821 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_p_mb_intfi()
1823 val = ((cbp >> (5 - i)) & 1); in vc1_decode_p_mb_intfi()
1824 off = (i & 4) ? 0 : (i & 1) * 8 + (i & 2) * 4 * s->linesize; in vc1_decode_p_mb_intfi()
1826 pat = vc1_decode_p_block(v, v->block[v->cur_blk_idx][block_map[i]], i, mquant, ttmb, in vc1_decode_p_mb_intfi()
1827 first_block, s->dest[dst_idx] + off, in vc1_decode_p_mb_intfi()
1828 (i & 4) ? s->uvlinesize : s->linesize, in vc1_decode_p_mb_intfi()
1829 … CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), in vc1_decode_p_mb_intfi()
1834 if (!v->ttmbf && ttmb < 8) in vc1_decode_p_mb_intfi()
1835 ttmb = -1; in vc1_decode_p_mb_intfi()
1840 if (v->overlap && v->pq >= 9) in vc1_decode_p_mb_intfi()
1841 ff_vc1_p_overlap_filter(v); in vc1_decode_p_mb_intfi()
1842 vc1_put_blocks_clamped(v, 1); in vc1_decode_p_mb_intfi()
1844 v->cbp[s->mb_x] = block_cbp; in vc1_decode_p_mb_intfi()
1845 v->ttblk[s->mb_x] = block_tt; in vc1_decode_p_mb_intfi()
1850 /** Decode one B-frame MB (in Main profile)
1852 static int vc1_decode_b_mb(VC1Context *v) in vc1_decode_b_mb() argument
1854 MpegEncContext *s = &v->s; in vc1_decode_b_mb()
1855 GetBitContext *gb = &s->gb; in vc1_decode_b_mb()
1857 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_b_mb()
1860 int ttmb = v->ttfrm; /* MB Transform type */ in vc1_decode_b_mb()
1870 mquant = v->pq; /* lossy initialization */ in vc1_decode_b_mb()
1871 s->mb_intra = 0; in vc1_decode_b_mb()
1873 if (v->dmb_is_raw) in vc1_decode_b_mb()
1876 direct = v->direct_mb_plane[mb_pos]; in vc1_decode_b_mb()
1877 if (v->skip_is_raw) in vc1_decode_b_mb()
1880 skipped = v->s.mbskip_table[mb_pos]; in vc1_decode_b_mb()
1884 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_b_mb()
1885 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_b_mb()
1887 s->current_picture.qscale_table[mb_pos] = 0; in vc1_decode_b_mb()
1895 if (skipped || !s->mb_intra) { in vc1_decode_b_mb()
1899 … bmvtype = (v->bfraction >= (B_FRACTION_DEN/2)) ? BMV_TYPE_BACKWARD : BMV_TYPE_FORWARD; in vc1_decode_b_mb()
1902 … bmvtype = (v->bfraction >= (B_FRACTION_DEN/2)) ? BMV_TYPE_FORWARD : BMV_TYPE_BACKWARD; in vc1_decode_b_mb()
1911 v->mb_type[0][s->block_index[i]] = s->mb_intra; in vc1_decode_b_mb()
1916 ff_vc1_pred_b_mv(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1917 vc1_b_mc(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1921 cbp = get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_b_mb()
1923 s->mb_intra = 0; in vc1_decode_b_mb()
1924 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_b_mb()
1925 if (!v->ttmbf) in vc1_decode_b_mb()
1926 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, VC1_TTMB_VLC_BITS, 2); in vc1_decode_b_mb()
1928 ff_vc1_pred_b_mv(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1929 vc1_b_mc(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1931 if (!mb_has_coeffs && !s->mb_intra) { in vc1_decode_b_mb()
1932 /* no coded blocks - effectively skipped */ in vc1_decode_b_mb()
1933 ff_vc1_pred_b_mv(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1934 vc1_b_mc(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1937 if (s->mb_intra && !mb_has_coeffs) { in vc1_decode_b_mb()
1939 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_b_mb()
1940 s->ac_pred = get_bits1(gb); in vc1_decode_b_mb()
1942 ff_vc1_pred_b_mv(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1948 ff_vc1_pred_b_mv(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1949 vc1_b_mc(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1953 ff_vc1_pred_b_mv(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1954 if (!s->mb_intra) { in vc1_decode_b_mb()
1955 vc1_b_mc(v, dmv_x, dmv_y, direct, bmvtype); in vc1_decode_b_mb()
1957 if (s->mb_intra) in vc1_decode_b_mb()
1958 s->ac_pred = get_bits1(gb); in vc1_decode_b_mb()
1959 cbp = get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_b_mb()
1961 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_b_mb()
1962 if (!v->ttmbf && !s->mb_intra && mb_has_coeffs) in vc1_decode_b_mb()
1963 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, VC1_TTMB_VLC_BITS, 2); in vc1_decode_b_mb()
1968 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_b_mb()
1970 val = ((cbp >> (5 - i)) & 1); in vc1_decode_b_mb()
1971 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); in vc1_decode_b_mb()
1972 v->mb_type[0][s->block_index[i]] = s->mb_intra; in vc1_decode_b_mb()
1973 if (s->mb_intra) { in vc1_decode_b_mb()
1975 v->a_avail = v->c_avail = 0; in vc1_decode_b_mb()
1976 if (i == 2 || i == 3 || !s->first_slice_line) in vc1_decode_b_mb()
1977 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; in vc1_decode_b_mb()
1978 if (i == 1 || i == 3 || s->mb_x) in vc1_decode_b_mb()
1979 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; in vc1_decode_b_mb()
1981 vc1_decode_intra_block(v, s->block[i], i, val, mquant, in vc1_decode_b_mb()
1982 (i & 4) ? v->codingset2 : v->codingset); in vc1_decode_b_mb()
1983 if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_b_mb()
1985 v->vc1dsp.vc1_inv_trans_8x8(s->block[i]); in vc1_decode_b_mb()
1986 if (v->rangeredfrm) in vc1_decode_b_mb()
1988 s->block[i][j] *= 2; in vc1_decode_b_mb()
1989 s->idsp.put_signed_pixels_clamped(s->block[i], in vc1_decode_b_mb()
1990 s->dest[dst_idx] + off, in vc1_decode_b_mb()
1991 i & 4 ? s->uvlinesize in vc1_decode_b_mb()
1992 : s->linesize); in vc1_decode_b_mb()
1994 int pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, in vc1_decode_b_mb()
1995 first_block, s->dest[dst_idx] + off, in vc1_decode_b_mb()
1996 (i & 4) ? s->uvlinesize : s->linesize, in vc1_decode_b_mb()
1997 … CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), NULL); in vc1_decode_b_mb()
2000 if (!v->ttmbf && ttmb < 8) in vc1_decode_b_mb()
2001 ttmb = -1; in vc1_decode_b_mb()
2008 /** Decode one B-frame MB (in interlaced field B picture)
2010 static int vc1_decode_b_mb_intfi(VC1Context *v) in vc1_decode_b_mb_intfi() argument
2012 MpegEncContext *s = &v->s; in vc1_decode_b_mb_intfi()
2013 GetBitContext *gb = &s->gb; in vc1_decode_b_mb_intfi()
2015 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_b_mb_intfi()
2018 int ttmb = v->ttfrm; /* MB Transform type */ in vc1_decode_b_mb_intfi()
2029 mquant = v->pq; /* Lossy initialization */ in vc1_decode_b_mb_intfi()
2030 s->mb_intra = 0; in vc1_decode_b_mb_intfi()
2032 idx_mbmode = get_vlc2(gb, v->mbmode_vlc->table, VC1_IF_MBMODE_VLC_BITS, 2); in vc1_decode_b_mb_intfi()
2034 v->is_intra[s->mb_x] = 0x3f; // Set the bitfield to all 1. in vc1_decode_b_mb_intfi()
2035 s->mb_intra = 1; in vc1_decode_b_mb_intfi()
2036 s->current_picture.motion_val[1][s->block_index[0]][0] = 0; in vc1_decode_b_mb_intfi()
2037 s->current_picture.motion_val[1][s->block_index[0]][1] = 0; in vc1_decode_b_mb_intfi()
2038 s->current_picture.mb_type[mb_pos + v->mb_off] = MB_TYPE_INTRA; in vc1_decode_b_mb_intfi()
2040 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_b_mb_intfi()
2041 /* Set DC scale - y and c use the same (not sure if necessary here) */ in vc1_decode_b_mb_intfi()
2042 s->y_dc_scale = s->y_dc_scale_table[FFABS(mquant)]; in vc1_decode_b_mb_intfi()
2043 s->c_dc_scale = s->c_dc_scale_table[FFABS(mquant)]; in vc1_decode_b_mb_intfi()
2044 v->s.ac_pred = v->acpred_plane[mb_pos] = get_bits1(gb); in vc1_decode_b_mb_intfi()
2047 cbp = 1 + get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_ICBPCY_VLC_BITS, 2); in vc1_decode_b_mb_intfi()
2050 v->a_avail = v->c_avail = 0; in vc1_decode_b_mb_intfi()
2051 v->mb_type[0][s->block_index[i]] = 1; in vc1_decode_b_mb_intfi()
2052 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_b_mb_intfi()
2054 val = ((cbp >> (5 - i)) & 1); in vc1_decode_b_mb_intfi()
2055 if (i == 2 || i == 3 || !s->first_slice_line) in vc1_decode_b_mb_intfi()
2056 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; in vc1_decode_b_mb_intfi()
2057 if (i == 1 || i == 3 || s->mb_x) in vc1_decode_b_mb_intfi()
2058 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; in vc1_decode_b_mb_intfi()
2060 vc1_decode_intra_block(v, s->block[i], i, val, mquant, in vc1_decode_b_mb_intfi()
2061 (i & 4) ? v->codingset2 : v->codingset); in vc1_decode_b_mb_intfi()
2062 if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_b_mb_intfi()
2064 v->vc1dsp.vc1_inv_trans_8x8(s->block[i]); in vc1_decode_b_mb_intfi()
2065 if (v->rangeredfrm) in vc1_decode_b_mb_intfi()
2067 s->block[i][j] <<= 1; in vc1_decode_b_mb_intfi()
2068 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); in vc1_decode_b_mb_intfi()
2069 s->idsp.put_signed_pixels_clamped(s->block[i], in vc1_decode_b_mb_intfi()
2070 s->dest[dst_idx] + off, in vc1_decode_b_mb_intfi()
2071 (i & 4) ? s->uvlinesize in vc1_decode_b_mb_intfi()
2072 : s->linesize); in vc1_decode_b_mb_intfi()
2075 s->mb_intra = v->is_intra[s->mb_x] = 0; in vc1_decode_b_mb_intfi()
2076 s->current_picture.mb_type[mb_pos + v->mb_off] = MB_TYPE_16x16; in vc1_decode_b_mb_intfi()
2078 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_b_mb_intfi()
2079 if (v->fmb_is_raw) in vc1_decode_b_mb_intfi()
2080 fwd = v->forward_mb_plane[mb_pos] = get_bits1(gb); in vc1_decode_b_mb_intfi()
2082 fwd = v->forward_mb_plane[mb_pos]; in vc1_decode_b_mb_intfi()
2083 if (idx_mbmode <= 5) { // 1-MV in vc1_decode_b_mb_intfi()
2103 v->bmvtype = bmvtype; in vc1_decode_b_mb_intfi()
2105 …get_mvdata_interlaced(v, &dmv_x[bmvtype == BMV_TYPE_BACKWARD], &dmv_y[bmvtype == BMV_TYPE_BACKWARD… in vc1_decode_b_mb_intfi()
2108 get_mvdata_interlaced(v, &dmv_x[1], &dmv_y[1], &pred_flag[1]); in vc1_decode_b_mb_intfi()
2113 if (!s->next_picture_ptr->field_picture) { in vc1_decode_b_mb_intfi()
2114 av_log(s->avctx, AV_LOG_ERROR, "Mixed field/frame direct mode not supported\n"); in vc1_decode_b_mb_intfi()
2118 ff_vc1_pred_b_mv_intfi(v, 0, dmv_x, dmv_y, 1, pred_flag); in vc1_decode_b_mb_intfi()
2119 vc1_b_mc(v, dmv_x, dmv_y, (bmvtype == BMV_TYPE_DIRECT), bmvtype); in vc1_decode_b_mb_intfi()
2121 } else { // 4-MV in vc1_decode_b_mb_intfi()
2124 v->bmvtype = bmvtype; in vc1_decode_b_mb_intfi()
2125 v->fourmvbp = get_vlc2(gb, v->fourmvbp_vlc->table, VC1_4MV_BLOCK_PATTERN_VLC_BITS, 1); in vc1_decode_b_mb_intfi()
2129 if (v->fourmvbp & (8 >> i)) { in vc1_decode_b_mb_intfi()
2130 get_mvdata_interlaced(v, &dmv_x[bmvtype == BMV_TYPE_BACKWARD], in vc1_decode_b_mb_intfi()
2134 ff_vc1_pred_b_mv_intfi(v, i, dmv_x, dmv_y, 0, pred_flag); in vc1_decode_b_mb_intfi()
2135 ff_vc1_mc_4mv_luma(v, i, bmvtype == BMV_TYPE_BACKWARD, 0); in vc1_decode_b_mb_intfi()
2137 ff_vc1_mc_4mv_chroma(v, bmvtype == BMV_TYPE_BACKWARD); in vc1_decode_b_mb_intfi()
2141 cbp = 1 + get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_b_mb_intfi()
2145 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_b_mb_intfi()
2146 if (!v->ttmbf && cbp) { in vc1_decode_b_mb_intfi()
2147 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, VC1_TTMB_VLC_BITS, 2); in vc1_decode_b_mb_intfi()
2151 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_b_mb_intfi()
2153 val = ((cbp >> (5 - i)) & 1); in vc1_decode_b_mb_intfi()
2154 off = (i & 4) ? 0 : (i & 1) * 8 + (i & 2) * 4 * s->linesize; in vc1_decode_b_mb_intfi()
2156 pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, in vc1_decode_b_mb_intfi()
2157 first_block, s->dest[dst_idx] + off, in vc1_decode_b_mb_intfi()
2158 (i & 4) ? s->uvlinesize : s->linesize, in vc1_decode_b_mb_intfi()
2159 … CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), &block_tt); in vc1_decode_b_mb_intfi()
2163 if (!v->ttmbf && ttmb < 8) in vc1_decode_b_mb_intfi()
2164 ttmb = -1; in vc1_decode_b_mb_intfi()
2169 v->cbp[s->mb_x] = block_cbp; in vc1_decode_b_mb_intfi()
2170 v->ttblk[s->mb_x] = block_tt; in vc1_decode_b_mb_intfi()
2175 /** Decode one B-frame MB (in interlaced frame B picture)
2177 static int vc1_decode_b_mb_intfr(VC1Context *v) in vc1_decode_b_mb_intfr() argument
2179 MpegEncContext *s = &v->s; in vc1_decode_b_mb_intfr()
2180 GetBitContext *gb = &s->gb; in vc1_decode_b_mb_intfr()
2182 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_b_mb_intfr()
2185 int ttmb = v->ttfrm; /* MB Transform type */ in vc1_decode_b_mb_intfr()
2199 mquant = v->pq; /* Lossy initialization */ in vc1_decode_b_mb_intfr()
2200 s->mb_intra = 0; in vc1_decode_b_mb_intfr()
2201 if (v->skip_is_raw) in vc1_decode_b_mb_intfr()
2204 skipped = v->s.mbskip_table[mb_pos]; in vc1_decode_b_mb_intfr()
2207 idx_mbmode = get_vlc2(gb, v->mbmode_vlc->table, VC1_INTFR_NON4MV_MBMODE_VLC_BITS, 2); in vc1_decode_b_mb_intfr()
2210 v->blk_mv_type[s->block_index[0]] = 1; in vc1_decode_b_mb_intfr()
2211 v->blk_mv_type[s->block_index[1]] = 1; in vc1_decode_b_mb_intfr()
2212 v->blk_mv_type[s->block_index[2]] = 1; in vc1_decode_b_mb_intfr()
2213 v->blk_mv_type[s->block_index[3]] = 1; in vc1_decode_b_mb_intfr()
2215 v->blk_mv_type[s->block_index[0]] = 0; in vc1_decode_b_mb_intfr()
2216 v->blk_mv_type[s->block_index[1]] = 0; in vc1_decode_b_mb_intfr()
2217 v->blk_mv_type[s->block_index[2]] = 0; in vc1_decode_b_mb_intfr()
2218 v->blk_mv_type[s->block_index[3]] = 0; in vc1_decode_b_mb_intfr()
2224 s->mv[0][i][0] = s->current_picture.motion_val[0][s->block_index[i]][0] = 0; in vc1_decode_b_mb_intfr()
2225 s->mv[0][i][1] = s->current_picture.motion_val[0][s->block_index[i]][1] = 0; in vc1_decode_b_mb_intfr()
2226 s->mv[1][i][0] = s->current_picture.motion_val[1][s->block_index[i]][0] = 0; in vc1_decode_b_mb_intfr()
2227 s->mv[1][i][1] = s->current_picture.motion_val[1][s->block_index[i]][1] = 0; in vc1_decode_b_mb_intfr()
2229 v->is_intra[s->mb_x] = 0x3f; // Set the bitfield to all 1. in vc1_decode_b_mb_intfr()
2230 s->mb_intra = 1; in vc1_decode_b_mb_intfr()
2231 s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; in vc1_decode_b_mb_intfr()
2232 fieldtx = v->fieldtx_plane[mb_pos] = get_bits1(gb); in vc1_decode_b_mb_intfr()
2235 cbp = 1 + get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_b_mb_intfr()
2236 v->s.ac_pred = v->acpred_plane[mb_pos] = get_bits1(gb); in vc1_decode_b_mb_intfr()
2238 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_b_mb_intfr()
2239 /* Set DC scale - y and c use the same (not sure if necessary here) */ in vc1_decode_b_mb_intfr()
2240 s->y_dc_scale = s->y_dc_scale_table[FFABS(mquant)]; in vc1_decode_b_mb_intfr()
2241 s->c_dc_scale = s->c_dc_scale_table[FFABS(mquant)]; in vc1_decode_b_mb_intfr()
2244 v->a_avail = v->c_avail = 0; in vc1_decode_b_mb_intfr()
2245 v->mb_type[0][s->block_index[i]] = 1; in vc1_decode_b_mb_intfr()
2246 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_b_mb_intfr()
2248 val = ((cbp >> (5 - i)) & 1); in vc1_decode_b_mb_intfr()
2249 if (i == 2 || i == 3 || !s->first_slice_line) in vc1_decode_b_mb_intfr()
2250 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; in vc1_decode_b_mb_intfr()
2251 if (i == 1 || i == 3 || s->mb_x) in vc1_decode_b_mb_intfr()
2252 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; in vc1_decode_b_mb_intfr()
2254 vc1_decode_intra_block(v, s->block[i], i, val, mquant, in vc1_decode_b_mb_intfr()
2255 (i & 4) ? v->codingset2 : v->codingset); in vc1_decode_b_mb_intfr()
2256 if (CONFIG_GRAY && i > 3 && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_b_mb_intfr()
2258 v->vc1dsp.vc1_inv_trans_8x8(s->block[i]); in vc1_decode_b_mb_intfr()
2260 stride_y = s->linesize << fieldtx; in vc1_decode_b_mb_intfr()
2261 …off = (fieldtx) ? ((i & 1) * 8) + ((i & 2) >> 1) * s->linesize : (i & 1) * 8 + 4 * (i & 2) * s->li… in vc1_decode_b_mb_intfr()
2263 stride_y = s->uvlinesize; in vc1_decode_b_mb_intfr()
2266 s->idsp.put_signed_pixels_clamped(s->block[i], in vc1_decode_b_mb_intfr()
2267 s->dest[dst_idx] + off, in vc1_decode_b_mb_intfr()
2271 s->mb_intra = v->is_intra[s->mb_x] = 0; in vc1_decode_b_mb_intfr()
2273 if (v->dmb_is_raw) in vc1_decode_b_mb_intfr()
2276 direct = v->direct_mb_plane[mb_pos]; in vc1_decode_b_mb_intfr()
2279 if (s->next_picture_ptr->field_picture) in vc1_decode_b_mb_intfr()
2280 av_log(s->avctx, AV_LOG_WARNING, "Mixed frame/field direct mode not supported\n"); in vc1_decode_b_mb_intfr()
2281->mv[0][0][0] = s->current_picture.motion_val[0][s->block_index[0]][0] = scale_mv(s->next_picture.… in vc1_decode_b_mb_intfr()
2282->mv[0][0][1] = s->current_picture.motion_val[0][s->block_index[0]][1] = scale_mv(s->next_picture.… in vc1_decode_b_mb_intfr()
2283->mv[1][0][0] = s->current_picture.motion_val[1][s->block_index[0]][0] = scale_mv(s->next_picture.… in vc1_decode_b_mb_intfr()
2284->mv[1][0][1] = s->current_picture.motion_val[1][s->block_index[0]][1] = scale_mv(s->next_picture.… in vc1_decode_b_mb_intfr()
2287->mv[0][2][0] = s->current_picture.motion_val[0][s->block_index[2]][0] = scale_mv(s->next_picture.… in vc1_decode_b_mb_intfr()
2288->mv[0][2][1] = s->current_picture.motion_val[0][s->block_index[2]][1] = scale_mv(s->next_picture.… in vc1_decode_b_mb_intfr()
2289->mv[1][2][0] = s->current_picture.motion_val[1][s->block_index[2]][0] = scale_mv(s->next_picture.… in vc1_decode_b_mb_intfr()
2290->mv[1][2][1] = s->current_picture.motion_val[1][s->block_index[2]][1] = scale_mv(s->next_picture.… in vc1_decode_b_mb_intfr()
2293 … s->mv[0][i][0] = s->current_picture.motion_val[0][s->block_index[i]][0] = s->mv[0][i-1][0]; in vc1_decode_b_mb_intfr()
2294 … s->mv[0][i][1] = s->current_picture.motion_val[0][s->block_index[i]][1] = s->mv[0][i-1][1]; in vc1_decode_b_mb_intfr()
2295 … s->mv[1][i][0] = s->current_picture.motion_val[1][s->block_index[i]][0] = s->mv[1][i-1][0]; in vc1_decode_b_mb_intfr()
2296 … s->mv[1][i][1] = s->current_picture.motion_val[1][s->block_index[i]][1] = s->mv[1][i-1][1]; in vc1_decode_b_mb_intfr()
2300 … s->mv[0][i][0] = s->current_picture.motion_val[0][s->block_index[i]][0] = s->mv[0][0][0]; in vc1_decode_b_mb_intfr()
2301 … s->mv[0][i][1] = s->current_picture.motion_val[0][s->block_index[i]][1] = s->mv[0][0][1]; in vc1_decode_b_mb_intfr()
2302 … s->mv[1][i][0] = s->current_picture.motion_val[1][s->block_index[i]][0] = s->mv[1][0][0]; in vc1_decode_b_mb_intfr()
2303 … s->mv[1][i][1] = s->current_picture.motion_val[1][s->block_index[i]][1] = s->mv[1][0][1]; in vc1_decode_b_mb_intfr()
2309 if (skipped || !s->mb_intra) { in vc1_decode_b_mb_intfr()
2313 … bmvtype = (v->bfraction >= (B_FRACTION_DEN/2)) ? BMV_TYPE_BACKWARD : BMV_TYPE_FORWARD; in vc1_decode_b_mb_intfr()
2316 … bmvtype = (v->bfraction >= (B_FRACTION_DEN/2)) ? BMV_TYPE_FORWARD : BMV_TYPE_BACKWARD; in vc1_decode_b_mb_intfr()
2330 cbp = 1 + get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2); in vc1_decode_b_mb_intfr()
2333v->fourmvbp = get_vlc2(gb, v->fourmvbp_vlc->table, VC1_4MV_BLOCK_PATTERN_VLC_BITS, 1); in vc1_decode_b_mb_intfr()
2335v->twomvbp = get_vlc2(gb, v->twomvbp_vlc->table, VC1_2MV_BLOCK_PATTERN_VLC_BITS, 1); in vc1_decode_b_mb_intfr()
2340 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_b_mb_intfr()
2341 fieldtx = v->fieldtx_plane[mb_pos] = ff_vc1_mbmode_intfrp[0][idx_mbmode][1]; in vc1_decode_b_mb_intfr()
2347 ff_vc1_mc_4mv_luma(v, i, 0, 0); in vc1_decode_b_mb_intfr()
2348 ff_vc1_mc_4mv_luma(v, i, 1, 1); in vc1_decode_b_mb_intfr()
2350 ff_vc1_mc_4mv_chroma4(v, 0, 0, 0); in vc1_decode_b_mb_intfr()
2351 ff_vc1_mc_4mv_chroma4(v, 1, 1, 1); in vc1_decode_b_mb_intfr()
2353 ff_vc1_mc_1mv(v, 0); in vc1_decode_b_mb_intfr()
2354 ff_vc1_interp_mc(v); in vc1_decode_b_mb_intfr()
2357 mvbp = v->fourmvbp; in vc1_decode_b_mb_intfr()
2361 val = ((mvbp >> (3 - i)) & 1); in vc1_decode_b_mb_intfr()
2363 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_b_mb_intfr()
2365 … ff_vc1_pred_mv_intfr(v, j, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], dir); in vc1_decode_b_mb_intfr()
2366 ff_vc1_mc_4mv_luma(v, j, dir, dir); in vc1_decode_b_mb_intfr()
2367 ff_vc1_mc_4mv_luma(v, j+1, dir, dir); in vc1_decode_b_mb_intfr()
2370 ff_vc1_mc_4mv_chroma4(v, 0, 0, 0); in vc1_decode_b_mb_intfr()
2371 ff_vc1_mc_4mv_chroma4(v, 1, 1, 1); in vc1_decode_b_mb_intfr()
2373 mvbp = v->twomvbp; in vc1_decode_b_mb_intfr()
2376 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_b_mb_intfr()
2378 … ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], 0); in vc1_decode_b_mb_intfr()
2379 ff_vc1_mc_1mv(v, 0); in vc1_decode_b_mb_intfr()
2383 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_b_mb_intfr()
2385 … ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], 1); in vc1_decode_b_mb_intfr()
2386 ff_vc1_interp_mc(v); in vc1_decode_b_mb_intfr()
2392 mvbp = v->twomvbp; in vc1_decode_b_mb_intfr()
2395 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_b_mb_intfr()
2396 … ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], dir); in vc1_decode_b_mb_intfr()
2400 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_b_mb_intfr()
2401 … ff_vc1_pred_mv_intfr(v, 2, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], dir2); in vc1_decode_b_mb_intfr()
2405 …s->mv[dir][i+2][0] = s->mv[dir][i][0] = s->current_picture.motion_val[dir][s->block_index[i+2]][0]… in vc1_decode_b_mb_intfr()
2406 …s->mv[dir][i+2][1] = s->mv[dir][i][1] = s->current_picture.motion_val[dir][s->block_index[i+2]][1]… in vc1_decode_b_mb_intfr()
2407 …s->mv[dir2][i+2][0] = s->mv[dir2][i][0] = s->current_picture.motion_val[dir2][s->block_index[i]][0… in vc1_decode_b_mb_intfr()
2408 …s->mv[dir2][i+2][1] = s->mv[dir2][i][1] = s->current_picture.motion_val[dir2][s->block_index[i]][1… in vc1_decode_b_mb_intfr()
2411 … ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, v->mb_type[0], !dir); in vc1_decode_b_mb_intfr()
2412 … ff_vc1_pred_mv_intfr(v, 2, 0, 0, 2, v->range_x, v->range_y, v->mb_type[0], !dir); in vc1_decode_b_mb_intfr()
2415 ff_vc1_mc_4mv_luma(v, 0, dir, 0); in vc1_decode_b_mb_intfr()
2416 ff_vc1_mc_4mv_luma(v, 1, dir, 0); in vc1_decode_b_mb_intfr()
2417 ff_vc1_mc_4mv_luma(v, 2, dir2, 0); in vc1_decode_b_mb_intfr()
2418 ff_vc1_mc_4mv_luma(v, 3, dir2, 0); in vc1_decode_b_mb_intfr()
2419 ff_vc1_mc_4mv_chroma4(v, dir, dir2, 0); in vc1_decode_b_mb_intfr()
2426 get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); in vc1_decode_b_mb_intfr()
2428 … ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], dir); in vc1_decode_b_mb_intfr()
2429 v->blk_mv_type[s->block_index[0]] = 1; in vc1_decode_b_mb_intfr()
2430 v->blk_mv_type[s->block_index[1]] = 1; in vc1_decode_b_mb_intfr()
2431 v->blk_mv_type[s->block_index[2]] = 1; in vc1_decode_b_mb_intfr()
2432 v->blk_mv_type[s->block_index[3]] = 1; in vc1_decode_b_mb_intfr()
2433 ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, 0, !dir); in vc1_decode_b_mb_intfr()
2435 …s->mv[!dir][i+2][0] = s->mv[!dir][i][0] = s->current_picture.motion_val[!dir][s->block_index[i+2]]… in vc1_decode_b_mb_intfr()
2436 …s->mv[!dir][i+2][1] = s->mv[!dir][i][1] = s->current_picture.motion_val[!dir][s->block_index[i+2]]… in vc1_decode_b_mb_intfr()
2438 ff_vc1_mc_1mv(v, dir); in vc1_decode_b_mb_intfr()
2443 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_b_mb_intfr()
2444 if (!v->ttmbf && cbp) in vc1_decode_b_mb_intfr()
2445 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, VC1_TTMB_VLC_BITS, 2); in vc1_decode_b_mb_intfr()
2447 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_b_mb_intfr()
2449 val = ((cbp >> (5 - i)) & 1); in vc1_decode_b_mb_intfr()
2451 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); in vc1_decode_b_mb_intfr()
2453 off = (i & 4) ? 0 : ((i & 1) * 8 + ((i > 1) * s->linesize)); in vc1_decode_b_mb_intfr()
2455 pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, in vc1_decode_b_mb_intfr()
2456 first_block, s->dest[dst_idx] + off, in vc1_decode_b_mb_intfr()
2457 (i & 4) ? s->uvlinesize : (s->linesize << fieldtx), in vc1_decode_b_mb_intfr()
2458 … CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), &block_tt); in vc1_decode_b_mb_intfr()
2462 if (!v->ttmbf && ttmb < 8) in vc1_decode_b_mb_intfr()
2463 ttmb = -1; in vc1_decode_b_mb_intfr()
2471 v->mb_type[0][s->block_index[i]] = 0; in vc1_decode_b_mb_intfr()
2472 s->dc_val[0][s->block_index[i]] = 0; in vc1_decode_b_mb_intfr()
2474 s->current_picture.mb_type[mb_pos] = MB_TYPE_SKIP; in vc1_decode_b_mb_intfr()
2475 s->current_picture.qscale_table[mb_pos] = 0; in vc1_decode_b_mb_intfr()
2476 v->blk_mv_type[s->block_index[0]] = 0; in vc1_decode_b_mb_intfr()
2477 v->blk_mv_type[s->block_index[1]] = 0; in vc1_decode_b_mb_intfr()
2478 v->blk_mv_type[s->block_index[2]] = 0; in vc1_decode_b_mb_intfr()
2479 v->blk_mv_type[s->block_index[3]] = 0; in vc1_decode_b_mb_intfr()
2483 ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], 0); in vc1_decode_b_mb_intfr()
2484 ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], 1); in vc1_decode_b_mb_intfr()
2487 ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], dir); in vc1_decode_b_mb_intfr()
2493 …s->mv[dir][i+2][0] = s->mv[dir][i][0] = s->current_picture.motion_val[dir][s->block_index[i+2]][0]… in vc1_decode_b_mb_intfr()
2494 …s->mv[dir][i+2][1] = s->mv[dir][i][1] = s->current_picture.motion_val[dir][s->block_index[i+2]][1]… in vc1_decode_b_mb_intfr()
2495 …s->mv[dir2][i+2][0] = s->mv[dir2][i][0] = s->current_picture.motion_val[dir2][s->block_index[i]][0… in vc1_decode_b_mb_intfr()
2496 …s->mv[dir2][i+2][1] = s->mv[dir2][i][1] = s->current_picture.motion_val[dir2][s->block_index[i]][1… in vc1_decode_b_mb_intfr()
2499 v->blk_mv_type[s->block_index[0]] = 1; in vc1_decode_b_mb_intfr()
2500 v->blk_mv_type[s->block_index[1]] = 1; in vc1_decode_b_mb_intfr()
2501 v->blk_mv_type[s->block_index[2]] = 1; in vc1_decode_b_mb_intfr()
2502 v->blk_mv_type[s->block_index[3]] = 1; in vc1_decode_b_mb_intfr()
2503 ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, 0, !dir); in vc1_decode_b_mb_intfr()
2505 …s->mv[!dir][i+2][0] = s->mv[!dir][i][0] = s->current_picture.motion_val[!dir][s->block_index[i+2]]… in vc1_decode_b_mb_intfr()
2506 …s->mv[!dir][i+2][1] = s->mv[!dir][i][1] = s->current_picture.motion_val[!dir][s->block_index[i+2]]… in vc1_decode_b_mb_intfr()
2512 ff_vc1_mc_1mv(v, dir); in vc1_decode_b_mb_intfr()
2514 ff_vc1_interp_mc(v); in vc1_decode_b_mb_intfr()
2516 v->fieldtx_plane[mb_pos] = 0; in vc1_decode_b_mb_intfr()
2519 v->cbp[s->mb_x] = block_cbp; in vc1_decode_b_mb_intfr()
2520 v->ttblk[s->mb_x] = block_tt; in vc1_decode_b_mb_intfr()
2525 /** Decode blocks of I-frame
2527 static void vc1_decode_i_blocks(VC1Context *v) in vc1_decode_i_blocks() argument
2530 MpegEncContext *s = &v->s; in vc1_decode_i_blocks()
2536 switch (v->y_ac_table_index) { in vc1_decode_i_blocks()
2538 v->codingset = (v->pqindex <= 8) ? CS_HIGH_RATE_INTRA : CS_LOW_MOT_INTRA; in vc1_decode_i_blocks()
2541 v->codingset = CS_HIGH_MOT_INTRA; in vc1_decode_i_blocks()
2544 v->codingset = CS_MID_RATE_INTRA; in vc1_decode_i_blocks()
2548 switch (v->c_ac_table_index) { in vc1_decode_i_blocks()
2550 v->codingset2 = (v->pqindex <= 8) ? CS_HIGH_RATE_INTER : CS_LOW_MOT_INTER; in vc1_decode_i_blocks()
2553 v->codingset2 = CS_HIGH_MOT_INTER; in vc1_decode_i_blocks()
2556 v->codingset2 = CS_MID_RATE_INTER; in vc1_decode_i_blocks()
2560 /* Set DC scale - y and c use the same */ in vc1_decode_i_blocks()
2561 s->y_dc_scale = s->y_dc_scale_table[v->pq]; in vc1_decode_i_blocks()
2562 s->c_dc_scale = s->c_dc_scale_table[v->pq]; in vc1_decode_i_blocks()
2565 s->mb_x = s->mb_y = 0; in vc1_decode_i_blocks()
2566 s->mb_intra = 1; in vc1_decode_i_blocks()
2567 s->first_slice_line = 1; in vc1_decode_i_blocks()
2568 for (s->mb_y = s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) { in vc1_decode_i_blocks()
2569 s->mb_x = 0; in vc1_decode_i_blocks()
2570 init_block_index(v); in vc1_decode_i_blocks()
2571 for (; s->mb_x < v->end_mb_x; s->mb_x++) { in vc1_decode_i_blocks()
2573 s->bdsp.clear_blocks(v->block[v->cur_blk_idx][0]); in vc1_decode_i_blocks()
2574 mb_pos = s->mb_x + s->mb_y * s->mb_width; in vc1_decode_i_blocks()
2575 s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; in vc1_decode_i_blocks()
2576 s->current_picture.qscale_table[mb_pos] = v->pq; in vc1_decode_i_blocks()
2578 s->current_picture.motion_val[1][s->block_index[i]][0] = 0; in vc1_decode_i_blocks()
2579 s->current_picture.motion_val[1][s->block_index[i]][1] = 0; in vc1_decode_i_blocks()
2583 cbp = get_vlc2(&v->s.gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2); in vc1_decode_i_blocks()
2584 v->s.ac_pred = get_bits1(&v->s.gb); in vc1_decode_i_blocks()
2587 v->mb_type[0][s->block_index[k]] = 1; in vc1_decode_i_blocks()
2589 val = ((cbp >> (5 - k)) & 1); in vc1_decode_i_blocks()
2592 int pred = vc1_coded_block_pred(&v->s, k, &coded_val); in vc1_decode_i_blocks()
2596 cbp |= val << (5 - k); in vc1_decode_i_blocks()
2598 …vc1_decode_i_block(v, v->block[v->cur_blk_idx][block_map[k]], k, val, (k < 4) ? v->codingset : v->… in vc1_decode_i_blocks()
2600 if (CONFIG_GRAY && k > 3 && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_i_blocks()
2602 v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][block_map[k]]); in vc1_decode_i_blocks()
2605 if (v->overlap && v->pq >= 9) { in vc1_decode_i_blocks()
2606 ff_vc1_i_overlap_filter(v); in vc1_decode_i_blocks()
2607 if (v->rangeredfrm) in vc1_decode_i_blocks()
2610 v->block[v->cur_blk_idx][block_map[k]][j] *= 2; in vc1_decode_i_blocks()
2611 vc1_put_blocks_clamped(v, 1); in vc1_decode_i_blocks()
2613 if (v->rangeredfrm) in vc1_decode_i_blocks()
2616v->block[v->cur_blk_idx][block_map[k]][j] = (v->block[v->cur_blk_idx][block_map[k]][j] - 64) * 2; in vc1_decode_i_blocks()
2617 vc1_put_blocks_clamped(v, 0); in vc1_decode_i_blocks()
2620 if (v->s.loop_filter) in vc1_decode_i_blocks()
2621 ff_vc1_i_loop_filter(v); in vc1_decode_i_blocks()
2623 if (get_bits_left(&s->gb) < 0) { in vc1_decode_i_blocks()
2624 ff_er_add_slice(&s->er, 0, 0, s->mb_x, s->mb_y, ER_MB_ERROR); in vc1_decode_i_blocks()
2625 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", in vc1_decode_i_blocks()
2626 get_bits_count(&s->gb), s->gb.size_in_bits); in vc1_decode_i_blocks()
2630 v->topleft_blk_idx = (v->topleft_blk_idx + 1) % (v->end_mb_x + 2); in vc1_decode_i_blocks()
2631 v->top_blk_idx = (v->top_blk_idx + 1) % (v->end_mb_x + 2); in vc1_decode_i_blocks()
2632 v->left_blk_idx = (v->left_blk_idx + 1) % (v->end_mb_x + 2); in vc1_decode_i_blocks()
2633 v->cur_blk_idx = (v->cur_blk_idx + 1) % (v->end_mb_x + 2); in vc1_decode_i_blocks()
2635 if (!v->s.loop_filter) in vc1_decode_i_blocks()
2636 ff_mpeg_draw_horiz_band(s, s->mb_y * 16, 16); in vc1_decode_i_blocks()
2637 else if (s->mb_y) in vc1_decode_i_blocks()
2638 ff_mpeg_draw_horiz_band(s, (s->mb_y - 1) * 16, 16); in vc1_decode_i_blocks()
2640 s->first_slice_line = 0; in vc1_decode_i_blocks()
2642 if (v->s.loop_filter) in vc1_decode_i_blocks()
2643 ff_mpeg_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16); in vc1_decode_i_blocks()
2645 /* This is intentionally mb_height and not end_mb_y - unlike in advanced in vc1_decode_i_blocks()
2647 ff_er_add_slice(&s->er, 0, 0, s->mb_width - 1, s->mb_height - 1, ER_MB_END); in vc1_decode_i_blocks()
2650 /** Decode blocks of I-frame for advanced profile
2652 static int vc1_decode_i_blocks_adv(VC1Context *v) in vc1_decode_i_blocks_adv() argument
2655 MpegEncContext *s = &v->s; in vc1_decode_i_blocks_adv()
2661 GetBitContext *gb = &s->gb; in vc1_decode_i_blocks_adv()
2667 switch (v->y_ac_table_index) { in vc1_decode_i_blocks_adv()
2669 v->codingset = (v->pqindex <= 8) ? CS_HIGH_RATE_INTRA : CS_LOW_MOT_INTRA; in vc1_decode_i_blocks_adv()
2672 v->codingset = CS_HIGH_MOT_INTRA; in vc1_decode_i_blocks_adv()
2675 v->codingset = CS_MID_RATE_INTRA; in vc1_decode_i_blocks_adv()
2679 switch (v->c_ac_table_index) { in vc1_decode_i_blocks_adv()
2681 v->codingset2 = (v->pqindex <= 8) ? CS_HIGH_RATE_INTER : CS_LOW_MOT_INTER; in vc1_decode_i_blocks_adv()
2684 v->codingset2 = CS_HIGH_MOT_INTER; in vc1_decode_i_blocks_adv()
2687 v->codingset2 = CS_MID_RATE_INTER; in vc1_decode_i_blocks_adv()
2692 s->mb_x = s->mb_y = 0; in vc1_decode_i_blocks_adv()
2693 s->mb_intra = 1; in vc1_decode_i_blocks_adv()
2694 s->first_slice_line = 1; in vc1_decode_i_blocks_adv()
2695 s->mb_y = s->start_mb_y; in vc1_decode_i_blocks_adv()
2696 if (s->start_mb_y) { in vc1_decode_i_blocks_adv()
2697 s->mb_x = 0; in vc1_decode_i_blocks_adv()
2698 init_block_index(v); in vc1_decode_i_blocks_adv()
2699 memset(&s->coded_block[s->block_index[0] - s->b8_stride], 0, in vc1_decode_i_blocks_adv()
2700 (1 + s->b8_stride) * sizeof(*s->coded_block)); in vc1_decode_i_blocks_adv()
2702 for (; s->mb_y < s->end_mb_y; s->mb_y++) { in vc1_decode_i_blocks_adv()
2703 s->mb_x = 0; in vc1_decode_i_blocks_adv()
2704 init_block_index(v); in vc1_decode_i_blocks_adv()
2705 for (;s->mb_x < s->mb_width; s->mb_x++) { in vc1_decode_i_blocks_adv()
2706 mquant = v->pq; in vc1_decode_i_blocks_adv()
2708 s->bdsp.clear_blocks(v->block[v->cur_blk_idx][0]); in vc1_decode_i_blocks_adv()
2709 mb_pos = s->mb_x + s->mb_y * s->mb_stride; in vc1_decode_i_blocks_adv()
2710 s->current_picture.mb_type[mb_pos + v->mb_off] = MB_TYPE_INTRA; in vc1_decode_i_blocks_adv()
2712 s->current_picture.motion_val[1][s->block_index[i] + v->blocks_off][0] = 0; in vc1_decode_i_blocks_adv()
2713 s->current_picture.motion_val[1][s->block_index[i] + v->blocks_off][1] = 0; in vc1_decode_i_blocks_adv()
2717 if (v->fieldtx_is_raw) in vc1_decode_i_blocks_adv()
2718 v->fieldtx_plane[mb_pos] = get_bits1(&v->s.gb); in vc1_decode_i_blocks_adv()
2719 if (get_bits_left(&v->s.gb) <= 1) { in vc1_decode_i_blocks_adv()
2720 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_x, s->mb_y, ER_MB_ERROR); in vc1_decode_i_blocks_adv()
2724 cbp = get_vlc2(&v->s.gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2); in vc1_decode_i_blocks_adv()
2725 if (v->acpred_is_raw) in vc1_decode_i_blocks_adv()
2726 v->s.ac_pred = get_bits1(&v->s.gb); in vc1_decode_i_blocks_adv()
2728 v->s.ac_pred = v->acpred_plane[mb_pos]; in vc1_decode_i_blocks_adv()
2730 if (v->condover == CONDOVER_SELECT && v->overflg_is_raw) in vc1_decode_i_blocks_adv()
2731 v->over_flags_plane[mb_pos] = get_bits1(&v->s.gb); in vc1_decode_i_blocks_adv()
2735 s->current_picture.qscale_table[mb_pos] = mquant; in vc1_decode_i_blocks_adv()
2736 /* Set DC scale - y and c use the same */ in vc1_decode_i_blocks_adv()
2737 s->y_dc_scale = s->y_dc_scale_table[FFABS(mquant)]; in vc1_decode_i_blocks_adv()
2738 s->c_dc_scale = s->c_dc_scale_table[FFABS(mquant)]; in vc1_decode_i_blocks_adv()
2741 v->mb_type[0][s->block_index[k]] = 1; in vc1_decode_i_blocks_adv()
2743 val = ((cbp >> (5 - k)) & 1); in vc1_decode_i_blocks_adv()
2746 int pred = vc1_coded_block_pred(&v->s, k, &coded_val); in vc1_decode_i_blocks_adv()
2750 cbp |= val << (5 - k); in vc1_decode_i_blocks_adv()
2752 v->a_avail = !s->first_slice_line || (k == 2 || k == 3); in vc1_decode_i_blocks_adv()
2753 v->c_avail = !!s->mb_x || (k == 1 || k == 3); in vc1_decode_i_blocks_adv()
2755 vc1_decode_i_block_adv(v, v->block[v->cur_blk_idx][block_map[k]], k, val, in vc1_decode_i_blocks_adv()
2756 (k < 4) ? v->codingset : v->codingset2, mquant); in vc1_decode_i_blocks_adv()
2758 if (CONFIG_GRAY && k > 3 && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) in vc1_decode_i_blocks_adv()
2760 v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][block_map[k]]); in vc1_decode_i_blocks_adv()
2763 if (v->overlap && (v->pq >= 9 || v->condover != CONDOVER_NONE)) in vc1_decode_i_blocks_adv()
2764 ff_vc1_i_overlap_filter(v); in vc1_decode_i_blocks_adv()
2765 vc1_put_blocks_clamped(v, 1); in vc1_decode_i_blocks_adv()
2766 if (v->s.loop_filter) in vc1_decode_i_blocks_adv()
2767 ff_vc1_i_loop_filter(v); in vc1_decode_i_blocks_adv()
2769 if (get_bits_left(&s->gb) < 0) { in vc1_decode_i_blocks_adv()
2771 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_x, s->mb_y, ER_MB_ERROR); in vc1_decode_i_blocks_adv()
2772 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", in vc1_decode_i_blocks_adv()
2773 get_bits_count(&s->gb), s->gb.size_in_bits); in vc1_decode_i_blocks_adv()
2776 inc_blk_idx(v->topleft_blk_idx); in vc1_decode_i_blocks_adv()
2777 inc_blk_idx(v->top_blk_idx); in vc1_decode_i_blocks_adv()
2778 inc_blk_idx(v->left_blk_idx); in vc1_decode_i_blocks_adv()
2779 inc_blk_idx(v->cur_blk_idx); in vc1_decode_i_blocks_adv()
2781 if (!v->s.loop_filter) in vc1_decode_i_blocks_adv()
2782 ff_mpeg_draw_horiz_band(s, s->mb_y * 16, 16); in vc1_decode_i_blocks_adv()
2783 else if (s->mb_y) in vc1_decode_i_blocks_adv()
2784 ff_mpeg_draw_horiz_band(s, (s->mb_y-1) * 16, 16); in vc1_decode_i_blocks_adv()
2785 s->first_slice_line = 0; in vc1_decode_i_blocks_adv()
2788 if (v->s.loop_filter) in vc1_decode_i_blocks_adv()
2789 ff_mpeg_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16); in vc1_decode_i_blocks_adv()
2790 ff_er_add_slice(&s->er, 0, s->start_mb_y << v->field_mode, s->mb_width - 1, in vc1_decode_i_blocks_adv()
2791 (s->end_mb_y << v->field_mode) - 1, ER_MB_END); in vc1_decode_i_blocks_adv()
2795 static void vc1_decode_p_blocks(VC1Context *v) in vc1_decode_p_blocks() argument
2797 MpegEncContext *s = &v->s; in vc1_decode_p_blocks()
2801 switch (v->c_ac_table_index) { in vc1_decode_p_blocks()
2803 v->codingset = (v->pqindex <= 8) ? CS_HIGH_RATE_INTRA : CS_LOW_MOT_INTRA; in vc1_decode_p_blocks()
2806 v->codingset = CS_HIGH_MOT_INTRA; in vc1_decode_p_blocks()
2809 v->codingset = CS_MID_RATE_INTRA; in vc1_decode_p_blocks()
2813 switch (v->c_ac_table_index) { in vc1_decode_p_blocks()
2815 v->codingset2 = (v->pqindex <= 8) ? CS_HIGH_RATE_INTER : CS_LOW_MOT_INTER; in vc1_decode_p_blocks()
2818 v->codingset2 = CS_HIGH_MOT_INTER; in vc1_decode_p_blocks()
2821 v->codingset2 = CS_MID_RATE_INTER; in vc1_decode_p_blocks()
2825 apply_loop_filter = s->loop_filter && !(s->avctx->skip_loop_filter >= AVDISCARD_NONKEY); in vc1_decode_p_blocks()
2826 s->first_slice_line = 1; in vc1_decode_p_blocks()
2827 memset(v->cbp_base, 0, sizeof(v->cbp_base[0]) * 3 * s->mb_stride); in vc1_decode_p_blocks()
2828 for (s->mb_y = s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) { in vc1_decode_p_blocks()
2829 s->mb_x = 0; in vc1_decode_p_blocks()
2830 init_block_index(v); in vc1_decode_p_blocks()
2831 for (; s->mb_x < s->mb_width; s->mb_x++) { in vc1_decode_p_blocks()
2834 … if (v->fcm == ILACE_FIELD || (v->fcm == PROGRESSIVE && v->mv_type_is_raw) || v->skip_is_raw) in vc1_decode_p_blocks()
2835 if (get_bits_left(&v->s.gb) <= 1) { in vc1_decode_p_blocks()
2836 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_x, s->mb_y, ER_MB_ERROR); in vc1_decode_p_blocks()
2840 if (v->fcm == ILACE_FIELD) { in vc1_decode_p_blocks()
2841 vc1_decode_p_mb_intfi(v); in vc1_decode_p_blocks()
2843 ff_vc1_p_loop_filter(v); in vc1_decode_p_blocks()
2844 } else if (v->fcm == ILACE_FRAME) { in vc1_decode_p_blocks()
2845 vc1_decode_p_mb_intfr(v); in vc1_decode_p_blocks()
2847 ff_vc1_p_intfr_loop_filter(v); in vc1_decode_p_blocks()
2849 vc1_decode_p_mb(v); in vc1_decode_p_blocks()
2851 ff_vc1_p_loop_filter(v); in vc1_decode_p_blocks()
2853 if (get_bits_left(&s->gb) < 0 || get_bits_count(&s->gb) < 0) { in vc1_decode_p_blocks()
2855 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_x, s->mb_y, ER_MB_ERROR); in vc1_decode_p_blocks()
2856 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n", in vc1_decode_p_blocks()
2857 get_bits_count(&s->gb), s->gb.size_in_bits, s->mb_x, s->mb_y); in vc1_decode_p_blocks()
2860 inc_blk_idx(v->topleft_blk_idx); in vc1_decode_p_blocks()
2861 inc_blk_idx(v->top_blk_idx); in vc1_decode_p_blocks()
2862 inc_blk_idx(v->left_blk_idx); in vc1_decode_p_blocks()
2863 inc_blk_idx(v->cur_blk_idx); in vc1_decode_p_blocks()
2865 memmove(v->cbp_base, in vc1_decode_p_blocks()
2866 v->cbp - s->mb_stride, in vc1_decode_p_blocks()
2867 sizeof(v->cbp_base[0]) * 2 * s->mb_stride); in vc1_decode_p_blocks()
2868 memmove(v->ttblk_base, in vc1_decode_p_blocks()
2869 v->ttblk - s->mb_stride, in vc1_decode_p_blocks()
2870 sizeof(v->ttblk_base[0]) * 2 * s->mb_stride); in vc1_decode_p_blocks()
2871 memmove(v->is_intra_base, in vc1_decode_p_blocks()
2872 v->is_intra - s->mb_stride, in vc1_decode_p_blocks()
2873 sizeof(v->is_intra_base[0]) * 2 * s->mb_stride); in vc1_decode_p_blocks()
2874 memmove(v->luma_mv_base, in vc1_decode_p_blocks()
2875 v->luma_mv - s->mb_stride, in vc1_decode_p_blocks()
2876 sizeof(v->luma_mv_base[0]) * 2 * s->mb_stride); in vc1_decode_p_blocks()
2877 if (s->mb_y != s->start_mb_y) in vc1_decode_p_blocks()
2878 ff_mpeg_draw_horiz_band(s, (s->mb_y - 1) * 16, 16); in vc1_decode_p_blocks()
2879 s->first_slice_line = 0; in vc1_decode_p_blocks()
2881 if (s->end_mb_y >= s->start_mb_y) in vc1_decode_p_blocks()
2882 ff_mpeg_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16); in vc1_decode_p_blocks()
2883 ff_er_add_slice(&s->er, 0, s->start_mb_y << v->field_mode, s->mb_width - 1, in vc1_decode_p_blocks()
2884 (s->end_mb_y << v->field_mode) - 1, ER_MB_END); in vc1_decode_p_blocks()
2887 static void vc1_decode_b_blocks(VC1Context *v) in vc1_decode_b_blocks() argument
2889 MpegEncContext *s = &v->s; in vc1_decode_b_blocks()
2892 switch (v->c_ac_table_index) { in vc1_decode_b_blocks()
2894 v->codingset = (v->pqindex <= 8) ? CS_HIGH_RATE_INTRA : CS_LOW_MOT_INTRA; in vc1_decode_b_blocks()
2897 v->codingset = CS_HIGH_MOT_INTRA; in vc1_decode_b_blocks()
2900 v->codingset = CS_MID_RATE_INTRA; in vc1_decode_b_blocks()
2904 switch (v->c_ac_table_index) { in vc1_decode_b_blocks()
2906 v->codingset2 = (v->pqindex <= 8) ? CS_HIGH_RATE_INTER : CS_LOW_MOT_INTER; in vc1_decode_b_blocks()
2909 v->codingset2 = CS_HIGH_MOT_INTER; in vc1_decode_b_blocks()
2912 v->codingset2 = CS_MID_RATE_INTER; in vc1_decode_b_blocks()
2916 s->first_slice_line = 1; in vc1_decode_b_blocks()
2917 for (s->mb_y = s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) { in vc1_decode_b_blocks()
2918 s->mb_x = 0; in vc1_decode_b_blocks()
2919 init_block_index(v); in vc1_decode_b_blocks()
2920 for (; s->mb_x < s->mb_width; s->mb_x++) { in vc1_decode_b_blocks()
2923 if (v->fcm == ILACE_FIELD || v->skip_is_raw || v->dmb_is_raw) in vc1_decode_b_blocks()
2924 if (get_bits_left(&v->s.gb) <= 1) { in vc1_decode_b_blocks()
2925 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_x, s->mb_y, ER_MB_ERROR); in vc1_decode_b_blocks()
2929 if (v->fcm == ILACE_FIELD) { in vc1_decode_b_blocks()
2930 vc1_decode_b_mb_intfi(v); in vc1_decode_b_blocks()
2931 if (v->s.loop_filter) in vc1_decode_b_blocks()
2932 ff_vc1_b_intfi_loop_filter(v); in vc1_decode_b_blocks()
2933 } else if (v->fcm == ILACE_FRAME) { in vc1_decode_b_blocks()
2934 vc1_decode_b_mb_intfr(v); in vc1_decode_b_blocks()
2935 if (v->s.loop_filter) in vc1_decode_b_blocks()
2936 ff_vc1_p_intfr_loop_filter(v); in vc1_decode_b_blocks()
2938 vc1_decode_b_mb(v); in vc1_decode_b_blocks()
2939 if (v->s.loop_filter) in vc1_decode_b_blocks()
2940 ff_vc1_i_loop_filter(v); in vc1_decode_b_blocks()
2942 if (get_bits_left(&s->gb) < 0 || get_bits_count(&s->gb) < 0) { in vc1_decode_b_blocks()
2944 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_x, s->mb_y, ER_MB_ERROR); in vc1_decode_b_blocks()
2945 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n", in vc1_decode_b_blocks()
2946 get_bits_count(&s->gb), s->gb.size_in_bits, s->mb_x, s->mb_y); in vc1_decode_b_blocks()
2950 memmove(v->cbp_base, in vc1_decode_b_blocks()
2951 v->cbp - s->mb_stride, in vc1_decode_b_blocks()
2952 sizeof(v->cbp_base[0]) * 2 * s->mb_stride); in vc1_decode_b_blocks()
2953 memmove(v->ttblk_base, in vc1_decode_b_blocks()
2954 v->ttblk - s->mb_stride, in vc1_decode_b_blocks()
2955 sizeof(v->ttblk_base[0]) * 2 * s->mb_stride); in vc1_decode_b_blocks()
2956 memmove(v->is_intra_base, in vc1_decode_b_blocks()
2957 v->is_intra - s->mb_stride, in vc1_decode_b_blocks()
2958 sizeof(v->is_intra_base[0]) * 2 * s->mb_stride); in vc1_decode_b_blocks()
2959 if (!v->s.loop_filter) in vc1_decode_b_blocks()
2960 ff_mpeg_draw_horiz_band(s, s->mb_y * 16, 16); in vc1_decode_b_blocks()
2961 else if (s->mb_y) in vc1_decode_b_blocks()
2962 ff_mpeg_draw_horiz_band(s, (s->mb_y - 1) * 16, 16); in vc1_decode_b_blocks()
2963 s->first_slice_line = 0; in vc1_decode_b_blocks()
2965 if (v->s.loop_filter) in vc1_decode_b_blocks()
2966 ff_mpeg_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16); in vc1_decode_b_blocks()
2967 ff_er_add_slice(&s->er, 0, s->start_mb_y << v->field_mode, s->mb_width - 1, in vc1_decode_b_blocks()
2968 (s->end_mb_y << v->field_mode) - 1, ER_MB_END); in vc1_decode_b_blocks()
2971 static void vc1_decode_skip_blocks(VC1Context *v) in vc1_decode_skip_blocks() argument
2973 MpegEncContext *s = &v->s; in vc1_decode_skip_blocks()
2975 if (!v->s.last_picture.f->data[0]) in vc1_decode_skip_blocks()
2978 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, ER_MB_END); in vc1_decode_skip_blocks()
2979 s->first_slice_line = 1; in vc1_decode_skip_blocks()
2980 for (s->mb_y = s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) { in vc1_decode_skip_blocks()
2981 s->mb_x = 0; in vc1_decode_skip_blocks()
2982 init_block_index(v); in vc1_decode_skip_blocks()
2984 … memcpy(s->dest[0], s->last_picture.f->data[0] + s->mb_y * 16 * s->linesize, s->linesize * 16); in vc1_decode_skip_blocks()
2985 … memcpy(s->dest[1], s->last_picture.f->data[1] + s->mb_y * 8 * s->uvlinesize, s->uvlinesize * 8); in vc1_decode_skip_blocks()
2986 … memcpy(s->dest[2], s->last_picture.f->data[2] + s->mb_y * 8 * s->uvlinesize, s->uvlinesize * 8); in vc1_decode_skip_blocks()
2987 ff_mpeg_draw_horiz_band(s, s->mb_y * 16, 16); in vc1_decode_skip_blocks()
2988 s->first_slice_line = 0; in vc1_decode_skip_blocks()
2990 s->pict_type = AV_PICTURE_TYPE_P; in vc1_decode_skip_blocks()
2993 void ff_vc1_decode_blocks(VC1Context *v) in ff_vc1_decode_blocks() argument
2996 v->s.esc3_level_length = 0; in ff_vc1_decode_blocks()
2997 if (v->x8_type) { in ff_vc1_decode_blocks()
2998 ff_intrax8_decode_picture(&v->x8, &v->s.current_picture, in ff_vc1_decode_blocks()
2999 &v->s.gb, &v->s.mb_x, &v->s.mb_y, in ff_vc1_decode_blocks()
3000 2 * v->pq + v->halfpq, v->pq * !v->pquantizer, in ff_vc1_decode_blocks()
3001 v->s.loop_filter, v->s.low_delay); in ff_vc1_decode_blocks()
3003 ff_er_add_slice(&v->s.er, 0, 0, in ff_vc1_decode_blocks()
3004 (v->s.mb_x >> 1) - 1, (v->s.mb_y >> 1) - 1, in ff_vc1_decode_blocks()
3007 v->cur_blk_idx = 0; in ff_vc1_decode_blocks()
3008 v->left_blk_idx = -1; in ff_vc1_decode_blocks()
3009 v->topleft_blk_idx = 1; in ff_vc1_decode_blocks()
3010 v->top_blk_idx = 2; in ff_vc1_decode_blocks()
3011 switch (v->s.pict_type) { in ff_vc1_decode_blocks()
3013 if (v->profile == PROFILE_ADVANCED) in ff_vc1_decode_blocks()
3014 vc1_decode_i_blocks_adv(v); in ff_vc1_decode_blocks()
3016 vc1_decode_i_blocks(v); in ff_vc1_decode_blocks()
3019 if (v->p_frame_skipped) in ff_vc1_decode_blocks()
3020 vc1_decode_skip_blocks(v); in ff_vc1_decode_blocks()
3022 vc1_decode_p_blocks(v); in ff_vc1_decode_blocks()
3025 if (v->bi_type) { in ff_vc1_decode_blocks()
3026 if (v->profile == PROFILE_ADVANCED) in ff_vc1_decode_blocks()
3027 vc1_decode_i_blocks_adv(v); in ff_vc1_decode_blocks()
3029 vc1_decode_i_blocks(v); in ff_vc1_decode_blocks()
3031 vc1_decode_b_blocks(v); in ff_vc1_decode_blocks()