📄 vis_msg_handler.c
字号:
if (vid_context_p->file_size > vid_context_p->file_size_info.file_size_limit ||
(status != MEDIA_STATUS_OK && VIDEO_GetLastError() == MED_STAT_VIDEO_ENC_RESOURCE_NOT_AVAIL))
{
video_enc_stop_record();
VIS_ENTER_STATE(VISUAL_IDLE);
vis_send_record_finish_ind(MED_RES_END_OF_FILE);
}
break;
case VIDEO_ENC_EVENT_COMPLETE:
VIS_ENTER_STATE(VISUAL_IDLE);
vis_send_record_finish_ind(MED_RES_END_OF_FILE);
break;
case VIDEO_ENC_EVENT_FAIL:
VIS_ENTER_STATE(VISUAL_IDLE);
vis_send_record_finish_ind(MED_RES_FAIL);
break;
default:
break;
}
}
}
/*****************************************************************************
* FUNCTION
* vis_decode_visual_data_ind_hdlr
* DESCRIPTION
* This function is to handle visual decode data indication
* PARAMETERS
* ilm_ptr [?]
* RETURNS
* void
*****************************************************************************/
void vis_decode_visual_data_ind_hdlr(ilm_struct *ilm_ptr)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
media_decode_visual_data_ind_struct *ind_p;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
med_v_context_p->src_mod = ilm_ptr->src_mod_id;
ind_p = (media_decode_visual_data_ind_struct*) ilm_ptr->local_para_ptr;
if (VIS_IN_STATE(VISUAL_PLAY))
{
switch (ind_p->event)
{
case VIDEO_DEC_DRV_SEEK_ACTION:
video_seek_action();
break;
case VIDEO_DEC_EVENT_BUFFER_EMPTY:
{
MEDIA_STATUS_CODE status;
status = video_dec_put_frame_to_buffer();
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
VIS_ENTER_STATE(VISUAL_IDLE);
vis_send_play_finish_ind((kal_int16)vid_get_result_from_media_status(status));
}
break;
}
case VIDEO_DEC_EVENT_COMPLETE:
VIS_ENTER_STATE(VISUAL_IDLE);
vis_send_play_finish_ind(MED_RES_OK);
break;
case VIDEO_DEC_EVENT_SEEK_DONE:
vis_send_seek_cnf(MED_V_RES_OK);
break;
case VIDEO_DEC_EVENT_NO_TRACK:
vis_send_play_cnf(MED_V_RES_OK, 0);
break;
case VIDEO_DEC_RECOVER:
{
vis_send_error_recover_ind();
break;
}
case VIDEO_DEC_EVENT_FAIL:
VIS_ENTER_STATE(VISUAL_IDLE);
vis_send_play_finish_ind(MED_RES_VIDEO_ERROR);
break;
case VIDEO_DEC_SEEK_AUDIO_EVENT_COMPLETE:
/* Should play mute, if video is not end!! */
/* If video is also end, please stop it. */
ASSERT(ind_p->event != VIDEO_DEC_SEEK_AUDIO_EVENT_COMPLETE);
break;
default:
break;
}
}
}
/*****************************************************************************
* FUNCTION
* vis_play_req_hdlr
* DESCRIPTION
* This function is to handle visual play request
* PARAMETERS
* ilm_ptr [?]
* RETURNS
* void
*****************************************************************************/
void vis_play_req_hdlr(ilm_struct *ilm_ptr)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
media_visual_play_req_struct *req_p;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
med_v_context_p->src_mod = ilm_ptr->src_mod_id;
req_p = (media_visual_play_req_struct*) ilm_ptr->local_para_ptr;
VIS_ENTER_STATE(VISUAL_PLAY);
vis_send_play_cnf(MED_V_RES_OK, med_v_context_p->audio_frame_num);
}
/*****************************************************************************
* FUNCTION
* vis_seek_req_hdlr
* DESCRIPTION
* This function is to handle visual seek request
* PARAMETERS
* ilm_ptr [?]
* RETURNS
* void
*****************************************************************************/
void vis_seek_req_hdlr(ilm_struct *ilm_ptr)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
media_visual_seek_req_struct *req_p;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
med_v_context_p->src_mod = ilm_ptr->src_mod_id;
req_p = (media_visual_seek_req_struct*) ilm_ptr->local_para_ptr;
}
/*****************************************************************************
* FUNCTION
* vis_pause_req_hdlr
* DESCRIPTION
* This function is to handle visual pause request
* PARAMETERS
* ilm_ptr [?]
* RETURNS
* void
*****************************************************************************/
void vis_pause_req_hdlr(ilm_struct *ilm_ptr)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
}
/*****************************************************************************
* FUNCTION
* vis_resume_req_hdlr
* DESCRIPTION
* This function is to handle visual resume request
* PARAMETERS
* ilm_ptr [?]
* RETURNS
* void
*****************************************************************************/
void vis_resume_req_hdlr(ilm_struct *ilm_ptr)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
}
/*****************************************************************************
* FUNCTION
* vis_snapshot_req_hdlr
* DESCRIPTION
* This function is to handle visual snapshot request
* PARAMETERS
* ilm_ptr [?]
* RETURNS
* void
*****************************************************************************/
void vis_snapshot_req_hdlr(ilm_struct *ilm_ptr)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
}
/*****************************************************************************
* FUNCTION
* vis_clean_temp_files
* DESCRIPTION
* This function is to clean temp files after file merge.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void vis_clean_temp_files(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_FILE);
FS_Delete(med_v_context_p->storing_path);
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_SAMPLE_FILE);
FS_Delete(med_v_context_p->storing_path);
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_FILE);
FS_Delete(med_v_context_p->storing_path);
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_META_FILE);
FS_Delete(med_v_context_p->storing_path);
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_REAL_META_FILE);
FS_Delete(med_v_context_p->storing_path);
}
/*****************************************************************************
* FUNCTION
* write_audio_sample_data
* DESCRIPTION
* This function is to write audio sample(meta) file for video file merge.
* PARAMETERS
* audio_sample_count [?]
* RETURNS
* kal_int16
*****************************************************************************/
kal_int16 write_audio_sample_data(kal_uint32 *audio_sample_count)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint8 bAMRType = 0; /* 0:AMR 1:AMR-WB */
kal_uint32 uSampleCount = 0;
kal_uint32 uAMRFileLen;
kal_uint32 uAMRFilePos;
FSAL_Status eFSALRet;
kal_bool audio_file_open = KAL_FALSE;
kal_bool audio_meta_file_open = KAL_FALSE;
kal_int16 result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* open sample data file for writing */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_SAMPLE_FILE);
if ((vid_context_p->file_handle = FS_Open(med_v_context_p->storing_path, VID_TEMP_FILE_ATTRIBUTES)) < 0)
{
if (vid_context_p->file_handle == FS_WRITE_PROTECTION)
{
result = MED_RES_WRITE_PROTECTION;
}
else
{
result = MED_RES_OPEN_FILE_FAIL;
}
VID_FSAL_ERROR_TRACE(vid_context_p->file_handle, __LINE__);
goto audio_sample_error;
}
audio_meta_file_open = KAL_TRUE;
eFSALRet = FSAL_Open_WithHandle(&fsalAudioSampleDataFile, (void*)vid_context_p->file_handle);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
FSAL_SetBuffer(
&fsalAudioSampleDataFile,
(kal_uint32) sizeof(buffer_enc_audio_sample_tmp),
(kal_uint8*) buffer_enc_audio_sample_tmp);
/* open amr file */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_FILE);
eFSALRet = FSAL_Open(&fsalAudioFile, (void*)med_v_context_p->storing_path, FSAL_READ);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
audio_file_open = KAL_TRUE;
FSAL_SetBuffer(&fsalAudioFile, (kal_uint32) sizeof(buffer_enc_audio_tmp), (kal_uint8*) buffer_enc_audio_tmp);
eFSALRet = FSAL_GetFileSize(&fsalAudioFile, &uAMRFileLen);
if (eFSALRet != FSAL_OK)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -