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

📄 mx27_codec.h

📁 LP1071 无线局域网卡WinCE驱动程序
💻 H
字号:
// Copyright (c) 2006, Chips & Media.  All rights reserved.
//-----------------------------------------------------------------------------
// Copyright (C) 2006-2007, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT 
//-----------------------------------------------------------------------------

//------------------------------------------------------------------------------
//
//  File:		  mx27_codec.h
//  Purpose:	Defines the structure and protoytpe of API for Video Codec module
//
//------------------------------------------------------------------------------

#ifndef __MX27_CODEC_H__
#define __MX27_CODEC_H__

#if __cplusplus
extern "C" {
#endif

#include <windows.h>
//------------------------------------------------------------------------------
// MACRO DEFINITIONS 
//------------------------------------------------------------------------------
#define BONO
#define MAX_NUM_INSTANCE 4

// The Software Event Name used by User
#define VPU_INT_PIC_RUN_NAME                   L"Vpu PIC Run Command"
#define VPU_INT_BSBUF_EMPTY_NAME               L"Vpu Bitstream Empty"
//------------------------------------------------------------------------------
// Define Type Enumerations and Structure
//------------------------------------------------------------------------------
typedef unsigned char	Uint8;
typedef unsigned long	Uint32;
typedef unsigned short	Uint16;

typedef Uint32 PhysicalAddress;
typedef PhysicalAddress *PPhysicalAddress;

//------------------------------------------------------------------------------
// common struct and definition
//------------------------------------------------------------------------------

typedef enum {
	STD_MPEG4 = 0 ,
	STD_H263,
	STD_AVC
#if defined(SHIVA) || defined(ZAPPA)
	,
	STD_VC1
#endif
#ifdef ZAPPA
	,
	STD_MPEG2,
	STD_MJPEG,
	STD_DIV3
#endif
} CodStd;

typedef enum {
	RETCODE_SUCCESS,
	RETCODE_FAILURE,
	RETCODE_INVALID_HANDLE,
	RETCODE_INVALID_PARAM,
	RETCODE_INVALID_COMMAND,
#ifndef	SHIVA
	RETCODE_ROTATOR_OUTPUT_NOT_SET,
	RETCODE_ROTATOR_STRIDE_NOT_SET,
#endif
	RETCODE_FRAME_NOT_COMPLETE,
	RETCODE_INVALID_FRAME_BUFFER,
	RETCODE_INSUFFICIENT_FRAME_BUFFERS,
	RETCODE_INVALID_STRIDE,
	RETCODE_WRONG_CALL_SEQUENCE,
	RETCODE_CALLED_BEFORE,
	RETCODE_NOT_INITIALIZED,
	RETCODE_DEBLOCKING_OUTPUT_NOT_SET
} RetCode;

typedef enum {
#ifndef SHIVA
	ENABLE_ROTATION,
	DISABLE_ROTATION,
	ENABLE_MIRRORING,
	DISABLE_MIRRORING,
	SET_MIRROR_DIRECTION,
	SET_ROTATION_ANGLE,
	SET_ROTATOR_OUTPUT,
	SET_ROTATOR_STRIDE,
#endif
	GET_SPS_RBSP,	// to be changed
	GET_PPS_RBSP,
	SET_SPS_RBSP,
	SET_PPS_RBSP,
	ENCODE_MP4_HEADER,
	ENCODE_AVC_HEADER
#if defined(SHIVA) || defined(BONO) || defined(ZAPPA)
	,
	SET_ENC_SEARCHRAM_PARAM
#endif
#if defined(PRISM) || defined(SHIVA) || defined(ZAPPA)
	,
	SET_DEBLOCKING_OUTPUT
#endif
} CodecCommand;

typedef struct {
	PhysicalAddress bufY;
	PhysicalAddress bufCb;
	PhysicalAddress bufCr;
#ifdef ZAPPA
	PhysicalAddress bufMvCol;
#endif 
} FrameBuffer;

#ifndef SHIVA
typedef enum {
	MIRDIR_NONE,
	MIRDIR_VER,
	MIRDIR_HOR,
	MIRDIR_HOR_VER
} MirrorDirection;
#endif
		
struct CodecInst;

//------------------------------------------------------------------------------
// decode struct and definition
//------------------------------------------------------------------------------

typedef struct CodecInst DecInst;
typedef DecInst * DecHandle;

typedef struct {
	CodStd bitstreamFormat;
	PhysicalAddress bitstreamBuffer;
	Uint8 *virt_bitstreamBuffer;
	int bitstreamBufferSize;
#if defined(PRISM) || defined(SHIVA) || defined( ZAPPA )
	int mp4DeblkEnable;
#elif defined(BONO)
	int qpReport;
#endif
	int reorderEnable;			
#if defined(SHIVA)
	int chromaInterleave;
#endif		
#if defined(ZAPPA) || defined(BONO) || defined(SHIVA)
	int  filePlayEnable;
	int  picWidth;
	int  picHeight;
#endif
} DecOpenParam;

typedef struct {
	int picWidth;			// {(PicX+15)/16} * 16
	int picHeight;			// {(PicY+15)/16} * 16
	Uint32 frameRateInfo;
	
	int mp4_dataPartitionEnable;
	int mp4_reversibleVlcEnable;
	int mp4_shortVideoHeader;
	int h263_annexJEnable;
	int minFrameBufferCount;
	int frameBufDelay;				
} DecInitialInfo;

typedef struct {
#if defined(BONO) || defined(ZAPPA) || defined(SHIVA)
	int prescanEnable;
	int prescanMode;
#endif
	int dispReorderBuf;
#if defined(BONO) || defined(SHIVA) || defined( ZAPPA )
	int iframeSearchEnable;
#endif
#if defined(BONO)
	int skipframeMode;
	int skipframeNum;
#endif
#if defined(SHIVA)
	int vpuCountEnable;
#endif
#if defined(ZAPPA) || defined(BONO) || defined(SHIVA)
	int chunkSize;
#endif
} DecParam;

typedef struct {
	int indexDecoded;
	int picType;
	int numOfErrMBs;
	Uint8 *qpInfo;
#ifdef SHIVA
	int DecVpuCount;
#endif
#if defined(SHIVA) || defined(ZAPPA)
	int hScaleFlag;			//(VC1 only)
	int vScaleFlag;			//(VC1 only)
#endif
#if defined(BONO) || defined(ZAPPA) || defined(SHIVA)
	int prescanresult;
#endif
} DecOutputInfo;

typedef struct {
	Uint8 * paraSet;
	int size;
} DecParamSet;

//------------------------------------------------------------------------------
// encode struct and definition
//------------------------------------------------------------------------------

typedef struct CodecInst EncInst;
typedef EncInst * EncHandle;

typedef struct {
	int mp4_dataPartitionEnable;
	int mp4_reversibleVlcEnable;
	int mp4_intraDcVlcThr;
} EncMp4Param;

typedef struct {
	int h263_annexJEnable;
	int h263_annexKEnable;
	int h263_annexTEnable;
} EncH263Param;

typedef struct {
	int avc_constrainedIntraPredFlag;
	int avc_disableDeblk;
	int avc_deblkFilterOffsetAlpha;
	int avc_deblkFilterOffsetBeta;
	int avc_chromaQpOffset;
	int avc_audEnable;
	int avc_fmoEnable;
	int avc_fmoSliceNum;
	int avc_fmoType;	
} EncAvcParam;

typedef struct {
	CodStd bitstreamFormat;
	PhysicalAddress bitstreamBuffer;
	Uint32 bitstreamBufferSize;
	Uint8 *virt_bitstreamBuffer;
	int streamBufResetEnable;
	
	int picWidth;
	int picHeight;
	Uint32 frameRateInfo;
	int bitRate;
	int initialDelay;
	int vbvBufferSize;
	int enableAutoSkip;
	int gopSize;
	int sliceMode;
	int sliceSizeMode;
	int sliceSize;
	int intraRefresh;
	
	int sliceReport;
	int mbReport;
#if defined(BONO) || defined(ZAPP ) || defined(SHIVA)
	int mbQpReport;
#endif
#if defined(SHIVA)
	int chromaInterleave;
#endif
	union {
		EncMp4Param mp4Param;
		EncH263Param h263Param;
		EncAvcParam avcParam;
	} EncStdParam;
} EncOpenParam;

typedef struct {
	int minFrameBufferCount;
} EncInitialInfo;

typedef struct {
	FrameBuffer * sourceFrame;
	int forceIPicture;
	int skipPicture;
	int quantParam;
#ifdef SHIVA
	int vpuCountEnable;
#endif
} EncParam;

typedef struct {
	int picType;
	PhysicalAddress bitstreamBuffer;
	Uint32 bitstreamSize;
	int numOfSlices;
	Uint8 *sliceInfo;
	Uint8 *mbInfo;
#ifdef SHIVA
	int EncVpuCount;
#endif
#if defined(BONO) || defined(ZAPPA) || defined(SHIVA)
	Uint8 *mbQpInfo;
#endif
} EncOutputInfo;


typedef struct {
	Uint8 *paraSet;
	int size;
} EncParamSet;

#if defined(SHIVA) || defined(BONO) || defined(ZAPPA)
typedef struct {
	PhysicalAddress searchRamAddr;
#if defined(SHIVA) || defined(ZAPPA)
	int SearchRamSize;
#endif
} SearchRamParam;
#endif

typedef struct {
	Uint8 *buf;
	int size;
	int headerType;
} EncHeaderParam;

typedef enum {
	VOL_HEADER,
	VOS_HEADER,
	VIS_HEADER
} Mp4HeaderType;

typedef enum {
	SPS_RBSP,
	PPS_RBSP
} AvcHeaderType;	


//------------------------------------------------------------------------------
// MX27 CODEC API interfaces
//------------------------------------------------------------------------------
void* vpu_AllocPhysMem(Uint32 cbSize, PPhysicalAddress pPhysicalAddress);
BOOL vpu_FreePhysMem(void* pvAddress);
BOOL vpu_ReleaseCodecMutex(void);

RetCode vpu_Init();
void vpu_Deinit(void);
int vpu_IsBusy(void);
RetCode vpu_GetVersionInfo( Uint32 *versionInfo );

// function for encode
RetCode vpu_EncOpen(EncHandle *pHandle, EncOpenParam *pop);
RetCode vpu_EncClose(EncHandle handle);
RetCode vpu_EncGetInitialInfo(EncHandle handle, EncInitialInfo * info);
RetCode vpu_EncRegisterFrameBuffer(EncHandle handle,
		           FrameBuffer * bufArray, int num, int stride);
RetCode vpu_EncGetBitstreamBuffer(EncHandle handle, PhysicalAddress * prdPrt,
		                 PhysicalAddress * pwrPtr, Uint32 * size);
RetCode vpu_EncUpdateBitstreamBuffer(EncHandle handle, Uint32 size);
RetCode vpu_EncStartOneFrame(EncHandle handle, EncParam * param );
RetCode vpu_EncGetOutputInfo(EncHandle handle, EncOutputInfo * info);
RetCode vpu_EncGiveCommand(EncHandle handle, CodecCommand cmd, void * parameter);

// function for decode
RetCode vpu_DecOpen(DecHandle * pHandle, DecOpenParam * pop);
RetCode vpu_DecClose(DecHandle handle);
#if defined(BONO) || defined(ZAPPA) || defined(SHIVA)
RetCode vpu_DecSetEscSeqInit(DecHandle handle, int escape );
#endif
RetCode vpu_DecGetInitialInfo(DecHandle handle, DecInitialInfo * info);
RetCode vpu_DecRegisterFrameBuffer(DecHandle handle,
                   FrameBuffer * bufArray, int num, int stride);
RetCode vpu_DecGetBitstreamBuffer(DecHandle handle,	PhysicalAddress * prdPrt,
		           PhysicalAddress * pwrPtr, Uint32 * size );
RetCode vpu_DecUpdateBitstreamBuffer(DecHandle handle, Uint32 size);
RetCode vpu_DecStartOneFrame(DecHandle handle, DecParam *param ); 
RetCode vpu_DecGetOutputInfo(DecHandle handle, DecOutputInfo * info);
#if defined(BONO)
	RetCode vpu_DecBitBufferFlush(DecHandle handle);
#endif
RetCode vpu_DecGiveCommand(DecHandle handle, CodecCommand cmd, void * parameter);	
	
#ifdef __cplusplus
}
#endif

#endif // __MX27_CODEC_H__

⌨️ 快捷键说明

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