#ifndef __TIZEN_MEDIA_AUDIO_IO_CAUDIO_IO_H__
#define __TIZEN_MEDIA_AUDIO_IO_CAUDIO_IO_H__
+#include <sound_manager.h>
#ifdef __cplusplus
* You can't take this object directly.
*/
class IPulseStreamListener;
- class IAudioSessionEventListener;
- class CAudioIO : public IPulseStreamListener, public IAudioSessionEventListener {
+ class CAudioIO : public IPulseStreamListener {
public:
struct SStreamCallback {
void* mUserData;
void (*onStream)(size_t nbytes, void* user_data);
- SStreamCallback() : mUserData(NULL), onStream(NULL)
+ SStreamCallback() : mUserData(nullptr), onStream(nullptr)
{ /* Empty Body */ }
};
void* mUserData;
void (*onStateChanged)(CAudioInfo::EAudioIOState state, CAudioInfo::EAudioIOState statePrev, bool byPolicy, void* user_data);
- SStateChangedCallback() : mUserData(NULL), onStateChanged(NULL)
- { /* Empty Body */ }
- };
-
- struct SInterruptCallback {
- void* mUserData;
- void (*onInterrupt)(IAudioSessionEventListener::EInterruptCode code, void* user_data);
-
- SInterruptCallback() : mUserData(NULL), onInterrupt(NULL)
+ SStateChangedCallback() : mUserData(nullptr), onStateChanged(nullptr)
{ /* Empty Body */ }
};
/* Constructor & Destructor */
CAudioIO();
- CAudioIO(CAudioInfo& audioInfo);
- virtual ~CAudioIO();
+ explicit CAudioIO(CAudioInfo& audioInfo);
+ virtual ~CAudioIO() = default;
/* Pure Virtual Methods */
- virtual void initialize() throw(CAudioError) = 0;
+ virtual void initialize() = 0;
virtual void finalize() = 0;
- virtual void prepare() throw(CAudioError) = 0;
- virtual void unprepare() throw(CAudioError) = 0;
+ virtual void prepare() = 0;
+ virtual void unprepare() = 0;
- virtual void pause() throw(CAudioError) = 0;
- virtual void resume() throw(CAudioError) = 0;
+ virtual void pause() = 0;
+ virtual void resume() = 0;
- virtual void drain() throw(CAudioError) = 0;
- virtual void flush() throw(CAudioError) = 0;
+ /* FIXME : drain needed to be moved to sub-class */
+ virtual void drain();
+ virtual void flush() = 0;
- virtual int getBufferSize() throw(CAudioError) = 0;
+ virtual int getBufferSize() = 0;
/* Implemented Handlers */
virtual void onStream(CPulseAudioClient* pClient, size_t length);
virtual void onStateChanged(CAudioInfo::EAudioIOState state, bool byPolicy);
virtual void onStateChanged(CAudioInfo::EAudioIOState state);
- virtual void onInterrupt(CAudioSessionHandler* pHandler, int id, mm_sound_focus_type_e focus_type, mm_sound_focus_state_e state, const char *reason_for_change, const char *additional_info);
- virtual void onSignal(CAudioSessionHandler* pHandler, mm_sound_signal_name_t signal, int value);
/* Methods */
- CAudioInfo& getAudioInfo() throw(CAudioError);
+ CAudioInfo& getAudioInfo();
- virtual void setStreamCallback(SStreamCallback callback) throw(CAudioError);
- SStreamCallback getStreamCallback() throw(CAudioError);
+ virtual void setStreamCallback(SStreamCallback callback);
+ SStreamCallback getStreamCallback();
- virtual void setStateChangedCallback(SStateChangedCallback callback) throw(CAudioError);
- SStateChangedCallback getStateChangedCallback() throw(CAudioError);
+ virtual void setStateChangedCallback(SStateChangedCallback callback);
+ SStateChangedCallback getStateChangedCallback();
- void setInterruptCallback(SInterruptCallback callback) throw(CAudioError);
- SInterruptCallback getInterruptCallback() throw(CAudioError);
+ void setStreamInfo(sound_stream_info_h stream_info);
- void ignoreSession() throw(CAudioError);
-
- void setStreamInfo(sound_stream_info_h stream_info) throw(CAudioError);
-
- void setInternalStreamInfo() throw(CAudioError); /* this is for session backward compatibility and will be removed later */
-
- CAudioInfo::EAudioIOState getState();
+ CAudioInfo::EAudioIOState getState() noexcept;
protected:
/* Protected Methods */
virtual bool isInit();
virtual bool IsReady();
- void internalLock() throw(CAudioError);
- void internalUnlock() throw(CAudioError);
- void internalWait() throw(CAudioError);
- void internalSignal() throw(CAudioError);
+ void internalLock();
+ void internalUnlock();
+ void internalWait();
+ void internalSignal();
- bool isForceIgnore();
-
- CAudioSessionHandler* mpAudioSessionHandler;
CPulseAudioClient* mpPulseAudioClient;
CAudioInfo mAudioInfo;
SStreamCallback mStreamCallback;
SStateChangedCallback mStateChangedCallback;
- SInterruptCallback mInterruptCallback;
CAudioInfo::EAudioDirection mDirection;
CAudioInfo::EAudioIOState mState;
private:
pthread_mutex_t __mMutex;
+ pthread_mutex_t __mCondMutex;
pthread_cond_t __mCond;
bool __mIsInit;
- bool __mForceIgnore;
-
- void abandonInternalFocus() throw(CAudioError); /* this is for session backward compatibility and will be removed later */
};