📄 video_file_creator.c
字号:
/*****************************************************************************
* 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 + -