7#include <packager/media/base/audio_stream_info.h>
15#include <absl/log/log.h>
16#include <absl/strings/str_format.h>
18#include <packager/macros/logging.h>
19#include <packager/media/base/fourccs.h>
20#include <packager/media/base/limits.h>
21#include <packager/media/base/stream_info.h>
27std::string AudioCodecToString(Codec codec) {
62 NOTIMPLEMENTED() <<
"Unknown Audio Codec: " << codec;
63 return "UnknownCodec";
67FourCC CodecToFourCC(Codec codec) {
83 const std::string& codec_string,
84 const uint8_t* codec_config,
85 size_t codec_config_size,
88 uint32_t sampling_frequency,
89 uint64_t seek_preroll_ns,
90 uint64_t codec_delay_ns,
93 const std::string& language,
105 sample_bits_(sample_bits),
106 num_channels_(num_channels),
107 sampling_frequency_(sampling_frequency),
108 seek_preroll_ns_(seek_preroll_ns),
109 codec_delay_ns_(codec_delay_ns),
110 max_bitrate_(max_bitrate),
111 avg_bitrate_(avg_bitrate) {}
113AudioStreamInfo::~AudioStreamInfo() {}
116 return codec() != kUnknownCodec && num_channels_ != 0 &&
117 num_channels_ <= limits::kMaxChannels && sample_bits_ > 0 &&
118 sample_bits_ <= limits::kMaxBitsPerSample && sampling_frequency_ > 0 &&
119 sampling_frequency_ <= limits::kMaxSampleRate;
123 std::string str = absl::StrFormat(
124 "%s codec: %s\n sample_bits: %d\n num_channels: %d\n "
125 "sampling_frequency: %d\n language: %s\n",
127 sample_bits_, num_channels_, sampling_frequency_, language().c_str());
128 if (seek_preroll_ns_ != 0) {
129 absl::StrAppendFormat(&str,
" seek_preroll_ns: %" PRIu64
"\n",
132 if (codec_delay_ns_ != 0) {
133 absl::StrAppendFormat(&str,
" codec_delay_ns: %" PRIu64
"\n",
144 uint8_t audio_object_type) {
147 return "mp4a.40." + absl::StrFormat(
"%hhu", audio_object_type);
173 return absl::StrFormat(
174 "ac-4.%02d.%02d.%02d", (audio_object_type & 0xE0) >> 5,
175 (audio_object_type & 0x18) >> 3, audio_object_type & 0x7);
191 const int iamf_codec = (audio_object_type & 0xF) + kCodecAudio;
193 const std::string iamf_codec_string =
194 absl::StrFormat(
"iamf.%03d.%03d", (audio_object_type & 0xC0) >> 6,
195 (audio_object_type & 0x30) >> 4);
197 switch (iamf_codec) {
199 return absl::StrFormat(
"%s.%s", iamf_codec_string,
"Opus");
201 return absl::StrFormat(
"%s.%s", iamf_codec_string,
"mp4a.40.2");
203 return absl::StrFormat(
"%s.%s", iamf_codec_string,
"fLaC");
205 return absl::StrFormat(
"%s.%s", iamf_codec_string,
"ipcm");
207 LOG(WARNING) <<
"Unknown IAMF codec: " << iamf_codec;
225 return absl::StrFormat(
"%s.0x%02x",
226 FourCCToString(CodecToFourCC(codec)).c_str(),
229 NOTIMPLEMENTED() <<
"Codec: " << codec;
All the methods that are virtual are virtual for mocking.