Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

193 lines
8.6 KiB

/****************************************************************************
* @doc INTERNAL H26XINC
*
* @module H26XInc.h | Header file for the common H.26X video codec defines.
***************************************************************************/
#ifndef _H26XINC_H_
#define _H26XINC_H_
enum FrameSize {FORBIDDEN=0, SQCIF=1, QCIF=2, CIF=3, fCIF=4, ssCIF=5};
// MSH26X Configuration Information
typedef struct tagMSH26XCONF{
BOOL bInitialized; // Whether custom msgs can be rcv'd.
BOOL bCompressBegin; // Whether the CompressBegin msg was rcv'd.
BOOL bRTPHeader; // Whether to generate RTP header info
/* used if bRTPHeader */
UINT unPacketSize; // Maximum packet size
BOOL bEncoderResiliency; // Whether to use resiliency restrictions
/* used if bEncoderResiliency */
UINT unPacketLoss;
BOOL bBitRateState;
/* used if bBitRateState */
UINT unBytesPerSecond;
/* The following information is determined from the packet loss value. */
/* These values are calculated each time we receive a resiliency msg or */
/* the value is changed through the dialog box. They are not stored in */
/* the registry. Only the above elements are stored in the registry. */
BOOL bDisallowPosVerMVs; // if true, disallow positive vertical MVs
BOOL bDisallowAllVerMVs; // if true, disallow all vertical MVs
UINT unPercentForcedUpdate; // Percent Forced Update per Frame
UINT unDefaultIntraQuant; // Default Intra Quant
UINT unDefaultInterQuant; // Default Inter Quant
} MSH26XCONF;
// MSH26X Compressor Instance information
typedef struct tagMSH26XCOMPINSTINFO{
BOOL Initialized;
WORD xres, yres;
FrameSize FrameSz; // Which of the supported frame sizes.
float FrameRate;
DWORD DataRate; // Data rate in bytes per second.
HGLOBAL hEncoderInst; // Instance data private to encoder.
LPVOID EncoderInst;
WORD CompressedSize;
BOOL Is160x120;
BOOL Is240x180;
BOOL Is320x240;
MSH26XCONF Configuration;
} MSH26XCOMPINSTINFO, *PMSH26XCOMPINSTINFO;
// MSH26X BitStream Info Trailer structure
typedef struct tagH26X_RTP_BSINFO_TRAILER {
DWORD dwVersion;
DWORD dwFlags;
DWORD dwUniqueCode;
DWORD dwCompressedSize;
DWORD dwNumOfPackets;
BYTE bySrc;
BYTE byTR;
BYTE byTRB;
BYTE byDBQ;
} H26X_RTP_BSINFO_TRAILER, *PH26X_RTP_BSINFO_TRAILER;
// MSH263 BitStream Info structure
typedef struct tagRTP_H263_BSINFO {
DWORD dwFlags;
DWORD dwBitOffset;
BYTE byMode;
BYTE byMBA;
BYTE byQuant;
BYTE byGOBN;
char cHMV1;
char cVMV1;
char cHMV2;
char cVMV2;
} RTP_H263_BSINFO, *PRTP_H263_BSINFO;
// MSH261 BitStream Info structure
typedef struct tagRTP_H261_BSINFO {
DWORD dwFlags;
DWORD dwBitOffset;
BYTE byMBA;
BYTE byQuant;
BYTE byGOBN;
char cHMV;
char cVMV;
BYTE byPadding0;
WORD wPadding1;
} RTP_H261_BSINFO, *PRTP_H261_BSINFO;
// Constants
#define H263_RTP_BS_START_CODE MakeFOURCC('H','2','6','3')
#define H261_RTP_BS_START_CODE MakeFOURCC('H','2','6','1')
#define RTP_H26X_INTRA_CODED 0x00000001
#define RTP_H263_PB 0x00000002
#define RTP_H263_AP 0x00000004
#define RTP_H263_SAC 0x00000008
#define RTP_H263_UMV 0x00000010
#define RTP_H263_MODE_A 0x00
#define RTP_H263_MODE_B 0x01
#define RTP_H263_MODE_C 0x02
#define H26X_RTP_PAYLOAD_VERSION 0x00000000
#define RTP_H26X_PACKET_LOST 0x00000001
// Decompressor Instance information
typedef struct
{
BOOL Initialized;
BOOL bProposedCorrectAspectRatio;// proposed
BOOL bCorrectAspectRatio; // whether to correct the aspect ratio
WORD xres, yres; // size of image within movie
FrameSize FrameSz; // Which of the supported frame sizes.
// int pXScale, pYScale; // proposed scaling (Query)
// int XScale, YScale; // current scaling (Begin)
UINT uColorConvertor; // Current Color Convertor
WORD outputDepth; // and bit depth
LPVOID pDecoderInst;
BOOL UseActivePalette; // decompress to active palette == 1
BOOL InitActivePalette; // active palette initialized == 1
BOOL bUseBlockEdgeFilter; // switch for block edge filter
RGBQUAD ActivePalette[256]; // stored active palette
} DECINSTINFO, FAR *LPDECINST;
// Configuration Information
typedef struct
{
BOOL bInitialized; // Whether custom msgs can be rcv'd.
BOOL bCompressBegin; // Whether the CompressBegin msg was rcv'd.
BOOL bRTPHeader; // Whether to generate RTP header info
// Used if bRTPHeader
UINT unPacketSize; // Maximum packet size
BOOL bEncoderResiliency; // Whether to use resiliency restrictions
// Used if bEncoderResiliency
UINT unPacketLoss;
BOOL bBitRateState;
// Used if bBitRateState
UINT unBytesPerSecond;
/* The following information is determined from the packet loss value. */
/* These values are calculated each time we receive a resiliency msg or */
/* the value is changed through the dialog box. They are not stored in */
/* the registry. Only the above elements are stored in the registry. */
BOOL bDisallowPosVerMVs; // if true, disallow positive vertical MVs
BOOL bDisallowAllVerMVs; // if true, disallow all vertical MVs
UINT unPercentForcedUpdate; // Percent Forced Update per Frame
UINT unDefaultIntraQuant; // Default Intra Quant
UINT unDefaultInterQuant; // Default Inter Quant
} T_CONFIGURATION;
// Compressor Instance information
typedef struct
{
BOOL Initialized;
WORD xres, yres;
FrameSize FrameSz; // Which of the supported frame sizes.
float FrameRate;
DWORD DataRate; // Data rate in bytes per second.
HGLOBAL hEncoderInst; // Instance data private to encoder.
LPVOID EncoderInst;
WORD CompressedSize;
BOOL Is160x120;
BOOL Is240x180;
BOOL Is320x240;
T_CONFIGURATION Configuration;
} COMPINSTINFO, FAR *LPCODINST;
// Instance information
// @todo Remove useless fields of this structure
typedef struct tagINSTINFO
{
DWORD dwFlags;
DWORD fccHandler; // So we know what codec has been opened.
BOOL enabled;
LPCODINST CompPtr; // ICM
LPDECINST DecompPtr; // ICM
} INSTINFO, FAR *LPINST;
// For GetProcAddresss on DriverProc
typedef LRESULT (WINAPI *LPFNDRIVERPROC)(IN DWORD dwDriverID, IN HDRVR hDriver, UINT uiMessage, LPARAM lParam1, LPARAM lParam2);
// FourCC codes for DDraw and codecs
#define FOURCC_YUY2 mmioFOURCC('Y', 'U', 'Y', '2')
#define FOURCC_UYVY mmioFOURCC('U', 'Y', 'V', 'Y')
#define FOURCC_I420 mmioFOURCC('I', '4', '2', '0')
#define FOURCC_IYUV mmioFOURCC('I', 'Y', 'U', 'V')
#define FOURCC_YV12 mmioFOURCC('Y', 'V', '1', '2')
#define FOURCC_M263 mmioFOURCC('M', '2', '6', '3')
#define FOURCC_M261 mmioFOURCC('M', '2', '6', '1')
#define FOURCC_R263 mmioFOURCC('R', '2', '6', '3')
#define FOURCC_R261 mmioFOURCC('R', '2', '6', '1')
#endif // _H26XINC_H_