From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 300C44F5B8 for ; Wed, 18 Jun 2025 01:39:32 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 49FA868DC8D; Wed, 18 Jun 2025 04:39:28 +0300 (EEST) Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 955DF68D8BA for ; Wed, 18 Jun 2025 04:39:21 +0300 (EEST) Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-7426c44e014so5330710b3a.3 for ; Tue, 17 Jun 2025 18:39:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750210759; x=1750815559; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=JEcLq0z7DftEDg2L2kNlk19D18a5i6Y7ongXRPK+7QA=; b=LA9Ik5WVeWDwYGuD4zJc0TjUMUexhiCt0KThs1VM4pOIy8nG7jqF64wGWEyTM1rS07 1sbEZNNZICkdgHodcvwEvCZcc84psy4K8WGTOb6JE2Km4WB+L8hz9awyzVTf9Q6MRXTd SDBykm1Arn0jIOtD7qVnBs1q+zSBRu/NnxQbAUtfuCR8s32GL/AUtxDW52TsUqzr+wLX yXD9LcOX0e741h/yl1GN4pizY1SBXXVLDbjNUCRbKnRrT43u4h1EGMS/5101/POlANVf /8eB3GcowbSH8NvmN5iZjFXx5OKD1LfHxr6Ii7rQoVI58Lq48Vu+5YRE9UtrSAUgnukJ JH+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750210759; x=1750815559; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JEcLq0z7DftEDg2L2kNlk19D18a5i6Y7ongXRPK+7QA=; b=g09u+x89o3fFlu9mjIFtN6PR8Ga7yjvrwRgimZWlj5KrzP8MAuXqhnx3nTSGIAMCrw x93jR1ZGT9ejAWJubMmWT3HhSOZWLHOC8la/1OOyKUIg9qTXg7JgFNjvo2gFD49CFc3P 9LX2Fj3BDz8ebOeczqE/769zt6efyOlhfhCOeBm5lQMNYzuUXAcXm9j5NLoWAj8kbh+0 7SXd3aIdU70ogQCliS75hMTpSjK3nliHvxCjcI+CVplyxIjfg/rBlMCmAc2UZY5i3gGR iO+8kBv4cf5RTaiVJ/9tV6s6STYoMY1Ds04BQVVYR4bvTfF9/iLf2Y3NnwNjnIt00fyq PRpQ== X-Gm-Message-State: AOJu0Yw0LrbhXTGj8CInFiAFj/ZEz20uZ7IBTV117IAF8r/kWJi/0Y1z AOG88tIYPpX8hd/NKBXwuPqGqzNSGCd3bvHhJBY04axgGLdpfPJjsKsytwIfXA== X-Gm-Gg: ASbGncthnFuGFCatgax9qfvPPpBbFF2X5+wBZS9i11o5+wLluQ/qufhHQQPVXmvcXdB SkHOjsl+Ls7te+5HnZ8gobx/wg08zYP1zT7HMt3DKJvUCHXd43RcSfDp4QoQq6Ps58vpmlZmKMq rnRe3zrP8u3sw22YAMzs+FpeGtGQ3mLhbD/yN36AfnF3pG496aedO7m5kf4zzq3ofBbNtKleuCe mBFr+WVRsSC4vZHlGgjJCobLAc4tA+CJzIb/ZspcFELB09awaOG3VyoeFcW0wsW9qnO32en3F+6 6Zrcj1ASUAASRpL2R0UhE/EenBZhCShzxt3rQV7GPvWwTTOvwyLl3JgzJ+I= X-Google-Smtp-Source: AGHT+IEKayEg/YTVRLTx2GC8s9hQrG6IIYPlJkEdbRKw5fGJBPg+FaG4Cs6gXxIP2IBzETmm/Q7B1A== X-Received: by 2002:a05:6a00:1c90:b0:748:e38d:fecc with SMTP id d2e1a72fcca58-748e38e081dmr1967059b3a.22.1750210759044; Tue, 17 Jun 2025 18:39:19 -0700 (PDT) Received: from Gryph ([2800:2121:b000:82e:746f:8b87:8ec9:3872]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-748e566bee6sm431865b3a.127.2025.06.17.18.39.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jun 2025 18:39:18 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 17 Jun 2025 22:38:56 -0300 Message-ID: <20250618013904.15638-1-jamrial@gmail.com> X-Mailer: git-send-email 2.50.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/9] avformat/iamf_writer: ensure each layer's channel layout contains all channels from the previous one X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Signed-off-by: James Almer --- libavformat/iamf_writer.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index 60a0990504..e34afb9a2c 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -245,7 +245,9 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void return AVERROR(EINVAL); } } - } else + } else { + AVBPrint bp; + for (int j, i = 0; i < iamf_audio_element->nb_layers; i++) { const AVIAMFLayer *layer = iamf_audio_element->layers[i]; for (j = 0; j < FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts); j++) @@ -257,7 +259,6 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void if (!av_channel_layout_compare(&layer->ch_layout, &ff_iamf_expanded_scalable_ch_layouts[j])) break; if (j >= FF_ARRAY_ELEMS(ff_iamf_expanded_scalable_ch_layouts)) { - AVBPrint bp; av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC); av_channel_layout_describe_bprint(&layer->ch_layout, &bp); av_log(log_ctx, AV_LOG_ERROR, "Unsupported channel layout in Audio Element id %"PRId64 @@ -267,7 +268,26 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void return AVERROR(EINVAL); } } + + if (!i) + continue; + + const AVIAMFLayer *prev_layer = iamf_audio_element->layers[i-1]; + uint64_t prev_mask = av_channel_layout_subset(&prev_layer->ch_layout, UINT64_MAX); + if (av_channel_layout_subset(&layer->ch_layout, prev_mask) != prev_mask || (layer->ch_layout.nb_channels <= + prev_layer->ch_layout.nb_channels)) { + av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC); + av_bprintf(&bp, "Channel layout \""); + av_channel_layout_describe_bprint(&layer->ch_layout, &bp); + av_bprintf(&bp, "\" can't follow channel layout \""); + av_channel_layout_describe_bprint(&prev_layer->ch_layout, &bp); + av_bprintf(&bp, "\" in Scalable Audio Element id %"PRId64, stg->id); + av_log(log_ctx, AV_LOG_ERROR, "%s\n", bp.str); + av_bprint_finalize(&bp, NULL); + return AVERROR(EINVAL); + } } + } for (int i = 0; i < iamf->nb_audio_elements; i++) { if (stg->id == iamf->audio_elements[i]->audio_element_id) { -- 2.50.0 _______________________________________________ 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".