Throw invalid operation error when unprepare() is called at inside of pulse-thread
[platform/core/api/audio-io.git] / include / CAudioSessionHandler.h
index b51e0df..cd971b2 100644 (file)
 
 #ifdef __cplusplus
 
-
+#include <pthread.h>
 #include <mm_session.h>
 #include <mm_session_private.h>
 #include <mm_sound.h>
 #include <mm_sound_focus.h>
+#include <sound_manager.h>
+#include <sound_manager_internal.h>
 
 namespace tizen_media_audio {
 
@@ -44,24 +46,25 @@ namespace tizen_media_audio {
         virtual ~CAudioSessionHandler();
 
         /* Methods */
-        virtual void initialize() throw(CAudioError);
+        virtual void initialize();
         virtual void finalize();
 
-        bool isSkipSessionEvent() throw(CAudioError);
+        bool isSkipSession();
 
-        void registerSound() throw(CAudioError);
-        void unregisterSound() throw(CAudioError);
+        void registerSound();
+        void unregisterSound();
 
-        void updatePlaying() throw(CAudioError);
-        void updateStop() throw(CAudioError);
-        void disableSessionHandler() throw(CAudioError);
+        void updatePlaying();
+        void updateStop();
+        void disableSessionHandler();
 
         /* Setter & Getter */
         int getId();
         int getOptions();
         EAudioSessionType  getAudioSession();
         MMSessionType      getMultimediaSession();
-        int getSubscribeId();
+        void getInternalVoipStreamInfo(sound_stream_info_h *stream_info);
+        unsigned int getSubscribeId();
         CAudioInfo getAudioInfo();
 
     private:
@@ -105,13 +108,19 @@ namespace tizen_media_audio {
         static int __focusIdCountGet();
 
         static void __sound_pcm_signal_cb(mm_sound_signal_name_t signal, int value, void *user_data);
-        static void __sound_pcm_focus_cb(int id, mm_sound_focus_type_e focus_type, mm_sound_focus_state_e state, const char *reason_for_change, const char *additional_info, void *user_data);
+        static void __sound_pcm_focus_cb(int id, mm_sound_focus_type_e focus_type, mm_sound_focus_state_e state, const char *reason_for_change, int option, const char *additional_info, void *user_data);
         static void __sound_pcm_focus_watch_cb(int id, mm_sound_focus_type_e focus_type, mm_sound_focus_state_e state, const char *reason_for_change, const char *additional_info, void *user_data);
 
         /* Private Method */
         CAudioError __convertStreamType(EAudioSessionType type1, MMSessionType type2, int *index);
         CAudioError __getAsmInformation(MMSessionType *type, int *options);
         bool __isFocusRequired(MMSessionType type, int options);
+        bool __isFocusDisableReacquisitionRequired(MMSessionType type, int options);
+        void __lockFocusIdMutex();
+        void __unlockFocusIdMutex();
+        void __lockFocusCBMutex();
+        void __unlockFocusCBMutex();
+        bool __checkNeedBlock(const char *focus_acquired_by);
 
         /* Static Member */
         static int                  __sCaptureRef;
@@ -129,13 +138,15 @@ namespace tizen_media_audio {
         IAudioSessionEventListener* __mpEventListener;
 
         bool                        __mIsInit;
-        int                         __mSubscribeId;
+        unsigned int                __mSubscribeId;
 
         bool                        __mUseFocus;
-        mm_sound_focus_type_e       __mFocusType;        /* For audio focus */
-        mm_sound_focus_state_e      __mState;            /* For audio focus */
+        int                         __mAcquiredFocus;    /* For audio focus */
         char*                       __mReasonForChange;  /* For audio focus */
         char*                       __mAdditionalInfo;   /* For audio focus */
+
+        pthread_mutex_t             __mFocusIdMutex;
+        pthread_mutex_t             __mFocusCBMutex;
     };