blob: a10815ffa477defa67bf8d3881f7c5e9b5ffb07e [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;
import "iamf/cli/proto/obu_header.proto";
import "iamf/cli/proto/param_definitions.proto";
message MixPresentationAnnotations {
option deprecated = true;
optional string mix_presentation_friendly_label = 1;
}
message MixPresentationElementAnnotations {
option deprecated = true;
optional string audio_element_friendly_label = 1;
}
message ElementMixConfig {
option deprecated = true;
optional MixGainParamDefinition mix_gain = 1;
}
enum HeadPhonesRenderingMode {
HEADPHONES_RENDERING_MODE_INVALID = 0;
HEADPHONES_RENDERING_MODE_STEREO = 1;
HEADPHONES_RENDERING_MODE_BINAURAL = 2;
HEADPHONES_RENDERING_MODE_RESERVED_2 = 3;
HEADPHONES_RENDERING_MODE_RESERVED_3 = 4;
}
message RenderingConfig {
optional HeadPhonesRenderingMode headphones_rendering_mode = 1;
optional uint32 reserved = 2;
optional uint32 rendering_config_extension_size = 3;
optional bytes rendering_config_extension_bytes = 4;
}
message SubMixAudioElement {
reserved 2;
optional uint32 audio_element_id = 1;
// Superseded by `localized_element_annotations`.
repeated MixPresentationElementAnnotations
mix_presentation_element_annotations_array = 4 [deprecated = true];
// Length should be equal to `count_label` in the OBU.
repeated string localized_element_annotations = 6;
optional RenderingConfig rendering_config = 5;
// Superseded by `element_mix_gain`.
optional ElementMixConfig element_mix_config = 3 [deprecated = true];
optional MixGainParamDefinition element_mix_gain = 7;
}
message OutputMixConfig {
option deprecated = true;
optional MixGainParamDefinition output_mix_gain = 1;
}
enum SoundSystem {
SOUND_SYSTEM_INVALID = 0;
SOUND_SYSTEM_A_0_2_0 = 1;
SOUND_SYSTEM_B_0_5_0 = 2;
SOUND_SYSTEM_C_2_5_0 = 3;
SOUND_SYSTEM_D_4_5_0 = 4;
SOUND_SYSTEM_E_4_5_1 = 5;
SOUND_SYSTEM_F_3_7_0 = 6;
SOUND_SYSTEM_G_4_9_0 = 7;
SOUND_SYSTEM_H_9_10_3 = 8;
SOUND_SYSTEM_I_0_7_0 = 9;
SOUND_SYSTEM_J_4_7_0 = 10;
SOUND_SYSTEM_10_2_7_0 = 11;
SOUND_SYSTEM_11_2_3_0 = 12;
SOUND_SYSTEM_12_0_1_0 = 13;
SOUND_SYSTEM_13_6_9_0 = 14;
}
message LoudspeakersSsConventionLayout {
optional SoundSystem sound_system = 1;
optional uint32 reserved = 2;
}
message LoudspeakersReservedOrBinauralLayout {
optional uint32 reserved = 1;
}
enum LayoutType {
LAYOUT_TYPE_INVALID = 0;
LAYOUT_TYPE_RESERVED_0 = 1;
LAYOUT_TYPE_RESERVED_1 = 2;
LAYOUT_TYPE_LOUDSPEAKERS_SS_CONVENTION = 3;
LAYOUT_TYPE_BINAURAL = 4;
}
message Layout {
reserved 2;
optional LayoutType layout_type = 1;
oneof specific_layout {
LoudspeakersSsConventionLayout ss_layout = 3;
LoudspeakersReservedOrBinauralLayout reserved_or_binaural_layout = 4;
}
}
enum AnchorType {
ANCHOR_TYPE_INVALID = 0;
ANCHOR_TYPE_UNKNOWN = 1;
ANCHOR_TYPE_DIALOGUE = 2;
ANCHOR_TYPE_ALBUM = 3;
}
// Values are represented to align with the IAMF spec.
//
// See
// https://aomediacodec.github.io/iamf/v1.1.0.html#obu-mixpresentation-loudness
// for further details.
//
// See detailed examples on Q7.8 format below in `LoudnessInfo`.
message AnchorElement {
optional AnchorType anchor_element = 1;
optional int32 anchored_loudness = 2; // Q7.8.
}
message AnchoredLoudness {
// `num_anchored_loudness` is ignored. The value in the bitstream is inferred
// based on the number of `anchor_elements`.
optional uint32 num_anchored_loudness = 1 [deprecated = true];
repeated AnchorElement anchor_elements = 2;
}
enum LoudnessInfoTypeBitMask {
LOUDNESS_INFO_TYPE_INVALID = 0;
LOUDNESS_INFO_TYPE_TRUE_PEAK = 1;
LOUDNESS_INFO_TYPE_ANCHORED_LOUDNESS = 2;
LOUDNESS_INFO_TYPE_RESERVED_4 = 4;
LOUDNESS_INFO_TYPE_RESERVED_8 = 8;
LOUDNESS_INFO_TYPE_RESERVED_16 = 16;
LOUDNESS_INFO_TYPE_RESERVED_32 = 32;
LOUDNESS_INFO_TYPE_RESERVED_64 = 64;
LOUDNESS_INFO_TYPE_RESERVED_128 = 128;
}
// Values are represented to align with the IAMF spec.
//
// See
// https://aomediacodec.github.io/iamf/v1.1.0.html#obu-mixpresentation-loudness
// for further details.
//
// To convert from dB to Q7.8, multiply by 256. Example:
// - For -3 dB, set the proto value to 256 * -3 = -768.
// - For +6 dB, set the proto value to 256 * 6 = 1536.
message LoudnessInfo {
optional uint32 deprecated_info_type = 1 [deprecated = true];
repeated LoudnessInfoTypeBitMask info_type_bit_masks = 8 [packed = true];
optional int32 integrated_loudness = 2; // Q7.8.
optional int32 digital_peak = 3; // Q7.8.
optional int32 true_peak = 4; // Q7.8.
optional AnchoredLoudness anchored_loudness = 5;
optional uint32 info_type_size = 6;
optional bytes info_type_bytes = 7;
// Next ID: 9
}
message MixPresentationLayout {
optional Layout loudness_layout = 1;
optional LoudnessInfo loudness = 2;
}
message MixPresentationSubMix {
// `num_audio_elements` is ignored. The value in the bitstream is inferred
// based on the number of `audio_elements`.
optional uint32 num_audio_elements = 1 [deprecated = true];
repeated SubMixAudioElement audio_elements = 2;
// Superseded by `output_mix_gain`.
optional OutputMixConfig output_mix_config = 3 [deprecated = true];
optional MixGainParamDefinition output_mix_gain = 6;
// `num_layouts` is ignored. The value in the bitstream is inferred
// based on the number of `layouts`.
optional uint32 num_layouts = 4 [deprecated = true];
repeated MixPresentationLayout layouts = 5;
// Next ID: 7
}
message MixPresentationTag {
optional string tag_name = 1;
optional string tag_value = 2;
}
message MixPresentationTags {
// `num_tags` is ignored. The value in the bitstream is inferred based on the
// number of tags.
optional uint32 num_tags = 1 [deprecated = true];
repeated MixPresentationTag tags = 2;
}
message MixPresentationObuMetadata {
reserved 2;
optional uint32 mix_presentation_id = 1;
optional uint32 count_label = 5;
// Superseded by `annotations_language`.
repeated string language_labels = 6 [deprecated = true];
// Length should be equal to `count_label`.
repeated string annotations_language = 9;
// Superseded by `localized_presentation_annotations`.
repeated MixPresentationAnnotations mix_presentation_annotations_array = 7
[deprecated = true];
// Length should be equal to `count_label`.
repeated string localized_presentation_annotations = 10;
// `num_sub_mixes` is ignored. The value in the bitstream is inferred
// based on the number of `sub_mixes`.
optional uint32 num_sub_mixes = 3 [deprecated = true];
repeated MixPresentationSubMix sub_mixes = 4;
// When false [default]: The encoder will ignore the below
// `mix_presentation_tags`. Beware that other features
// may still result in additional non-user specified
// tags. To stricly encode a file without any tags, set
// both `include_mix_presentation_tags` and
// `EncoderControlMetadata.add_build_information_tag`
// fields to false.
// When true: The encoder will use the `mix_presentation_tags` field.
optional bool include_mix_presentation_tags = 11;
optional MixPresentationTags mix_presentation_tags = 12;
optional ObuHeaderMetadata obu_header = 8;
// Next ID: 13
}