*/
+#include <unistd.h>
#include <mm_error.h>
#include "CAudioIODef.h"
__mMultimediaSession(MM_SESSION_TYPE_MEDIA),
__mpEventListener(listener),
__mIsInit(false),
+ __mSubscribeId(-1),
__mUseFocus(false),
- __mSubscribeId(-1) {
+ __mFocusType(FOCUS_NONE),
+ __mState(FOCUS_IS_RELEASED),
+ __mReasonForChange(NULL),
+ __mAdditionalInfo(NULL) {
__mAudioInfo = audioInfo;
}
CAudioError err = __getAsmInformation(¤tSession, &sessionOptions);
if (err == CAudioError::EError::ERROR_NONE) {
- // Session was configured before, use focus callback
- __mUseFocus = true;
- AUDIO_IO_LOGD("Use audio focus concept internally!");
+ if (currentSession == MM_SESSION_TYPE_REPLACED_BY_STREAM) {
+ __mUseFocus = false;
+ AUDIO_IO_LOGD("Stream info. was created outside, skip audio focus concept internally!");
+ } else {
+ // Session was configured before, use focus callback
+ __mUseFocus = true;
+ AUDIO_IO_LOGD("Use audio focus concept internally!");
+ }
} else {
if (err == CAudioError::EError::ERROR_INVALID_HANDLE) {
- int value = 0;
+ // No session, No stream_info, No focus watch callback before
+ // Use focus watch callback with signal subscribe
unsigned int subscribe_id;
-
- int errorCode = mm_sound_get_signal_value(MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS, &value);
+ int errorCode = mm_sound_subscribe_signal(MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS, &subscribe_id, __sound_pcm_signal_cb, static_cast<void*>(this));
if (errorCode != MM_ERROR_NONE) {
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_POLICY_BLOCKED, "Failed mm_sound_get_signal_value() err:0x%x", errorCode);
+ THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_POLICY_BLOCKED, "Failed mm_sound_subscribe_signal() err:0x%x", errorCode);
}
- if (value == 1) {
- // stream_info was created or focus watch callback was configured before
- __mUseFocus = false;
- AUDIO_IO_LOGD("Skip audio focus concept!");
- } else if (value == 0) {
- // No session, No stream_info, No focus watch callback before
- // Use focus watch callback with signal subscribe
- errorCode = mm_sound_subscribe_signal(MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS, &subscribe_id, __sound_pcm_signal_cb, static_cast<void*>(this));
- if (errorCode != MM_ERROR_NONE) {
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_POLICY_BLOCKED, "Failed mm_sound_get_signal_value() err:0x%x", errorCode);
- }
-
- __mSubscribeId = (int)subscribe_id;
- AUDIO_IO_LOGD("Subscribed mm_sound signal");
+ __mSubscribeId = (int)subscribe_id;
+ AUDIO_IO_LOGD("Subscribed mm_sound signal");
- sessionOptions = 0; // Mix with others by default
- __mUseFocus = true;
- AUDIO_IO_LOGD("Use audio focus(watch) concept internally!");
- }
+ sessionOptions = 0; // Mix with others by default
+ __mUseFocus = true;
+ AUDIO_IO_LOGD("Use audio focus(watch) concept internally!");
} else {
__mUseFocus = false;
AUDIO_IO_LOGD("Skip audio focus concept!");
// Register focus callback
errorCode = mm_sound_register_focus_for_session(__mId,
+ getpid(),
__mAudioSession == EAudioSessionType::AUDIO_SESSION_TYPE_CAPTURE ? __STREAM_TYPE_TABLE_IN[index].name : __STREAM_TYPE_TABLE_OUT[index].name,
__sound_pcm_focus_cb,
static_cast<void*>(this));
AUDIO_IO_LOGD("Focus callback registered successfully [id:%d]", __mId);
} else if (!(__mOptions & MM_SESSION_OPTION_UNINTERRUPTIBLE)) {
// Register focus watch callback
- errorCode = mm_sound_set_focus_watch_callback(FOCUS_FOR_BOTH, __sound_pcm_focus_watch_cb, static_cast<void*>(this), &__mId);
+ errorCode = mm_sound_set_focus_watch_callback_for_session(getpid(), FOCUS_FOR_BOTH, __sound_pcm_focus_watch_cb, static_cast<void*>(this), &__mId);
if (errorCode < 0) {
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_POLICY_BLOCKED, "Failed mm_sound_set_focus_watch_callback() err:0x%x", errorCode);
+ THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_POLICY_BLOCKED, "Failed mm_sound_set_focus_watch_callback_for_session() err:0x%x", errorCode);
}
__focusIdCountInc();