Index: webrtc/api/audio_codecs/g722/audio_encoder_g722.cc |
diff --git a/webrtc/api/audio_codecs/g722/audio_encoder_g722.cc b/webrtc/api/audio_codecs/g722/audio_encoder_g722.cc |
index b3e406304d123c8f03e29c96499ab3e91bec69a8..5828f4a26eb2d0cede87479c6d3431fa53191a82 100644 |
--- a/webrtc/api/audio_codecs/g722/audio_encoder_g722.cc |
+++ b/webrtc/api/audio_codecs/g722/audio_encoder_g722.cc |
@@ -13,15 +13,34 @@ |
#include <memory> |
#include <vector> |
+#include "webrtc/common_types.h" |
#include "webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h" |
#include "webrtc/rtc_base/ptr_util.h" |
#include "webrtc/rtc_base/safe_conversions.h" |
+#include "webrtc/rtc_base/safe_minmax.h" |
+#include "webrtc/rtc_base/string_to_number.h" |
namespace webrtc { |
rtc::Optional<AudioEncoderG722Config> AudioEncoderG722::SdpToConfig( |
const SdpAudioFormat& format) { |
- return AudioEncoderG722Impl::SdpToConfig(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::checked_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); |
+ if (ptime && *ptime > 0) { |
+ const int whole_packets = *ptime / 10; |
+ config.frame_size_ms = rtc::SafeClamp<int>(whole_packets * 10, 10, 60); |
+ } |
+ } |
+ return config.IsOk() ? rtc::Optional<AudioEncoderG722Config>(config) |
+ : rtc::Optional<AudioEncoderG722Config>(); |
} |
void AudioEncoderG722::AppendSupportedEncoders( |