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 }