📄 vis_msg_handler.c
字号:
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
uAMRFilePos = 8;
eFSALRet = FSAL_Write_UINT8(&fsalAudioSampleDataFile, MP4_AUDIO_AMR);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
/* reserve for sample count */
eFSALRet = FSAL_Write_UINT(&fsalAudioSampleDataFile, 0);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
/* parse each audio frame */
while (uAMRFilePos < uAMRFileLen)
{
unsigned char bFrameHeader;
unsigned char bFrameType;
unsigned char bFrameLength;
unsigned char bFQI;
eFSALRet = FSAL_Seek(&fsalAudioFile, uAMRFilePos);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
eFSALRet = FSAL_Read_Bytes(&fsalAudioFile, &bFrameHeader, 1);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
bFrameType = (bFrameHeader >> 3) & 0x0F;
bFQI = (bFrameHeader >> 2) & 0x01;
if (bFQI == 0)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
// ASSERT(bFQI==1);
// After this line, bFQI is no more valid and hence can be used as temporary variable.
if (bAMRType == 0)
{
bFQI = 8; /* AMR */
}
else
{
bFQI = 9; /* AMR-WB */
}
if (bFrameType <= bFQI)
{
bFrameLength = (lenSpeechBitsAMR[bFrameType] + 7) / 8;
}
else if (bFrameType == 15)
{
bFrameLength = 0;
}
else
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
/* ASSERT(0); */
}
uAMRFilePos += (bFrameLength + 1);
/* Handle the case for partial frame */
if (uAMRFilePos > uAMRFileLen)
{
break;
}
uSampleCount++;
/* eFSALRet = FSAL_Write_UINT8(&fsalAudioSampleDataFile, bFrameType); */
eFSALRet = FSAL_Write_Bytes(&fsalAudioSampleDataFile, &bFrameType, 1);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
}
/* close AMR file */
eFSALRet = FSAL_Close(&fsalAudioFile);
audio_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
/* go back to write sample count */
eFSALRet = FSAL_Seek(&fsalAudioSampleDataFile, 1);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
eFSALRet = FSAL_Write_UINT(&fsalAudioSampleDataFile, uSampleCount);
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
eFSALRet = FSAL_Close(&fsalAudioSampleDataFile);
audio_meta_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = MED_RES_OPEN_FILE_FAIL;
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto audio_sample_error;
}
result = MED_RES_OK;
*audio_sample_count = uSampleCount;
audio_sample_error:
if (audio_file_open)
{
FSAL_Close(&fsalAudioFile);
}
if (audio_meta_file_open)
{
FSAL_Close(&fsalAudioSampleDataFile);
}
return result;
}
/*****************************************************************************
* FUNCTION
* vis_read_file_path
* DESCRIPTION
* This function is to read file path for further use.
* PARAMETERS
* path [?]
* RETURNS
* void
*****************************************************************************/
void vis_read_file_path(kal_wchar *path)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
FS_HANDLE fd = -1;
kal_uint32 len;
kal_int32 result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
fd = FS_Open((kal_wchar*) VID_INIT_FILE, FS_READ_ONLY);
if (fd >= 0)
{
kal_wchar flag;
result = FS_Read(fd, &flag, 1 * ENCODE_BYTE, &len);
if (flag == L'Y')
{
vid_context_p->use_pseudo_merge = KAL_TRUE;
}
else
{
vid_context_p->use_pseudo_merge = KAL_FALSE;
}
VID_VALUE_TRACE(vid_context_p->use_pseudo_merge, flag, __LINE__);
result = FS_Read(fd, path, MAX_FILE_NAME_LEN * 2, &len);
FS_Close(fd);
}
}
/*****************************************************************************
* FUNCTION
* vis_create_visual_real_meta_file
* DESCRIPTION
* This function is to create visual real meta file for further merge.
* PARAMETERS
* void
* RETURNS
* kal_int16: the return cause of this function.
*****************************************************************************/
kal_int16 vis_create_visual_real_meta_file(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return MED_RES_OK;
}
/*****************************************************************************
* FUNCTION
* vis_merge_file
* DESCRIPTION
* This function is to merge two files.
* PARAMETERS
* file_src [?] STFSAL *file_dst
* file_dst [?]
* RETURNS
* kal_int16: the return cause of this function.
*****************************************************************************/
kal_int16 vis_merge_file(STFSAL *file_src, STFSAL *file_dst)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint32 src_size;
kal_uint32 dst_size;
FSAL_Status eFSALRet;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
eFSALRet = FSAL_GetFileSize(file_src, &src_size);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return vid_get_result_from_fsal_error(FSAL_GetLastError(file_src));
}
eFSALRet = FSAL_GetFileSize(file_dst, &dst_size);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return vid_get_result_from_fsal_error(FSAL_GetLastError(file_dst));
}
eFSALRet = FSAL_Seek(file_dst, dst_size);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return vid_get_result_from_fsal_error(FSAL_GetLastError(file_dst));
}
eFSALRet = FSAL_Seek(file_src, 0);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return vid_get_result_from_fsal_error(FSAL_GetLastError(file_src));
}
while (src_size >= sizeof(buffer_merge_buffer))
{
eFSALRet = FSAL_Read(file_src, (kal_uint8*) buffer_merge_buffer, sizeof(buffer_merge_buffer));
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return vid_get_result_from_fsal_error(FSAL_GetLastError(file_src));
}
eFSALRet = FSAL_Write(file_dst, (kal_uint8*) buffer_merge_buffer, sizeof(buffer_merge_buffer));
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return vid_get_result_from_fsal_error(FSAL_GetLastError(file_dst));
}
src_size -= sizeof(buffer_merge_buffer);
}
if (src_size)
{
eFSALRet = FSAL_Read(file_src, (kal_uint8*) buffer_merge_buffer, src_size);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return vid_get_result_from_fsal_error(FSAL_GetLastError(file_src));
}
eFSALRet = FSAL_Write(file_dst, (kal_uint8*) buffer_merge_buffer, src_size);
if (eFSALRet != FSAL_OK)
{
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
return vid_get_result_from_fsal_error(FSAL_GetLastError(file_dst));
}
src_size = 0;
}
return MED_RES_OK;
}
/*****************************************************************************
* FUNCTION
* vis_file_merge_req_hdlr
* DESCRIPTION
* This function is to handle visual file merge request
* PARAMETERS
* ilm_ptr [?]
* RETURNS
* void
*****************************************************************************/
void vis_file_merge_req_hdlr(ilm_struct *ilm_ptr)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
FSAL_Status eFSALRet;
kal_uint32 video_file_size;
kal_uint32 audio_trak_size = 0;
MP4_FILE_INFO video_file_info;
kal_uint32 video_mdatsz_pos;
kal_uint32 cluster_size;
FS_DiskInfo disc_info;
kal_wchar drive[4] = L" :\\";
kal_uint8 test_vos_data[60];
STMp4SampleDataAudio stMp4SampleData;
MP4_SampleData_Status eMp4SampleDataStatus;
kal_uint32 uAudioFileLen;
kal_bool audio_file_exist;
kal_bool video_real_meta_file_exist;
kal_bool video_file_open = KAL_FALSE;
kal_bool video_meta_file_open = KAL_FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -