• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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