#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 {
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:
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;
EAudioSessionType __mAudioSession;
MMSessionType __mMultimediaSession;
- mm_sound_focus_type_e __mFocusType; /* For audio focus */
- mm_sound_focus_state_e __mState; /* For audio focus */
- char* __mReasonForChange; /* For audio focus */
- char* __mAdditionalInfo; /* For audio focus */
-
CAudioInfo __mAudioInfo; /* Referenced from CAudioIO */
IAudioSessionEventListener* __mpEventListener;
bool __mIsInit;
+ unsigned int __mSubscribeId;
bool __mUseFocus;
- int __mSubscribeId;
+ int __mAcquiredFocus; /* For audio focus */
+ char* __mReasonForChange; /* For audio focus */
+ char* __mAdditionalInfo; /* For audio focus */
+
+ pthread_mutex_t __mFocusIdMutex;
+ pthread_mutex_t __mFocusCBMutex;
};