📄 vid_msg_handler.c
字号:
res2 = (vid_context_p->free_disc_space - sum - VIDEO_RECORD_MEM_MARGIN);
}
else
{
res2 = 0;
}
//kal_prompt_trace(MOD_MED, "sum=%d, res2= %d", sum, res2);
return MIN(res1, res2);
}
}
/*****************************************************************************
* FUNCTION
* vid_file_audio_residual_size
* DESCRIPTION
* This function is to get the residual file size for audio data.
* PARAMETERS
* void
* RETURNS
* kal_uint32
*****************************************************************************/
kal_uint32 vid_file_audio_residual_size(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint32 video_size;
kal_uint32 audio_size;
kal_uint32 sum;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (vid_context_p->use_pseudo_merge)
{
kal_uint32 cluster_size;
cluster_size = vid_context_p->file_size_info.disk_cluster_size;
video_size = (video_enc_get_bitstream_file_size() + (cluster_size - 1)) / (cluster_size);
video_size = video_size * cluster_size;
audio_size = (vid_context_p->file_size_info.audio_bitstream_size + (cluster_size - 1)) / (cluster_size);
audio_size = audio_size * cluster_size;
sum = (video_size + audio_size +
vid_context_p->file_size_info.audio_meta_size + vid_context_p->file_size_info.video_meta_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
sum = ((sum + 1) / cluster_size) * cluster_size;
if (vid_context_p->file_size_info.file_size_limit > sum)
{
return (vid_context_p->file_size_info.file_size_limit - sum + audio_size -
vid_context_p->file_size_info.audio_bitstream_size);
}
else
{
return (audio_size - vid_context_p->file_size_info.audio_bitstream_size - cluster_size*2);
}
}
else
{
kal_uint32 res1, res2;
sum = (video_enc_get_bitstream_file_size() + vid_context_p->file_size_info.audio_bitstream_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
if (vid_context_p->file_size_info.file_size_limit > sum)
{
res1 = (vid_context_p->file_size_info.file_size_limit - sum);
}
else
{
res1= 0;
}
//kal_prompt_trace(MOD_MED, "sum=%d, res1= %d", sum, res1);
sum = sum + vid_context_p->file_size_info.audio_bitstream_size;
if (vid_context_p->free_disc_space > sum+VIDEO_RECORD_MEM_MARGIN)
{
res2 = (vid_context_p->free_disc_space - sum - VIDEO_RECORD_MEM_MARGIN);
}
else
{
res2 = 0;
}
//kal_prompt_trace(MOD_MED, "sum=%d, res2= %d", sum, res2);
return MIN(res1, res2);
}
}
/*****************************************************************************
* FUNCTION
* vid_file_meta_residual_size
* DESCRIPTION
* This function is to get the residual file size for meta data.
* PARAMETERS
* void
* RETURNS
* kal_uint32
*****************************************************************************/
kal_uint32 vid_file_meta_residual_size(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint32 video_size;
kal_uint32 audio_size;
kal_uint32 sum;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (vid_context_p->use_pseudo_merge)
{
kal_uint32 cluster_size;
cluster_size = vid_context_p->file_size_info.disk_cluster_size;
video_size = (vid_context_p->file_size_info.video_bitstream_size + (cluster_size - 1)) / (cluster_size);
video_size = video_size * cluster_size;
audio_size = (vid_context_p->file_size_info.audio_bitstream_size + (cluster_size - 1)) / (cluster_size);
audio_size = audio_size * cluster_size;
sum = (video_size + audio_size +
vid_context_p->file_size_info.audio_meta_size + vid_context_p->file_size_info.video_meta_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
if (vid_context_p->file_size_info.file_size_limit > (sum))
{
return (vid_context_p->file_size_info.file_size_limit - (sum));
}
else
{
if (vid_context_p->file_size_info.video_meta_size < 128)
{
return 128;
}
else
{
return 0;
}
}
}
else
{
kal_uint32 res1, res2;
sum = (vid_context_p->file_size_info.video_bitstream_size + vid_context_p->file_size_info.audio_bitstream_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
if (vid_context_p->file_size_info.file_size_limit > sum)
{
res1 = (vid_context_p->file_size_info.file_size_limit - sum);
}
else
{
res1= 0;
}
//kal_prompt_trace(MOD_MED, "sum=%d, res1= %d", sum, res1);
sum = sum + vid_context_p->file_size_info.audio_bitstream_size;
if (vid_context_p->free_disc_space > sum+VIDEO_RECORD_MEM_MARGIN)
{
res2 = (vid_context_p->free_disc_space - sum - VIDEO_RECORD_MEM_MARGIN);
}
else
{
res2 = 0;
}
//kal_prompt_trace(MOD_MED, "sum=%d, res2= %d", sum, res2);
if( MIN(res1, res2) >0)
{
return MIN(res1, res2);
}
else
{
if (vid_context_p->file_size_info.video_meta_size < 128)
{
return 128;
}
else
{
return 0;
}
}
}
}
/*****************************************************************************
* FUNCTION
* vid_get_current_file_size
* DESCRIPTION
* This function is to get the current video file size.
* PARAMETERS
* void
* RETURNS
* kal_uint32
*****************************************************************************/
kal_uint32 vid_get_current_file_size(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint32 video_size;
kal_uint32 audio_size;
kal_uint32 sum;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (vid_context_p->use_pseudo_merge)
{
kal_uint32 cluster_size;
cluster_size = vid_context_p->file_size_info.disk_cluster_size;
video_size = (vid_context_p->file_size_info.video_bitstream_size + (cluster_size - 1)) / (cluster_size);
video_size = video_size * cluster_size;
audio_size = (vid_context_p->file_size_info.audio_bitstream_size + (cluster_size - 1)) / (cluster_size);
audio_size = audio_size * cluster_size;
VID_FILE_TRACE(
video_size,
audio_size,
vid_context_p->file_size_info.video_meta_size,
vid_context_p->file_size_info.audio_meta_size,
vid_context_p->file_size_info.video_rm_size,
vid_context_p->file_size_info.audio_rm_size);
sum = (video_size + audio_size +
vid_context_p->file_size_info.audio_meta_size + vid_context_p->file_size_info.video_meta_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
VID_VALUE_TRACE(vid_context_p->file_size_info.file_size_limit, sum, __LINE__);
return sum;
}
else
{
VID_FILE_TRACE(
vid_context_p->file_size_info.video_bitstream_size,
vid_context_p->file_size_info.audio_bitstream_size,
vid_context_p->file_size_info.video_meta_size,
vid_context_p->file_size_info.audio_meta_size,
vid_context_p->file_size_info.video_rm_size,
vid_context_p->file_size_info.audio_rm_size);
sum =
(vid_context_p->file_size_info.video_bitstream_size + vid_context_p->file_size_info.audio_bitstream_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
VID_VALUE_TRACE(vid_context_p->file_size_info.file_size_limit, sum, __LINE__);
return sum;
}
}
/*****************************************************************************
* FUNCTION
* vid_get_disc_free_space
* DESCRIPTION
* This function is to handle video record request
* PARAMETERS
* dir_name [?] kal_uint32 *free
* free [?]
* RETURNS
* kal_uint16
*****************************************************************************/
kal_uint16 vid_get_disc_free_space(kal_wchar *dir_name, kal_uint32 *free)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 result;
FS_DiskInfo disc_info;
kal_wchar dir[3];
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_mem_set(dir, 0, 6);
kal_mem_cpy(dir, dir_name, 4);
/* check the available free space */
result = FS_GetDiskInfo((kal_wchar*) dir, &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, disc_info.SectorsPerCluster * disc_info.BytesPerSector, __LINE__);
if (result > 0 && result & (FS_DI_BASIC_INFO | FS_DI_FREE_SPACE))
{
*free = disc_info.FreeClusters * disc_info.SectorsPerCluster * disc_info.BytesPerSector;
return MED_RES_OK;
}
else
{
return MED_RES_NO_DISC;
}
}
/*****************************************************************************
* FUNCTION
* vid_get_result_from_media_status
* DESCRIPTION
* This function is to get result from MEDIA_STATUS_CODE.
* PARAMETERS
* status [IN]
* RETURNS
* kal_int32
*****************************************************************************/
kal_int32 vid_get_result_from_media_status(MEDIA_STATUS_CODE status)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
switch (status)
{
case MEDIA_STATUS_OK:
return MED_RES_OK;
case MP4_PARSER_ERROR:
return MED_RES_PARSER_ERROR;
case VIDEO_ERROR:
VID_VIS_ERROR_TRACE(VIDEO_GetLastError(), vid_context_p->state);
return MED_RES_VIDEO_ERROR;
case AUDIO_ERROR:
return MED_RES_AUDIO_ERROR;
case FSAL_ERROR:
return MED_RES_FSAL_ERROR;
case FS_ERROR:
return MED_RES_OPEN_FILE_FAIL;
case MP4_PRODUCER_ERROR:
return MED_RES_MP4_PRODUCER_ERROR;
case MP4_SAMPLEDATA_ERROR:
return MED_RES_MP4_SAMPLEDATA_ERROR;
default:
return MED_RES_OK;
}
}
/*****************************************************************************
* FUNCTION
* vid_get_result_from_fsal_error
* DESCRIPTION
* This function is to get result from FSAL_Status.
* PARAMETERS
* error_code [IN]
* FSAL_Status status(?)
* RETURNS
* kal_int32
*****************************************************************************/
kal_int32 vid_get_result_from_fsal_error(kal_int32 error_code)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
switch (error_code)
{
case FSAL_OK:
return MED_RES_OK;
case FSAL_OPEN_ERROR:
case FSAL_CLOSE_ERROR:
return MED_RES_OPEN_FILE_FAIL;
case FSAL_READ_ERROR:
case FSAL_WRITE_ERROR:
case FSAL_SEEK_ERROR:
case FS_ACCESS_DENIED:
case FS_BAD_SECTOR:
case FS_DATA_ERROR:
case FS_MSDC_READ_SECTOR_ERROR:
case FS_MSDC_WRITE_SECTOR_ERROR:
return MED_RES_FSAL_ERROR;
case FS_DISK_FULL:
return MED_RES_DISC_FULL;
default:
return MED_RES_FAIL;
}
}
/*****************************************************************************
* FUNCTION
* vid_release_memory
* DESCRIPTION
* This function is to release internal/external memory used in video module.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void vid_release_memory(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (vid_context_p->intmem_start_address)
{
med_free_int_mem((void **)&vid_context_p->intmem_start_address);
}
if (vid_context_p->extmem_start_address)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -