Mercurial > libavcodec.hg
comparison vc1dec.c @ 11796:f917cd286e41 libavcodec
321l: do not use shifted s->linesize instead of correct s->uvlinesize.
This should fix chroma issues in WMV3/VC-1 decoder with avfilter enabled.
author | kostya |
---|---|
date | Sat, 29 May 2010 07:28:24 +0000 |
parents | 7dd2a45249a9 |
children | 669bf7f6c986 |
comparison
equal
deleted
inserted
replaced
11795:cb40fa41b796 | 11796:f917cd286e41 |
---|---|
2223 | 2223 |
2224 vc1_decode_intra_block(v, s->block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset); | 2224 vc1_decode_intra_block(v, s->block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset); |
2225 if((i>3) && (s->flags & CODEC_FLAG_GRAY)) continue; | 2225 if((i>3) && (s->flags & CODEC_FLAG_GRAY)) continue; |
2226 s->dsp.vc1_inv_trans_8x8(s->block[i]); | 2226 s->dsp.vc1_inv_trans_8x8(s->block[i]); |
2227 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; | 2227 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; |
2228 s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2228 s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); |
2229 if(v->pq >= 9 && v->overlap) { | 2229 if(v->pq >= 9 && v->overlap) { |
2230 if(v->c_avail) | 2230 if(v->c_avail) |
2231 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2231 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); |
2232 if(v->a_avail) | 2232 if(v->a_avail) |
2233 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2233 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); |
2234 } | 2234 } |
2235 if(apply_loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){ | 2235 if(apply_loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){ |
2236 int left_cbp, top_cbp; | 2236 int left_cbp, top_cbp; |
2237 if(i & 4){ | 2237 if(i & 4){ |
2238 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); | 2238 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); |
2357 s->dsp.vc1_inv_trans_8x8(s->block[i]); | 2357 s->dsp.vc1_inv_trans_8x8(s->block[i]); |
2358 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; | 2358 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; |
2359 s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); | 2359 s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); |
2360 if(v->pq >= 9 && v->overlap) { | 2360 if(v->pq >= 9 && v->overlap) { |
2361 if(v->c_avail) | 2361 if(v->c_avail) |
2362 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2362 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); |
2363 if(v->a_avail) | 2363 if(v->a_avail) |
2364 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2364 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); |
2365 } | 2365 } |
2366 if(v->s.loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){ | 2366 if(v->s.loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){ |
2367 int left_cbp, top_cbp; | 2367 int left_cbp, top_cbp; |
2368 if(i & 4){ | 2368 if(i & 4){ |
2369 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); | 2369 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); |
2559 | 2559 |
2560 vc1_decode_intra_block(v, s->block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset); | 2560 vc1_decode_intra_block(v, s->block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset); |
2561 if((i>3) && (s->flags & CODEC_FLAG_GRAY)) continue; | 2561 if((i>3) && (s->flags & CODEC_FLAG_GRAY)) continue; |
2562 s->dsp.vc1_inv_trans_8x8(s->block[i]); | 2562 s->dsp.vc1_inv_trans_8x8(s->block[i]); |
2563 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; | 2563 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; |
2564 s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2564 s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); |
2565 } else if(val) { | 2565 } else if(val) { |
2566 vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize, (i&4) && (s->flags & CODEC_FLAG_GRAY), 0, 0, 0); | 2566 vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize, (i&4) && (s->flags & CODEC_FLAG_GRAY), 0, 0, 0); |
2567 if(!v->ttmbf && ttmb < 8) ttmb = -1; | 2567 if(!v->ttmbf && ttmb < 8) ttmb = -1; |
2568 first_block = 0; | 2568 first_block = 0; |
2569 } | 2569 } |