// Copyright (c) 2023, Alliance for Open Media. All rights reserved // // This source code is subject to the terms of the BSD 3-Clause Clear License // and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear // License was not distributed with this source code in the LICENSE file, you // can obtain it at www.aomedia.org/license/software-license/bsd-3-c-c. If the // Alliance for Open Media Patent License 1.0 was not distributed with this // source code in the PATENTS file, you can obtain it at // www.aomedia.org/license/patent. syntax = "proto2"; package iamf_tools_cli_proto; enum ChannelLabel { CHANNEL_LABEL_INVALID = 0; reserved 1; // Reserved for potential "omitted" label. // Mono channels. CHANNEL_LABEL_MONO = 2; // Stereo or binaural channels. CHANNEL_LABEL_L_2 = 3; CHANNEL_LABEL_R_2 = 4; // Centre channel common to several layouts (e.g. 3.1.2, 5.x.y, 7.x.y). CHANNEL_LABEL_CENTRE = 6; // LFE channel common to several layouts (e.g. 3.1.2, 5.1.y, 7.1.y, 9.1.6). CHANNEL_LABEL_LFE = 7; // 3.1.2 surround channels. CHANNEL_LABEL_L_3 = 8; CHANNEL_LABEL_R_3 = 9; CHANNEL_LABEL_LTF_3 = 10; CHANNEL_LABEL_RTF_3 = 11; // 5.x.y surround channels. CHANNEL_LABEL_L_5 = 14; CHANNEL_LABEL_R_5 = 15; CHANNEL_LABEL_LS_5 = 16; CHANNEL_LABEL_RS_5 = 17; // Common channels between 5.1.2 and 7.1.2. CHANNEL_LABEL_LTF_2 = 22; CHANNEL_LABEL_RTF_2 = 23; // Common channels between 5.1.4 and 7.1.4. CHANNEL_LABEL_LTF_4 = 26; CHANNEL_LABEL_RTF_4 = 27; CHANNEL_LABEL_LTB_4 = 28; CHANNEL_LABEL_RTB_4 = 29; // 7.x.y surround channels. CHANNEL_LABEL_L_7 = 32; CHANNEL_LABEL_R_7 = 33; CHANNEL_LABEL_LSS_7 = 34; CHANNEL_LABEL_RSS_7 = 35; CHANNEL_LABEL_LRS_7 = 36; CHANNEL_LABEL_RRS_7 = 37; // 9.1.6 surround channels. CHANNEL_LABEL_FLC = 42; CHANNEL_LABEL_FC = 43; CHANNEL_LABEL_FRC = 44; CHANNEL_LABEL_FL = 45; CHANNEL_LABEL_FR = 46; CHANNEL_LABEL_SI_L = 47; CHANNEL_LABEL_SI_R = 48; CHANNEL_LABEL_BL = 49; CHANNEL_LABEL_BR = 50; CHANNEL_LABEL_TP_FL = 51; CHANNEL_LABEL_TP_FR = 52; CHANNEL_LABEL_TP_SI_L = 53; CHANNEL_LABEL_TP_SI_R = 54; CHANNEL_LABEL_TP_BL = 55; CHANNEL_LABEL_TP_BR = 56; // Reserved for possible use of demixed labels. reserved 5, 12, 13, 18 to 21, 24, 25, 30, 31, 38 to 41; // Reserved for channel-based labels. reserved 57 to 999; CHANNEL_LABEL_A_0 = 1000; CHANNEL_LABEL_A_1 = 1001; CHANNEL_LABEL_A_2 = 1002; CHANNEL_LABEL_A_3 = 1003; CHANNEL_LABEL_A_4 = 1004; CHANNEL_LABEL_A_5 = 1005; CHANNEL_LABEL_A_6 = 1006; CHANNEL_LABEL_A_7 = 1007; CHANNEL_LABEL_A_8 = 1008; CHANNEL_LABEL_A_9 = 1009; CHANNEL_LABEL_A_10 = 1010; CHANNEL_LABEL_A_11 = 1011; CHANNEL_LABEL_A_12 = 1012; CHANNEL_LABEL_A_13 = 1013; CHANNEL_LABEL_A_14 = 1014; CHANNEL_LABEL_A_15 = 1015; CHANNEL_LABEL_A_16 = 1016; CHANNEL_LABEL_A_17 = 1017; CHANNEL_LABEL_A_18 = 1018; CHANNEL_LABEL_A_19 = 1019; CHANNEL_LABEL_A_20 = 1020; CHANNEL_LABEL_A_21 = 1021; CHANNEL_LABEL_A_22 = 1022; CHANNEL_LABEL_A_23 = 1023; CHANNEL_LABEL_A_24 = 1024; reserved 1025 to 1224; // Reserved for future ambisonics channels. // Next ID: 57 (channel-based) or 1025 (ambisonics). } message ChannelMetadata { // Used to map the index of the channel in an ADM or WAV file. Ignored when // data comes from other sources. optional uint32 channel_id = 1; // The IAMF-based channel label. optional ChannelLabel channel_label = 2; } message AudioFrameObuMetadata { reserved 2, 3; optional string wav_filename = 1; // Controls whether the number of samples required to pad the final frame are // automatically added to the `samples_to_trim_at_end` value. // // When `true` `samples_to_trim_at_end` matches `num_samples_to_trim_at_end` // in the OBU header. If the actual value is too small to account for padding, // then encoding will fail. This is useful to closely represent the value in // the OBU (rarely needed). // // When `false` `num_samples_to_trim_at_end` will be incremented by the // amount of required padding and may not match the OBU header value. This is // useful to closely represent the trimming applied to the original audio // content (typically recommended). // // Typically the recommended settings are: // - samples_to_trim_at_end_includes_padding: false // - samples_to_trim_at_end: 0 // These settings will automatically insert the correct padding to create a // valid final frame and avoid trimming the original audio content. optional bool samples_to_trim_at_end_includes_padding = 9 [default = true]; optional uint32 samples_to_trim_at_end = 4; // Controls whether the number of samples required by codec delay for the // initial first frames are automatically added to the // `samples_to_trim_at_start` value. // // When `true` `samples_to_trim_at_start` relates directly to // `samples_to_trim_at_start`s in the initial OBU header. If the actual // value is too small to account for codec delay, then encoding will fail. // This is useful to closely represent the values in the initial OBUs (rarely // needed). // // When `false` `samples_to_trim_at_start` will be incremented by the // amount of required for the codec delay and may not match the OBU header // value. This is useful to closely represent the trimming applied to the // original audio content (typically recommended). // // Typically the recommended settings are: // - samples_to_trim_at_start_includes_codec_delay: false // - samples_to_trim_at_start: 0 // These settings will automatically insert the correct codec delay to create // a valid final frame and avoid trimming the original audio content. optional bool samples_to_trim_at_start_includes_codec_delay = 10 [default = true]; optional uint32 samples_to_trim_at_start = 5; // ID of the audio element whose substreams will be provided/mixed // from the channels in this WAV file. optional uint32 audio_element_id = 6; // Channels used in this WAV file, in the order as described in [ITU2051-3] // for loudspeaker layouts or ACN order for ambisonics. May be fewer than // the total number of channels in the WAV file if only a subset is to be // used. repeated uint32 channel_ids = 7 [packed = true, deprecated = true]; // Channel Labels, e.g. "L2", "Ls5". For ambisonics, use "A{ACN number}", // e.g. "A0", "A13". Must be of the same length as `channel_ids`. repeated string channel_labels = 8 [deprecated = true]; // Prefer `channel_metadata` over `channel_ids` and `channel_labels`. repeated ChannelMetadata channel_metadatas = 11; // Next ID: 12 }