[FFmpeg-cvslog] avcodec/mlpdec: reset lossless crc checking when stream ends

Paul B Mahol git at videolan.org
Tue Aug 31 22:23:21 EEST 2021


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Aug 28 01:57:31 2021 +0200| [034133a0df5f327aba36ee25db9452cda9e1a62b] | committer: Paul B Mahol

avcodec/mlpdec: reset lossless crc checking when stream ends

Fixes invalid reports of bad lossless crc.
While here make end of stream message into debug level as it is
not really important to user.
Also wait for new major sync frame as invalid concating of files
may produce invalid files, which cause various errors.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=034133a0df5f327aba36ee25db9452cda9e1a62b
---

 libavcodec/mlpdec.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
index 0fac5ad754..08db5dc63c 100644
--- a/libavcodec/mlpdec.c
+++ b/libavcodec/mlpdec.c
@@ -53,6 +53,8 @@
 typedef struct SubStream {
     /// Set if a valid restart header has been read. Otherwise the substream cannot be decoded.
     uint8_t     restart_seen;
+    /// Set if end of stream is encountered
+    uint8_t     end_of_stream;
 
     //@{
     /** restart header data */
@@ -1286,8 +1288,8 @@ static int read_access_unit(AVCodecContext *avctx, void* data,
             else if (m->avctx->codec_id == AV_CODEC_ID_MLP    && shorten_by != 0xD234)
                 return AVERROR_INVALIDDATA;
 
-            if (substr == m->max_decoded_substream)
-                av_log(m->avctx, AV_LOG_INFO, "End of stream indicated.\n");
+            av_log(m->avctx, AV_LOG_DEBUG, "End of stream indicated.\n");
+            s->end_of_stream = 1;
         }
 
         if (substream_parity_present[substr]) {
@@ -1319,6 +1321,16 @@ next_substr:
     if ((ret = output_data(m, m->max_decoded_substream, data, got_frame_ptr)) < 0)
         return ret;
 
+    for (substr = 0; substr <= m->max_decoded_substream; substr++){
+        SubStream *s = &m->substream[substr];
+
+        if (s->end_of_stream) {
+            s->lossless_check_data = 0xffffffff;
+            s->end_of_stream = 0;
+            m->params_valid = 0;
+        }
+    }
+
     return length;
 
 substream_length_mismatch:



More information about the ffmpeg-cvslog mailing list