194 lines
8.6 KiB
C
194 lines
8.6 KiB
C
|
|
/****************************************************************************
|
|
* @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_
|