📄 vis_msg_handler.c
字号:
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
audio_file_open = KAL_TRUE;
eFSALRet = FSAL_GetFileSize(&fsalAudioFile, &uAudioFileLen);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Seek(&fsalAudioFile, 0);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
if (vid_context_p->use_pseudo_merge)
{
uAudioFileLen = ((uAudioFileLen + cluster_size - 1) / cluster_size) * cluster_size;
}
eFSALRet = FSAL_Write_UINT(&fsalAudioFile, uAudioFileLen);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
FSAL_Close(&fsalAudioFile);
audio_file_open = KAL_FALSE;
/* Log disc info for debugging */
FS_GetDiskInfo(drive, &disc_info, FS_DI_BASIC_INFO| FS_DI_FREE_SPACE);
kal_prompt_trace(MOD_MED, "Free cluster=%d, cluster size= %d, line= %d", disc_info.FreeClusters, cluster_size,__LINE__);
/* Create audio meta file */
/* generate audio sample data file */
result = write_audio_sample_data(&audio_sample_count);
if (result != MED_RES_OK)
{
VID_AUD_ERROR_TRACE(result, __LINE__);
goto merge_error;
}
if (audio_sample_count > 0)
{
/* Create audio real meta file */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_SAMPLE_FILE);
eFSALRet = FSAL_Open(&fsalAudioSampleDataFile, (void*)med_v_context_p->storing_path, FSAL_READ);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioSampleDataFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
audio_meta_file_open = KAL_TRUE;
FSAL_SetBuffer(
&fsalAudioSampleDataFile,
(kal_uint32) sizeof(buffer_enc_audio_sample_tmp),
(kal_uint8*) buffer_enc_audio_sample_tmp);
eMp4SampleDataStatus = MP4_AudioSampleData_Init(&stMp4SampleData, &fsalAudioSampleDataFile);
if (eMp4SampleDataStatus != MP4_SAMPLE_DATA_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioSampleDataFile));
result = MED_RES_MP4_SAMPLEDATA_ERROR;
goto merge_error;
}
MP4_Produce_Init(&stMp4Producer, &stMp4SampleData, &mp4_files.REAL_META_FILE);
MP4_Produce_Trak_Audio(&stMp4Producer, &audio_trak_size, video_file_size);
/* Add audio trak size */
video_file_info.FC_ATOM[moov].size += audio_trak_size;
eFSALRet = FSAL_Close(&fsalAudioSampleDataFile);
audio_meta_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioSampleDataFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Write_UINT_AT(
&mp4_files.REAL_META_FILE,
video_file_info.FC_ATOM[moov].size,
video_file_info.FC_ATOM[moov].pos);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
FS_Commit(mp4_files.REAL_META_FILE.hFile);
/* Merge video real meta file and audio real meta file */
/* Delete audio meta file to save some space */
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);
vid_context_p->record_audio = KAL_TRUE;
}
else
{
eFSALRet = FSAL_Write_UINT_AT(
&mp4_files.REAL_META_FILE,
video_file_info.FC_ATOM[moov].size,
video_file_info.FC_ATOM[moov].pos);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
FS_Commit(mp4_files.REAL_META_FILE.hFile);
vid_context_p->record_audio = KAL_FALSE;
FSAL_Close(&fsalAudioFile);
audio_file_open = KAL_FALSE;
}
}
else
{
/* Create audio real meta file */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_SAMPLE_FILE);
eFSALRet = FSAL_Open(&fsalAudioSampleDataFile, (void*)med_v_context_p->storing_path, FSAL_READ);
/* Audio file not exist, but audio meta file exist */
if (eFSALRet == FSAL_OK)
{
audio_meta_file_open = KAL_TRUE;
FSAL_SetBuffer(
&fsalAudioSampleDataFile,
(kal_uint32) sizeof(buffer_enc_audio_sample_tmp),
(kal_uint8*) buffer_enc_audio_sample_tmp);
eMp4SampleDataStatus = MP4_AudioSampleData_Init(&stMp4SampleData, &fsalAudioSampleDataFile);
if (eMp4SampleDataStatus != MP4_SAMPLE_DATA_OK)
{
VID_PARSE_ERROR_TRACE(eMp4SampleDataStatus, __LINE__);
result = MED_RES_MP4_SAMPLEDATA_ERROR;
goto merge_error;
}
/* Log disc info for debugging */
FS_GetDiskInfo(drive, &disc_info, FS_DI_BASIC_INFO| FS_DI_FREE_SPACE);
kal_prompt_trace(MOD_MED, "Free cluster=%d, cluster size= %d, line= %d", disc_info.FreeClusters, cluster_size,__LINE__);
MP4_Produce_Init(&stMp4Producer, &stMp4SampleData, &mp4_files.REAL_META_FILE);
MP4_Produce_Trak_Audio(&stMp4Producer, &audio_trak_size, video_file_size);
/* Add audio trak size */
video_file_info.FC_ATOM[moov].size += audio_trak_size;
eFSALRet = FSAL_Close(&fsalAudioSampleDataFile);
audio_meta_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioSampleDataFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Write_UINT_AT(
&mp4_files.REAL_META_FILE,
video_file_info.FC_ATOM[moov].size,
video_file_info.FC_ATOM[moov].pos);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
FS_Commit(mp4_files.REAL_META_FILE.hFile);
/* Merge video real meta file and audio real meta file */
/* Delete audio meta file to save some space */
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);
vid_context_p->record_audio = KAL_TRUE;
}
else
{
eFSALRet = FSAL_Write_UINT_AT(
&mp4_files.REAL_META_FILE,
video_file_info.FC_ATOM[moov].size,
video_file_info.FC_ATOM[moov].pos);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
FS_Commit(mp4_files.REAL_META_FILE.hFile);
vid_context_p->record_audio = KAL_FALSE;
}
}
eFSALRet = FSAL_Close(&mp4_files.REAL_META_FILE);
video_real_meta_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Close(&mp4_files.MEDIA_META_FILE);
video_meta_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_META_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
/* Delete Visual Meta file to save some space */
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);
/* Merge audio/video bistream */
if (vid_context_p->record_audio)
{
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_FILE);
med_remove_file_name(med_v_context_p->storing_path2);
kal_wstrcat(med_v_context_p->storing_path2, VID_AUDIO_FILE);
if (vid_context_p->use_pseudo_merge)
{
FS_PseudoMerge(med_v_context_p->storing_path, med_v_context_p->storing_path2);
}
else
{
eFSALRet = FSAL_Open(&fsalAudioFile, med_v_context_p->storing_path2, FSAL_READ);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
audio_file_open = KAL_TRUE;
eFSALRet = FSAL_Open(&mp4_files.MEDIA_VIDEO_FILE, med_v_context_p->storing_path, FSAL_APPEND);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
video_file_open = KAL_TRUE;
result = vis_merge_file(&fsalAudioFile, &mp4_files.MEDIA_VIDEO_FILE);
if (result != MED_RES_OK)
{
VID_VIS_ERROR_TRACE(result, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Close(&mp4_files.MEDIA_VIDEO_FILE);
video_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Close(&fsalAudioFile);
audio_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
}
}
/* Merge av bitstream file and av real meta file */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_FILE);
med_remove_file_name(med_v_context_p->storing_path2);
kal_wstrcat(med_v_context_p->storing_path2, VID_VISUAL_REAL_META_FILE);
if (vid_context_p->use_pseudo_merge)
{
FS_PseudoMerge(med_v_context_p->storing_path, med_v_context_p->storing_path2);
}
else
{
eFSALRet = FSAL_Open(&mp4_files.REAL_META_FILE, med_v_context_p->storing_path2, FSAL_READ);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
video_real_meta_file_open = KAL_TRUE;
eFSALRet = FSAL_Open(&mp4_files.MEDIA_VIDEO_FILE, med_v_context_p->storing_path, FSAL_APPEND);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
video_file_open = KAL_TRUE;
result = vis_merge_file(&mp4_files.REAL_META_FILE, &mp4_files.MEDIA_VIDEO_FILE);
if (result != MED_RES_OK)
{
VID_VIS_ERROR_TRACE(result, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Close(&mp4_files.MEDIA_VIDEO_FILE);
video_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Close(&mp4_files.REAL_META_FILE);
video_real_meta_file_open = KAL_FALSE;
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
}
/* Log disc info for debugging */
FS_GetDiskInfo(drive, &disc_info, FS_DI_BASIC_INFO| FS_DI_FREE_SPACE);
kal_prompt_trace(MOD_MED, "Free cluster=%d, cluster size= %d, line= %d", disc_info.FreeClusters, cluster_size,__LINE__);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -