diff mbox

[FFmpeg-devel] libavcodec/rv34: error out earlier on missing references

Message ID 20180402212459.22139-1-michael@niedermayer.cc
State Accepted
Commit 6cd81d68c5e4b0ff00288970c4151ff4031c0ea9
Headers show

Commit Message

Michael Niedermayer April 2, 2018, 9:24 p.m. UTC
Fixes visual corruption on seeking

Fixes: downloadTest_clip_24M.rmvb

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavcodec/rv34.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Michael Niedermayer April 7, 2018, 4:45 p.m. UTC | #1
On Mon, Apr 02, 2018 at 11:24:59PM +0200, Michael Niedermayer wrote:
> Fixes visual corruption on seeking
> 
> Fixes: downloadTest_clip_24M.rmvb
> 
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavcodec/rv34.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)

will apply

[...]
diff mbox

Patch

diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c
index f1495fb5a8..d171e6e1bd 100644
--- a/libavcodec/rv34.c
+++ b/libavcodec/rv34.c
@@ -1585,7 +1585,7 @@  int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecConte
 
     // Do no call ff_mpeg_update_thread_context on a partially initialized
     // decoder context.
-    if (!s1->linesize)
+    if (!s1->context_initialized)
         return 0;
 
     return ff_mpeg_update_thread_context(dst, src);
@@ -1733,6 +1733,8 @@  int ff_rv34_decode_frame(AVCodecContext *avctx,
             if ((err = rv34_decoder_realloc(r)) < 0)
                 return err;
         }
+        if (faulty_b)
+            return AVERROR_INVALIDDATA;
         s->pict_type = si.type ? si.type : AV_PICTURE_TYPE_I;
         if (ff_mpv_frame_start(s, s->avctx) < 0)
             return -1;
@@ -1786,8 +1788,6 @@  int ff_rv34_decode_frame(AVCodecContext *avctx,
                "multithreading mode (start MB is %d).\n", si.start);
         return AVERROR_INVALIDDATA;
     }
-    if (faulty_b)
-        return AVERROR_INVALIDDATA;
 
     for(i = 0; i < slice_count; i++){
         int offset  = get_slice_offset(avctx, slices_hdr, i  , slice_count, buf_size);