aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanne Grunau <janne-libav@jannau.net>2014-08-21 13:26:33 +0200
committerJanne Grunau <janne-libav@jannau.net>2014-08-22 13:11:43 +0200
commitdc4b2e7d33903a6b9380e8a84b22b3a20facbb08 (patch)
tree67210aed094a357f062c4d1d437c1ed08ca7d4fb
parentb0bfd09f88da8b7c7666faf0ac7d5e74559dba9f (diff)
downloadffmpeg-dc4b2e7d33903a6b9380e8a84b22b3a20facbb08.tar.gz
rv34: use ff_mpeg_update_thread_context only when decoder is fully initialized
MpegEncContext based decoders are only fully initialized after the first ff_thread_get_buffer() call. The RV30/40 decoders may fail before a frame buffer was requested. ff_mpeg_update_thread_context() fails on half initialized MpegEncContexts. Since this can only happen before a the first frame was decoded there is no need to call ff_mpeg_update_thread_context(). Based on patches by John Stebbins and tested by John Stebbins. CC: libav-stable@libav.org
-rw-r--r--libavcodec/rv34.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c
index 4ed2a33b11..26ab7e4df2 100644
--- a/libavcodec/rv34.c
+++ b/libavcodec/rv34.c
@@ -1555,16 +1555,18 @@ int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecConte
return err;
}
- if ((err = ff_mpeg_update_thread_context(dst, src)))
- return err;
-
r->cur_pts = r1->cur_pts;
r->last_pts = r1->last_pts;
r->next_pts = r1->next_pts;
memset(&r->si, 0, sizeof(r->si));
- return 0;
+ // Do no call ff_mpeg_update_thread_context on a partially initialized
+ // decoder context.
+ if (!s1->linesize)
+ return 0;
+
+ return ff_mpeg_update_thread_context(dst, src);
}
static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n)