📄 avi_control.h
字号:
#ifndef _AVI_CONTROL_H_
#define _AVI_CONTROL_H_
#ifdef __cplusplus
extern "C" {
#endif
/* <<< 2006/01/21 : Park,HeeSang */
#define AVI_MAX_STREAM_ERROR_COUNT 10
/* >>> 2006/01/21 : Park,HeeSang */
//HJ 2005. 10. 28 TEST...
#define AVI_LAST_ALLOC_HANDLING 1 // to let movie yuguanyin play zb 060329
#define AVI_ONLY_VIDEO_SUPPORT 1
#define AVI_ONLY_AUDIO_SUPPORT 1
#define AVI_ONLY_SUBPIC_SUPPORT 1
/* 07 29 05 Tejas */
#define _DEBUG_DRM_ 0
#define _AES_DYCRYPT_ 1
#define _PARSE_STRD_ 1
#define DRMINFO_SIZE 2224 // By SISO
#define DDCHUNKINFO_SIZE 10
#define PARTIAL_DDCHUNK 14
#define _DEBUG_PAR 0 //hj0908
#define _USE_FAKE_START_CODE_FOR_DIVX311 1 //hj1016
#define _USE_FAKE_START_CODE_EVERY_CHUNK 1//hj1016
/* <<< @: 5010-xxx.HoJune_Byun 05/11/18 : Test Purpose Only : Request from Dr,Lee */
//#define _USE_FAKE_START_CODE_EVERY_NULL_CHUNK 1//hj1016
/* <<< @: 5010-xxx.HoJune_Byun 06/01/11 : Test Purpose Only for AVI Extenion 2.0 */
//#define _USE_AVI_EXTENSION_TEST 1
/* <<< @: 5010-xxx.HoJune_Byun 06/01/11 : Test Purpose Only for AVI Extenion 2.0 */
//#define _USE_DIVX6_TEST 0
/* <<< @: 5010-xxx.HoJune_Byun 06/03/04 : Test Purpose Only for finding Fourcc by Demux */
#define _TEST_FIND_FOURCC_BY_DEMUX 1
/* <<< @: 5010-xxx.HoJune_Byun 06/03/04 : Test Purpose Only for finding Fourcc by Demux */
////////////////////////////////////////////////////////
/* AVI Task Msg */
extern SysTask_t gAVI_Task;
extern SysQueue_t gAVI_Message;
//extern SysSema_t gAvi_Sema;
extern SysSema_t gDma_Sema;
extern SysSema_t gAvi_Video_Sema;
extern SysSema_t gAvi_Audio_Sema;
extern SysSema_t gAvi_Sub_Sema;
/* global variables */
extern UINT gAvi_TBuf_RD_Ptr;
extern UINT gAvi_TBuf_RD_St_Ptr;
extern UINT gAvi_Buf_WR_Ptr0;
extern UINT gAvi_Buf_WR_St_Ptr0;
extern UINT gAvi_Buf_WR_Ptr1;
extern UINT gAvi_Buf_WR_St_Ptr1;
extern UINT gAvi_Buf_WR_Ptr2;
extern UINT gAvi_Buf_WR_St_Ptr2;
extern UINT vCkSize;
extern int gAVI_CurVideoIndex;
extern int gAVI_CurAudioIndex;
extern int gAVI_CurSubtitleIndex;
extern BOOL IsExSubtitle; // <<< @: 5010.joe.kang 051124
//////////////////////////////////////////////////////////////////
/* define functions */
#define InPtrSet(val) ( gAvi_TBuf_RD_Ptr = val)
#define InStopPtrSet(val) ( gAvi_TBuf_RD_St_Ptr = val)
#define OutPtrSet0(val) ( gAvi_Buf_WR_Ptr0 = val)
#define OutStopPtrSet0(val) ( gAvi_Buf_WR_St_Ptr0 = val)
#define OutPtrSet1(val) ( gAvi_Buf_WR_Ptr1 = val)
#define OutStopPtrSet1(val) ( gAvi_Buf_WR_St_Ptr1 = val)
#define OutPtrSet2(val) ( gAvi_Buf_WR_Ptr2 = val)
#define OutStopPtrSet2(val) ( gAvi_Buf_WR_St_Ptr2 = val)
//////////////////////////////////////////////////////////////////
typedef enum {
ckID_ERROR=0,
/* <<< @: 5010-xxx.HoJune_Byun 06/01/24 : Test Purpose for DIVX 6.0 Only */
#ifdef _USE_DIVX6_TEST
chID_CHECK_LIST_ID_SKIP_START,
chID_CHECK_LIST_ID_SKIP_CONTINUE,
chID_CHECK_LIST_SIZE_SKIP_START,
chID_CHECK_LIST_SIZE_SKIP_CONTINUE,
chID_CHECK_LIST_TYPE_SKIP_START,
chID_CHECK_LIST_TYPE_SKIP_CONTINUE,
chID_CHECK_PARTIAL_INDEX_ID_START, /* partial Index : 'ix##' */
chID_CHECK_PARTIAL_INDEX_ID_CONTINUE, /* partial Index : 'ix##' */
chID_CHECK_INDEX_ID_START,
chID_CHECK_INDEX_ID_CONTINUE,
#endif/*_USE_DIVX6_TEST */
/* <<< @: 5010-xxx.HoJune_Byun 06/01/24 : Test Purpose for DIVX 6.0 Only */
chID_CHECK_ID_START,
chID_CHECK_ID_CONTINUE,
chID_CHECK_LIST,
chID_CHECK_LIST_CONTINUE,
chID_CHECK_SIZE_START,
chID_CHECK_SIZE_CONTINUE,
chID_CHECK_DATA_START,
chID_CHECK_DATA_CONTINUE,
#if _USE_FAKE_START_CODE_FOR_DIVX311
chID_CHECK_FAKE_START_CODE_START,
#endif/* _USE_FAKE_START_CODE_FOR_DIVX311 */
#if _USE_FAKE_START_CODE_EVERY_CHUNK
chID_CHECK_FAKE_START_CODE_EVERY_CHUNK,
#endif/* _USE_FAKE_START_CODE_EVERY_CHUNK */
chID_CHECK_DRM_START,
chID_CHECK_DRM_CONTINUE
} DEMUX_STATUS_et;
typedef enum {
chID_STREAM_Init=0,
chID_STREAM_VIDEO,
chID_STREAM_DRM,
chID_STREAM_AUDIO,
chID_STREAM_SUBTITLE,
chID_STREAM_DISCARD,
chID_STREAM_INDEX,
chID_STREAM_ERROR
} DEMUX_StreamInfo_et;
/* <<< @: 5010-xxx.HoJune_Byun 05/11/15 : Inactivate unused code */
#if 0
typedef enum {
ckID_NONE =0,
cKID_FOUND,
cKID_NEXT_SECTOR,
cKID_FIRST_FOUR,
ckID_FULL_FOUND,
cKID_PARTIAL_FOUND
}ID_FIND_STATUS_et;
typedef enum {
cKSize_NONE =0,
cKSize_FOUND,
cKSize_NEXT_SECTOR,
cKSize_FIRST_FOUR,
cKSize_FULL_FOUND,
cKSize_PARTIAL_FOUND
}SIZE_FIND_STATUS_et;
#endif/* 0 */
/* <<< @: 5010-xxx.HoJune_Byun 05/11/15 : Inactivate unused code */
typedef enum {
AVI_STATUS_NOT_INITIALIZED,
AVI_STATUS_INITIALIZED,
AVI_STATUS_STARTED,
AVI_STATUS_READY
}AVI_STATUS_et;
typedef enum {
AVI_EXT_AUD_STATUS_NOT_INITIALIZED,
AVI_EXT_AUD_STATUS_INITIALIZED,
AVI_EXT_AUD_STATUS_STARTED,
AVI_EXT_AUD_STATUS_READY
}AVI_EXT_AUD_STATUS_et;
/* <<< @: 5010-xxx.HoJune_Byun 05/11/15 : Inactivate unused code */
#if 0
typedef enum {
NONE =0,
FOUND,
NEXT_SECTOR,
FIRST_FOUR,
FULL_FOUND,
PARTIAL_FOUND
} FIND_STATUS_et;
typedef enum {
COPY_DONE=0,
COPY_READY,
COPY_START,
STOP,
PAUSED,
COPY_RESUME,
NOT_DONE
}TRANSFER_STATUS_et;
typedef enum {
FIND_ID =0,
FIND_SIZE,
DUMP
}Parsing_State_et;
#endif/* 0 */
/* <<< @: 5010-xxx.HoJune_Byun 05/11/15 : Inactivate unused code */
/* <<< @: 5010-xxx.HoJune_Byun 05/12/06 : Optimize & Minimize 'MM_DRM_BUF' buffer size from 128KBytes to 128 Bytes */
typedef enum {
TRANSFER_MODE_1 = 0, /* transfer undecrypted video data HEAD part in video chunk to vbv buffer */
TRANSFER_MODE_3 , /* transfer Encrypted video data to MM_DRM_BUF */
TRANSFER_MODE_2 , /* transfer undecrypted video data TAIL part in video chunk to vbv buffer */
DECRYPTION_MODE_1 , /* Decrypt video data(16 Bytes or 64 Bytes each) in MM_DRM_BUF */
// TRANSFER_MODE_4 , /* transfer Decrypted video data(16 Bytes or 64 Bytes each) in MM_DRM_BUF to VBV Buffer */
DECRYPTION_MODE /* transfer decrypted video data MAIN part in video chunk to MM_DRM_BUF */
// DECRYPTION_READY_MODE , /* transfer decrypted video data MAIN part in video chunk to MM_DRM_BUF */
// DECRYPTION_DO_MODE /* transfer decrypted video data MAIN part in video chunk to VBV Buffer */
}AVI_Decrypt_State_et;
/* <<< @: 5010-xxx.HoJune_Byun 05/12/06 : Optimize & Minimize 'MM_DRM_BUF' buffer size from 128KBytes to 128 Bytes */
//////////////////////////////////////////////////////////////////
/* <<< @: 5010-xxx.HoJune_Byun 05/11/15 : Inactivate unused code */
// By SISO for Partial DRM buffer
#if 0
typedef struct _SPartialDRM
{
UCHAR acPartialBuff[2230]; //Greater than 2224 (for some hardware bug !!!)
UINT ui32OffSet;
}SPartialDRMBuff;
typedef struct _SPartialDDChunk
{
UCHAR acPartialBuff[PARTIAL_DDCHUNK];
UINT ui32OffSet;
}SPartialDDChunkBuff;
#if 0
typedef struct _SPartialEncryFrame
{
UCHAR* acPartialBuff;
UINT ui32OffSet;
}SPartialEncryptFrame;
#endif
typedef struct _SPartialEncryFrame
{
UCHAR* pBuffPartial; /* This should point to the malloced buffer */
UCHAR* pCurrPartialPtr;
UINT ui32PreSector; /* This the bytes remaining which were insufficient */
UINT ui32PostSector; /* This is the bytes remaining after calculating no. of full sectors */
UINT ui32NumFullSectors; /* This is no. of full sectors which have to be copied */
}SPartialEncryptFrame;
#endif/* 0 */
/* <<< @: 5010-xxx.HoJune_Byun 05/11/15 : Inactivate unused code */
#define AVIF_HASINDEX 0x00000010
#define AVIF_MUSTUSEINDEX 0x00000020
#define AVIF_ISINTERLEAVED 0x00000100
#define AVIF_TRUSTCKTYPE 0x00000800
#define AVIF_WASCAPTUREFILE 0x00010000
#define AVIF_COPYRIGHTED 0x00020000
/* <<< @: 5010-xxx.HoJune_Byun 05/11/15 : Inactivate unused code */
#if 0
/* avi header setting */
//avimainheader
typedef struct{
UINT fcc;
UINT cb;
UINT dwMicroSecPerFrame;
UINT dwMaxBytesPerSec;
UINT dwPaddingGranularity;
UINT dwFlags;
UINT dwTotalFrames;
UINT dwInitialFrames;
UINT dwStreams;
UINT dwSuggestedBufferSize;
UINT dwWidth;
UINT dwHeight;
UINT dwReserved[4];
}AVIMAINHEADER_st;
//Video/Audio StreamHeader (vstrh & astrh) -> 'strh' chunk
typedef struct {
UINT fcc;
UINT cb;
UINT fccType;
UINT fccHandler;
UINT dwFlags;
BYTE2 wPriority;
BYTE2 wLanguage;
UINT dwInitialFrames;
UINT dwScale ;
UINT dwRate;
UINT dwStart;
UINT dwLength;
UINT dwSuggestedBufferSize;
UINT dwQuality;
UINT dwSampleSize;
BYTE2 wLeft;
BYTE2 wTop;
BYTE2 wRight;
BYTE2 wBottom;
}STREAMHEADER_st;
//VideoStreamFormat ( BitMapInfoHeader) -> 'strf' chunk
typedef struct {
UINT vstrf_fcc;
UINT vstrf_cb;
UINT vstrf_size;
UINT vstrf_dwWidth;
UINT vstrf_dwHeight;
BYTE2 vstrf_wPlanes;
BYTE2 vstrf_wBitCount;
UINT vstrf_dwCompression;
UINT vstrf_dwSizeImage;
UINT vstrf_dwXpelsPerMeter;
UINT vstrf_dwYpelsPerMeter;
UINT vstrf_dwClrUsed;
UINT vstrf_dwClrImportant;
}VIDEO_STREAMFORMAT_st;
//VideoStreamData
//VideoStreamName
// AudioStreamFormat (WAVEFORMATEX) -> 'strf' chunk
typedef struct {
UINT astrf_fcc;
UINT astrf_cb;
BYTE2 astrf_wFormatTag;
BYTE2 astrf_wChannels;
UINT astrf_nSamplesPerSec;
UINT astrf_nAvgBytesPerSec;
BYTE2 astrf_nBlockAlign;
BYTE2 astrf_wBitsPerSample;
BYTE2 astrf_cbSize;
}AUDIO_STREAMFORMAT_st;
#endif/* 0 */
/* <<< @: 5010-xxx.HoJune_Byun 05/11/15 : Inactivate unused code */
/*
typedef struct tagWAVEFORMATEX{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -