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

Unified Diff: media/audio/pulse/pulse_wrapper.h

Issue 10952024: Adding pulseaudio input support to chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: switched to dynamic linking and addressed Andrew's comments. Created 7 years, 10 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/pulse_wrapper.h
diff --git a/media/audio/pulse/pulse_wrapper.h b/media/audio/pulse/pulse_wrapper.h
new file mode 100644
index 0000000000000000000000000000000000000000..4d3fd188759e69a200cd4134657c05ed2f267675
--- /dev/null
+++ b/media/audio/pulse/pulse_wrapper.h
@@ -0,0 +1,148 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <pulse/pulseaudio.h>
+
+#include "base/basictypes.h"
+#include "base/scoped_native_library.h"
+
+namespace media {
+
+// PulseWrapper is a stateless class that loads the pulse audio library
+// dynamically and wraps the pulse library commands we want to use.
+class PulseWrapper {
+ public:
+ PulseWrapper();
+ virtual ~PulseWrapper();
+
+ static PulseWrapper* Create();
+
+ typedef pa_mainloop_api*(*PaThreadedMainloopGetApiT)(pa_threaded_mainloop* m);
+ typedef void(*PaThreadedMainloopFreeT)(pa_threaded_mainloop* m);
+ typedef pa_threaded_mainloop*(*PaThreadedMainloopNewT)();
+ typedef void(*PaThreadedMainloopLockT)(pa_threaded_mainloop* m);
+ typedef void(*PaThreadedMainloopSignalT)(
+ pa_threaded_mainloop* m, int wait_for_accept);
+ typedef int(*PaThreadedMainloopStartT)(pa_threaded_mainloop* m);
+ typedef void(*PaThreadedMainloopStopT)(pa_threaded_mainloop* m);
+ typedef void(*PaThreadedMainloopUnlockT)(pa_threaded_mainloop* m);
+ typedef void(*PaThreadedMainloopWaitT)(pa_threaded_mainloop* m);
+ typedef pa_channel_map*(*PaChannelMapInitT)(pa_channel_map* m);
+ typedef int(*PaContextConnectT)(
+ pa_context* c, const char* server, pa_context_flags_t flags,
+ const pa_spawn_api* api);
+ typedef void(*PaContextDisconnectT)(pa_context* c);
+ typedef pa_operation*(*PaContextGetServerInfoT)(
+ pa_context* c, pa_server_info_cb_t cb, void* userdata);
+ typedef pa_operation*(*PaContextGetSourceInfoByIndexT)(
+ pa_context* c, uint32_t idx, pa_source_info_cb_t cb, void* userdata);
+ typedef pa_operation*(*PaContextGetSourceInfoListT)(
+ pa_context* c, pa_source_info_cb_t cb, void* userdata);
+ typedef pa_context_state_t(*PaContextGetStateT)(pa_context* c);
+ typedef pa_context*(*PaContextNew)(
+ pa_mainloop_api* mainloop, const char* name);
+ typedef pa_operation*(*PaContextSetSourceVolumeByIndexT)(
+ pa_context* c, uint32_t idx, const pa_cvolume* volume,
+ pa_context_success_cb_t cb, void* userdata);
+ typedef void(*PaContextSetStateCallbackT)(
+ pa_context* c, pa_context_notify_cb_t cb, void* userdata);
+ typedef void(*PaContextUnrefT)(pa_context* c);
+ typedef pa_operation_state_t(*PaOperationGetStateT)(pa_operation* o);
+ typedef void(*PaOperationUnrefT)(pa_operation* o);
+ typedef int(*PaStreamBeginWriteT)(pa_stream* p, void** data, size_t* nbytes);
+ typedef int(*PaStreamConnectPlaybackT)(
+ pa_stream* s, const char* dev, const pa_buffer_attr* attr,
+ pa_stream_flags_t flags, const pa_cvolume* volume,
+ pa_stream* sync_stream);
+ typedef int(*PaStreamConnectRecordT)(
+ pa_stream* s, const char* dev, const pa_buffer_attr* attr,
+ pa_stream_flags_t flags);
+ typedef pa_operation*(*PaStreamCorkT)(
+ pa_stream* s, int b, pa_stream_success_cb_t cb, void* userdata);
+ typedef int(*PaStreamDisconnectT)(pa_stream* s);
+ typedef int(*PaStreamDropT)(pa_stream *p);
+ typedef pa_operation*(*PaStreamFlushT)(
+ pa_stream* s, pa_stream_success_cb_t cb, void* userdata);
+ typedef uint32_t(*PaStreamGetDeviceIndexT)(pa_stream* s);
+ typedef int(*PaStreamGetLatencyT)(
+ pa_stream* s, pa_usec_t* r_usec, int* negative);
+ typedef pa_stream_state_t(*PaStreamGetStateT)(pa_stream* p);
+ typedef pa_stream*(*PaStreamNewT)(
+ pa_context* c, const char* name, const pa_sample_spec* ss,
+ const pa_channel_map * map);
+ typedef size_t(*PaStreamReadableSizeT)(pa_stream *p);
+ typedef int(*PaStreamPeekT)(
+ pa_stream* p, const void** data, size_t* nbytes);
+ typedef void(*PaStreamSetReadCallbackT)(
+ pa_stream* p, pa_stream_request_cb_t cb, void* userdata);
+ typedef void(*PaStreamSetStateCallbackT)(
+ pa_stream* s, pa_stream_notify_cb_t cb, void* userdata);
+ typedef void(*PaStreamUnrefT)(pa_stream* s);
+ typedef void(*PaStreamSetWriteCallbackT)(
+ pa_stream *p, pa_stream_request_cb_t cb, void *userdata);
+ typedef int(*PaStreamWriteT)(
+ pa_stream* p, const void* data, size_t nbytes,
+ pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek);
+ typedef int(*PaContextErrnoT)(pa_context *c);
+ typedef const char*(*PaStrerrorT)(int error);
+ typedef pa_cvolume*(*PaCvolumeSetT)(
+ pa_cvolume* a, unsigned channels, pa_volume_t v);
+
+ PaThreadedMainloopGetApiT pa_threaded_mainloop_get_api_;
+ PaThreadedMainloopFreeT pa_threaded_mainloop_free_;
+ PaThreadedMainloopNewT pa_threaded_mainloop_new_;
+ PaThreadedMainloopLockT pa_threaded_mainloop_lock_;
+ PaThreadedMainloopSignalT pa_threaded_mainloop_signal_;
+ PaThreadedMainloopStartT pa_threaded_mainloop_start_;
+ PaThreadedMainloopStopT pa_threaded_mainloop_stop_;
+ PaThreadedMainloopUnlockT pa_threaded_mainloop_unlock_;
+ PaThreadedMainloopWaitT pa_threaded_mainloop_wait_;
+ PaChannelMapInitT pa_channel_map_init_;
+ PaContextConnectT pa_context_connect_;
+ PaContextDisconnectT pa_context_disconnect_;
+ PaContextErrnoT pa_context_errno_;
+ PaContextGetServerInfoT pa_context_get_server_info_;
+ PaContextGetSourceInfoByIndexT pa_context_get_source_info_by_index_;
+ PaContextGetSourceInfoListT pa_context_get_source_info_list_;
+ PaContextGetStateT pa_context_get_state_;
+ PaContextNew pa_context_new_;
+ PaContextSetSourceVolumeByIndexT pa_context_set_source_volume_by_index_;
+ PaContextSetStateCallbackT pa_context_set_state_callback_;
+ PaContextUnrefT pa_context_unref_;
+ PaOperationGetStateT pa_operation_get_state_;
+ PaOperationUnrefT pa_operation_unref_;
+ PaStreamBeginWriteT pa_stream_begin_write_;
+ PaStreamConnectPlaybackT pa_stream_connect_playback_;
+ PaStreamConnectRecordT pa_stream_connect_record_;
+ PaStreamCorkT pa_stream_cork_;
+ PaStreamDisconnectT pa_stream_disconnect_;
+ PaStreamDropT pa_stream_drop_;
+ PaStreamFlushT pa_stream_flush_;
+ PaStreamGetDeviceIndexT pa_stream_get_device_index_;
+ PaStreamGetLatencyT pa_stream_get_latency_;
+ PaStreamGetStateT pa_stream_get_state_;
+ PaStreamNewT pa_stream_new_;
+ PaStreamPeekT pa_stream_peek_;
+ PaStreamReadableSizeT pa_stream_readable_size_;
+ PaStreamSetReadCallbackT pa_stream_set_read_callback_;
+ PaStreamSetStateCallbackT pa_stream_set_state_callback_;
+ PaStreamSetWriteCallbackT pa_stream_set_write_callback_;
+ PaStreamUnrefT pa_stream_unref_;
+ PaStreamWriteT pa_stream_write_;
+ PaStrerrorT pa_strerror_;
+ PaCvolumeSetT pa_cvolume_set_;
+
+ private:
+ // Loads the pulse library and symbols.
+ bool Load();
+
+ // Binds the |function_pointer| to the Pulse function.
+ template <class T>
+ bool Bind(T* function_pointer, const std::string& function_name);
+
+ base::ScopedNativeLibrary pulse_lib_;
+ DISALLOW_COPY_AND_ASSIGN(PulseWrapper);
+};
+
+} // namespace media

Powered by Google App Engine
This is Rietveld 408576698