📄 jma_media_resource.c
字号:
}
#endif /* SUPPORT_MMAPI */
jma_media_player_cs_leave();
}
/*****************************************************************************
* FUNCTION
* jma_audio_player_do_suspend_job
* DESCRIPTION
* This function is invoked by MMI
* PARAMETERS
* void
* RETURNS
* executed
*****************************************************************************/
static kal_bool jma_audio_player_do_suspend_job(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 i;
kal_bool executed = KAL_FALSE;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_PLAYER_DO_SUSPEND_JOB);
ASSERT(stack_int_get_active_module_id() == MOD_MMI);
PARAM_CS_ENTER();
jma_audio_enable = KAL_FALSE;
PARAM_CS_LEAVE();
jma_media_player_cs_check_and_enter(KAL_TRUE);
for (i = 0; i < JMA_MEDIA_DEVICE_NUM; i++)
{
switch (jma_device[i].device_type)
{
case JAVA_MEDIA_TONE_DEVICE:
case JAVA_MEDIA_TONESEQ_DEVICE:
case JAVA_MEDIA_MIDI_DEVICE:
case JAVA_MEDIA_WAV_DEVICE:
case JAVA_MEDIA_IMY_DEVICE:
case JAVA_MEDIA_SINGLE_DEVICE:
ASSERT(jma_device[i].suspend!= NULL);
jma_device[i].suspend(jma_device[i].handle);
executed = KAL_TRUE;
break;
default:
break;
}
}
if (executed)
{
/* VM should clear interrupt callback when it closes all audio */
mdi_audio_stop_use_by_other_task();
#ifdef J2ME_SUPPORT_BACKGROUND
/* Update Java icon */
jui_widget_switch_bg_audio(KAL_FALSE);
#endif
}
#if defined(__MMI_BT_AUDIO_VIA_SCO__)
mmi_profiles_bt_enable_sco_timeout();
#endif
jma_media_player_cs_leave();
return executed;
}
/*****************************************************************************
* FUNCTION
* jma_audio_player_do_resume_job
* DESCRIPTION
* This function is invoked by MMI
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
static void jma_audio_player_do_resume_job(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 i;
kal_bool executed = KAL_FALSE;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_PLAYER_DO_RESUME_JOB);
ASSERT(stack_int_get_active_module_id() == MOD_MMI);
mdi_audio_set_headset_mode_output_path(MDI_DEVICE_SPEAKER2);
#if defined(__MMI_BT_AUDIO_VIA_SCO__)
/* The two funcion must be invoked in MMI's context */
mmi_profiles_bt_connect_audio_via_sco();
mmi_profiles_bt_disable_sco_timeout();
#endif
jma_media_player_cs_check_and_enter(KAL_TRUE);
for (i = 0; i < JMA_MEDIA_DEVICE_NUM; i++)
{
switch (jma_device[i].device_type)
{
case JAVA_MEDIA_TONE_DEVICE:
case JAVA_MEDIA_TONESEQ_DEVICE:
case JAVA_MEDIA_MIDI_DEVICE:
case JAVA_MEDIA_WAV_DEVICE:
case JAVA_MEDIA_IMY_DEVICE:
case JAVA_MEDIA_SINGLE_DEVICE:
ASSERT(jma_device[i].resume!= NULL);
jma_device[i].resume(jma_device[i].handle);
executed = KAL_TRUE;
break;
default:
break;
}
}
/* Has executed resume handler && resume successfully */
if (executed && jma_audio_player_is_active())
{
/* register interrupt callback */
mdi_audio_start_use_by_other_task(jma_audio_player_interrupt_callback);
#ifdef J2ME_SUPPORT_BACKGROUND
/* Update Java icon */
jui_widget_switch_bg_audio(KAL_TRUE);
#endif
}
jma_media_player_cs_leave();
PARAM_CS_ENTER();
jma_audio_enable = KAL_TRUE;
PARAM_CS_LEAVE();
}
/*****************************************************************************
* FUNCTION
* jma_audio_player_do_terminate_job
* DESCRIPTION
* This function is invoked by MMI
* PARAMETERS
* void
* RETURNS
* executed
*****************************************************************************/
void jma_audio_player_do_terminate_job(jvm_state_enum src_state)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 i;
kal_bool executed = KAL_FALSE;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_PLAYER_DO_TERMINATE_JOB);
ASSERT(stack_int_get_active_module_id() == MOD_MMI);
PARAM_CS_ENTER();
jma_audio_enable = KAL_FALSE;
PARAM_CS_LEAVE();
jma_media_player_cs_check_and_enter(KAL_TRUE);
for (i = 0; i < JMA_MEDIA_DEVICE_NUM; i++)
{
switch (jma_device[i].device_type)
{
case JAVA_MEDIA_TONE_DEVICE:
case JAVA_MEDIA_TONESEQ_DEVICE:
case JAVA_MEDIA_MIDI_DEVICE:
case JAVA_MEDIA_WAV_DEVICE:
case JAVA_MEDIA_IMY_DEVICE:
case JAVA_MEDIA_SINGLE_DEVICE:
ASSERT(jma_device[i].close!= NULL);
jma_device[i].close(jma_device[i].handle);
executed = KAL_TRUE;
break;
default:
break;
}
}
/* For the case: midi is at READY state, it does not register device */
jma_midi_player_deinit();
/* Has executed close handler && With resource */
if (executed && !is_vm_suspend_audio && !is_med_suspend_audio)
{
/* Clear interrupt callback */
mdi_audio_stop_use_by_other_task();
#ifdef J2ME_SUPPORT_BACKGROUND
/* Update Java icon */
jui_widget_switch_bg_audio(KAL_FALSE);
#endif
}
jma_media_player_cs_leave();
}
/*****************************************************************************
* FUNCTION
* jma_audio_player_vm_notify_suspend
* DESCRIPTION
* This function is invoked by MMI when VM state is changed
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jma_audio_player_vm_notify_suspend(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_PLAYER_VM_NOTIFY_SUSPEND, is_vm_suspend_audio, is_med_suspend_audio);
ASSERT(is_vm_suspend_audio == KAL_FALSE);
ASSERT(stack_int_get_active_module_id() == MOD_MMI);
is_vm_suspend_audio = KAL_TRUE;
if (is_med_suspend_audio)
{
return;
}
jma_audio_player_do_suspend_job();
}
/*****************************************************************************
* FUNCTION
* jma_audio_player_vm_notify_resume
* DESCRIPTION
* This function is invoked by MMI when VM state is changed
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jma_audio_player_vm_notify_resume(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_PLAYER_VM_NOTIFY_RESUME, is_vm_suspend_audio, is_med_suspend_audio);
ASSERT(is_vm_suspend_audio == KAL_TRUE);
ASSERT(stack_int_get_active_module_id() == MOD_MMI);
is_vm_suspend_audio = KAL_FALSE;
if (is_med_suspend_audio)
{
return;
}
jma_audio_player_do_resume_job();
}
/*****************************************************************************
* FUNCTION
* jma_audio_player_interrupt_callback
* DESCRIPTION
* This function is invoked by MMI when MDI resource mastership is changed
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jma_audio_player_interrupt_callback(MDI_RESULT result)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_PLAYER_INTERRUPT_CALLBACK, result, is_vm_suspend_audio, is_med_suspend_audio);
ASSERT(stack_int_get_active_module_id() == MOD_MMI);
if (result == MDI_AUDIO_TERMINATED)
{
is_med_suspend_audio = KAL_TRUE;
if (is_vm_suspend_audio)
{
return;
}
/* Audio resource has been suspended */
if (jma_audio_enable == KAL_FALSE)
{
return;
}
jma_audio_player_do_suspend_job();
}
}
/*****************************************************************************
* FUNCTION
* jma_audio_player_background_callback
* DESCRIPTION
* This function is invoked by MMI when MDI resource mastership is changed
* PARAMETERS
* void
* RETURNS
* int
*****************************************************************************/
BOOL jma_audio_player_background_callback(MDI_RESULT result)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_PLAYER_BACKGROUND_CALLBACK, result, is_vm_suspend_audio, is_med_suspend_audio);
ASSERT(stack_int_get_active_module_id() == MOD_MMI);
if (result == MDI_AUDIO_RESUME)
{
is_med_suspend_audio = KAL_FALSE;
/* Always return TRUE even if VM state can not play audio */
if (is_vm_suspend_audio)
{
return KAL_TRUE;
}
/* Audio resource has been resumed */
if (jma_audio_enable == KAL_TRUE)
{
return KAL_TRUE;
}
jma_audio_player_do_resume_job();
}
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* jma_media_player_dependency_mutex_lock
* DESCRIPTION
* This function locks media dependency mutex(es)
* PARAMETERS
* none
* RETURNS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -