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 1D4294B7FC for ; Sat, 27 Dec 2025 21:30:40 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'fGT/Li67U/c9Z6sp3U/qZ5JIfG1ksoPwVvmxXoiSyJg=', expected b'24SdU19y97teGPmYDVHZxbQYReQ7fSG0gt5C1cliR6s=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1766871014; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=fGT/Li67U/c9Z6sp3U/qZ5JIfG1ksoPwVvmxXoiSyJg=; b=XtJ0oLZOszVOSJnIuK1+TAfxUGHADT2TSZTE4VR0hiPwwBOKSDLpE0V5R6Nk87Xk4TSLM FpSXa/kNjxmExIeVQqXaywtrEnecBf1ZI5fuHglN/3ddLxYFXR7e+Nbceh5+JcoLqI1Ham7 MjQRoNOX1lRArd/QU95rp1Q6JySHX3Vi/HXPU5xyaPckPjlJfcGE4nmdf1IpNPAEqEEZ/9j oRveeNkgA3N75aANK5WJ+cNVlCasQ/G93h+2v7mE95pBFq1Ng8Jz1c3etc8aUjSAk4hShqQ /Asd+YeW6IZXGMQLcQ2/AN1a6FKhUZhiKx6IH6f/A0Vu1FA6khquTp+7n7EQ== Received: from [172.20.0.4] (unknown [172.20.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 5014D690BEE; Sat, 27 Dec 2025 23:30:14 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1766870996; b=CYKX1F6pqb/sCgs7mS78NoEP4hS1LMHOix3hI2SdQ45vGxUmCzVytK2Om2vSTDtDXgR/Q q0yQBLILUFag3OPoVnXLeRl3f5jwaIqlz481W/RDCYRfxz4v4JIDW5qW4SFsbQ+UN9TY7UH R1NZNRCdD3pZEwEELq+BmIACbOoxHTyW3vhK+6JOaYsGRvC86T7wAr3MNiKE/jSqS3vtMim FpFdxUojg+oCsWKJ+QVSMnYCtZ4oCr9KeAL0e+8JNiQAWxXQR9FX5EAA5QYv1kIpc4HSTMx 7k8ioC9iUL3FGaDP91PvRRoJdj+qMOYmgcJpkHHStmau6T4eCzJeFr02vx6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1766870996; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=ddihUNqQRHJv5QoEUdybnmSjcp1MNAw9QULHsOoQLcE=; b=eKGo2wj50IFJVbXxw/xaY5x1AKCgYEnzc8RNM2fB8Sy9F7NB06Uhk/qPuqzIfE6u7i5Uk nxO6OYohKgqmToyj7qeePvef+DX58OrrZnciZOTAlEHHa3OIYgDhncZQhSO5K0Jbe52NWyK z8nZ8Sdpq4Si6bczKKlXIfujFtmbe5jCDNsaGEvM/LwfhrSBTzgbfNVEEv/jTST6nNUswOn CEFAxqvI8QltwLOE5e1LVW382aBsLyAiiKHIuZRwHZkQrA+fS7Ii46BK2H1/88urAJyenLA yN+L7gms0Bt28EzMOovg3Q1IoVYr7A2J4peN13gZU4rdb79S3nUbHtZBR0eQ== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1766870987; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=24SdU19y97teGPmYDVHZxbQYReQ7fSG0gt5C1cliR6s=; b=ELOQGOUI9t8aibUVL4e7O9GLqMesNZF31p/rG1sw+24NwBV68PKJZP8KviUas6HKvHwJS kgiOIW4ULLXQq8zn4WZ9y6qNlt19xQZEn9Uhc0eLdk9Mky/Xka7ydHM87AOB4asEVv8CYxt PWuINM4HKnFoCVCrXaTiJ0qFdNvc2jaZitlihmrO0+OXlARiEaj+nM0k2Iwh0g4LV2MSE3S jUqpr4cV5xLwQNn7qcES2MJJ8eFffeou2pZRTA4sB2tCIVhkAakfh8tURzJj5O9ddHUprW1 0K4n1pwGynl4OS1PT+IV2HRKPvlksZJ28F/6iWV78AIMvWCbY6pNvqcDF9yA== Received: from 55ca25703178 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id BA154690B54 for ; Sat, 27 Dec 2025 23:29:47 +0200 (EET) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Sat, 27 Dec 2025 21:29:47 -0000 Message-ID: <176687098798.25.1377406969615718642@4457048688e7> Message-ID-Hash: KPBKQZTX5RJXPEB4OEMUIVZ2ZFCQRVXM X-Message-ID-Hash: KPBKQZTX5RJXPEB4OEMUIVZ2ZFCQRVXM X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] iamf: add support for Projection type ambisonic Audio Elements (PR #21303) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: James Almer via ffmpeg-devel Cc: James Almer Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #21303 opened by James Almer (jamrial) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21303 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21303.patch >>From ce1d2a98c1e09f3080bc216713b7cae87195a4bb Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 27 Dec 2025 17:05:51 -0300 Subject: [PATCH 1/8] avutil/iamf: add an AVOption for AVIAMFLayer.demixing_matrix Plus a length field, to fulfill the requirements of AV_OPT_TYPE_FLAG_ARRAY options. Signed-off-by: James Almer --- libavutil/iamf.c | 4 ++++ libavutil/iamf.h | 11 +++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/libavutil/iamf.c b/libavutil/iamf.c index 791954d951..c18069220e 100644 --- a/libavutil/iamf.c +++ b/libavutil/iamf.c @@ -239,6 +239,8 @@ AVIAMFParamDefinition *av_iamf_param_definition_alloc(enum AVIAMFParamDefinition // // Audio Element // +static const AVOptionArrayDef demixing_matrix_def = { .def = "0|0", .size_max = (255 + 255) * 255, .sep = '|' }; + #undef OFFSET #define OFFSET(x) offsetof(AVIAMFLayer, x) static const AVOption layer_options[] = { @@ -269,6 +271,8 @@ static const AVOption layer_options[] = { { .i64 = AV_IAMF_AMBISONICS_MODE_MONO }, .unit = "ambisonics_mode" }, { "projection", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_IAMF_AMBISONICS_MODE_PROJECTION }, .unit = "ambisonics_mode" }, + { "demixing_matrix", "set demixing_matrix", OFFSET(demixing_matrix), AV_OPT_TYPE_RATIONAL | AV_OPT_TYPE_FLAG_ARRAY, + { .arr = &demixing_matrix_def }, -1.0, 1.0, FLAGS }, { NULL }, }; diff --git a/libavutil/iamf.h b/libavutil/iamf.h index 855f64280a..a755e7d682 100644 --- a/libavutil/iamf.h +++ b/libavutil/iamf.h @@ -330,14 +330,17 @@ typedef struct AVIAMFLayer { /** * Demixing matrix as defined in section 3.6.3 of IAMF. * - * The length of the array is ch_layout.nb_channels multiplied by the sum of - * the amount of streams in the group plus the amount of streams in the group - * that are stereo. - * * May be set only if @ref ambisonics_mode == AV_IAMF_AMBISONICS_MODE_PROJECTION, * must be NULL otherwise. */ AVRational *demixing_matrix; + + /** + * The length of the Demixing matrix array. Must be ch_layout.nb_channels multiplied + * by the sum of the amount of streams in the group plus the amount of streams in + * the group that are stereo. + */ + unsigned int nb_demixing_matrix; } AVIAMFLayer; -- 2.49.1 >>From 2899dffac22a26d124aa413d581fb01ae1c68a29 Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 27 Dec 2025 17:08:30 -0300 Subject: [PATCH 2/8] avformat/iamf_parse: fix setting denominator in AVIAMFLayer.demixing_matrix The format of demixing_matrix is Q15 fixed point values. Signed-off-by: James Almer --- libavformat/iamf_parse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/iamf_parse.c b/libavformat/iamf_parse.c index b9f24c0d6a..b7d6c64b70 100644 --- a/libavformat/iamf_parse.c +++ b/libavformat/iamf_parse.c @@ -587,7 +587,7 @@ static int ambisonics_config(void *s, AVIOContext *pb, return AVERROR(ENOMEM); for (int i = 0; i < demixing_matrix_size; i++) - layer->demixing_matrix[i] = av_make_q(sign_extend(avio_rb16(pb), 16), 1 << 8); + layer->demixing_matrix[i] = av_make_q(sign_extend(avio_rb16(pb), 16), 1 << 15); for (int i = 0; i < substream_count; i++) { IAMFSubStream *substream = &audio_element->substreams[i]; -- 2.49.1 >>From 458222b350b22d37d84e082e5ff2f11cf3cb3cc9 Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 27 Dec 2025 17:10:35 -0300 Subject: [PATCH 3/8] avformat/iamf_parse: set AVIAMFLayer.nb_demixing_matrix Signed-off-by: James Almer --- libavformat/iamf_parse.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libavformat/iamf_parse.c b/libavformat/iamf_parse.c index b7d6c64b70..a31f7689b3 100644 --- a/libavformat/iamf_parse.c +++ b/libavformat/iamf_parse.c @@ -576,17 +576,19 @@ static int ambisonics_config(void *s, AVIOContext *pb, return ret; } else { int coupled_substream_count = avio_r8(pb); // M - int nb_demixing_matrix = substream_count + coupled_substream_count; - int demixing_matrix_size = nb_demixing_matrix * output_channel_count; + int count = substream_count + coupled_substream_count; + int nb_demixing_matrix = count * output_channel_count; audio_element->layers->coupled_substream_count = coupled_substream_count; layer->ch_layout = (AVChannelLayout){ .order = AV_CHANNEL_ORDER_AMBISONIC, .nb_channels = output_channel_count }; - layer->demixing_matrix = av_malloc_array(demixing_matrix_size, sizeof(*layer->demixing_matrix)); + layer->demixing_matrix = av_malloc_array(nb_demixing_matrix, sizeof(*layer->demixing_matrix)); if (!layer->demixing_matrix) return AVERROR(ENOMEM); - for (int i = 0; i < demixing_matrix_size; i++) + layer->nb_demixing_matrix = nb_demixing_matrix; + + for (int i = 0; i < layer->nb_demixing_matrix; i++) layer->demixing_matrix[i] = av_make_q(sign_extend(avio_rb16(pb), 16), 1 << 15); for (int i = 0; i < substream_count; i++) { -- 2.49.1 >>From 1e17297ca568197321a4b11e6381d814c488994a Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 27 Dec 2025 18:06:32 -0300 Subject: [PATCH 4/8] avformat/iamf_writer: fix writting some ambisonics fields in Audio Elements The fields are defined as 8 bit long unsigned ints. Fortunately, writing most sane values as leb is equivalent, which is why no tests are affected. Signed-off-by: James Almer --- libavformat/iamf_writer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index b917a15978..44a32f0ce0 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -662,8 +662,8 @@ static int ambisonics_config(const IAMFAudioElement *audio_element, const AVIAMFLayer *layer = element->layers[0]; ffio_write_leb(dyn_bc, 0); // ambisonics_mode - ffio_write_leb(dyn_bc, layer->ch_layout.nb_channels); // output_channel_count - ffio_write_leb(dyn_bc, audio_element->nb_substreams); // substream_count + avio_w8(dyn_bc, layer->ch_layout.nb_channels); // output_channel_count + avio_w8(dyn_bc, audio_element->nb_substreams); // substream_count if (layer->ch_layout.order == AV_CHANNEL_ORDER_AMBISONIC) for (int i = 0; i < layer->ch_layout.nb_channels; i++) -- 2.49.1 >>From 8d82cc2a1caf19830c88b341ca13099a65bfe2ce Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 27 Dec 2025 17:11:30 -0300 Subject: [PATCH 5/8] avformat/iamf_writer: add support for Projection type ambisonic Audio elements Signed-off-by: James Almer --- libavformat/iamf_writer.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index 44a32f0ce0..38b8879a0d 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -235,7 +235,7 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void av_log(log_ctx, AV_LOG_ERROR, "Invalid channel layout for SCENE_BASED audio element\n"); return AVERROR(EINVAL); } - if (layer->ambisonics_mode >= AV_IAMF_AMBISONICS_MODE_PROJECTION) { + if (layer->ambisonics_mode > AV_IAMF_AMBISONICS_MODE_PROJECTION) { av_log(log_ctx, AV_LOG_ERROR, "Unsupported ambisonics mode %d\n", layer->ambisonics_mode); return AVERROR_PATCHWELCOME; } @@ -659,18 +659,28 @@ static int ambisonics_config(const IAMFAudioElement *audio_element, AVIOContext *dyn_bc) { const AVIAMFAudioElement *element = audio_element->celement; + const IAMFLayer *ilayer = &audio_element->layers[0]; const AVIAMFLayer *layer = element->layers[0]; - ffio_write_leb(dyn_bc, 0); // ambisonics_mode + ffio_write_leb(dyn_bc, layer->ambisonics_mode); avio_w8(dyn_bc, layer->ch_layout.nb_channels); // output_channel_count avio_w8(dyn_bc, audio_element->nb_substreams); // substream_count + if (layer->ambisonics_mode == AV_IAMF_AMBISONICS_MODE_MONO) { if (layer->ch_layout.order == AV_CHANNEL_ORDER_AMBISONIC) for (int i = 0; i < layer->ch_layout.nb_channels; i++) avio_w8(dyn_bc, i); else for (int i = 0; i < layer->ch_layout.nb_channels; i++) avio_w8(dyn_bc, layer->ch_layout.u.map[i].id); + } else { + int nb_demixing_matrix = (ilayer->coupled_substream_count + ilayer->substream_count) * layer->ch_layout.nb_channels; + if (audio_element->nb_substreams != ilayer->substream_count || nb_demixing_matrix != layer->nb_demixing_matrix) + return AVERROR(EINVAL); + avio_w8(dyn_bc, ilayer->coupled_substream_count); + for (int i = 0; i < layer->nb_demixing_matrix; i++) + avio_wb16(dyn_bc, rescale_rational(layer->demixing_matrix[i], 1 << 15)); + } return 0; } -- 2.49.1 >>From 91ceedcbf7ff67f81d9fcbd11f75205e35432204 Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 27 Dec 2025 18:09:03 -0300 Subject: [PATCH 6/8] avformat/iamf_writer: reindent after the previous change Signed-off-by: James Almer --- libavformat/iamf_writer.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index 38b8879a0d..5fc92b282a 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -667,12 +667,12 @@ static int ambisonics_config(const IAMFAudioElement *audio_element, avio_w8(dyn_bc, audio_element->nb_substreams); // substream_count if (layer->ambisonics_mode == AV_IAMF_AMBISONICS_MODE_MONO) { - if (layer->ch_layout.order == AV_CHANNEL_ORDER_AMBISONIC) - for (int i = 0; i < layer->ch_layout.nb_channels; i++) - avio_w8(dyn_bc, i); - else - for (int i = 0; i < layer->ch_layout.nb_channels; i++) - avio_w8(dyn_bc, layer->ch_layout.u.map[i].id); + if (layer->ch_layout.order == AV_CHANNEL_ORDER_AMBISONIC) + for (int i = 0; i < layer->ch_layout.nb_channels; i++) + avio_w8(dyn_bc, i); + else + for (int i = 0; i < layer->ch_layout.nb_channels; i++) + avio_w8(dyn_bc, layer->ch_layout.u.map[i].id); } else { int nb_demixing_matrix = (ilayer->coupled_substream_count + ilayer->substream_count) * layer->ch_layout.nb_channels; if (audio_element->nb_substreams != ilayer->substream_count || nb_demixing_matrix != layer->nb_demixing_matrix) -- 2.49.1 >>From ac2d7f4ac5b8a46da9390a7d62bc5776b33425ec Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 27 Dec 2025 17:12:57 -0300 Subject: [PATCH 7/8] fftools/ffprobe: print demixing_matrix in Projection type ambisonic IAMF Audio Element groups Signed-off-by: James Almer --- fftools/ffprobe.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index 17e0191844..ddd5654796 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -2078,6 +2078,10 @@ static void print_iamf_param_definition(AVTextFormatContext *tfc, const char *na static void print_iamf_audio_element_params(AVTextFormatContext *tfc, const AVStreamGroup *stg, const AVIAMFAudioElement *audio_element) { + AVBPrint pbuf; + + av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED); + avtext_print_section_header(tfc, stg, SECTION_ID_STREAM_GROUP_COMPONENT); print_int("nb_layers", audio_element->nb_layers); print_int("audio_element_type", audio_element->audio_element_type); @@ -2092,8 +2096,12 @@ static void print_iamf_audio_element_params(AVTextFormatContext *tfc, const AVSt if (audio_element->audio_element_type == AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL) { print_int("output_gain_flags", layer->output_gain_flags); print_q("output_gain", layer->output_gain, '/'); - } else if (audio_element->audio_element_type == AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE) + } else if (audio_element->audio_element_type == AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE) { print_int("ambisonics_mode", layer->ambisonics_mode); + if (layer->ambisonics_mode == AV_IAMF_AMBISONICS_MODE_PROJECTION) + print_list_fmt("demixing_matrix", "%d/%d", layer->nb_demixing_matrix, 1, layer->demixing_matrix[idx].num, + layer->demixing_matrix[idx].den); + } avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENT } if (audio_element->demixing_info) @@ -2104,6 +2112,8 @@ static void print_iamf_audio_element_params(AVTextFormatContext *tfc, const AVSt SECTION_ID_STREAM_GROUP_SUBCOMPONENT); avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENTS avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_COMPONENT + + av_bprint_finalize(&pbuf, NULL); } static void print_iamf_submix_params(AVTextFormatContext *tfc, const AVIAMFSubmix *submix) -- 2.49.1 >>From 5bef1c9ff45630bd7e09aa3b23c51a2155f24b3a Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 27 Dec 2025 17:13:56 -0300 Subject: [PATCH 8/8] tests/fate/iamf: add tests for Projection type ambisonic Audio Elements Signed-off-by: James Almer --- tests/fate/iamf.mak | 20 ++ tests/ref/fate/iamf-ambisonic_1-projection | 317 ++++++++++++++++++ .../ref/fate/iamf-ambisonic_1-projection-copy | 275 +++++++++++++++ .../fate/iamf-ambisonic_1-projection-demux | 275 +++++++++++++++ .../audio_element-ambisonic_1-projection | 2 + 5 files changed, 889 insertions(+) create mode 100644 tests/ref/fate/iamf-ambisonic_1-projection create mode 100644 tests/ref/fate/iamf-ambisonic_1-projection-copy create mode 100644 tests/ref/fate/iamf-ambisonic_1-projection-demux create mode 100644 tests/streamgroups/audio_element-ambisonic_1-projection diff --git a/tests/fate/iamf.mak b/tests/fate/iamf.mak index eddea66ba1..a686be7952 100644 --- a/tests/fate/iamf.mak +++ b/tests/fate/iamf.mak @@ -48,6 +48,16 @@ fate-iamf-ambisonic_1: CMD = transcode wav $(SRC) iamf "-auto_conversion_filters -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -map [MONO0] -map [MONO1] -map [MONO2] -map [MONO3] -c:a flac -t 1" "-c:a copy -map 0" \ "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_stream=index,id:stream_group_stream_disposition" +FATE_IAMF-$(call TRANSCODE, FLAC, IAMF, WAV_DEMUXER PCM_S16LE_DECODER ARESAMPLE_FILTER) += fate-iamf-ambisonic_1-projection +fate-iamf-ambisonic_1-projection: tests/data/asynth-44100-4.wav tests/data/filtergraphs/iamf_ambisonic_1 tests/data/streamgroups/audio_element-ambisonic_1-projection tests/data/streamgroups/mix_presentation-ambisonic_1 +fate-iamf-ambisonic_1-projection: SRC = $(TARGET_PATH)/tests/data/asynth-44100-4.wav +fate-iamf-ambisonic_1-projection: CMD = transcode wav $(SRC) iamf "-auto_conversion_filters \ + -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_ambisonic_1 \ + -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-ambisonic_1-projection \ + -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-ambisonic_1 \ + -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -map [MONO0] -map [MONO1] -map [MONO2] -map [MONO3] -c:a flac -t 1" "-c:a copy -map 0" \ + "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_stream=index,id:stream_group_stream_disposition" + FATE_IAMF_SAMPLES-$(call FRAMECRC, IAMF, OPUS) += fate-iamf-stereo-demux fate-iamf-stereo-demux: CMD = stream_demux iamf $(TARGET_SAMPLES)/iamf/test_000076.iamf "" \ "-c:a copy -frames:a 0 -map 0:g:\#42" \ @@ -63,6 +73,16 @@ fate-iamf-5_1-copy: CMD = stream_remux iamf $(TARGET_SAMPLES)/iamf/test_000059.i "-map 0 -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0 -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3" "" "-c:a copy -frames:a 0 -map 0:g:i:42" \ "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_stream=index,id:stream_group_stream_disposition" +FATE_IAMF_SAMPLES-$(call FRAMECRC, IAMF, OPUS) += fate-iamf-ambisonic_1-projection-demux +fate-iamf-ambisonic_1-projection-demux: CMD = stream_demux iamf $(TARGET_SAMPLES)/iamf/test_000113.iamf "" \ + "-c:a copy -frames:a 0 -map 0:g:\#300" \ + "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_stream=index,id:stream_group_stream_disposition" + +FATE_IAMF_SAMPLES-$(call REMUX, IAMF, OPUS_DECODER) += fate-iamf-ambisonic_1-projection-copy +fate-iamf-ambisonic_1-projection-copy: CMD = stream_remux iamf $(TARGET_SAMPLES)/iamf/test_000113.iamf "" iamf \ + "-map 0 -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0 -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3" "" "-c:a copy -frames:a 0 -map 0:g:i:300" \ + "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_stream=index,id:stream_group_stream_disposition" + FATE_IAMF += $(FATE_IAMF-yes) FATE_IAMF_SAMPLES += $(FATE_IAMF_SAMPLES-yes) diff --git a/tests/ref/fate/iamf-ambisonic_1-projection b/tests/ref/fate/iamf-ambisonic_1-projection new file mode 100644 index 0000000000..78b5a743b6 --- /dev/null +++ b/tests/ref/fate/iamf-ambisonic_1-projection @@ -0,0 +1,317 @@ +b87b28ca89da92d540047e8ad30bd470 *tests/data/fate/iamf-ambisonic_1-projection.iamf +57035 tests/data/fate/iamf-ambisonic_1-projection.iamf +#extradata 0: 34, 0xad120cfe +#extradata 1: 34, 0xad120cfe +#extradata 2: 34, 0xad120cfe +#extradata 3: 34, 0xad120cfe +#tb 0: 1/44100 +#media_type 0: audio +#codec_id 0: flac +#sample_rate 0: 44100 +#channel_layout_name 0: mono +#tb 1: 1/44100 +#media_type 1: audio +#codec_id 1: flac +#sample_rate 1: 44100 +#channel_layout_name 1: mono +#tb 2: 1/44100 +#media_type 2: audio +#codec_id 2: flac +#sample_rate 2: 44100 +#channel_layout_name 2: mono +#tb 3: 1/44100 +#media_type 3: audio +#codec_id 3: flac +#sample_rate 3: 44100 +#channel_layout_name 3: mono +0, 0, 0, 4608, 1396, 0x0dcb5677 +1, 0, 0, 4608, 1396, 0x0dcb5677 +2, 0, 0, 4608, 1396, 0x0dcb5677 +3, 0, 0, 4608, 1396, 0x0dcb5677 +0, 4608, 4608, 4608, 1439, 0xc46b5ac5 +1, 4608, 4608, 4608, 1439, 0xc46b5ac5 +2, 4608, 4608, 4608, 1439, 0xc46b5ac5 +3, 4608, 4608, 4608, 1439, 0xc46b5ac5 +0, 9216, 9216, 4608, 1377, 0x5b2a55fe +1, 9216, 9216, 4608, 1377, 0x5b2a55fe +2, 9216, 9216, 4608, 1377, 0x5b2a55fe +3, 9216, 9216, 4608, 1377, 0x5b2a55fe +0, 13824, 13824, 4608, 1380, 0x045550d3 +1, 13824, 13824, 4608, 1380, 0x045550d3 +2, 13824, 13824, 4608, 1380, 0x045550d3 +3, 13824, 13824, 4608, 1380, 0x045550d3 +0, 18432, 18432, 4608, 1568, 0xa2bc45f4 +1, 18432, 18432, 4608, 1568, 0xa2bc45f4 +2, 18432, 18432, 4608, 1568, 0xa2bc45f4 +3, 18432, 18432, 4608, 1568, 0xa2bc45f4 +0, 23040, 23040, 4608, 1388, 0x96c85007 +1, 23040, 23040, 4608, 1388, 0x96c85007 +2, 23040, 23040, 4608, 1388, 0x96c85007 +3, 23040, 23040, 4608, 1388, 0x96c85007 +0, 27648, 27648, 4608, 1419, 0x4d4d466a +1, 27648, 27648, 4608, 1419, 0x4d4d466a +2, 27648, 27648, 4608, 1419, 0x4d4d466a +3, 27648, 27648, 4608, 1419, 0x4d4d466a +0, 32256, 32256, 4608, 1765, 0xacb84b24 +1, 32256, 32256, 4608, 1765, 0xacb84b24 +2, 32256, 32256, 4608, 1765, 0xacb84b24 +3, 32256, 32256, 4608, 1765, 0xacb84b24 +0, 36864, 36864, 4608, 1531, 0x996458aa +1, 36864, 36864, 4608, 1531, 0x996458aa +2, 36864, 36864, 4608, 1531, 0x996458aa +3, 36864, 36864, 4608, 1531, 0x996458aa +0, 41472, 41472, 4608, 923, 0xa7225edf +1, 41472, 41472, 4608, 923, 0xa7225edf +2, 41472, 41472, 4608, 923, 0xa7225edf +3, 41472, 41472, 4608, 923, 0xa7225edf +[STREAM_GROUP] +index=0 +id=0x1 +nb_streams=4 +type=IAMF Audio Element +[COMPONENT] +nb_layers=1 +audio_element_type=1 +default_w=0 +[SUBCOMPONENT] +channel_layout=ambisonic 1 +ambisonics_mode=1 +demixing_matrix=32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 +[/SUBCOMPONENT] +[/COMPONENT] +[STREAM] +index=0 +id=0x0 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=1 +id=0x1 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=2 +id=0x2 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=3 +id=0x3 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[/STREAM_GROUP] +[STREAM_GROUP] +index=1 +id=0x2 +nb_streams=4 +type=IAMF Mix Presentation +[COMPONENT] +nb_submixes=1 +[SUBCOMPONENT] +en-us=Mix_Presentation +[/SUBCOMPONENT] +[SUBCOMPONENT] +nb_elements=1 +nb_layouts=1 +default_mix_gain=0/256 +[PIECE] +stream_id=1 +default_mix_gain=0/256 +headphones_rendering_mode=0 +[SUBPIECE] +en-us=Stereo_Submix +[/SUBPIECE] +[SUBPIECE] +name=element_mix_config +nb_subblocks=0 +type=0 +parameter_id=100 +parameter_rate=48000 +duration=0 +constant_subblock_duration=0 +[/SUBPIECE] +[/PIECE] +[PIECE] +name=output_mix_config +nb_subblocks=0 +type=0 +parameter_id=100 +parameter_rate=48000 +duration=0 +constant_subblock_duration=0 +[/PIECE] +[PIECE] +sound_system=stereo +integrated_loudness=0/256 +digital_peak=0/256 +true_peak=0/1 +dialogue_anchored_loudness=0/1 +album_anchored_loudness=0/1 +[/PIECE] +[/SUBCOMPONENT] +[/COMPONENT] +[STREAM] +index=0 +id=0x0 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=1 +id=0x1 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=2 +id=0x2 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=3 +id=0x3 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[/STREAM_GROUP] diff --git a/tests/ref/fate/iamf-ambisonic_1-projection-copy b/tests/ref/fate/iamf-ambisonic_1-projection-copy new file mode 100644 index 0000000000..f38d0f7117 --- /dev/null +++ b/tests/ref/fate/iamf-ambisonic_1-projection-copy @@ -0,0 +1,275 @@ +#extradata 0: 19, 0x3a04048f +#extradata 1: 19, 0x3a04048f +#extradata 2: 19, 0x3a04048f +#extradata 3: 19, 0x3a04048f +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: opus +#sample_rate 0: 48000 +#channel_layout_name 0: mono +#tb 1: 1/48000 +#media_type 1: audio +#codec_id 1: opus +#sample_rate 1: 48000 +#channel_layout_name 1: mono +#tb 2: 1/48000 +#media_type 2: audio +#codec_id 2: opus +#sample_rate 2: 48000 +#channel_layout_name 2: mono +#tb 3: 1/48000 +#media_type 3: audio +#codec_id 3: opus +#sample_rate 3: 48000 +#channel_layout_name 3: mono +[STREAM_GROUP] +index=0 +id=0x12c +nb_streams=4 +type=IAMF Audio Element +[COMPONENT] +nb_layers=1 +audio_element_type=1 +default_w=0 +[SUBCOMPONENT] +channel_layout=ambisonic 1 +ambisonics_mode=1 +demixing_matrix=32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 +[/SUBCOMPONENT] +[/COMPONENT] +[STREAM] +index=0 +id=0x0 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=1 +id=0x1 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=2 +id=0x2 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=3 +id=0x3 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[/STREAM_GROUP] +[STREAM_GROUP] +index=1 +id=0x2a +nb_streams=4 +type=IAMF Mix Presentation +[COMPONENT] +nb_submixes=1 +[SUBCOMPONENT] +en-us=test_mix_pres +[/SUBCOMPONENT] +[SUBCOMPONENT] +nb_elements=1 +nb_layouts=1 +default_mix_gain=0/256 +[PIECE] +stream_id=300 +default_mix_gain=0/256 +headphones_rendering_mode=0 +[SUBPIECE] +en-us=test_sub_mix_0_audio_element_0 +[/SUBPIECE] +[SUBPIECE] +name=element_mix_config +nb_subblocks=0 +type=0 +parameter_id=999 +parameter_rate=48000 +duration=0 +constant_subblock_duration=0 +[/SUBPIECE] +[/PIECE] +[PIECE] +name=output_mix_config +nb_subblocks=0 +type=0 +parameter_id=998 +parameter_rate=48000 +duration=0 +constant_subblock_duration=0 +[/PIECE] +[PIECE] +sound_system=stereo +integrated_loudness=-2631/256 +digital_peak=0/256 +true_peak=0/1 +dialogue_anchored_loudness=0/1 +album_anchored_loudness=0/1 +[/PIECE] +[/SUBCOMPONENT] +[/COMPONENT] +[STREAM] +index=0 +id=0x0 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=1 +id=0x1 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=2 +id=0x2 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=3 +id=0x3 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[/STREAM_GROUP] diff --git a/tests/ref/fate/iamf-ambisonic_1-projection-demux b/tests/ref/fate/iamf-ambisonic_1-projection-demux new file mode 100644 index 0000000000..f38d0f7117 --- /dev/null +++ b/tests/ref/fate/iamf-ambisonic_1-projection-demux @@ -0,0 +1,275 @@ +#extradata 0: 19, 0x3a04048f +#extradata 1: 19, 0x3a04048f +#extradata 2: 19, 0x3a04048f +#extradata 3: 19, 0x3a04048f +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: opus +#sample_rate 0: 48000 +#channel_layout_name 0: mono +#tb 1: 1/48000 +#media_type 1: audio +#codec_id 1: opus +#sample_rate 1: 48000 +#channel_layout_name 1: mono +#tb 2: 1/48000 +#media_type 2: audio +#codec_id 2: opus +#sample_rate 2: 48000 +#channel_layout_name 2: mono +#tb 3: 1/48000 +#media_type 3: audio +#codec_id 3: opus +#sample_rate 3: 48000 +#channel_layout_name 3: mono +[STREAM_GROUP] +index=0 +id=0x12c +nb_streams=4 +type=IAMF Audio Element +[COMPONENT] +nb_layers=1 +audio_element_type=1 +default_w=0 +[SUBCOMPONENT] +channel_layout=ambisonic 1 +ambisonics_mode=1 +demixing_matrix=32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 0/32768 0/32768 0/32768 0/32768 32767/32768 +[/SUBCOMPONENT] +[/COMPONENT] +[STREAM] +index=0 +id=0x0 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=1 +id=0x1 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=2 +id=0x2 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=3 +id=0x3 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[/STREAM_GROUP] +[STREAM_GROUP] +index=1 +id=0x2a +nb_streams=4 +type=IAMF Mix Presentation +[COMPONENT] +nb_submixes=1 +[SUBCOMPONENT] +en-us=test_mix_pres +[/SUBCOMPONENT] +[SUBCOMPONENT] +nb_elements=1 +nb_layouts=1 +default_mix_gain=0/256 +[PIECE] +stream_id=300 +default_mix_gain=0/256 +headphones_rendering_mode=0 +[SUBPIECE] +en-us=test_sub_mix_0_audio_element_0 +[/SUBPIECE] +[SUBPIECE] +name=element_mix_config +nb_subblocks=0 +type=0 +parameter_id=999 +parameter_rate=48000 +duration=0 +constant_subblock_duration=0 +[/SUBPIECE] +[/PIECE] +[PIECE] +name=output_mix_config +nb_subblocks=0 +type=0 +parameter_id=998 +parameter_rate=48000 +duration=0 +constant_subblock_duration=0 +[/PIECE] +[PIECE] +sound_system=stereo +integrated_loudness=-2631/256 +digital_peak=0/256 +true_peak=0/1 +dialogue_anchored_loudness=0/1 +album_anchored_loudness=0/1 +[/PIECE] +[/SUBCOMPONENT] +[/COMPONENT] +[STREAM] +index=0 +id=0x0 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=1 +id=0x1 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=2 +id=0x2 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[STREAM] +index=3 +id=0x3 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +DISPOSITION:multilayer=0 +[/STREAM] +[/STREAM_GROUP] diff --git a/tests/streamgroups/audio_element-ambisonic_1-projection b/tests/streamgroups/audio_element-ambisonic_1-projection new file mode 100644 index 0000000000..18a75babd6 --- /dev/null +++ b/tests/streamgroups/audio_element-ambisonic_1-projection @@ -0,0 +1,2 @@ +type=iamf_audio_element:id=1:st=0:st=1:st=2:st=3:audio_element_type=scene, +layer=ch_layout=ambisonic 1:ambisonics_mode=projection:demixing_matrix=32767/32768|0/32768|0/32768|0/32768|0/32768|32767/32768|0/32768|0/32768|0/32768|0/32768|32767/32768|0/32768|0/32768|0/32768|0/32768|32767/32768, -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org