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

📄 video_enc_glb.h

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