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

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: Uploaded the correct set of changes 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
« no previous file with comments | « remoting/host/audio_capturer.cc ('k') | remoting/remoting.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..8a256454fac9362d4a5774fb85a00c1cc1cd4328 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,8 +63,9 @@ class AudioCapturerWin : public AudioCapturer {
DISALLOW_COPY_AND_ASSIGN(AudioCapturerWin);
};
-AudioCapturerWin::AudioCapturerWin() {
- thread_checker_.DetachFromThread();
+AudioCapturerWin::AudioCapturerWin()
+ : sampling_rate_(AudioPacket::SAMPLING_RATE_INVALID) {
+ thread_checker_.DetachFromThread();
}
AudioCapturerWin::~AudioCapturerWin() {
@@ -131,13 +133,19 @@ 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)) {
+ LOG(ERROR) << "Host sampling rate is neither 44.1 kHz nor 48 kHz.";
+ return false;
+ }
+ 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 +153,24 @@ 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)) {
+ 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);
+
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;
@@ -162,7 +178,7 @@ bool AudioCapturerWin::Start(const PacketCapturedCallback& callback) {
break;
}
default:
- LOG(ERROR) << "Failed to force 16-bit samples";
+ LOG(ERROR) << "Failed to force 16-bit PCM";
return false;
}
@@ -221,6 +237,7 @@ bool AudioCapturerWin::IsRunning() {
}
void AudioCapturerWin::DoCapture() {
+ DCHECK(AudioCapturer::IsValidSampleRate(sampling_rate_));
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(IsRunning());
@@ -249,6 +266,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());
« no previous file with comments | « remoting/host/audio_capturer.cc ('k') | remoting/remoting.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698