📄 video_fileparse_adap.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_fileparse_adap.c
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* This Module defines the adaption layer of video driver for file parser api
*
* 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!
*
*------------------------------------------------------------------------------
* 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"
static MEDIA_STATUS_CODE video_file_read_bitstream_data(kal_uint32 current_pos, kal_uint32 current_size,
kal_uint32 current_buffer_addr);
/* Read bitstream from file system to buffer
* @param current_pos is start position in the file
* @param current_size is total bytes that should be read
* @param current_buffer_addr is the buffer start address
* @return Media status, which is based MEDIA_STATUS_CODE structure.
*/
static MEDIA_STATUS_CODE video_file_read_bitstream_data(kal_uint32 current_pos, kal_uint32 current_size,
kal_uint32 current_buffer_addr)
{
if (current_size > 512)
{
g_video_dec_status.FSAL_STATUS = FSAL_Direct_Seek(g_video_dec_info_ptr->pstFSAL, current_pos);
if (g_video_dec_status.FSAL_STATUS != FSAL_OK)
{
VIDEO_ASSERT(0);
g_video_dec_status.FSAL_ERROR_FILE = g_video_dec_info_ptr->pstFSAL;
return FSAL_ERROR;
}
g_video_dec_status.FSAL_STATUS = FSAL_Direct_Read(g_video_dec_info_ptr->pstFSAL,
(kal_uint8 *)current_buffer_addr,
current_size);
if (g_video_dec_status.FSAL_STATUS != FSAL_OK)
{
VIDEO_ASSERT(0);
g_video_dec_status.FSAL_ERROR_FILE = g_video_dec_info_ptr->pstFSAL;
return FSAL_ERROR;
}
}
else
{
g_video_dec_status.FSAL_STATUS = FSAL_Seek(g_video_dec_info_ptr->pstFSAL, current_pos);
if (g_video_dec_status.FSAL_STATUS != FSAL_OK)
{
VIDEO_ASSERT(0);
g_video_dec_status.FSAL_ERROR_FILE = g_video_dec_info_ptr->pstFSAL;
return FSAL_ERROR;
}
g_video_dec_status.FSAL_STATUS = FSAL_Read(g_video_dec_info_ptr->pstFSAL, (kal_uint8 *)current_buffer_addr,
current_size);
if (g_video_dec_status.FSAL_STATUS != FSAL_OK)
{
VIDEO_ASSERT(0);
g_video_dec_status.FSAL_ERROR_FILE = g_video_dec_info_ptr->pstFSAL;
return FSAL_ERROR;
}
}
return MEDIA_STATUS_OK;
}
/* Get sample data from media file to video buffer. It will try to get as mamy data as possible
* If not continous, it will try to merge them
* @param VIDEO_DEC_FILE_READ_STRUCT structure.
* @return Media status, which is based MEDIA_STATUS_CODE structure.
*/
MEDIA_STATUS_CODE video_file_get_sample_data(VIDEO_DEC_FILE_READ_STRUCT *p_file_info)
{
kal_uint32 current_pos = 0;
kal_uint32 current_size = 0;
kal_uint32 current_buffer_addr = 0;
kal_uint32 sum = 0;
kal_uint32 index;
kal_uint32 result_frame_no;
kal_uint32 result_frame_no_check;
kal_uint32 start_read_no;
MEDIA_STATUS_CODE result;
p_file_info->result_frame_no = 0;
p_file_info->result_size = 0;
result_frame_no = p_file_info->total_frame_no;
start_read_no = 0;
/* get sample size */
for (index = 0; index < result_frame_no; index++)
{
g_video_dec_status.PARSE_STATUS = MP4_GetSampleSize(g_video_dec_info_ptr->pMp4Parser,
(p_file_info->start_frame_no + index),
&p_file_info->p_frame_length[index],
MP4_TRACK_VIDEO);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
VIDEO_ASSERT(0);
result_frame_no = index;
g_video_dec_info_ptr->stop_frame_no = p_file_info->start_frame_no + result_frame_no;
break;
}
}
/* get sample offset */
result_frame_no_check = result_frame_no;
g_video_dec_status.PARSE_STATUS =
MP4_GetSampleOffset_Array(g_video_dec_info_ptr->pMp4Parser,
p_file_info->start_frame_no,
p_file_info->temp_file_offset,
&result_frame_no,
MP4_TRACK_VIDEO);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
if((result_frame_no_check==result_frame_no) && (result_frame_no_check!=0))
{
/* since it is error, result frame no must be different from original */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -