📄 vis_msg_handler.c
字号:
kal_bool video_real_meta_file_open = KAL_FALSE;
kal_bool audio_file_open = KAL_FALSE;
kal_bool audio_meta_file_open = KAL_FALSE;
MP4_FILE_CREATE_STRUCT file_struct;
kal_int16 result;
MEDIA_STATUS_CODE status;
kal_int32 attribute;
FS_HANDLE file_handle;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
vis_read_file_path(med_v_context_p->current_file_name);
vis_read_file_path(med_v_context_p->storing_path);
/* Jensen add */
kal_mem_cpy(med_v_context_p->storing_path2, med_v_context_p->storing_path, MAX_FILE_NAME_LEN * 2);
// If power off abnormal at the below procedure, med task can't recovery these conditions.
// Therefore, delete "z:\\video_file.ini" first!!
FS_Rename((kal_wchar*) VID_INIT_FILE, (kal_wchar*) VID_DUMMY_INIT_FILE);
FS_Delete((kal_wchar*) VID_INIT_FILE);
/* Log disc info for debugging */
drive[0] = med_v_context_p->storing_path[0];
FS_GetDiskInfo(drive, &disc_info, FS_DI_BASIC_INFO| FS_DI_FREE_SPACE);
cluster_size = disc_info.BytesPerSector * disc_info.SectorsPerCluster;
kal_prompt_trace(MOD_MED, "Free cluster=%d, cluster size= %d, line= %d", disc_info.FreeClusters, cluster_size,__LINE__);
/* Open video file */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_FILE);
eFSALRet = FSAL_Open(&mp4_files.MEDIA_VIDEO_FILE, (void*)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;
/* Open meta file */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_META_FILE);
eFSALRet = FSAL_Open(&mp4_files.MEDIA_META_FILE, (void*)med_v_context_p->storing_path, FSAL_APPEND);
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;
}
video_meta_file_open = KAL_TRUE;
FSAL_SetBuffer(&mp4_files.MEDIA_META_FILE, (kal_uint32) sizeof(buffer_enc_tmp), (kal_uint8*) buffer_enc_tmp);
/* Open Audio 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)
{
audio_file_exist = KAL_TRUE;
FSAL_Close(&fsalAudioFile);
}
else
{
audio_file_exist = KAL_FALSE;
}
/* check video real meta file exist */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_REAL_META_FILE);
eFSALRet = FSAL_Open(&mp4_files.REAL_META_FILE, (void*)med_v_context_p->storing_path, FSAL_READ);
if (eFSALRet == FSAL_OK)
{
video_real_meta_file_exist = KAL_TRUE;
FSAL_Close(&mp4_files.REAL_META_FILE);
}
else
{
video_real_meta_file_exist = KAL_FALSE;
}
/* Video video file/meta file ready */
/* Create video real meta file */
{
t_rtc rtctime;
file_struct.temp_video_size = 0;
status = video_enc_get_timescale(&mp4_files.MEDIA_META_FILE, &file_struct.time_scale);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_META_FILE));
}
goto merge_error;
}
status = video_enc_get_type(&mp4_files.MEDIA_META_FILE, &file_struct.short_header);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_META_FILE));
}
goto merge_error;
}
RTC_GetTime(&rtctime);
file_struct.create_time = mpeg4_cratetime_translate(&rtctime);
file_struct.total_duration = 0;
status = video_enc_get_frame_size(&mp4_files.MEDIA_META_FILE, &file_struct.frame_width, &file_struct.frame_height);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_META_FILE));
}
goto merge_error;
}
status = video_enc_get_framerate(&mp4_files.MEDIA_META_FILE, &file_struct.frame_rate);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_META_FILE));
}
goto merge_error;
}
status = video_enc_get_vos_length(&mp4_files.MEDIA_META_FILE, &file_struct.VOS_length);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_META_FILE));
}
goto merge_error;
}
if (file_struct.short_header == 0)
{
ASSERT(file_struct.VOS_length <= 60);
file_struct.VOS_ptr = test_vos_data;
status = video_enc_get_vos_data(test_vos_data, file_struct.VOS_length, &mp4_files.MEDIA_META_FILE);
}
status = video_enc_get_totalframes(
&mp4_files.MEDIA_VIDEO_FILE,
&mp4_files.MEDIA_META_FILE,
&file_struct,
&file_struct.frame_number);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
}
goto merge_error;
}
eFSALRet = FSAL_GetFileSize(&mp4_files.MEDIA_VIDEO_FILE, &video_file_size);
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;
}
status = video_enc_get_mdatsz_pos(&mp4_files.MEDIA_META_FILE, &video_mdatsz_pos);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_META_FILE));
}
goto merge_error;
}
if (audio_file_exist != KAL_TRUE && video_real_meta_file_exist == KAL_TRUE)
{
eFSALRet = FSAL_Seek(&mp4_files.MEDIA_VIDEO_FILE, video_mdatsz_pos);
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;
}
/* Maybe some wrong bitstream will be include, because the characteristics of PS_Merge. */
eFSALRet = FSAL_Read_UINT(&mp4_files.MEDIA_VIDEO_FILE, &file_struct.temp_video_size);
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;
}
status = video_enc_get_totalframes(
&mp4_files.MEDIA_VIDEO_FILE,
&mp4_files.MEDIA_META_FILE,
&file_struct,
&file_struct.frame_number);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
}
goto merge_error;
}
}
if (vid_context_p->use_pseudo_merge)
{
video_file_size = ((video_file_size + cluster_size - 1) / cluster_size) * cluster_size;
eFSALRet = FSAL_Write_UINT_AT(
&mp4_files.MEDIA_VIDEO_FILE,
video_file_size - video_mdatsz_pos,
video_mdatsz_pos);
}
else
{
eFSALRet = FSAL_Write_UINT_AT(
&mp4_files.MEDIA_VIDEO_FILE,
video_file_size - video_mdatsz_pos,
video_mdatsz_pos);
}
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;
}
FS_Commit(mp4_files.MEDIA_VIDEO_FILE.hFile);
/* Create REAL_META FILE */
med_remove_file_name(med_v_context_p->storing_path);
kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_REAL_META_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;
}
goto merge_error;
}
video_real_meta_file_open = KAL_TRUE;
eFSALRet = FSAL_Open_WithHandle(&mp4_files.REAL_META_FILE, (void*)vid_context_p->file_handle);
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;
}
FSAL_SetBuffer(
&mp4_files.REAL_META_FILE,
(kal_uint32) sizeof(buffer_enc_real_meta_tmp),
(kal_uint8*) buffer_enc_real_meta_tmp);
status = video_enc_generate_META_file(&file_struct, &mp4_files.REAL_META_FILE, &video_file_info);
if (status != MEDIA_STATUS_OK)
{
VID_VIS_ERROR_TRACE(status, __LINE__);
result = vid_get_result_from_media_status(status);
if (result == MED_RES_FSAL_ERROR)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
}
goto merge_error;
}
FSAL_Close(&mp4_files.MEDIA_VIDEO_FILE);
video_file_open = KAL_FALSE;
}
if ((vid_context_p->use_pseudo_merge == KAL_FALSE) && (audio_file_exist == KAL_TRUE))
{
kal_uint32 result_bytes;
MP4_Producer_Status AudioProducerStat;
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 = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
audio_file_open = KAL_TRUE;
AudioProducerStat = MP4_Produce_CalculateLimitedAudioFileSize(
&fsalAudioFile,
(kal_uint32) video_file_size,
(kal_uint32) file_struct.total_duration,
0, /* 0: AMR 1: WB-AMR */
&result_bytes);
if (AudioProducerStat != MP4_PRODUCER_OK)
{
result = MED_RES_AUDIO_ERROR;
VID_AUD_ERROR_TRACE(AudioProducerStat, __LINE__);
goto merge_error;
}
eFSALRet = FSAL_Direct_Seek(&fsalAudioFile, result_bytes);
if (eFSALRet != FSAL_OK)
{
result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
goto merge_error;
}
FS_Truncate(fsalAudioFile.hFile);
FSAL_Close(&fsalAudioFile);
audio_file_open = KAL_FALSE;
}
/* Create audio real meta file */
if (audio_file_exist == KAL_TRUE) /* Audio file exist */
{
kal_uint32 audio_sample_count;
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_APPEND);
if (eFSALRet != FSAL_OK)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -