1 /*
2 * Copyright (c) 2024, Alliance for Open Media. All rights reserved
3 *
4 * This source code is subject to the terms of the BSD 3-Clause Clear License
5 * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
6 * License was not distributed with this source code in the LICENSE file, you
7 * can obtain it at www.aomedia.org/license/software-license/bsd-3-c-c. If the
8 * Alliance for Open Media Patent License 1.0 was not distributed with this
9 * source code in the PATENTS file, you can obtain it at
10 * www.aomedia.org/license/patent.
11 */
12
13 #include "iamf/cli/user_metadata_builder/codec_config_obu_metadata_builder.h"
14
15 #include <cstdint>
16
17 #include "iamf/cli/proto/codec_config.pb.h"
18 #include "iamf/obu/types.h"
19
20 namespace iamf_tools {
21
22 using ::iamf_tools_cli_proto::CodecConfigObuMetadata;
23
24 CodecConfigObuMetadata
GetLpcmCodecConfigObuMetadata(DecodedUleb128 codec_config_id,uint32_t num_samples_per_frame,uint8_t sample_size,uint32_t sample_rate)25 CodecConfigObuMetadataBuilder::GetLpcmCodecConfigObuMetadata(
26 DecodedUleb128 codec_config_id, uint32_t num_samples_per_frame,
27 uint8_t sample_size, uint32_t sample_rate) {
28 CodecConfigObuMetadata codec_config_obu_metadata;
29 codec_config_obu_metadata.set_codec_config_id(codec_config_id);
30 auto* codec_config = codec_config_obu_metadata.mutable_codec_config();
31 // Set codec id as ipcm.
32 codec_config->set_codec_id(iamf_tools_cli_proto::CODEC_ID_LPCM);
33 codec_config->set_num_samples_per_frame(num_samples_per_frame);
34
35 auto* decode_config = codec_config->mutable_decoder_config_lpcm();
36 decode_config->set_sample_format_flags(
37 iamf_tools_cli_proto::LPCM_LITTLE_ENDIAN);
38 decode_config->set_sample_size(sample_size);
39 decode_config->set_sample_rate(sample_rate);
40 return codec_config_obu_metadata;
41 };
42
43 CodecConfigObuMetadata
GetOpusCodecConfigObuMetadata(DecodedUleb128 codec_config_id,uint32_t num_samples_per_frame)44 CodecConfigObuMetadataBuilder::GetOpusCodecConfigObuMetadata(
45 DecodedUleb128 codec_config_id, uint32_t num_samples_per_frame) {
46 CodecConfigObuMetadata codec_config_obu_metadata;
47
48 constexpr uint8_t kDefaultOpusVersion = 1;
49 constexpr uint32_t kDefaultOpusInputSampleRate = 48000;
50 constexpr uint32_t kDefaultOpusTargetBitRatePerChannel = 48000;
51 constexpr auto kDefaultOpusApplication =
52 iamf_tools_cli_proto::APPLICATION_AUDIO;
53 constexpr uint32_t kDefaultOpusUseFloatApi = true;
54
55 codec_config_obu_metadata.set_codec_config_id(codec_config_id);
56 auto& codec_config = *codec_config_obu_metadata.mutable_codec_config();
57
58 codec_config.set_codec_id(iamf_tools_cli_proto::CODEC_ID_OPUS);
59 codec_config.set_num_samples_per_frame(num_samples_per_frame);
60 codec_config.set_automatically_override_audio_roll_distance(true);
61 codec_config.set_automatically_override_codec_delay(true);
62 codec_config.mutable_decoder_config_opus()->set_version(kDefaultOpusVersion);
63 codec_config.mutable_decoder_config_opus()->set_input_sample_rate(
64 kDefaultOpusInputSampleRate);
65 auto& opus_encoder_metadata = *codec_config.mutable_decoder_config_opus()
66 ->mutable_opus_encoder_metadata();
67 opus_encoder_metadata.set_target_bitrate_per_channel(
68 kDefaultOpusTargetBitRatePerChannel);
69 opus_encoder_metadata.set_application(kDefaultOpusApplication);
70 opus_encoder_metadata.set_use_float_api(kDefaultOpusUseFloatApi);
71 return codec_config_obu_metadata;
72 }
73
74 } // namespace iamf_tools
75