From: Paul B Mahol <onemda@gmail.com> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH] avcodec/mlpdec: parse and use substream_info bits Date: Mon, 30 Jan 2023 19:39:24 +0100 Message-ID: <CAPYw7P4oJj4iEVg4sAej_JsFFxP7Kkkgaz9eOV74Q2jNTNeV3Q@mail.gmail.com> (raw) [-- Attachment #1: Type: text/plain, Size: 55 bytes --] Patch attached. Fixes relative recent thd regression. [-- Attachment #2: 0001-avcodec-mlpdec-parse-and-use-substream-info-bits.patch --] [-- Type: text/x-patch, Size: 3612 bytes --] From 1715a7f4b0487c9ecebfedfc796377022a85baec Mon Sep 17 00:00:00 2001 From: Paul B Mahol <onemda@gmail.com> Date: Mon, 30 Jan 2023 19:35:36 +0100 Subject: [PATCH] avcodec/mlpdec: parse and use substream info bits Signed-off-by: Paul B Mahol <onemda@gmail.com> --- libavcodec/mlp_parse.c | 6 +++++- libavcodec/mlp_parse.h | 3 +++ libavcodec/mlpdec.c | 15 ++++++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/libavcodec/mlp_parse.c b/libavcodec/mlp_parse.c index 45715352c2..924c731439 100644 --- a/libavcodec/mlp_parse.c +++ b/libavcodec/mlp_parse.c @@ -159,7 +159,11 @@ int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb) mh->num_substreams = get_bits(gb, 4); - skip_bits_long(gb, 4 + (header_size - 17) * 8); + skip_bits(gb, 2); + mh->extended_substream_info = get_bits(gb, 2); + mh->substream_info = get_bits(gb, 8); + + skip_bits_long(gb, (header_size - 18) * 8); return 0; } diff --git a/libavcodec/mlp_parse.h b/libavcodec/mlp_parse.h index f0d7b41c11..fa6e3d52dc 100644 --- a/libavcodec/mlp_parse.h +++ b/libavcodec/mlp_parse.h @@ -58,6 +58,9 @@ typedef struct MLPHeaderInfo int peak_bitrate; ///< Peak bitrate for VBR, actual bitrate (==peak) for CBR int num_substreams; ///< Number of substreams within stream + + int extended_substream_info; ///< Which substream of substreams carry 16-channel presentation + int substream_info; ///< Which substream of substreams carry 2/6/8-channel presentation } MLPHeaderInfo; static const uint8_t thd_chancount[13] = { diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c index 5b14a3b03b..c7b2ca21a1 100644 --- a/libavcodec/mlpdec.c +++ b/libavcodec/mlpdec.c @@ -153,6 +153,12 @@ typedef struct MLPDecodeContext { /// Number of substreams contained within this stream. uint8_t num_substreams; + ///< Which substream of substreams carry 16-channel presentation + uint8_t extended_substream_info; + + ///< Which substream of substreams carry 2/6/8-channel presentation + uint8_t substream_info; + /// Index of the last substream to decode - further substreams are skipped. uint8_t max_decoded_substream; @@ -384,6 +390,7 @@ static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb) m->access_unit_size_pow2 = mh.access_unit_size_pow2; m->num_substreams = mh.num_substreams; + m->substream_info = mh.substream_info; /* limit to decoding 3 substreams, as the 4th is used by Dolby Atmos for non-audio data */ m->max_decoded_substream = FFMIN(m->num_substreams - 1, 2); @@ -1286,7 +1293,13 @@ static int read_access_unit(AVCodecContext *avctx, AVFrame *frame, if (!s->restart_seen) goto next_substr; - if (substr > 0 && substr < m->max_decoded_substream && + if (((avctx->ch_layout.nb_channels == 6 && + ((m->substream_info >> 2) & 0x3) != 0x3) || + (avctx->ch_layout.nb_channels == 8 && + ((m->substream_info >> 4) & 0x7) != 0x7 && + ((m->substream_info >> 4) & 0x7) != 0x6 && + ((m->substream_info >> 4) & 0x7) != 0x3)) && + substr > 0 && substr < m->max_decoded_substream && (s->min_channel <= m->substream[substr - 1].max_channel)) { av_log(avctx, AV_LOG_DEBUG, "Previous substream(%d) channels overlaps current substream(%d) channels, skipping.\n", -- 2.39.1 [-- Attachment #3: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next reply other threads:[~2023-01-30 18:39 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-01-30 18:39 Paul B Mahol [this message] 2023-01-31 11:27 ` Andreas Rheinhardt 2023-01-31 11:35 ` Paul B Mahol 2023-01-31 15:04 ` Paul B Mahol
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAPYw7P4oJj4iEVg4sAej_JsFFxP7Kkkgaz9eOV74Q2jNTNeV3Q@mail.gmail.com \ --to=onemda@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git