blob: 130877e89aeb3a123a85f1a46035087d947bd83e [file] [log] [blame]
// 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
}