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

Unified Diff: remoting/host/audio_capturer_win.cc

Issue 10818010: Added support for multiple sampling rates on Windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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: 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());

Powered by Google App Engine
This is Rietveld 408576698