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

Unified Diff: media/audio/pulse/audio_manager_pulse.cc

Issue 2345813002: Query native channel count in preferred parameters. (Closed)
Patch Set: Created 4 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
Index: media/audio/pulse/audio_manager_pulse.cc
diff --git a/media/audio/pulse/audio_manager_pulse.cc b/media/audio/pulse/audio_manager_pulse.cc
index 398826ae1c360a03dcaebfcfea59e8be8e592adb..afa70640d4d367a11ce4afa425f8dc221a435984 100644
--- a/media/audio/pulse/audio_manager_pulse.cc
+++ b/media/audio/pulse/audio_manager_pulse.cc
@@ -58,7 +58,8 @@ AudioManagerPulse::AudioManagerPulse(
input_mainloop_(NULL),
input_context_(NULL),
devices_(NULL),
- native_input_sample_rate_(0) {
+ native_input_sample_rate_(0),
+ native_channel_count_(0) {
SetMaxOutputStreamsAllowed(kMaxOutputStreams);
}
@@ -136,8 +137,9 @@ AudioParameters AudioManagerPulse::GetInputStreamParameters(
user_buffer_size : kDefaultInputBufferSize;
// TODO(xians): add support for querying native channel layout for pulse.
+ UpdateNativeAudioHardwareInfo();
return AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY,
- CHANNEL_LAYOUT_STEREO, GetNativeSampleRate(), 16,
+ CHANNEL_LAYOUT_STEREO, native_input_sample_rate_, 16,
buffer_size);
}
@@ -180,10 +182,15 @@ AudioParameters AudioManagerPulse::GetPreferredOutputStreamParameters(
// TODO(tommi): Support |output_device_id|.
VLOG_IF(0, !output_device_id.empty()) << "Not implemented!";
- ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
int buffer_size = kMinimumOutputBufferSize;
int bits_per_sample = 16;
- int sample_rate = GetNativeSampleRate();
+
+ // Query native parameters where applicable; Pulse does not require these to
+ // be respected though, so prefer the input parameters for channel count.
+ UpdateNativeAudioHardwareInfo();
+ int sample_rate = native_input_sample_rate_;
+ ChannelLayout channel_layout = GuessChannelLayout(native_channel_count_);
+
if (input_params.IsValid()) {
bits_per_sample = input_params.bits_per_sample();
channel_layout = input_params.channel_layout();
@@ -213,15 +220,13 @@ AudioInputStream* AudioManagerPulse::MakeInputStream(
input_mainloop_, input_context_);
}
-int AudioManagerPulse::GetNativeSampleRate() {
+void AudioManagerPulse::UpdateNativeAudioHardwareInfo() {
DCHECK(input_mainloop_);
DCHECK(input_context_);
AutoPulseLock auto_lock(input_mainloop_);
pa_operation* operation = pa_context_get_server_info(
- input_context_, SampleRateInfoCallback, this);
+ input_context_, AudioHardwareInfoCallback, this);
WaitForOperationCompletion(input_mainloop_, operation);
-
- return native_input_sample_rate_;
}
bool AudioManagerPulse::InitPulse() {
@@ -336,12 +341,13 @@ void AudioManagerPulse::OutputDevicesInfoCallback(pa_context* context,
info->name));
}
-void AudioManagerPulse::SampleRateInfoCallback(pa_context* context,
- const pa_server_info* info,
- void* user_data) {
+void AudioManagerPulse::AudioHardwareInfoCallback(pa_context* context,
+ const pa_server_info* info,
+ void* user_data) {
AudioManagerPulse* manager = reinterpret_cast<AudioManagerPulse*>(user_data);
manager->native_input_sample_rate_ = info->sample_spec.rate;
+ manager->native_channel_count_ = info->sample_spec.channels;
pa_threaded_mainloop_signal(manager->input_mainloop_, 0);
}
« media/audio/pulse/audio_manager_pulse.h ('K') | « media/audio/pulse/audio_manager_pulse.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698