comparison vc1dec.c @ 12142:7e93f85e48bf libavcodec

vc1: Fix ordering of loop filter for I/B frames All horizontal edges must be filtered before all vertical edges
author conrad
date Sun, 11 Jul 2010 22:52:51 +0000
parents c3682c0606e3
children db36486a6f89
comparison
equal deleted inserted replaced
12141:c3682c0606e3 12142:7e93f85e48bf
160 160
161 /** @} */ //Bitplane group 161 /** @} */ //Bitplane group
162 162
163 static void vc1_loop_filter_iblk(MpegEncContext *s, int pq) 163 static void vc1_loop_filter_iblk(MpegEncContext *s, int pq)
164 { 164 {
165 int i, j; 165 int j;
166 if(!s->first_slice_line) 166 if (!s->first_slice_line) {
167 s->dsp.vc1_v_loop_filter16(s->dest[0], s->linesize, pq); 167 s->dsp.vc1_v_loop_filter16(s->dest[0], s->linesize, pq);
168 if (s->mb_x)
169 s->dsp.vc1_h_loop_filter16(s->dest[0] - 16*s->linesize, s->linesize, pq);
170 s->dsp.vc1_h_loop_filter16(s->dest[0] - 16*s->linesize+8, s->linesize, pq);
171 for(j = 0; j < 2; j++){
172 s->dsp.vc1_v_loop_filter8(s->dest[j+1], s->uvlinesize, pq);
173 if (s->mb_x)
174 s->dsp.vc1_h_loop_filter8(s->dest[j+1]-8*s->uvlinesize, s->uvlinesize, pq);
175 }
176 }
168 s->dsp.vc1_v_loop_filter16(s->dest[0] + 8*s->linesize, s->linesize, pq); 177 s->dsp.vc1_v_loop_filter16(s->dest[0] + 8*s->linesize, s->linesize, pq);
169 for(i = !s->mb_x*8; i < 16; i += 8) 178
170 s->dsp.vc1_h_loop_filter16(s->dest[0] + i, s->linesize, pq); 179 if (s->mb_y == s->mb_height-1) {
171 for(j = 0; j < 2; j++){ 180 if (s->mb_x) {
172 if(!s->first_slice_line) 181 s->dsp.vc1_h_loop_filter16(s->dest[0], s->linesize, pq);
173 s->dsp.vc1_v_loop_filter8(s->dest[j+1], s->uvlinesize, pq); 182 s->dsp.vc1_h_loop_filter8(s->dest[1], s->uvlinesize, pq);
174 if(s->mb_x) 183 s->dsp.vc1_h_loop_filter8(s->dest[2], s->uvlinesize, pq);
175 s->dsp.vc1_h_loop_filter8(s->dest[j+1], s->uvlinesize, pq); 184 }
185 s->dsp.vc1_h_loop_filter16(s->dest[0] + 8, s->linesize, pq);
176 } 186 }
177 } 187 }
178 188
179 /** Put block onto picture 189 /** Put block onto picture
180 */ 190 */