Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Unified Diff: webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc

Issue 2934833002: G722 implementation of the AudioEncoderFactoryTemplate API (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc
diff --git a/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc
index d5cf6163134fe98dd4b2e218553a15bd6e162317..d3957d8d6f1be7df3b82fde8c8ffd1394e2d82a1 100644
--- a/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc
+++ b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc
@@ -25,19 +25,24 @@ namespace {
const size_t kSampleRateHz = 16000;
-AudioEncoderG722::Config CreateConfig(const CodecInst& codec_inst) {
- AudioEncoderG722::Config config;
- config.num_channels = codec_inst.channels;
+AudioEncoderG722Config CreateConfig(const CodecInst& codec_inst) {
+ AudioEncoderG722Config config;
+ config.num_channels = rtc::dchecked_cast<int>(codec_inst.channels);
config.frame_size_ms = codec_inst.pacsize / 16;
- config.payload_type = codec_inst.pltype;
return config;
}
-AudioEncoderG722::Config CreateConfig(int payload_type,
- const SdpAudioFormat& format) {
- AudioEncoderG722::Config config;
- config.payload_type = payload_type;
- config.num_channels = format.num_channels;
+} // namespace
+
+rtc::Optional<AudioEncoderG722Config> AudioEncoderG722::SdpToConfig(
+ const SdpAudioFormat& format) {
+ if (STR_CASE_CMP(format.name.c_str(), "g722") != 0 ||
+ format.clockrate_hz != 8000) {
+ return rtc::Optional<AudioEncoderG722Config>();
+ }
+
+ AudioEncoderG722Config config;
+ config.num_channels = rtc::dchecked_cast<int>(format.num_channels);
auto ptime_iter = format.parameters.find("ptime");
if (ptime_iter != format.parameters.end()) {
auto ptime = rtc::StringToNumber<int>(ptime_iter->second);
@@ -46,19 +51,14 @@ AudioEncoderG722::Config CreateConfig(int payload_type,
config.frame_size_ms = std::max(10, std::min(whole_packets * 10, 60));
}
}
- return config;
-}
-
-} // namespace
-
-bool AudioEncoderG722::Config::IsOk() const {
- return (frame_size_ms > 0) && (frame_size_ms % 10 == 0) &&
- (num_channels >= 1);
+ return config.IsOk() ? rtc::Optional<AudioEncoderG722Config>(config)
+ : rtc::Optional<AudioEncoderG722Config>();
}
-AudioEncoderG722::AudioEncoderG722(const Config& config)
+AudioEncoderG722::AudioEncoderG722(const AudioEncoderG722Config& config,
+ int payload_type)
: num_channels_(config.num_channels),
- payload_type_(config.payload_type),
+ payload_type_(payload_type),
num_10ms_frames_per_packet_(
static_cast<size_t>(config.frame_size_ms / 10)),
num_10ms_frames_buffered_(0),
@@ -76,21 +76,23 @@ AudioEncoderG722::AudioEncoderG722(const Config& config)
}
AudioEncoderG722::AudioEncoderG722(const CodecInst& codec_inst)
- : AudioEncoderG722(CreateConfig(codec_inst)) {}
+ : AudioEncoderG722(CreateConfig(codec_inst), codec_inst.pltype) {}
AudioEncoderG722::AudioEncoderG722(int payload_type,
const SdpAudioFormat& format)
- : AudioEncoderG722(CreateConfig(payload_type, format)) {}
+ : AudioEncoderG722(*SdpToConfig(format), payload_type) {}
AudioEncoderG722::~AudioEncoderG722() = default;
rtc::Optional<AudioCodecInfo> AudioEncoderG722::QueryAudioEncoder(
const SdpAudioFormat& format) {
if (STR_CASE_CMP(format.name.c_str(), GetPayloadName()) == 0) {
- Config config = CreateConfig(0, format);
- if (format.clockrate_hz == 8000 && config.IsOk()) {
+ const auto config_opt = SdpToConfig(format);
+ if (format.clockrate_hz == 8000 && config_opt) {
+ RTC_DCHECK(config_opt->IsOk());
return rtc::Optional<AudioCodecInfo>(
- {rtc::dchecked_cast<int>(kSampleRateHz), config.num_channels, 64000});
+ {rtc::dchecked_cast<int>(kSampleRateHz),
+ rtc::dchecked_cast<size_t>(config_opt->num_channels), 64000});
}
}
return rtc::Optional<AudioCodecInfo>();

Powered by Google App Engine
This is Rietveld 408576698