From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Subject: [FFmpeg-devel] [PATCH 14/17] avcodec/mlpenc: Simplify channel layout comparisons Date: Sun, 18 Sep 2022 22:27:54 +0200 Message-ID: <GV1P250MB07377B46708F2FC1F44FEB708F4A9@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> (raw) In-Reply-To: <GV1P250MB07378D20BA2B5BB1370634B18F4A9@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> These encoders have AVCodec.ch_layouts set, so ff_encode_preinit() has already checked that the used channel layout is equivalent to one of these native layouts. Therefore one can simply compare the channel masks (with the added complication that one has to use av_channel_layout_subset() to get it, because the channel layout is not guaranteed to have AV_CHANNEL_ORDER_NATIVE). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/mlpenc.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/libavcodec/mlpenc.c b/libavcodec/mlpenc.c index 463332593f..d2e28888f7 100644 --- a/libavcodec/mlpenc.c +++ b/libavcodec/mlpenc.c @@ -480,6 +480,7 @@ static av_cold int mlp_encode_init(AVCodecContext *avctx) static AVOnce init_static_once = AV_ONCE_INIT; MLPEncodeContext *ctx = avctx->priv_data; RestartHeader *const rh = &ctx->restart_header; + uint64_t channels_present; unsigned int sum = 0; size_t size; int ret; @@ -589,19 +590,20 @@ static av_cold int mlp_encode_init(AVCodecContext *avctx) ctx->num_substreams = 1; // TODO: change this after adding multi-channel support for TrueHD + channels_present = av_channel_layout_subset(&avctx->ch_layout, ~(uint64_t)0); if (ctx->avctx->codec_id == AV_CODEC_ID_MLP) { - static const AVChannelLayout layout_arrangement[] = { - AV_CHANNEL_LAYOUT_MONO, AV_CHANNEL_LAYOUT_STEREO, - AV_CHANNEL_LAYOUT_2_1, AV_CHANNEL_LAYOUT_QUAD, - AV_CHANNEL_LAYOUT_2POINT1, { 0 }, { 0 }, - AV_CHANNEL_LAYOUT_SURROUND, AV_CHANNEL_LAYOUT_4POINT0, - AV_CHANNEL_LAYOUT_5POINT0_BACK, AV_CHANNEL_LAYOUT_3POINT1, - AV_CHANNEL_LAYOUT_4POINT1, AV_CHANNEL_LAYOUT_5POINT1_BACK, + static const uint64_t layout_arrangement[] = { + AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, + AV_CH_LAYOUT_2_1, AV_CH_LAYOUT_QUAD, + AV_CH_LAYOUT_2POINT1, 0, 0, + AV_CH_LAYOUT_SURROUND, AV_CH_LAYOUT_4POINT0, + AV_CH_LAYOUT_5POINT0_BACK, AV_CH_LAYOUT_3POINT1, + AV_CH_LAYOUT_4POINT1, AV_CH_LAYOUT_5POINT1_BACK, }; int i; for (i = 0; i < FF_ARRAY_ELEMS(layout_arrangement); i++) - if (!av_channel_layout_compare(&avctx->ch_layout, &layout_arrangement[i])) + if (channels_present == layout_arrangement[i]) break; if (i == FF_ARRAY_ELEMS(layout_arrangement)) { av_log(avctx, AV_LOG_ERROR, "Unsupported channel arrangement\n"); @@ -613,29 +615,25 @@ static av_cold int mlp_encode_init(AVCodecContext *avctx) ctx->summary_info = ff_mlp_ch_info[ctx->channel_arrangement].summary_info ; } else { /* TrueHD */ - if (!av_channel_layout_compare(&avctx->ch_layout, - &(AVChannelLayout)AV_CHANNEL_LAYOUT_MONO)) { + if (channels_present == AV_CH_LAYOUT_MONO) { ctx->ch_modifier_thd0 = 3; ctx->ch_modifier_thd1 = 3; ctx->ch_modifier_thd2 = 3; ctx->channel_arrangement = 2; ctx->thd_substream_info = 0x14; - } else if (!av_channel_layout_compare(&avctx->ch_layout, - &(AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO)) { + } else if (channels_present == AV_CH_LAYOUT_STEREO) { ctx->ch_modifier_thd0 = 1; ctx->ch_modifier_thd1 = 1; ctx->ch_modifier_thd2 = 1; ctx->channel_arrangement = 1; ctx->thd_substream_info = 0x14; - } else if (!av_channel_layout_compare(&avctx->ch_layout, - &(AVChannelLayout)AV_CHANNEL_LAYOUT_5POINT0)) { + } else if (channels_present == AV_CH_LAYOUT_5POINT0) { ctx->ch_modifier_thd0 = 1; ctx->ch_modifier_thd1 = 1; ctx->ch_modifier_thd2 = 1; ctx->channel_arrangement = 11; ctx->thd_substream_info = 0x104; - } else if (!av_channel_layout_compare(&avctx->ch_layout, - &(AVChannelLayout)AV_CHANNEL_LAYOUT_5POINT1)) { + } else if (channels_present == AV_CH_LAYOUT_5POINT1) { ctx->ch_modifier_thd0 = 2; ctx->ch_modifier_thd1 = 1; ctx->ch_modifier_thd2 = 2; -- 2.34.1 _______________________________________________ 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 prev parent reply other threads:[~2022-09-18 20:29 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-09-18 20:15 [FFmpeg-devel] [PATCH 01/17] avcodec/avcodec: Uninitialize AVChannelLayout before overwriting it Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 02/17] avcodec/encode: Remove dead deprecated check Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 03/17] avcodec/avcodec: Check for more invalid channel layouts Andreas Rheinhardt 2022-09-20 22:47 ` James Almer 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 04/17] avcodec/avcodec: Always use old channel count/layout if set Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 05/17] avcodec/encode: Remove deprecated always-false checks Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 06/17] avcodec/dfpwmdec: Remove always-false check Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 07/17] avcodec/pcm-blurayenc: Don't presume every channel layout to be native Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 08/17] avcodec/pcm: Remove always-false check Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 09/17] avcodec/libcodec2: Remove dead channel count check Andreas Rheinhardt 2022-09-21 13:31 ` Tomas Härdin 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 10/17] avcodec/libshine: " Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 11/17] avcodec/libspeexenc: " Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 12/17] avcodec/mpegaudioenc_template: " Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 13/17] avcodec/mlpenc: Fix channel layouts Andreas Rheinhardt 2022-09-21 7:13 ` Paul B Mahol 2022-09-18 20:27 ` Andreas Rheinhardt [this message] 2022-09-21 7:15 ` [FFmpeg-devel] [PATCH 14/17] avcodec/mlpenc: Simplify channel layout comparisons Paul B Mahol 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 15/17] avcodec/mlpenc: Remove dead channel layout checks Andreas Rheinhardt 2022-09-21 7:14 ` Paul B Mahol 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 16/17] avcodec/dcaenc: Remove dead checks for unspec channel layouts Andreas Rheinhardt 2022-09-18 20:27 ` [FFmpeg-devel] [PATCH 17/17] avcodec/dcaenc: Simplify channel layout check Andreas Rheinhardt 2022-09-20 22:15 ` [FFmpeg-devel] [PATCH 01/17] avcodec/avcodec: Uninitialize AVChannelLayout before overwriting it Andreas Rheinhardt
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=GV1P250MB07377B46708F2FC1F44FEB708F4A9@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM \ --to=andreas.rheinhardt@outlook.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