summaryrefslogtreecommitdiff
path: root/libavcodec/mlpdec.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2021-09-06 23:56:48 +0200
committerPaul B Mahol <onemda@gmail.com>2021-10-03 11:46:53 +0200
commit17130321f3faaa01c7360f904229c7b9b4410703 (patch)
tree642b6e83909c203d629813e0645f0c66ca72f3eb /libavcodec/mlpdec.c
parent114634a51a7ca2ea4d375d62eba55123ce2262d5 (diff)
avcodec/mlpdec: skip decoding substreams if their channels are not to be used
Diffstat (limited to 'libavcodec/mlpdec.c')
-rw-r--r--libavcodec/mlpdec.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
index d56e214e1e..68c270ef52 100644
--- a/libavcodec/mlpdec.c
+++ b/libavcodec/mlpdec.c
@@ -1249,6 +1249,12 @@ static int read_access_unit(AVCodecContext *avctx, void* data,
for (substr = 0; substr <= m->max_decoded_substream; substr++) {
SubStream *s = &m->substream[substr];
+
+ if (substr != m->max_decoded_substream &&
+ m->substream[m->max_decoded_substream].min_channel == 0 &&
+ m->substream[m->max_decoded_substream].max_channel == avctx->channels - 1)
+ goto skip_substr;
+
init_get_bits(&gb, buf, substream_data_len[substr] * 8);
m->matrix_changed = 0;
@@ -1322,6 +1328,7 @@ next_substr:
av_log(m->avctx, AV_LOG_ERROR,
"No restart header present in substream %d.\n", substr);
+skip_substr:
buf += substream_data_len[substr];
}