|
|
|
@ -136,6 +136,7 @@ typedef struct Vp3DecodeContext { |
|
|
|
|
DSPContext dsp; |
|
|
|
|
int flipped_image; |
|
|
|
|
int last_slice_end; |
|
|
|
|
int skip_loop_filter; |
|
|
|
|
|
|
|
|
|
int qps[3]; |
|
|
|
|
int nqps; |
|
|
|
@ -1494,7 +1495,8 @@ static void render_slice(Vp3DecodeContext *s, int slice) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Filter up to the last row in the superblock row
|
|
|
|
|
apply_loop_filter(s, plane, 4*sb_y - !!sb_y, FFMIN(4*sb_y+3, fragment_height-1)); |
|
|
|
|
if (!s->skip_loop_filter) |
|
|
|
|
apply_loop_filter(s, plane, 4*sb_y - !!sb_y, FFMIN(4*sb_y+3, fragment_height-1)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1749,6 +1751,9 @@ static int vp3_decode_frame(AVCodecContext *avctx, |
|
|
|
|
s->keyframe?"key":"", counter, s->qps[0]); |
|
|
|
|
counter++; |
|
|
|
|
|
|
|
|
|
s->skip_loop_filter = !s->filter_limit_values[s->qps[0]] || |
|
|
|
|
avctx->skip_loop_filter >= (s->keyframe ? AVDISCARD_ALL : AVDISCARD_NONKEY); |
|
|
|
|
|
|
|
|
|
if (s->qps[0] != s->last_qps[0]) |
|
|
|
|
init_loop_filter(s); |
|
|
|
|
|
|
|
|
|