summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2008-11-29 06:22:31 +0000
committerKostya Shishkov <kostya.shishkov@gmail.com>2008-11-29 06:22:31 +0000
commitde8cac167d52557aa0aced5c013c98f44ade98cf (patch)
tree8bb987a58e5fcb1b0659c909f4699c2a30796001 /libavcodec
parent10ac361827dc1f9a2a355f037d40a2912203acd4 (diff)
Invoke future RV30/40 loop filter for already decoded rows instead of
the whole frame at once. Originally committed as revision 15949 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/rv34.c5
-rw-r--r--libavcodec/rv34.h2
2 files changed, 5 insertions, 2 deletions
diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c
index 9f84c4d976..bd0dfff0b8 100644
--- a/libavcodec/rv34.c
+++ b/libavcodec/rv34.c
@@ -1285,6 +1285,9 @@ static int rv34_decode_slice(RV34DecContext *r, int end, uint8_t* buf, int buf_s
memmove(r->intra_types_hist, r->intra_types, s->b4_stride * 4 * sizeof(*r->intra_types_hist));
memset(r->intra_types, -1, s->b4_stride * 4 * sizeof(*r->intra_types_hist));
+
+ if(r->loop_filter && s->mb_y >= 2)
+ r->loop_filter(r, s->mb_y - 2);
}
if(s->mb_x == s->resync_mb_x)
s->first_slice_line=0;
@@ -1405,7 +1408,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
if(last){
if(r->loop_filter)
- r->loop_filter(r);
+ r->loop_filter(r, s->mb_height - 1);
ff_er_frame_end(s);
MPV_frame_end(s);
if (s->pict_type == FF_B_TYPE || s->low_delay) {
diff --git a/libavcodec/rv34.h b/libavcodec/rv34.h
index 16e0faa423..fc3642d883 100644
--- a/libavcodec/rv34.h
+++ b/libavcodec/rv34.h
@@ -115,7 +115,7 @@ typedef struct RV34DecContext{
int (*parse_slice_header)(struct RV34DecContext *r, GetBitContext *gb, SliceInfo *si);
int (*decode_mb_info)(struct RV34DecContext *r);
int (*decode_intra_types)(struct RV34DecContext *r, GetBitContext *gb, int8_t *dst);
- void (*loop_filter)(struct RV34DecContext *r);
+ void (*loop_filter)(struct RV34DecContext *r, int row);
}RV34DecContext;
/**