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

Unified Diff: media/audio/linux/audio_manager_linux.cc

Issue 3299005: Implement audio recording for Linux via ALSA. (Closed)
Patch Set: . Created 10 years, 4 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: media/audio/linux/audio_manager_linux.cc
diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc
index 40a878341335d81736af0056302521f161085398..b22ec44e7dfc6ac516160f210e0ae6fa16d731de 100644
--- a/media/audio/linux/audio_manager_linux.cc
+++ b/media/audio/linux/audio_manager_linux.cc
@@ -8,10 +8,19 @@
#include "base/logging.h"
#include "media/audio/fake_audio_input_stream.h"
#include "media/audio/fake_audio_output_stream.h"
+#include "media/audio/linux/alsa_input.h"
#include "media/audio/linux/alsa_output.h"
#include "media/audio/linux/alsa_wrapper.h"
+#include "media/base/limits.h"
#include "media/base/media_switches.h"
+namespace {
+
+const int kMaxInputChannels = 2;
+const int kMaxSamplesPerPacket = media::Limits::kMaxSampleRate;
+
+} // namespace
+
// Implementation of AudioManager.
bool AudioManagerLinux::HasAudioOutputDevices() {
// TODO(ajwong): Make this actually query audio devices.
@@ -19,8 +28,8 @@ bool AudioManagerLinux::HasAudioOutputDevices() {
}
bool AudioManagerLinux::HasAudioInputDevices() {
- // TODO(satish): implement.
- return false;
+ // TODO(satish): Make this actually query audio devices.
+ return true;
}
AudioOutputStream* AudioManagerLinux::MakeAudioOutputStream(
@@ -36,9 +45,10 @@ AudioOutputStream* AudioManagerLinux::MakeAudioOutputStream(
}
std::string device_name = AlsaPcmOutputStream::kAutoSelectDevice;
- if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAlsaDevice)) {
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kAlsaOutputDevice)) {
device_name = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kAlsaDevice);
+ switches::kAlsaOutputDevice);
}
AlsaPcmOutputStream* stream =
new AlsaPcmOutputStream(device_name, params, wrapper_.get(), this,
@@ -51,11 +61,29 @@ AudioOutputStream* AudioManagerLinux::MakeAudioOutputStream(
AudioInputStream* AudioManagerLinux::MakeAudioInputStream(
AudioParameters params, int samples_per_packet) {
+ if (!params.IsValid() || params.channels > kMaxInputChannels ||
+ samples_per_packet < 0 || samples_per_packet > kMaxSamplesPerPacket)
+ return NULL;
+
if (params.format == AudioParameters::AUDIO_MOCK) {
return FakeAudioInputStream::MakeFakeStream(params, samples_per_packet);
+ } else if (params.format != AudioParameters::AUDIO_PCM_LINEAR) {
+ return NULL;
+ }
+
+ if (!initialized())
+ return NULL;
+
+ std::string device_name = AlsaPcmOutputStream::kAutoSelectDevice;
+ if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAlsaInputDevice)) {
+ device_name = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+ switches::kAlsaInputDevice);
}
- // TODO(satish): implement.
- return NULL;
+
+ AlsaPcmInputStream* stream = new AlsaPcmInputStream(
+ device_name, params, samples_per_packet, wrapper_.get());
+
+ return stream;
}
AudioManagerLinux::AudioManagerLinux() {

Powered by Google App Engine
This is Rietveld 408576698