diff --git a/webrtc/voice_engine/include/voe_hardware.h b/webrtc/voice_engine/include/voe_hardware.h index 24ed1ff8f..e973c110a 100644 --- a/webrtc/voice_engine/include/voe_hardware.h +++ b/webrtc/voice_engine/include/voe_hardware.h @@ -113,6 +113,12 @@ public: // Not supported virtual int GetLoudspeakerStatus(bool& enabled) = 0; + // Native sample rate controls (samples/sec) + virtual int SetRecordingSampleRate(unsigned int samples_per_sec) = 0; + virtual int RecordingSampleRate(unsigned int* samples_per_sec) const = 0; + virtual int SetPlayoutSampleRate(unsigned int samples_per_sec) = 0; + virtual int PlayoutSampleRate(unsigned int* samples_per_sec) const = 0; + // *Experimental - not recommended for use.* // Enables the Windows Core Audio built-in AEC. Fails on other platforms. // diff --git a/webrtc/voice_engine/voe_hardware_impl.cc b/webrtc/voice_engine/voe_hardware_impl.cc index 7247a696e..99e65cc4d 100644 --- a/webrtc/voice_engine/voe_hardware_impl.cc +++ b/webrtc/voice_engine/voe_hardware_impl.cc @@ -818,6 +818,46 @@ bool VoEHardwareImpl::BuiltInAECIsEnabled() const return _shared->audio_device()->BuiltInAECIsEnabled(); } +int VoEHardwareImpl::SetRecordingSampleRate(unsigned int samples_per_sec) { + WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), + "%s", __FUNCTION__); + if (!_shared->statistics().Initialized()) { + _shared->SetLastError(VE_NOT_INITED, kTraceError); + return false; + } + return _shared->audio_device()->SetRecordingSampleRate(samples_per_sec); +} + +int VoEHardwareImpl::RecordingSampleRate(unsigned int* samples_per_sec) const { + WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), + "%s", __FUNCTION__); + if (!_shared->statistics().Initialized()) { + _shared->SetLastError(VE_NOT_INITED, kTraceError); + return false; + } + return _shared->audio_device()->RecordingSampleRate(samples_per_sec); +} + +int VoEHardwareImpl::SetPlayoutSampleRate(unsigned int samples_per_sec) { + WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), + "%s", __FUNCTION__); + if (!_shared->statistics().Initialized()) { + _shared->SetLastError(VE_NOT_INITED, kTraceError); + return false; + } + return _shared->audio_device()->SetPlayoutSampleRate(samples_per_sec); +} + +int VoEHardwareImpl::PlayoutSampleRate(unsigned int* samples_per_sec) const { + WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), + "%s", __FUNCTION__); + if (!_shared->statistics().Initialized()) { + _shared->SetLastError(VE_NOT_INITED, kTraceError); + return false; + } + return _shared->audio_device()->PlayoutSampleRate(samples_per_sec); +} + #endif // WEBRTC_VOICE_ENGINE_HARDWARE_API } // namespace webrtc diff --git a/webrtc/voice_engine/voe_hardware_impl.h b/webrtc/voice_engine/voe_hardware_impl.h index c80122808..94775672c 100644 --- a/webrtc/voice_engine/voe_hardware_impl.h +++ b/webrtc/voice_engine/voe_hardware_impl.h @@ -65,6 +65,11 @@ public: virtual int EnableBuiltInAEC(bool enable); virtual bool BuiltInAECIsEnabled() const; + virtual int SetRecordingSampleRate(unsigned int samples_per_sec); + virtual int RecordingSampleRate(unsigned int* samples_per_sec) const; + virtual int SetPlayoutSampleRate(unsigned int samples_per_sec); + virtual int PlayoutSampleRate(unsigned int* samples_per_sec) const; + protected: VoEHardwareImpl(voe::SharedData* shared); virtual ~VoEHardwareImpl();