aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2021-08-28 17:07:31 +0200
committerPaul B Mahol <onemda@gmail.com>2021-08-29 00:09:29 +0200
commit5673a4842556b79a92a1ede6e9696506fd4161ad (patch)
tree704a988960fed9e7e3062b977479f63813848d96
parenta4c98c507ed3c729fc92d641b974385f8aa37b33 (diff)
downloadffmpeg-5673a4842556b79a92a1ede6e9696506fd4161ad.tar.gz
avcodec/mlpdec: add flush support
Fixes spurious lossless check failures when seeking.
-rw-r--r--libavcodec/mlpdec.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
index e4992550ee..0fac5ad754 100644
--- a/libavcodec/mlpdec.c
+++ b/libavcodec/mlpdec.c
@@ -1330,6 +1330,18 @@ error:
return AVERROR_INVALIDDATA;
}
+static void mlp_decode_flush(AVCodecContext *avctx)
+{
+ MLPDecodeContext *m = avctx->priv_data;
+
+ m->params_valid = 0;
+ for (int substr = 0; substr <= m->max_decoded_substream; substr++){
+ SubStream *s = &m->substream[substr];
+
+ s->lossless_check_data = 0xffffffff;
+ }
+}
+
#if CONFIG_MLP_DECODER
const AVCodec ff_mlp_decoder = {
.name = "mlp",
@@ -1339,6 +1351,7 @@ const AVCodec ff_mlp_decoder = {
.priv_data_size = sizeof(MLPDecodeContext),
.init = mlp_decode_init,
.decode = read_access_unit,
+ .flush = mlp_decode_flush,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
};
@@ -1352,6 +1365,7 @@ const AVCodec ff_truehd_decoder = {
.priv_data_size = sizeof(MLPDecodeContext),
.init = mlp_decode_init,
.decode = read_access_unit,
+ .flush = mlp_decode_flush,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
};