📄 vid_msg_handler.c
字号:
{
med_free_ext_mem((void **)&vid_context_p->extmem_start_address);
}
}
/*****************************************************************************
* FUNCTION
* vid_stop_unfinished_audio
* DESCRIPTION
* This function is to stop unfinished audio.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void vid_stop_unfinished_audio(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* if keytone is playing, stop it */
aud_keytone_stop();
/* if tone is playing, stop it */
if (aud_context_p->tone_playing)
{
aud_tone_stop();
}
#ifdef __MED_MMA_MOD__
/* close all mma tasks */
aud_mma_close_all();
#endif /* __MED_MMA_MOD__ */
aud_stop_unfinished_process();
}
/*****************************************************************************
* FUNCTION
* vid_audio_record_callback
* DESCRIPTION
* This function is to handle the callback of audio record.
* PARAMETERS
* event [IN]
* RETURNS
* void
*****************************************************************************/
void vid_audio_record_callback(Media_Event event)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
switch (event)
{
case MEDIA_TERMINATED:
case MEDIA_ERROR:
case MEDIA_END:
{
aud_media_read_data_ind_struct *ind_p = NULL;
ind_p = (aud_media_read_data_ind_struct*)
construct_local_para(sizeof(aud_media_read_data_ind_struct), TD_CTRL);
ind_p->event = event;
aud_send_ilm(MOD_MED, MSG_ID_AUD_MEDIA_READ_DATA_IND, ind_p, NULL);
break;
}
case MEDIA_DATA_NOTIFICATION:
if (!aud_context_p->processing_data)
{
aud_media_read_data_ind_struct *ind_p = NULL;
ind_p = (aud_media_read_data_ind_struct*)
construct_local_para(sizeof(aud_media_read_data_ind_struct), TD_CTRL);
ind_p->event = event;
aud_send_ilm(MOD_MED, MSG_ID_AUD_MEDIA_READ_DATA_IND, ind_p, NULL);
aud_context_p->processing_data = KAL_TRUE;
}
break;
}
}
/*****************************************************************************
* FUNCTION
* vid_audio_record_callback_dummy
* DESCRIPTION
* This function is to handle the dummy callback of audio record.
* PARAMETERS
* event [IN]
* RETURNS
* void
*****************************************************************************/
void vid_audio_record_callback_dummy(Media_Event event)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
switch (event)
{
case MEDIA_TERMINATED:
break;
case MEDIA_DATA_NOTIFICATION:
{
kal_uint16 *pwBuf;
kal_uint32 uBufLen;
Media_GetReadBuffer(&pwBuf, &uBufLen);
Media_ReadDataDone(uBufLen);
break;
}
}
}
/*****************************************************************************
* FUNCTION
* vid_save_file_path
* DESCRIPTION
* This function is to save file path for further use.
* PARAMETERS
* path [?]
* RETURNS
* kal_int16 return result
*****************************************************************************/
kal_int32 vid_save_file_path(kal_wchar *path)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
FS_HANDLE fd = -1;
kal_uint32 len;
kal_int32 result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
FS_Rename((kal_wchar*) VID_DUMMY_INIT_FILE, (kal_wchar*) VID_INIT_FILE);
fd = FS_Open((kal_wchar*) VID_INIT_FILE, FS_CREATE | FS_READ_WRITE);
VID_VALUE_TRACE(fd, -1, __LINE__);
if (fd >= 0)
{
kal_wchar flag;
if (vid_context_p->use_pseudo_merge)
{
flag = L'Y';
}
else
{
flag = L'N';
}
result = FS_Write(fd, &flag, (1) * ENCODE_BYTE, &len);
result = FS_Write(fd, path, (kal_wstrlen(path) + 1) * ENCODE_BYTE, &len);
VID_VALUE_TRACE(vid_context_p->use_pseudo_merge, flag, __LINE__);
FS_Close(fd);
if (result == FS_NO_ERROR)
{
return MED_RES_OK;
}
else
{
return MED_RES_OPEN_FILE_FAIL;
}
}
else
{
return MED_RES_OPEN_FILE_FAIL;
}
}
/*****************************************************************************
* FUNCTION
* vid_open_m4a_file_for_play
* DESCRIPTION
* This function is to open mp4 audio file for play.
* PARAMETERS
* file_handle [IN]
* RETURNS
* kal_int16
*****************************************************************************/
kal_int16 vid_open_m4a_file_for_play(kal_int32 file_handle)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MP4_Parser_Status eMp4ParserRet;
FSAL_Status eFSALRet;
kal_uint32 filesize;
kal_int32 result;
kal_uint32 index;
kal_uint64 temp;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
eFSALRet = FSAL_Open_WithHandle(&stFSAL, (void*)file_handle);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
result = MED_RES_OPEN_FILE_FAIL;
}
FSAL_SetBuffer(&stFSAL, (kal_uint32) sizeof(buffer_tmp), (kal_uint8*) buffer_tmp);
#ifdef __MTK_TARGET__
eFSALRet = FSAL_GetFileSize(&stFSAL, &filesize);
if (eFSALRet != FSAL_OK)
{
return MED_RES_OPEN_FILE_FAIL;
}
for (index = 0; index < VID_DEC_SEEK_HINT_SIZE; index++)
{
temp = ((kal_uint64) filesize * (kal_uint64) (index + 1)) / (kal_uint64) (VID_DEC_SEEK_HINT_SIZE + 1);
vid_seek_hint[index].Index = (kal_uint32) temp;
}
FS_SetSeekHint(stFSAL.hFile, VID_DEC_SEEK_HINT_SIZE, vid_seek_hint);
eMp4ParserRet = MP4_Parse(&stMp4Parser, &stFSAL);
if (eMp4ParserRet != MP4_PARSER_OK && eMp4ParserRet != MP4_PARSER_WARNING_TRAILING_GARBAGE)
{
VID_PARSE_ERROR_TRACE(eMp4ParserRet, __LINE__);
return MED_RES_BAD_FORMAT;
}
eMp4ParserRet = MP4_STBL_CacheTablePreprocess(&stMp4Parser, buffer_STBL_cache_pool, 2048);
if (eMp4ParserRet != MP4_PARSER_OK)
{
VID_PARSE_ERROR_TRACE(eMp4ParserRet, __LINE__);
return MED_RES_BAD_FORMAT;
}
MP4_Audio_SetFSAL(&stMp4Parser, &stFSALAudio);
#endif /* __MTK_TARGET__ */
eFSALRet = FSAL_Open_Attach(&stFSALAudio, &stFSAL);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return MED_RES_OPEN_FILE_FAIL;
}
FSAL_SetBuffer(&stFSALAudio, sizeof(buffer_temp_a), (kal_uint8*) buffer_temp_a);
eFSALRet = FSAL_Open_Attach(&stFSALAudio_STCO, &stFSAL);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return MED_RES_OPEN_FILE_FAIL;
}
FSAL_SetBuffer(&stFSALAudio_STCO, sizeof(buffer_temp_stco_a), (kal_uint8*) buffer_temp_stco_a);
eFSALRet = FSAL_Open_Attach(&stFSALAudio_STSZ, &stFSAL);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return MED_RES_OPEN_FILE_FAIL;
}
FSAL_SetBuffer(&stFSALAudio_STSZ, sizeof(buffer_temp_stsz_a), (kal_uint8*) buffer_temp_stsz_a);
MP4_SetFSAL_STCO(&stMp4Parser, MP4_TRACK_AUDIO, &stFSALAudio_STCO);
MP4_SetFSAL_STSZ(&stMp4Parser, MP4_TRACK_AUDIO, &stFSALAudio_STSZ);
MP4_UpdateSampleCount(&stMp4Parser, MP4_TRACK_AUDIO);
return MED_RES_OK;
}
/*****************************************************************************
* FUNCTION
* vid_open_audio_file_for_record
* DESCRIPTION
* This function is to open audio file for record.
* PARAMETERS
* void
* RETURNS
* kal_int16
*****************************************************************************/
kal_int16 vid_open_audio_file_for_record(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
FSAL_Status eFSALRet;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
med_remove_file_name(vid_context_p->storing_path);
kal_wstrcat(vid_context_p->storing_path, VID_AUDIO_FILE);
/* Open audio file */
if ((vid_context_p->file_handle = FS_Open(vid_context_p->storing_path, VID_TEMP_FILE_ATTRIBUTES)) < 0)
{
if (vid_context_p->file_handle == FS_WRITE_PROTECTION)
{
return MED_RES_WRITE_PROTECTION;
}
else
{
return MED_RES_OPEN_FILE_FAIL;
}
}
eFSALRet = FSAL_Open_WithHandle(&fsalAudioFile, (void*)vid_context_p->file_handle);
if (eFSALRet == FSAL_OK)
{
eFSALRet = FSAL_Write_UINT(&fsalAudioFile, 0); /* file size */
if (eFSALRet == FSAL_OK)
{
eFSALRet = FSAL_Write_UINT(&fsalAudioFile, BOX_TYPE_MDAT);
if (eFSALRet == FSAL_OK)
{
return MED_RES_OK;
}
}
/* Fail */
FSAL_Close(&fsalAudioFile);
return MED_RES_OPEN_FILE_FAIL;
}
else
{
if (FSAL_GetLastError(&fsalAudioFile) == FS_WRITE_PROTECTION)
{
return MED_RES_WRITE_PROTECTION;
}
else
{
return MED_RES_OPEN_FILE_FAIL;
}
}
}
/*****************************************************************************
* FUNCTION
* vid_open_visual_file_for_record
* DESCRIPTION
* This function is to open visual files for record.
* PARAMETERS
* void
* RETURNS
* kal_int16
*****************************************************************************/
kal_int16 vid_open_visual_file_for_record(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
FSAL_Status eFSALRet;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* Open video file */
med_remove_file_name(vid_context_p->storing_path);
kal_wstrcat(vid_context_p->storing_path, VID_VISUAL_FILE);
if ((vid_context_p->file_handle = FS_Open(vid_context_p->storing_path, VID_TEMP_FILE_ATTRIBUTES)) < 0)
{
if (vid_context_p->file_handle == FS_WRITE_PROTECTION)
{
return MED_RES_WRITE_PROTECTION;
}
else
{
return MED_RES_OPEN_FILE_FAIL;
}
}
eFSALRet = FSAL_Open_WithHandle(&mp4_files.MEDIA_VIDEO_FILE, (void*)vid_context_p->file_handle);
if (eFSALRet == FSAL_OK)
{
/* Open meta file */
med_remove_file_name(vid_context_p->storing_path);
kal_wstrcat(vid_context_p->storing_path, VID_VISUAL_META_FILE);
if ((vid_context_p->file_handle = FS_Open(vid_context_p->storing_path, VID_TEMP_FILE_ATTRIBUTES)) < 0)
{
FSAL_Close(&mp4_files.MEDIA_VIDEO_FILE);
if (vid_context_p->file_handle == FS_WRITE_PROTECTION)
{
return MED_RES_WRITE_PROTECTION;
}
else
{
return MED_RES_OPEN_FILE_FAIL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -