| 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
|
|
|