#include <pulse/pulseaudio.h>
-#include <pulse/ext-policy.h>
namespace tizen_media_audio {
class CPulseStreamSpec;
class CPulseAudioClient {
public:
- /* Constants */
- static const char* CLIENT_NAME;
-
- enum EStreamDirection {
+ enum class EStreamDirection : unsigned int {
STREAM_DIRECTION_RECORD, /**< Record stream */
STREAM_DIRECTION_PLAYBACK /**< Playback stream */
};
- private:
- /* Members */
- EStreamDirection mDirection;
- CPulseStreamSpec mSpec;
- IPulseStreamListener* mpListener;
-
- pa_threaded_mainloop* mpMainloop;
- pa_context* mpContext;
- pa_stream* mpStream;
- pa_proplist* mpPropList;
-
- bool mIsInit;
- bool mIsOperationSuccess;
-
- /* Static Methods */
-
- /* Private Method */
-
- /* Private Calblack Method */
- static void _contextStateChangeCb(pa_context* c, void* user_data);
- static void _successContextCb(pa_context* c, int success, void* user_data);
-
- static void _streamStateChangeCb(pa_stream* s, void* user_data);
- static void _streamCaptureCb(pa_stream* s, size_t length, void* user_data);
- static void _streamPlaybackCb(pa_stream* s, size_t length, void* user_data);
- static void _streamLatencyUpdateCb(pa_stream* s, void* user_data);
- static void _successStreamCb(pa_stream* s, int success, void* user_data);
+ /* Constants */
+ static const char* CLIENT_NAME;
- public:
/* Constructor & Destructor */
CPulseAudioClient(EStreamDirection direction,
CPulseStreamSpec& spec,
~CPulseAudioClient();
/* Implemented Methods */
- void initialize() throw (CAudioError);
+ void initialize();
void finalize();
/* Methods */
- int peek(const void** data, size_t* length) throw (CAudioError);
- int drop() throw (CAudioError);
- int write(const void* data, size_t length) throw (CAudioError);
+ int read(void* buffer, size_t length);
+ int peek(const void** buffer, size_t* length);
+ int drop();
+ int write(const void* buffer, size_t length);
- void cork(bool cork) throw (CAudioError);
- bool isCorked() throw (CAudioError);
+ void cork(bool cork);
+ bool isCorked();
- bool drain() throw (CAudioError);
- bool flush() throw (CAudioError);
+ bool drain();
+ bool flush();
- void checkRunningState() throw (CAudioError);
- bool isInThread() throw (CAudioError);
+ void checkRunningState();
+ bool isInThread();
- size_t getWritableSize() throw (CAudioError);
- size_t getReadableSize() throw (CAudioError);
+ size_t getWritableSize();
+ size_t getReadableSize();
- size_t getBufferSize() throw (CAudioError);
+ size_t getBufferSize();
- pa_usec_t getLatency() throw (CAudioError);
- pa_usec_t getFinalLatency() throw (CAudioError);
+ pa_usec_t getLatency();
+ pa_usec_t getFinalLatency();
/* Setter & Getter */
EStreamDirection getStreamDirection();
CPulseStreamSpec getStreamSpec();
+
+ private:
+ /* Members */
+ EStreamDirection __mDirection;
+ CPulseStreamSpec __mSpec;
+ IPulseStreamListener* __mpListener;
+
+ pa_threaded_mainloop* __mpMainloop;
+ pa_context* __mpContext;
+ pa_stream* __mpStream;
+ pa_proplist* __mpPropList;
+
+ bool __mIsInit;
+ bool __mIsOperationSuccess;
+
+ const void* __mpSyncReadDataPtr;
+ size_t __mSyncReadIndex;
+ size_t __mSyncReadLength;
+ bool __mIsUsedSyncRead;
+ bool __mIsFirstStream;
+ bool __mIsDraining;
+ bool __mIsStarted;
+
+ /* Static Methods */
+
+ /* Private Method */
+
+ /* Private Calblack Method */
+ static void __contextStateChangeCb(pa_context* c, void* user_data);
+ static void __successContextCb(pa_context* c, int success, void* user_data);
+
+ static void __streamStateChangeCb(pa_stream* s, void* user_data);
+ static void __streamCaptureCb(pa_stream* s, size_t length, void* user_data);
+ static void __streamPlaybackCb(pa_stream* s, size_t length, void* user_data);
+ static void __streamLatencyUpdateCb(pa_stream* s, void* user_data);
+ static void __streamStartedCb(pa_stream* s, void* user_data);
+ static void __streamUnderflowCb(pa_stream* s, void* user_data);
+ static void __streamEventCb(pa_stream* s, const char *name, pa_proplist *pl, void *user_data);
+ static void __successStreamCb(pa_stream* s, int success, void* user_data);
+ static void __successDrainCb(pa_stream* s, int success, void* user_data);
+ static void __successDrainCbInThread(pa_stream* s, int success, void* user_data);
};