int sound_manager_acquire_focus(sound_stream_info_h stream_info, sound_stream_focus_mask_e focus_mask, int sound_behavior, const char *extra_info)
{
int ret = MM_ERROR_NONE;
+ bool is_focus_cb_thread = false;
sound_stream_info_s *stream_h = (sound_stream_info_s*)stream_info;
LOGI(">> enter");
SM_INSTANCE_CHECK(stream_h);
+ if ((ret = mm_sound_focus_is_cb_thread(&is_focus_cb_thread)))
+ return _convert_sound_manager_error_code(__func__, ret);
+
if (stream_h->is_focus_unavailable) {
LOGE("acquiring focus is not allowed for this strema type(%s)", stream_h->stream_type);
return _convert_sound_manager_error_code(__func__, MM_ERROR_POLICY_INTERNAL);
return _convert_sound_manager_error_code(__func__, MM_ERROR_POLICY_INTERNAL);
}
- if ((stream_h->acquired_focus & focus_mask) || (stream_h->prev_acquired_focus & focus_mask)) {
- LOGE("invalid state : focus_mask[0x%x], acquired_focus[0x%x], prev[0x%x]",
- focus_mask, stream_h->acquired_focus, stream_h->prev_acquired_focus);
+ if (is_focus_cb_thread && (stream_h->prev_acquired_focus & focus_mask)) {
+ LOGE("invalid state: focus_mask[0x%x], prev_acquired_focus[0x%x]", focus_mask, stream_h->prev_acquired_focus);
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_SOUND_INVALID_STATE);
+ }
+
+ if (stream_h->acquired_focus & focus_mask) {
+ LOGE("invalid state: focus_mask[0x%x], acquired_focus[0x%x]", focus_mask, stream_h->acquired_focus);
return _convert_sound_manager_error_code(__func__, MM_ERROR_SOUND_INVALID_STATE);
}
int sound_manager_release_focus(sound_stream_info_h stream_info, sound_stream_focus_mask_e focus_mask, int sound_behavior, const char *extra_info)
{
int ret = MM_ERROR_NONE;
+ bool is_focus_cb_thread = false;
sound_stream_info_s *stream_h = (sound_stream_info_s*)stream_info;
LOGI(">> enter");
SM_INSTANCE_CHECK(stream_h);
- if (!(stream_h->acquired_focus & focus_mask) || !(stream_h->prev_acquired_focus & focus_mask)) {
- LOGE("invalid state : focus_mask[0x%x], acquired_focus[0x%x], prev[0x%x]",
- focus_mask, stream_h->acquired_focus, stream_h->prev_acquired_focus);
+ if ((ret = mm_sound_focus_is_cb_thread(&is_focus_cb_thread)))
+ return _convert_sound_manager_error_code(__func__, ret);
+
+ if (is_focus_cb_thread && !(stream_h->prev_acquired_focus & focus_mask)) {
+ LOGE("invalid state: focus_mask[0x%x], prev_acquired_focus[0x%x]", focus_mask, stream_h->prev_acquired_focus);
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_SOUND_INVALID_STATE);
+ }
+
+ if (!(stream_h->acquired_focus & focus_mask)) {
+ LOGE("invalid state: focus_mask[0x%x], acquired_focus[0x%x]", focus_mask, stream_h->acquired_focus);
return _convert_sound_manager_error_code(__func__, MM_ERROR_SOUND_INVALID_STATE);
}