📄 jma_audio_recorder.c
字号:
* int result
*****************************************************************************/
kal_int32 jma_audio_recorder_suspend_hdlr(kal_int32 java_recorder)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
java_media_state_enum original_state;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_SUSPEND_HDLR,
java_recorder, audio_recorder.state);
JMA_CS_ENTER(RESOUCE_FAIL);
original_state = audio_recorder.state;
if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
{
/* State will be changed to READY */
jma_audio_recorder_reset(java_recorder);
}
/* Resume to original state */
audio_recorder.state = original_state;
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
/*****************************************************************************
* FUNCTION
* jma_wav_recorder_close_hdlr
* DESCRIPTION
* This function handles wav recorder close
* PARAMETERS
* hdlr [IN]
* RETURNS
* int result
*****************************************************************************/
kal_int32 jma_audio_recorder_close_hdlr(kal_int32 java_recorder)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_CLOSE_HDLR,
java_recorder, audio_recorder.state);
JMA_CS_ENTER(RESOUCE_FAIL);
if (audio_recorder.id != java_recorder)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
JMA_CS_LEAVE(RESOUCE_FAIL);
}
if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
{
if (!is_vm_suspend_media)
{
/* State will be changed to READY */
jma_audio_recorder_reset(java_recorder);
}
jvm_post_mma_event(MMA_EVENT_RECORD_ERROR,
(kal_int16) audio_recorder.id,
(kal_int64) MMA_ERR_MMI_INTERRUPT);
}
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_NULL);
audio_recorder.state = JAVA_MEDIA_STATE_NULL;
jma_audio_recorder_reset_parameter();
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
/*****************************************************************************
* FUNCTION
* jma_audio_recorder_resume_hdlr
* DESCRIPTION
* This function handles wav recorder forec resume
* PARAMETERS
* hdlr [IN]
* RETURNS
* int result
*****************************************************************************/
kal_int32 jma_audio_recorder_resume_hdlr(kal_int32 java_recorder)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_RESUME_HDLR,
java_recorder, audio_recorder.state);
JMA_CS_ENTER(RESOUCE_FAIL);
if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
{
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_READY);
audio_recorder.state = JAVA_MEDIA_STATE_READY;
jvm_post_mma_event(MMA_EVENT_RECORD_ERROR,
(kal_int16) audio_recorder.id,
(kal_int64) MMA_ERR_MMI_INTERRUPT);
}
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
/*****************************************************************************
* FUNCTION
* jma_audio_recorder_reset_parameter
* DESCRIPTION
* This function resets parameters
* PARAMETERS
*
* RETURNS
* void
*****************************************************************************/
void jma_audio_recorder_reset_parameter(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_RESET_PARAMETER, audio_recorder.state);
audio_recorder.state = JAVA_MEDIA_STATE_NULL;
audio_recorder.format = MED_TYPE_NONE;
mmi_ucs2cpy((PS8) audio_recorder.filename, "");
audio_recorder.record_timer = &java_media_timer;
audio_recorder.id = INVALID_JPLAYER_ID;
audio_recorder.current_time = 0;
}
/*****************************************************************************
* FUNCTION
* jma_audio_recorder_reset
* DESCRIPTION
* The function erases recorded content
* PARAMETERS
* mma_type [IN]
* java_recorder [IN]
* RETURNS
* int - 0
*****************************************************************************/
kal_bool jma_audio_recorder_reset(kal_int32 java_recorder)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mdi_result ret;
kal_int32 file_handle;
kal_int32 result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_RESET, java_recorder, audio_recorder.state);
JMA_CS_ENTER(KAL_FALSE);
/* find free player */
if (audio_recorder.id != java_recorder)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
JMA_CS_LEAVE(KAL_FALSE);
}
if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
{
#ifdef __MTK_TARGET__
audio_recorder.current_time = (long)Media_GetRecordedTime();
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, audio_recorder.current_time);
#endif
ret = mdi_audio_stop_record();
/* Delete the recorded file */
file_handle = FS_Open((kal_wchar *) audio_recorder.filename, FS_READ_ONLY);
if (file_handle > 0) /* Check if file exist */
{
result = FS_Close(file_handle); /* need to close file before delete */
result = FS_Delete((kal_wchar *) audio_recorder.filename);
if (result != FS_NO_ERROR)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
JMA_CS_LEAVE(KAL_FALSE);
}
}
/* Handle result */
if (ret == MDI_AUDIO_SUCCESS)
{
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_READY);
audio_recorder.state = JAVA_MEDIA_STATE_READY;
JMA_CS_LEAVE(KAL_TRUE);
}
else
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, ret);
JMA_CS_LEAVE(KAL_FALSE);
}
}
JMA_CS_LEAVE(KAL_TRUE);
}
/*****************************************************************************
* FUNCTION
* jma_audio_recorder_commit
* DESCRIPTION
* The function erases recorded content
* PARAMETERS
* mma_type [IN]
* java_recorder [IN]
* RETURNS
* int - 0
*****************************************************************************/
kal_bool jma_audio_recorder_commit(kal_int32 java_recorder)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mdi_result ret;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_COMMIT, java_recorder, audio_recorder.state);
JMA_CS_ENTER(KAL_FALSE);
/* find free player */
if (audio_recorder.id != java_recorder)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
JMA_CS_LEAVE(KAL_FALSE);
}
if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
{
#ifdef __MTK_TARGET__
audio_recorder.current_time = (long)Media_GetRecordedTime();
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, audio_recorder.current_time);
#endif
ret = mdi_audio_stop_record();
/* Handle result */
if (ret == MDI_AUDIO_SUCCESS)
{
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_READY);
audio_recorder.state = JAVA_MEDIA_STATE_READY;
JMA_CS_LEAVE(KAL_TRUE);
}
else
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, ret);
JMA_CS_LEAVE(KAL_FALSE);
}
}
JMA_CS_LEAVE(KAL_TRUE);
}
/*****************************************************************************
* FUNCTION
* jma_audio_recorder_open
* DESCRIPTION
* This function allocate audio recorder context and open file for recording
* PARAMETERS
* mma_type [IN]
* java_recorder [IN]
* filename [?]
* mode [IN]
* RETURNS
* int - 0
*****************************************************************************/
kal_bool jma_audio_recorder_open(kal_int32 java_recorder)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_OPEN, java_recorder);
JMA_CS_ENTER(KAL_FALSE);
/* Audio player, audio recorder, video player, camera, video recorder are multual exclusive */
if (jma_audio_player_is_active())
{
JMA_CS_LEAVE(KAL_FALSE);
}
if (video_player.device_type != JAVA_MEDIA_INVALID_DEVICE)
{
JMA_CS_LEAVE(KAL_FALSE);
}
/* find free player */
if (audio_recorder.id != INVALID_JPLAYER_ID)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
JMA_CS_LEAVE(KAL_FALSE);
}
if (audio_recorder.state == JAVA_MEDIA_STATE_NULL)
{
/* Succeed to acquire resource */
jma_register_device(
JAVA_MEDIA_AUDIO_RECORDER,
java_recorder,
&jma_audio_recorder_suspend_hdlr,
&jma_audio_recorder_resume_hdlr,
&jma_audio_recorder_close_hdlr);
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_READY);
audio_recorder.state = JAVA_MEDIA_STATE_READY;
audio_recorder.id = java_recorder;
JMA_CS_LEAVE(KAL_TRUE);
}
JMA_CS_LEAVE(KAL_FALSE);
}
/*****************************************************************************
* FUNCTION
* jma_audio_recorder_close
* DESCRIPTION
* This function deallocate audio recorder context
* PARAMETERS
* mma_type [IN] Int recorder
* java_recorder [IN]
* RETURNS
* kal_bool - true
*****************************************************************************/
kal_bool jma_audio_recorder_close(kal_int32 java_recorder)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_CLOSE, java_recorder, audio_recorder.state);
JMA_CS_ENTER(KAL_FALSE);
if (audio_recorder.id != java_recorder)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
JMA_CS_LEAVE(KAL_FALSE);
}
if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
{
/* State will be changed to READY */
jma_audio_recorder_reset(java_recorder);
}
jma_deregister_device(JAVA_MEDIA_AUDIO_RECORDER, java_recorder);
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_NULL);
audio_recorder.state = JAVA_MEDIA_STATE_NULL;
jma_audio_recorder_reset_parameter();
JMA_CS_LEAVE(KAL_TRUE);
}
/*****************************************************************************
* FUNCTION
* jma_audio_recorder_start_record
* DESCRIPTION
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -