⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vid_msg_handler.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -