📄 video_enc_glb.h
字号:
/*****************************************************************************
* 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_enc_glb.h
*
* Project:
* --------
* MAUI
*
* Description:
* ------------
* This file defines the encode related information.
*
* 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!
*
*******************************************************************************/
#ifndef VIDEO_ENC_GLB_H
#define VIDEO_ENC_GLB_H
//#define __VIDEO_GET_YUV_DATA__
#ifndef _DRV_COMM_H
#error "Please include drv_comm.h before video_enc_glb.h"
#endif
#ifndef BMD_H
#error "Please include bmd.h before video_enc_glb.h"
#endif
#ifndef _VISUAL_COMM_H
#error "Please include visual_comm.h before video_enc_glb.h"
#endif
#ifndef __FSAL_BUFFER_H__
#error "Please include fsal.h before video_enc_glb.h"
#endif
#ifndef __MP4_PARSER_H__
#error "Please include mp4_parser.h before video_enc_glb.h"
#endif
#ifndef L1AUDIO_H
#error "Please include l1audio.h before video_enc_glb.h"
#endif
#ifndef VIDEO_FILE_CREATOR_H
#error "Please include video_file_creator.h before video_enc_glb.h"
#endif
#ifndef __MED_STATUS_H__
#error "Please include med_status.h before video_enc_glb.h"
#endif
#include "l1audio.h"
#include "video_comm.h"
#if ( defined (MT6219) || defined (MT6226) || defined (MT6227) || defined (MT6226M) )
/*QCIF*/
/// Maximum encode frame width
///
#define ENC_MAX_FRAME_WIDTH 176
/// Maximum encode frame height
///
#define ENC_MAX_FRAME_HEIGHT 144
/// Maximum Chip encode frame width
///
#define CHIP_ENC_MAX_FRAME_WIDTH 352
/// Maximum Chip encode frame height
///
#define CHIP_ENC_MAX_FRAME_HEIGHT 288
#ifdef MT6219
/// bitstream buffer size per encode buffer
///
#define VIDEO_ENC_BUFFER_SIZE (150*1024)
/// Maximum encode bitstream buffer count
///
#define VIDEO_ENC_MAX_BUFFER_COUNT 3
#else /*(MT6226) || (MT6227) || (MT6226M)*/
/// bitstream buffer size per encode buffer
///
#define VIDEO_ENC_BUFFER_SIZE (ENC_MAX_FRAME_WIDTH*ENC_MAX_FRAME_HEIGHT+128)
/// Maximum encode bitstream buffer count
///
#define VIDEO_ENC_MAX_BUFFER_COUNT 7
#endif
/// Maximum encode meta buffer count
///
#define META_ENC_BUFFER_SIZE (16*1024)
/// The trigger pointer of encode meta buffer
///
#define META_ENC_BUFFER_TRIGGER_POINT 512
/// Maximum working memory
///
#define ENC_MAX_WORK_MEMORY ((ENC_MAX_FRAME_WIDTH*ENC_MAX_FRAME_HEIGHT*3)+3072+512)
/// Maximum encode frame rate
///
#define Video_Enc_Max_FrameRate 15
/// Maximum encode bit rate
///
#define Video_Enc_Max_BitRate 480000
/// Encode intra period
///
#ifdef MT6219
#define Video_Enc_IntraPeriod 128
#else /*!MT6219*/
#define Video_Enc_IntraPeriod 32
#endif /*MT6219*/
#else /*MT6228, MT6229, MT6230*/
/*VGA*/
/// Maximum encode frame width
///
#define ENC_MAX_FRAME_WIDTH 352
/// Maximum encode frame height
///
#define ENC_MAX_FRAME_HEIGHT 288
/// Maximum Chip encode frame width
///
#define CHIP_ENC_MAX_FRAME_WIDTH 640
/// Maximum Chip encode frame height
///
#define CHIP_ENC_MAX_FRAME_HEIGHT 480
/// bitstream buffer size per encode buffer
///
//#define VIDEO_ENC_BUFFER_SIZE (450*1024+128)
#define VIDEO_ENC_BUFFER_SIZE (ENC_MAX_FRAME_WIDTH*ENC_MAX_FRAME_HEIGHT+128)
/// Maximum encode bitstream buffer count
///
#define VIDEO_ENC_MAX_BUFFER_COUNT 7
/// Maximum encode meta buffer count
///
#define META_ENC_BUFFER_SIZE (16*1024)
/// The trigger pointer of encode meta buffer
///
#define META_ENC_BUFFER_TRIGGER_POINT 512
/// Maximum working memory
///
#define ENC_MAX_WORK_MEMORY (3072+1024+328)
/// Maximum encode frame rate
///
#define Video_Enc_Max_FrameRate 30
/// Maximum encode bit rate
///
#define Video_Enc_Max_BitRate 1920000
/// Encode intra period
///
#define Video_Enc_IntraPeriod 128
#endif
typedef enum
{
/// Video encode ok
///
VIDEO_ENC_OK = MED_STAT_VIDEO_ENC_START,
/// This video encode frame size exceed our maximum size.
///
VIDEO_ENC_FRAME_SIZE_ERROR,
/// The bitrate too large.
///
VIDEO_ENC_BITRATE_ERROR,
/// The frame rate too large.
///
VIDEO_ENC_FRAME_RATE_ERROR,
/// This function can't be called in this state.
///
VIDEO_ENC_FUNC_STATE_ERROR,
/// The resource is not enough
///
VIDEO_ENC_RESOURCE_NOT_AVAIL,
/// The bitstream file and meta file can't merge a media file.
///
VIDEO_ENC_FILE_CANT_MERGE,
/// Some functions in this file are not supported.
///
VIDEO_ENC_NOT_SUPPORT,
/// The error that is the bug of the driver
///
VIDEO_ENC_FATAL_ERROR,
/// The total encode status
///
MAX_VIDEO_ENC_STATUS
} VIDEO_ENC_STATUS;
typedef enum {
VIDEO_ENC_STAGE_UNKOWN=0,
VIDEO_ENC_STAGE_INIT,
VIDEO_ENC_STAGE_OPEN,
VIDEO_ENC_STAGE_CLOSE,
VIDEO_ENC_MAX_STAGE
} VIDEO_ENC_STAGE; /// Video encode function stage.
typedef enum {
VIDEO_ENC_START_RECORD_STATE_STOP=0,
VIDEO_ENC_START_RECORD_STATE_START,
VIDEO_ENC_START_RECORD_STATE_RESUME_START,
VIDEO_ENC_START_RECORD_STATE_RUNING,
VIDEO_ENC_START_RECORD_MAX_STATE
} VIDEO_ENC_START_RECORD_STATE; /// Video encode start record state
typedef enum
{
MMFILE_MP4=0x40,
MMFILE_3GP,
MMFILE_AVI,
MMFILE_UNKOWN
} MMFILE_TYPE; /// Media file type
typedef enum {
/// VIDEO bitstream buffer is available, and wait MED task move these data
/// to video bitstream file
VIDEO_ENC_EVENT_VIDEO_BUFFER_AVAIL=50,
/// VIDEO meta buffer is available, and wait MED task move these data to video meta file
///
VIDEO_ENC_EVENT_META_BUFFER_AVAIL,
/// VIDEO encode complete.
///
VIDEO_ENC_EVENT_COMPLETE,
/// VIDEO encode fail.
///
VIDEO_ENC_EVENT_FAIL,
/// Count file size for file size limit
///
VIDEO_ENC_EVENT_COUNT_FILE_SIZE,
VIDEO_ENC_MAX_EVENT
} VIDEO_ENC_EVENT;
/// RingBuffer description for meta buffer
///
typedef struct {
kal_uint8 mem_block_no; /*1 or 2*/
kal_uint32 start_addr[2];
kal_uint16 length[2];
}VIDEO_BUF_DESC;
typedef struct
{
kal_uint8 *buffer;
kal_uint32 buffer_length;
kal_uint32 buffer_index;
kal_bool is_read_done; //for task read, and write to flash
}VIDEO_ENC_BUFFER_STRUCT;
///Rate control information
///
typedef struct
{
kal_uint32 time_stamp[4];
kal_uint8 time_stamp_index;
kal_uint32 buffer_frame_num;
kal_uint32 avg_frame_duration;
kal_uint32 frame_rate;
kal_bool run_done;
}FR_STRUCT;
typedef struct
{
kal_int32 buffer_bits;
kal_int32 buffer_frame_num;
kal_int32 quant_temp;
FR_STRUCT fr_rate;
kal_int32 intra_mb_evaluation_count;
kal_int32 same_quant_count;
}RC_STRUCT;
/// Bitstream header information
///
typedef struct {
/// frame rate. for exampe : 15 fps.
///
kal_int32 frame_rate;
/// encoded frame width
///
kal_int32 width;
/// encoded frame height
///
kal_int32 height;
/// store the intra frame number.
///
kal_int32 intra_num;
/// short header mode(H.263) or not(Mpeg4).
///
kal_bool short_header;
/// I_VOP or P_VOP
///
kal_int32 predition_type;
/// This value represents the absolute vop_time_increment from the
/// synchronization point marked by the modulo_time_base measured
/// in the number of clock ticks. It can take a value in the range
/// of [0,vop_time_increment_resolution)
kal_int32 vop_time_increment;
///
///
kal_int32 fixed_vop_time_increment;
/// vop_time_increment_resolution, indicates the number of evenly spaced subintervals,
/// called ticks, within one modulo time. One modulo time represents the fixed interval
/// of one second. The value zero is forbidden.
kal_int32 time_increment;
/// quantizer value
///
kal_int32 quantizer;
/// vop_fcode_forward, values from 1 to 7; the value of zero is forbidden.
/// It is used in decoding of motion vectors.
kal_int32 fcode;
///
///
kal_int32 time_base;
}m4v_enc_im;
typedef struct {
/// Video encode bitstream buffer
///
VIDEO_ENC_BUFFER_STRUCT VIDEO_ENC_BUFFER[VIDEO_ENC_MAX_BUFFER_COUNT];
/// Current write encode bitstream id
///
kal_uint8 write_enc_buffer_id;
/// Current read encode bitstream id
///
kal_uint8 read_enc_buffer_id;
/// Video encode meta buffer(ringbuffer) information
///
BUFFER_INFO META_ENC_BUFFER; /*stsz+stts*/
/// RingBuffer description for meta buffer
///
VIDEO_BUF_DESC meta_mem_desc;
/// Physical meta buffer
///
kal_uint32 meta_enc_buffer[(META_ENC_BUFFER_SIZE+3)/4];
/// encode bit rate
/// good: 384K, normal: 128K, soso:64K
kal_uint32 bit_rate;
/// time stamp for current encoded frame
///
kal_uint32 time_stamp;
/// const delay for time stamp(AV sync)
///
kal_uint32 const_delay;
/// bitstream buffer handling. If this variable is true, driver can send ilm to MED task.
///
kal_bool is_send_ilm; // just for bitstream buffer
/// average frame rate.
///
kal_uint16 FRAME_RATE;
/// encode file type
///
MMFILE_TYPE file_type; /*.3gp, .mp4*/
/// rate control information
///
RC_STRUCT rc_data;
/// reach file size limit or not
///
kal_bool is_reach_file_size_limit;
/// bitstream header information
///
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -