Chromium Code Reviews| Index: remoting/host/audio_capturer_win.cc |
| diff --git a/remoting/host/audio_capturer_win.cc b/remoting/host/audio_capturer_win.cc |
| index 55bc0855b887d8a05e8a870f8e0093da4fb11942..1d909ff4c6808ca0bc0c56614f4ccef6ed29088c 100644 |
| --- a/remoting/host/audio_capturer_win.cc |
| +++ b/remoting/host/audio_capturer_win.cc |
| @@ -23,7 +23,6 @@ |
| namespace { |
| const int kChannels = 2; |
| const int kBitsPerSample = 16; |
| -const int kSamplesPerSecond = 44100; |
| const int kBitsPerByte = 8; |
| // Conversion factor from 100ns to 1ms. |
| const int kHnsToMs = 10000; |
| @@ -48,6 +47,8 @@ class AudioCapturerWin : public AudioCapturer { |
| PacketCapturedCallback callback_; |
| + AudioPacket::SamplingRate sampling_rate_; |
| + |
| scoped_ptr<base::RepeatingTimer<AudioCapturerWin> > capture_timer_; |
| base::TimeDelta audio_device_period_; |
| @@ -62,7 +63,8 @@ class AudioCapturerWin : public AudioCapturer { |
| DISALLOW_COPY_AND_ASSIGN(AudioCapturerWin); |
| }; |
| -AudioCapturerWin::AudioCapturerWin() { |
| +AudioCapturerWin::AudioCapturerWin() |
| + : sampling_rate_(AudioPacket::SAMPLING_RATE_INVALID) { |
|
Sergey Ulanov
2012/07/26 03:40:24
nit: initializer list should be indented 4 spaces
kxing
2012/07/26 22:47:17
Done.
|
| thread_checker_.DetachFromThread(); |
| } |
| @@ -131,13 +133,20 @@ bool AudioCapturerWin::Start(const PacketCapturedCallback& callback) { |
| case WAVE_FORMAT_IEEE_FLOAT: |
| // Intentional fall-through. |
| case WAVE_FORMAT_PCM: |
| + if (!AudioCapturer::IsValidSampleRate(wave_format_ex_->nSamplesPerSec)) { |
|
Wez
2012/07/25 09:23:48
Rather than have a static test for validity, why n
kxing
2012/07/26 22:47:17
The set of valid sampling rates is the same across
Sergey Ulanov
2012/07/27 04:22:38
I discussed this with Kerry. This might be useful
|
| + LOG(ERROR) << "Host sampling rate is neither 44.1 kHz nor 48 kHz."; |
| + return false; |
|
Sergey Ulanov
2012/07/26 03:40:24
Can we still try to request some known sampling ra
kxing
2012/07/26 22:47:17
No, Pepper only supports 44.1 kHz and 48 kHz, and
|
| + } |
| + sampling_rate_ = |
| + static_cast<AudioPacket::SamplingRate>( |
| + wave_format_ex_->nSamplesPerSec); |
| + |
| wave_format_ex_->wFormatTag = WAVE_FORMAT_PCM; |
| wave_format_ex_->nChannels = kChannels; |
| - wave_format_ex_->nSamplesPerSec = kSamplesPerSecond; |
| wave_format_ex_->wBitsPerSample = kBitsPerSample; |
| wave_format_ex_->nBlockAlign = kChannels * kBitsPerSample / kBitsPerByte; |
| wave_format_ex_->nAvgBytesPerSec = |
| - kSamplesPerSecond * kChannels * kBitsPerSample / kBitsPerByte; |
| + sampling_rate_ * kChannels * kBitsPerSample / kBitsPerByte; |
| break; |
| case WAVE_FORMAT_EXTENSIBLE: { |
| PWAVEFORMATEXTENSIBLE wave_format_extensible = |
| @@ -145,16 +154,25 @@ bool AudioCapturerWin::Start(const PacketCapturedCallback& callback) { |
| static_cast<WAVEFORMATEX*>(wave_format_ex_)); |
| if (IsEqualGUID(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, |
| wave_format_extensible->SubFormat)) { |
| + if (!AudioCapturer::IsValidSampleRate( |
| + wave_format_extensible->Format.nSamplesPerSec)) { |
|
Sergey Ulanov
2012/07/26 03:40:24
nit: incorrect indentation. move it four spaces to
kxing
2012/07/26 22:47:17
Done.
|
| + LOG(ERROR) << "Host sampling rate is neither 44.1 kHz nor 48 kHz."; |
| + return false; |
| + } |
| + sampling_rate_ = |
| + static_cast<AudioPacket::SamplingRate>( |
| + wave_format_extensible->Format.nSamplesPerSec); |
|
Sergey Ulanov
2012/07/26 03:40:24
nit: indent 4 spaces relative to the previous line
kxing
2012/07/26 22:47:17
Done.
|
| + |
| wave_format_extensible->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; |
| wave_format_extensible->Samples.wValidBitsPerSample = kBitsPerSample; |
| wave_format_extensible->Format.nChannels = kChannels; |
| - wave_format_extensible->Format.nSamplesPerSec = kSamplesPerSecond; |
| + wave_format_extensible->Format.nSamplesPerSec = sampling_rate_; |
| wave_format_extensible->Format.wBitsPerSample = kBitsPerSample; |
| wave_format_extensible->Format.nBlockAlign = |
| kChannels * kBitsPerSample / kBitsPerByte; |
| wave_format_extensible->Format.nAvgBytesPerSec = |
| - kSamplesPerSecond * kChannels * kBitsPerSample / kBitsPerByte; |
| + sampling_rate_ * kChannels * kBitsPerSample / kBitsPerByte; |
| } else { |
| LOG(ERROR) << "Failed to force 16-bit samples"; |
| return false; |
| @@ -221,6 +239,7 @@ bool AudioCapturerWin::IsRunning() { |
| } |
| void AudioCapturerWin::DoCapture() { |
| + DCHECK(AudioCapturer::IsValidSampleRate(sampling_rate_)); |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| DCHECK(IsRunning()); |
| @@ -249,6 +268,7 @@ void AudioCapturerWin::DoCapture() { |
| scoped_ptr<AudioPacket> packet = scoped_ptr<AudioPacket>(new AudioPacket()); |
| packet->set_data(data, frames * wave_format_ex_->nBlockAlign); |
| + packet->set_sampling_rate(sampling_rate_); |
| callback_.Run(packet.Pass()); |