Skip to content

Commit

Permalink
Bring back a test with inconsistent param definitions.
Browse files Browse the repository at this point in the history
  - b/322160675: A similar test was dropped at one point when parameter definition logic was hardened.
  - If there were inconsistent param definitions, it would not be feasible to decode the time schedule within a parameter block. Prefer not to support this strange case via `MAYBE_RETURN_IF_NOT_OK`
  - Bring back an analog of the test case using a second mix presentation with an "arbitrary" mix presentation that contains self-inconsistent param definitions.

PiperOrigin-RevId: 713270173
  • Loading branch information
jwcullen committed Jan 8, 2025
1 parent 6a9cdec commit 9b11098
Show file tree
Hide file tree
Showing 2 changed files with 186 additions and 0 deletions.
183 changes: 183 additions & 0 deletions iamf/cli/testdata/test_000136.textproto
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# Copyright (c) 2024, 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.

# proto-file: iamf/cli/proto/user_metadata.proto
# proto-message: UserMetadata

test_vector_metadata {
human_readable_description:
"A stereo IAMF stream. The second mix presentation has a two parameter "
"definitions with the same `parameter_id`, but inconsistent "
"`param_definition_mode`s. Typically, all parameters with the same ID must "
"have consistent `param_definition_mode`s."
file_name_prefix: "test_000136"
# The encoder would not normally encode data with inconsistent
# `ParamDefinitions`.
is_valid: false
# The decoder would not normally decode data with inconsistent
# `ParamDefinitions`.
is_valid_to_decode: false
partition_mix_gain_parameter_blocks: false
validate_user_loudness: true
mp4_fixed_timestamp: "2024-12-20 00:00:00"
test_repository_tags: [
"github/aomediacodec/libiamf/main",
"github/aomediacodec/libiamf/v1.0.0-errata"
]
primary_tested_spec_sections: [
"3.5/codec_id",
"4.1/Simple Profile"
]
base_test: "test_000119"
}

ia_sequence_header_metadata {
primary_profile: PROFILE_VERSION_SIMPLE
additional_profile: PROFILE_VERSION_SIMPLE
}

codec_config_metadata {
codec_config_id: 200
codec_config {
codec_id: CODEC_ID_LPCM
num_samples_per_frame: 8
audio_roll_distance: 0
decoder_config_lpcm {
sample_format_flags: LPCM_LITTLE_ENDIAN
sample_size: 16
sample_rate: 48000
}
}
}

audio_element_metadata {
audio_element_id: 127
audio_element_type: AUDIO_ELEMENT_CHANNEL_BASED
reserved: 0
codec_config_id: 200
num_substreams: 1
audio_substream_ids: [0]
num_parameters: 0
scalable_channel_layout_config {
num_layers: 1
reserved: 0
channel_audio_layer_configs: [
{
loudspeaker_layout: LOUDSPEAKER_LAYOUT_STEREO
output_gain_is_present_flag: 0
recon_gain_is_present_flag: 0
reserved_a: 0
substream_count: 1
coupled_substream_count: 1
}
]
}
}

mix_presentation_metadata {
mix_presentation_id: 42
count_label: 1
annotations_language: ["en-us"]
localized_presentation_annotations: ["test_mix_pres"]
num_sub_mixes: 1
sub_mixes {
num_audio_elements: 1
audio_elements {
audio_element_id: 300
localized_element_annotations: ["test_sub_mix_0_audio_element_0"]
rendering_config {
headphones_rendering_mode: HEADPHONES_RENDERING_MODE_STEREO
}
element_mix_gain {
param_definition {
parameter_id: 100
parameter_rate: 48000
param_definition_mode: 1
reserved: 0
}
default_mix_gain: 0
}
}
output_mix_gain {
param_definition {
parameter_id: 100
parameter_rate: 48000
param_definition_mode: 1
reserved: 0
}
default_mix_gain: 0
}
num_layouts: 1
layouts {
loudness_layout {
layout_type: LAYOUT_TYPE_LOUDSPEAKERS_SS_CONVENTION
ss_layout {
sound_system: SOUND_SYSTEM_A_0_2_0
reserved: 0
}
}
loudness {
info_type_bit_masks: []
integrated_loudness: -32768
digital_peak: -32768
}
}
}
}

audio_frame_metadata {
wav_filename: "stereo_8_samples_48khz_s16le.wav"
samples_to_trim_at_end: 6
samples_to_trim_at_start: 0
audio_element_id: 300
channel_metadatas: [
{ channel_id: 0 channel_label: CHANNEL_LABEL_L_2 },
{ channel_id: 1 channel_label: CHANNEL_LABEL_R_2 }
]
}
arbitrary_obu_metadata: [
{
# The `ElementMixGain` and `OutputMixGain` share the same `parameter_id`,
# but are inconsistent and signal a different subblock schedule.
invalidates_bitstream: true
insertion_hook: INSERTION_HOOK_AFTER_MIX_PRESENTATIONS
obu_type: OBU_IA_MIX_PRESENTATION
payload:
"\x44" # mix_presentation_id.
"\x00" # count_label.
"\x01" # num_sub_mixes.
"\x01" # num_audio_elements.
"\x7f" # audio_element_id = 127.
"\x00" # headphones_rendering_mode (2), reserved (6).
"\x00" # rendering_config_size.
# Begin `ElementMixGain`.
"\x66" # parameter_id.
"\x80\xf7\x02" # parameter_rate (leb128).
"\x80" # param_definition_mode (1), reserved (7).
"\x00\00" # default_mix_gain.
# Begin `OutputMixGain`, which is inconsistent with the `ElementMixGain`.
"\x66" # parameter_id.
"\x80\xf7\x02" # parameter_rate (leb128).
"\x00" # param_definition_mode (1), reserved (7).
"\x08" # duration (leb128).
"\x04" # constant_subblock_duration (leb128).
"\x00\00" # default_mix_gain.
"\x01" # num_layouts.
"\x80" # layout_type (2), sound_system (4), reserved (2).
"\x00" # info_type.
"\x00\x00" # integrated_loudness.
"\x00\x00" # digital_peak.
}
]
temporal_delimiter_metadata {
enable_temporal_delimiters: false
}
3 changes: 3 additions & 0 deletions iamf/cli/tests/encoder_main_lib_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -565,6 +565,9 @@ INSTANTIATE_TEST_SUITE_P(ExtensionsInIaSequenceHeader, TestVector,
INSTANTIATE_TEST_SUITE_P(MultipleFramesTrimmedAtEnd, TestVector,
testing::Values("test_000135.textproto"));

INSTANTIATE_TEST_SUITE_P(InvalidInconsistentParamDefinitions, TestVector,
testing::Values("test_000136.textproto"));

// ---- Test Set 2 -----

INSTANTIATE_TEST_SUITE_P(BasicMonoLPCM, TestVector,
Expand Down

0 comments on commit 9b11098

Please sign in to comment.