|
@@ -187,39 +187,6 @@ static void vc1_loop_filter_iblk(VC1Context *v, int pq) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** Put block onto picture |
|
|
|
|
|
*/ |
|
|
|
|
|
static void vc1_put_block(VC1Context *v, DCTELEM block[6][64]) |
|
|
|
|
|
{ |
|
|
|
|
|
uint8_t *Y; |
|
|
|
|
|
int ys, us, vs; |
|
|
|
|
|
DSPContext *dsp = &v->s.dsp; |
|
|
|
|
|
|
|
|
|
|
|
if(v->rangeredfrm) { |
|
|
|
|
|
int i, j, k; |
|
|
|
|
|
for(k = 0; k < 6; k++) |
|
|
|
|
|
for(j = 0; j < 8; j++) |
|
|
|
|
|
for(i = 0; i < 8; i++) |
|
|
|
|
|
block[k][i + j*8] = (block[k][i + j*8] - 64) << 1; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
ys = v->s.current_picture.linesize[0]; |
|
|
|
|
|
us = v->s.current_picture.linesize[1]; |
|
|
|
|
|
vs = v->s.current_picture.linesize[2]; |
|
|
|
|
|
Y = v->s.dest[0]; |
|
|
|
|
|
|
|
|
|
|
|
dsp->put_pixels_clamped(block[0], Y, ys); |
|
|
|
|
|
dsp->put_pixels_clamped(block[1], Y + 8, ys); |
|
|
|
|
|
Y += ys * 8; |
|
|
|
|
|
dsp->put_pixels_clamped(block[2], Y, ys); |
|
|
|
|
|
dsp->put_pixels_clamped(block[3], Y + 8, ys); |
|
|
|
|
|
|
|
|
|
|
|
if(!(v->s.flags & CODEC_FLAG_GRAY)) { |
|
|
|
|
|
dsp->put_pixels_clamped(block[4], v->s.dest[1], us); |
|
|
|
|
|
dsp->put_pixels_clamped(block[5], v->s.dest[2], vs); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** Do motion compensation over 1 macroblock |
|
|
/** Do motion compensation over 1 macroblock |
|
|
* Mostly adapted hpel_motion and qpel_motion from mpegvideo.c |
|
|
* Mostly adapted hpel_motion and qpel_motion from mpegvideo.c |
|
|
*/ |
|
|
*/ |
|
@@ -2627,7 +2594,14 @@ static void vc1_decode_i_blocks(VC1Context *v) |
|
|
s->mb_x = 0; |
|
|
s->mb_x = 0; |
|
|
ff_init_block_index(s); |
|
|
ff_init_block_index(s); |
|
|
for(; s->mb_x < s->mb_width; s->mb_x++) { |
|
|
for(; s->mb_x < s->mb_width; s->mb_x++) { |
|
|
|
|
|
uint8_t *dst[6]; |
|
|
ff_update_block_index(s); |
|
|
ff_update_block_index(s); |
|
|
|
|
|
dst[0] = s->dest[0]; |
|
|
|
|
|
dst[1] = dst[0] + 8; |
|
|
|
|
|
dst[2] = s->dest[0] + s->linesize * 8; |
|
|
|
|
|
dst[3] = dst[2] + 8; |
|
|
|
|
|
dst[4] = s->dest[1]; |
|
|
|
|
|
dst[5] = s->dest[2]; |
|
|
s->dsp.clear_blocks(s->block[0]); |
|
|
s->dsp.clear_blocks(s->block[0]); |
|
|
mb_pos = s->mb_x + s->mb_y * s->mb_width; |
|
|
mb_pos = s->mb_x + s->mb_y * s->mb_width; |
|
|
s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; |
|
|
s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; |
|
@@ -2651,13 +2625,17 @@ static void vc1_decode_i_blocks(VC1Context *v) |
|
|
|
|
|
|
|
|
vc1_decode_i_block(v, s->block[k], k, val, (k<4)? v->codingset : v->codingset2); |
|
|
vc1_decode_i_block(v, s->block[k], k, val, (k<4)? v->codingset : v->codingset2); |
|
|
|
|
|
|
|
|
|
|
|
if (k > 3 && (s->flags & CODEC_FLAG_GRAY)) continue; |
|
|
v->vc1dsp.vc1_inv_trans_8x8(s->block[k]); |
|
|
v->vc1dsp.vc1_inv_trans_8x8(s->block[k]); |
|
|
if(v->pq >= 9 && v->overlap) { |
|
|
if(v->pq >= 9 && v->overlap) { |
|
|
for(j = 0; j < 64; j++) s->block[k][j] += 128; |
|
|
|
|
|
|
|
|
if (v->rangeredfrm) for(j = 0; j < 64; j++) s->block[k][j] <<= 1; |
|
|
|
|
|
s->dsp.put_signed_pixels_clamped(s->block[k], dst[k], k & 4 ? s->uvlinesize : s->linesize); |
|
|
|
|
|
} else { |
|
|
|
|
|
if (v->rangeredfrm) for(j = 0; j < 64; j++) s->block[k][j] = (s->block[k][j] - 64) << 1; |
|
|
|
|
|
s->dsp.put_pixels_clamped(s->block[k], dst[k], k & 4 ? s->uvlinesize : s->linesize); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
vc1_put_block(v, s->block); |
|
|
|
|
|
if(v->pq >= 9 && v->overlap) { |
|
|
if(v->pq >= 9 && v->overlap) { |
|
|
if(s->mb_x) { |
|
|
if(s->mb_x) { |
|
|
v->vc1dsp.vc1_h_overlap(s->dest[0], s->linesize); |
|
|
v->vc1dsp.vc1_h_overlap(s->dest[0], s->linesize); |
|
|