Commit fdaa93d6 authored by dtseng's avatar dtseng Committed by Commit bot

Revert of Add GetAssociatedOutputDeviceID support to pulse. (patchset #7...

Revert of Add GetAssociatedOutputDeviceID support to pulse. (patchset #7 id:120001 of https://codereview.chromium.org/2258143002/ )

Reason for revert:
Breaks audio playback on Linux Chrome OS
target_os = "chromeos" in gn args

( SoundsManager::Play fails).

Original issue's description:
> Add GetAssociatedOutputDeviceID support to pulse.
> We use the bus path for identification of devices. I have verified that it works with a headset connected with 3.5 mm connectors, and with a USB headset. Another nice thing with  his approach is that we should be able to easily find if a webcam has a built-in mic, since in this case the webcam and mic will typically be connected via the same USB port.
>
> BUG=636300
>
> Committed: https://crrev.com/cff5a1f78bd76f764a70efcdb9b908ff6a87c60f
> Cr-Commit-Position: refs/heads/master@{#415024}

TBR=guidou@chromium.org,tommi@chromium.org,maxmorin@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=636300

Review-Url: https://codereview.chromium.org/2322083003
Cr-Commit-Position: refs/heads/master@{#417523}
parent 23169a0f
...@@ -174,29 +174,6 @@ AudioInputStream* AudioManagerPulse::MakeLowLatencyInputStream( ...@@ -174,29 +174,6 @@ AudioInputStream* AudioManagerPulse::MakeLowLatencyInputStream(
return MakeInputStream(params, device_id); return MakeInputStream(params, device_id);
} }
std::string AudioManagerPulse::GetDefaultOutputDeviceID() {
return pulse::GetRealDefaultDeviceId(input_mainloop_, input_context_,
pulse::RequestType::OUTPUT);
}
std::string AudioManagerPulse::GetAssociatedOutputDeviceID(
const std::string& input_device_id) {
DCHECK(AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
DCHECK(input_mainloop_);
DCHECK(input_context_);
std::string input =
(input_device_id == AudioDeviceDescription::kDefaultDeviceId)
? pulse::GetRealDefaultDeviceId(input_mainloop_, input_context_,
pulse::RequestType::INPUT)
: input_device_id;
std::string input_bus =
pulse::GetBusOfInput(input_mainloop_, input_context_, input);
return input_bus.empty() ? ""
: pulse::GetOutputCorrespondingTo(
input_mainloop_, input_context_, input_bus);
}
AudioParameters AudioManagerPulse::GetPreferredOutputStreamParameters( AudioParameters AudioManagerPulse::GetPreferredOutputStreamParameters(
const std::string& output_device_id, const std::string& output_device_id,
const AudioParameters& input_params) { const AudioParameters& input_params) {
......
...@@ -49,9 +49,6 @@ class MEDIA_EXPORT AudioManagerPulse : public AudioManagerBase { ...@@ -49,9 +49,6 @@ class MEDIA_EXPORT AudioManagerPulse : public AudioManagerBase {
const AudioParameters& params, const AudioParameters& params,
const std::string& device_id, const std::string& device_id,
const LogCallback& log_callback) override; const LogCallback& log_callback) override;
std::string GetAssociatedOutputDeviceID(
const std::string& input_device_id) override;
std::string GetDefaultOutputDeviceID() override;
protected: protected:
~AudioManagerPulse() override; ~AudioManagerPulse() override;
......
...@@ -9,7 +9,7 @@ pa_mainloop_api* pa_threaded_mainloop_get_api(pa_threaded_mainloop* m); ...@@ -9,7 +9,7 @@ pa_mainloop_api* pa_threaded_mainloop_get_api(pa_threaded_mainloop* m);
void pa_threaded_mainloop_free(pa_threaded_mainloop* m); void pa_threaded_mainloop_free(pa_threaded_mainloop* m);
pa_threaded_mainloop* pa_threaded_mainloop_new(); pa_threaded_mainloop* pa_threaded_mainloop_new();
void pa_threaded_mainloop_lock(pa_threaded_mainloop* m); void pa_threaded_mainloop_lock(pa_threaded_mainloop* m);
int pa_threaded_mainloop_in_thread(pa_threaded_mainloop* m); int pa_threaded_mainloop_in_thread(pa_threaded_mainloop* m);
void pa_threaded_mainloop_signal(pa_threaded_mainloop* m, int wait_for_accept); void pa_threaded_mainloop_signal(pa_threaded_mainloop* m, int wait_for_accept);
int pa_threaded_mainloop_start(pa_threaded_mainloop* m); int pa_threaded_mainloop_start(pa_threaded_mainloop* m);
void pa_threaded_mainloop_stop(pa_threaded_mainloop* m); void pa_threaded_mainloop_stop(pa_threaded_mainloop* m);
...@@ -22,7 +22,7 @@ void pa_context_disconnect(pa_context* c); ...@@ -22,7 +22,7 @@ void pa_context_disconnect(pa_context* c);
pa_operation* pa_context_get_server_info(pa_context* c, pa_server_info_cb_t cb, void* userdata); pa_operation* pa_context_get_server_info(pa_context* c, pa_server_info_cb_t cb, void* userdata);
pa_operation* pa_context_get_source_info_by_index(pa_context* c, uint32_t idx, pa_source_info_cb_t cb, void* userdata); pa_operation* pa_context_get_source_info_by_index(pa_context* c, uint32_t idx, pa_source_info_cb_t cb, void* userdata);
pa_operation* pa_context_get_source_info_list(pa_context* c, pa_source_info_cb_t cb, void* userdata); pa_operation* pa_context_get_source_info_list(pa_context* c, pa_source_info_cb_t cb, void* userdata);
pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata); pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata);
pa_context_state_t pa_context_get_state(pa_context* c); pa_context_state_t pa_context_get_state(pa_context* c);
pa_context* pa_context_new(pa_mainloop_api* mainloop, const char* name); pa_context* pa_context_new(pa_mainloop_api* mainloop, const char* name);
pa_operation* pa_context_set_source_volume_by_index(pa_context* c, uint32_t idx, const pa_cvolume* volume, pa_context_success_cb_t cb, void* userdata); pa_operation* pa_context_set_source_volume_by_index(pa_context* c, uint32_t idx, const pa_cvolume* volume, pa_context_success_cb_t cb, void* userdata);
...@@ -43,9 +43,7 @@ pa_stream_state_t pa_stream_get_state(pa_stream* p); ...@@ -43,9 +43,7 @@ pa_stream_state_t pa_stream_get_state(pa_stream* p);
pa_stream* pa_stream_new(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map * map); pa_stream* pa_stream_new(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map * map);
pa_stream* pa_stream_new_with_proplist(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map* map, pa_proplist* p); pa_stream* pa_stream_new_with_proplist(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map* map, pa_proplist* p);
pa_proplist* pa_proplist_new(void); pa_proplist* pa_proplist_new(void);
int pa_proplist_contains(pa_proplist* p, const char* key);
void pa_proplist_free(pa_proplist* p); void pa_proplist_free(pa_proplist* p);
const char* pa_proplist_gets(pa_proplist* p, const char* key);
int pa_proplist_sets(pa_proplist* p, const char* key, const char* value); int pa_proplist_sets(pa_proplist* p, const char* key, const char* value);
size_t pa_stream_readable_size(pa_stream *p); size_t pa_stream_readable_size(pa_stream *p);
int pa_stream_peek(pa_stream* p, const void** data, size_t* nbytes); int pa_stream_peek(pa_stream* p, const void** data, size_t* nbytes);
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include "media/audio/pulse/pulse_util.h" #include "media/audio/pulse/pulse_util.h"
#include <stdint.h> #include <stdint.h>
#include <string.h>
#include "base/logging.h" #include "base/logging.h"
#include "base/macros.h" #include "base/macros.h"
...@@ -69,76 +68,6 @@ class ScopedPropertyList { ...@@ -69,76 +68,6 @@ class ScopedPropertyList {
DISALLOW_COPY_AND_ASSIGN(ScopedPropertyList); DISALLOW_COPY_AND_ASSIGN(ScopedPropertyList);
}; };
struct InputBusData {
InputBusData(pa_threaded_mainloop* loop, const std::string& name)
: loop_(loop), name_(name), bus_() {}
pa_threaded_mainloop* const loop_;
const std::string& name_;
std::string bus_;
};
struct OutputBusData {
OutputBusData(pa_threaded_mainloop* loop, const std::string& bus)
: loop_(loop), name_(), bus_(bus) {}
pa_threaded_mainloop* const loop_;
std::string name_;
const std::string& bus_;
};
void InputBusCallback(pa_context* context,
const pa_source_info* info,
int error,
void* user_data) {
InputBusData* data = static_cast<InputBusData*>(user_data);
if (error) {
// We have checked all the devices now.
pa_threaded_mainloop_signal(data->loop_, 0);
return;
}
if (strcmp(info->name, data->name_.c_str()) == 0 &&
pa_proplist_contains(info->proplist, PA_PROP_DEVICE_BUS)) {
data->bus_ = pa_proplist_gets(info->proplist, PA_PROP_DEVICE_BUS);
}
}
void OutputBusCallback(pa_context* context,
const pa_sink_info* info,
int error,
void* user_data) {
OutputBusData* data = static_cast<OutputBusData*>(user_data);
if (error) {
// We have checked all the devices now.
pa_threaded_mainloop_signal(data->loop_, 0);
return;
}
if (pa_proplist_contains(info->proplist, PA_PROP_DEVICE_BUS) &&
strcmp(pa_proplist_gets(info->proplist, PA_PROP_DEVICE_BUS),
data->bus_.c_str()) == 0) {
data->name_ = info->name;
}
}
struct DefaultDevicesData {
DefaultDevicesData(pa_threaded_mainloop* loop) : loop_(loop) {}
std::string input_;
std::string output_;
pa_threaded_mainloop* const loop_;
};
void GetDefaultDeviceIdCallback(pa_context* c,
const pa_server_info* info,
void* userdata) {
DefaultDevicesData* data = static_cast<DefaultDevicesData*>(userdata);
data->input_ = info->default_source_name;
data->output_ = info->default_sink_name;
pa_threaded_mainloop_signal(data->loop_, 0);
}
} // namespace } // namespace
// static, pa_stream_success_cb_t // static, pa_stream_success_cb_t
...@@ -426,42 +355,6 @@ bool CreateOutputStream(pa_threaded_mainloop** mainloop, ...@@ -426,42 +355,6 @@ bool CreateOutputStream(pa_threaded_mainloop** mainloop,
return true; return true;
} }
std::string GetBusOfInput(pa_threaded_mainloop* mainloop,
pa_context* context,
const std::string& name) {
DCHECK(mainloop);
DCHECK(context);
AutoPulseLock auto_lock(mainloop);
InputBusData data(mainloop, name);
pa_operation* operation =
pa_context_get_source_info_list(context, InputBusCallback, &data);
WaitForOperationCompletion(mainloop, operation);
return data.bus_;
}
std::string GetOutputCorrespondingTo(pa_threaded_mainloop* mainloop,
pa_context* context,
const std::string& bus) {
DCHECK(mainloop);
DCHECK(context);
AutoPulseLock auto_lock(mainloop);
OutputBusData data(mainloop, bus);
pa_operation* operation =
pa_context_get_sink_info_list(context, OutputBusCallback, &data);
WaitForOperationCompletion(mainloop, operation);
return data.name_;
}
std::string GetRealDefaultDeviceId(pa_threaded_mainloop* mainloop,
pa_context* context,
RequestType type) {
DefaultDevicesData data(mainloop);
pa_operation* op =
pa_context_get_server_info(context, &GetDefaultDeviceIdCallback, &data);
WaitForOperationCompletion(mainloop, op);
return (type == RequestType::INPUT) ? data.input_ : data.output_;
}
#undef RETURN_ON_FAILURE #undef RETURN_ON_FAILURE
} // namespace pulse } // namespace pulse
......
...@@ -17,8 +17,6 @@ class AudioParameters; ...@@ -17,8 +17,6 @@ class AudioParameters;
namespace pulse { namespace pulse {
enum class RequestType : int8_t { INPUT, OUTPUT };
// A helper class that acquires pa_threaded_mainloop_lock() while in scope. // A helper class that acquires pa_threaded_mainloop_lock() while in scope.
class AutoPulseLock { class AutoPulseLock {
public: public:
...@@ -77,16 +75,6 @@ bool CreateOutputStream(pa_threaded_mainloop** mainloop, ...@@ -77,16 +75,6 @@ bool CreateOutputStream(pa_threaded_mainloop** mainloop,
pa_stream_request_cb_t write_callback, pa_stream_request_cb_t write_callback,
void* user_data); void* user_data);
// Utility functions to match up outputs and inputs.
std::string GetBusOfInput(pa_threaded_mainloop* mainloop,
pa_context* context,
const std::string& name);
std::string GetOutputCorrespondingTo(pa_threaded_mainloop* mainloop,
pa_context* context,
const std::string& bus);
std::string GetRealDefaultDeviceId(pa_threaded_mainloop* mainloop,
pa_context* context,
RequestType type);
} // namespace pulse } // namespace pulse
} // namespace media } // namespace media
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment