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

Unified Diff: webrtc/voice_engine/utility.cc

Issue 1338833002: Fix the maximum native sample rate in AudioProcessing (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Format Created 5 years, 3 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
« no previous file with comments | « webrtc/voice_engine/utility.h ('k') | webrtc/voice_engine/utility_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/voice_engine/utility.cc
diff --git a/webrtc/voice_engine/utility.cc b/webrtc/voice_engine/utility.cc
index 82ef076d41b01d70af7a60f55d4d22d2c2baaf41..498620acaf056f5e5f459276b91ad944d8f75d25 100644
--- a/webrtc/voice_engine/utility.cc
+++ b/webrtc/voice_engine/utility.cc
@@ -21,34 +21,43 @@
namespace webrtc {
namespace voe {
-// TODO(ajm): There is significant overlap between RemixAndResample and
-// ConvertToCodecFormat. Consolidate using AudioConverter.
void RemixAndResample(const AudioFrame& src_frame,
PushResampler<int16_t>* resampler,
AudioFrame* dst_frame) {
- const int16_t* audio_ptr = src_frame.data_;
- int audio_ptr_num_channels = src_frame.num_channels_;
+ RemixAndResample(src_frame.data_, src_frame.samples_per_channel_,
+ src_frame.num_channels_, src_frame.sample_rate_hz_,
+ resampler, dst_frame);
+ dst_frame->timestamp_ = src_frame.timestamp_;
+ dst_frame->elapsed_time_ms_ = src_frame.elapsed_time_ms_;
+ dst_frame->ntp_time_ms_ = src_frame.ntp_time_ms_;
+}
+
+void RemixAndResample(const int16_t* src_data,
+ size_t samples_per_channel,
+ int num_channels,
+ int sample_rate_hz,
+ PushResampler<int16_t>* resampler,
+ AudioFrame* dst_frame) {
+ const int16_t* audio_ptr = src_data;
+ int audio_ptr_num_channels = num_channels;
int16_t mono_audio[AudioFrame::kMaxDataSizeSamples];
// Downmix before resampling.
- if (src_frame.num_channels_ == 2 && dst_frame->num_channels_ == 1) {
- AudioFrameOperations::StereoToMono(src_frame.data_,
- src_frame.samples_per_channel_,
+ if (num_channels == 2 && dst_frame->num_channels_ == 1) {
+ AudioFrameOperations::StereoToMono(src_data, samples_per_channel,
mono_audio);
audio_ptr = mono_audio;
audio_ptr_num_channels = 1;
}
- if (resampler->InitializeIfNeeded(src_frame.sample_rate_hz_,
- dst_frame->sample_rate_hz_,
+ if (resampler->InitializeIfNeeded(sample_rate_hz, dst_frame->sample_rate_hz_,
audio_ptr_num_channels) == -1) {
- LOG_FERR3(LS_ERROR, InitializeIfNeeded, src_frame.sample_rate_hz_,
+ LOG_FERR3(LS_ERROR, InitializeIfNeeded, sample_rate_hz,
dst_frame->sample_rate_hz_, audio_ptr_num_channels);
assert(false);
}
- const size_t src_length = src_frame.samples_per_channel_ *
- audio_ptr_num_channels;
+ const size_t src_length = samples_per_channel * audio_ptr_num_channels;
int out_length = resampler->Resample(audio_ptr, src_length, dst_frame->data_,
AudioFrame::kMaxDataSizeSamples);
if (out_length == -1) {
@@ -59,66 +68,12 @@ void RemixAndResample(const AudioFrame& src_frame,
static_cast<size_t>(out_length / audio_ptr_num_channels);
// Upmix after resampling.
- if (src_frame.num_channels_ == 1 && dst_frame->num_channels_ == 2) {
+ if (num_channels == 1 && dst_frame->num_channels_ == 2) {
// The audio in dst_frame really is mono at this point; MonoToStereo will
// set this back to stereo.
dst_frame->num_channels_ = 1;
AudioFrameOperations::MonoToStereo(dst_frame);
}
-
- dst_frame->timestamp_ = src_frame.timestamp_;
- dst_frame->elapsed_time_ms_ = src_frame.elapsed_time_ms_;
- dst_frame->ntp_time_ms_ = src_frame.ntp_time_ms_;
-}
-
-void DownConvertToCodecFormat(const int16_t* src_data,
- size_t samples_per_channel,
- int num_channels,
- int sample_rate_hz,
- int codec_num_channels,
- int codec_rate_hz,
- int16_t* mono_buffer,
- PushResampler<int16_t>* resampler,
- AudioFrame* dst_af) {
- assert(samples_per_channel <= kMaxMonoDataSizeSamples);
- assert(num_channels == 1 || num_channels == 2);
- assert(codec_num_channels == 1 || codec_num_channels == 2);
- dst_af->Reset();
-
- // Never upsample the capture signal here. This should be done at the
- // end of the send chain.
- int destination_rate = std::min(codec_rate_hz, sample_rate_hz);
-
- // If no stereo codecs are in use, we downmix a stereo stream from the
- // device early in the chain, before resampling.
- if (num_channels == 2 && codec_num_channels == 1) {
- AudioFrameOperations::StereoToMono(src_data, samples_per_channel,
- mono_buffer);
- src_data = mono_buffer;
- num_channels = 1;
- }
-
- if (resampler->InitializeIfNeeded(
- sample_rate_hz, destination_rate, num_channels) != 0) {
- LOG_FERR3(LS_ERROR,
- InitializeIfNeeded,
- sample_rate_hz,
- destination_rate,
- num_channels);
- assert(false);
- }
-
- const size_t in_length = samples_per_channel * num_channels;
- int out_length = resampler->Resample(
- src_data, in_length, dst_af->data_, AudioFrame::kMaxDataSizeSamples);
- if (out_length == -1) {
- LOG_FERR3(LS_ERROR, Resample, src_data, in_length, dst_af->data_);
- assert(false);
- }
-
- dst_af->samples_per_channel_ = static_cast<size_t>(out_length / num_channels);
- dst_af->sample_rate_hz_ = destination_rate;
- dst_af->num_channels_ = num_channels;
}
void MixWithSat(int16_t target[],
« no previous file with comments | « webrtc/voice_engine/utility.h ('k') | webrtc/voice_engine/utility_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698