diff mbox

[FFmpeg-devel] h264: fix RTSP stream decoding

Message ID C8C315C8-3343-4300-8ED3-482372097A58@gavrushkin.com
State New
Headers show

Commit Message

sergey@gavrushkin.com Jan. 3, 2018, 9:54 a.m. UTC
> The error code returned by decode_extradata_ps() is inconsistent after this
> its not "if any failed" it is returning an error if the last failed 

Sorry, I don't get how it is supposed to work. I just found the previous implementation and checked which commit broke it.

The other possible solution on upper level: 

---------------------------------------

From 9fcd003a095b19b9e2fb5f6af3cc57a9e131f308 Mon Sep 17 00:00:00 2001
From: Sergey Gavrushkin <sergey@gavrushkin.com>
Date: Wed, 3 Jan 2018 12:51:15 +0300
Subject: [PATCH] libavcodec/h264: fix decoding

Fixes ticket #6422. It is a regression fix for an issue that was introduced in commit
98c97994c5b90bdae02accb155eeceeb5224b8ef. Variable err_recognition is
ignored while extradata is decoded and the whole decoding process is
failed due to timeout.

Signed-off-by: Sergey Gavrushkin <sergey@gavrushkin.com>
---
 libavcodec/h264_parse.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--
2.6.4


Thank you, 
Sergey

Comments

Michael Niedermayer Jan. 3, 2018, 10:49 p.m. UTC | #1
On Wed, Jan 03, 2018 at 12:54:03PM +0300, sergey@gavrushkin.com wrote:
> > The error code returned by decode_extradata_ps() is inconsistent after this
> > its not "if any failed" it is returning an error if the last failed 
> 
> Sorry, I don't get how it is supposed to work. I just found the previous implementation and checked which commit broke it.

if a loop running multiple iterations each decoding a "packet"
then a failure of packet n should be treated the same as a failure
of packet n+1
The code after the patch would return failure if the last packet fails
but not if a earlier packet fails

Note this is seperate from continuing to decode all packets.
the code can continue after an error but still declare an error at the end
or it could never decalare an error.
Either way it should not treat the last iteration special


[...]
diff mbox

Patch

diff --git a/libavcodec/h264_parse.c b/libavcodec/h264_parse.c
index fee28d9..403fd39 100644
--- a/libavcodec/h264_parse.c
+++ b/libavcodec/h264_parse.c
@@ -487,7 +487,7 @@  int ff_h264_decode_extradata(const uint8_t *data, int size, H264ParamSets *ps,
     } else {
         *is_avc = 0;
         ret = decode_extradata_ps(data, size, ps, 0, logctx);
-        if (ret < 0)
+        if (ret < 0 && (err_recognition & AV_EF_EXPLODE))
             return ret;
     }
     return size;