summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2021-08-28 01:57:31 +0200
committerPaul B Mahol <onemda@gmail.com>2021-08-31 21:22:17 +0200
commit034133a0df5f327aba36ee25db9452cda9e1a62b (patch)
tree7158d565f3b0c48cb42c90b093b4427c6cdf182d /libavcodec
parent9f420163c6207b9c54badd30056974a6b3450bfd (diff)
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.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/mlpdec.c16
1 files 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: