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

📄 video_file_creator.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *    video_file_creator.c
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This Module defines the interface to create media file(video part and common part).
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#ifdef MP4_CODEC
#include "drv_comm.h"
#include "med_status.h"
#include "visual_comm.h"
#include "fsal.h"
#include "mp4_parser.h"
#include "l1audio.h"
#include "lcd_if.h"
#include "rtc_sw.h"
#include "video_file_creator.h"
#include "bmd.h"
#include "video_enc_glb.h"
#include "video_dec_glb.h"
#include "video_glb.h"

extern MP4_FILELIST_STRUCT mp4_files;

const kal_uint16 month_day[12] =
{
    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
};

void FSAL_WRITE_ZERO_GROUP(STFSAL * inp_file, kal_uint32 num, MEDIA_STATUS_CODE * result)
{
    kal_uint32 i;

    kal_uint8 data = 0;

    *result = MEDIA_STATUS_OK;

    for (i = 0; i < num; i++)
    {
        g_video_enc_status.FSAL_STATUS = FSAL_Write(inp_file, &data, 1);
        if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
        {
            VIDEO_ASSERT(0);

            g_video_enc_status.FSAL_ERROR_FILE = inp_file;
            *result = FSAL_ERROR;
            return;
        }
    }
}

kal_uint32 mpeg4_cratetime_translate(t_rtc * rtc_time)
{
    kal_uint32 addition_day;

    kal_uint32 time;
    addition_day = (((rtc_time->rtc_year - 1) - 1904) / 4) + 1;
    time = (((2000 + rtc_time->rtc_year - 1904) * 365 * 24 * 60* 60) + 
                 (month_day[rtc_time->rtc_mon - 1] + rtc_time->rtc_day + addition_day) * 24 * 60 * 60 + 
                 ((rtc_time->rtc_hour * 60 + rtc_time->rtc_min) * 60) + 
                  rtc_time->rtc_sec);

    if ((rtc_time->rtc_year & 0x03 == 0) && (rtc_time->rtc_mon > 2))
    {
        time += 24 * 60 * 60;
    }

    return time;
}

MEDIA_STATUS_CODE pre_defined_hr(kal_uint32 * mp4_file_pos, STFSAL * mp4_file)
{
    mp4_crt_write_int(*mp4_file_pos, 0x00010000, &mp4_files.REAL_META_FILE);

    mp4_crt_write_zero_group(*mp4_file_pos, 12, &mp4_files.REAL_META_FILE);
    mp4_crt_write_int(*mp4_file_pos, 0x00010000, &mp4_files.REAL_META_FILE);
    mp4_crt_write_zero_group(*mp4_file_pos, 12, &mp4_files.REAL_META_FILE);
    mp4_crt_write_int(*mp4_file_pos, 0x40000000, &mp4_files.REAL_META_FILE);
    return MEDIA_STATUS_OK;
}

kal_uint32 video_evaluate_real_meta_file_size(kal_bool short_header_mode)
{
    kal_uint32 file_size;

    kal_uint32 frame_no = g_video_enc_info_ptr->hisr_total_frames;

    if (short_header_mode) /*H.263*/
    {
        file_size = 564 + 
                    16 + (frame_no * 8) + 
                    20 + (frame_no * 4) + 
                    ((frame_no / g_video_enc_info_ptr->FRAME_RATE) * 4) + 16 + 
                    ((frame_no / Video_Enc_IntraPeriod) * 4) + 16;
    }
    else /*Mp4*/
    {
        file_size = 489 + 
                    151 + g_video_enc_info_ptr->VOS.size + 
                    16 + (frame_no * 8) + 
                    20 + (frame_no * 4) + 
                    (frame_no / g_video_enc_info_ptr->FRAME_RATE) * 4 + 16 + 
                    (frame_no / Video_Enc_IntraPeriod) * 4 + 16;
    }

    return file_size;
}

MEDIA_STATUS_CODE video_enc_get_totalframes(STFSAL * video_file, STFSAL * meta_file, MP4_FILE_CREATE_STRUCT * file_struct, kal_uint32 * total_frames)
{
    kal_uint32 file_size;

    kal_uint32 video_file_size;
    kal_uint32 index;
    kal_uint32 total_frame_size = 0;
    kal_uint32 length_temp;
    MEDIA_STATUS_CODE result;
    kal_uint32 temp;
    kal_uint32 vos_length = file_struct->VOS_length;

    if (file_struct->temp_video_size == 0)
    {
        g_video_enc_status.FSAL_STATUS = FSAL_GetFileSize(video_file, &video_file_size);
        if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
        {
            VIDEO_ASSERT(0);

            g_video_enc_status.FSAL_ERROR_FILE = video_file;
            return FSAL_ERROR;
        }
    }
    else
    {
        video_file_size = file_struct->temp_video_size;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_GetFileSize(meta_file, &file_size);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    file_size = file_size - ((vos_length + file_create_pos_vos_data + 3) / 4) * 4;
    temp = file_size / 8;
    *total_frames = 0;

    for (index = 0; index < temp; index++)
    {
        result = mpeg4_get_frame_length_from_meta_file(index, vos_length, &length_temp);

        if (result != MEDIA_STATUS_OK)
        {
            VIDEO_ASSERT(0);
            return result;
        }

        if ((video_file_size - 0x20) >= (total_frame_size + length_temp))
            total_frame_size += length_temp;
        else
        {
            g_video_enc_status.FSAL_STATUS = FSAL_Direct_Seek(video_file, total_frame_size + 0x20);

            if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
            {
                VIDEO_ASSERT(0);

                g_video_enc_status.FSAL_ERROR_FILE = video_file;
                return FSAL_ERROR;
            }

            FS_Truncate(video_file->hFile);
            break;
        }
        (*total_frames)++;
    }
    
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif

    return MEDIA_STATUS_OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -