📄 hxcodec.h
字号:
ULONG32 cbLength; // the size of this struct in bytes
HX_MOFTAG moftag; // always == HX_MEDIA_IMAGE
HX_MOFTAG submoftag; // image format identifier
// General attributes of the image stream independent of bitwise encoding
UINT16 uiWidth; // width of the image in pixels
UINT16 uiHeight; // height of the image in pixels
UINT16 uiBitCount; // color depth in bits
UINT16 uiPadWidth; // number of padded columns for codecs that
// need certian block sizes e.g. 8x8
UINT16 uiPadHeight; // number of padded rows for codecs that
// need certian block sizes e.g. 8x8
} HX_FORMAT_IMAGE;
// Generic Image HX_MOF struct
typedef struct tag_HX_FORMAT_IMAGE2
{
ULONG32 cbLength; // the size of this struct in bytes
HX_MOFTAG moftag; // always == HX_MEDIA_IMAGE
HX_MOFTAG submoftag; // image format identifier
// General attributes of the image stream independent of bitwise encoding
UINT16 uiWidth; // width of the image in pixels
UINT16 uiHeight; // height of the image in pixels
UINT16 uiBitCount; // color depth in bits
UINT16 uiPadWidthLeft; // number of padded columns for codecs that
// need certian block sizes e.g. 8x8
UINT16 uiPadHeightTop; // number of padded rows for codecs that
// need certian block sizes e.g. 8x8
UINT16 uiPadWidthRight; // number of padded columns for codecs that
// need certian block sizes e.g. 8x8
UINT16 uiPadHeightBottom; // number of padded rows for codecs that
// need certian block sizes e.g. 8x8
} HX_FORMAT_IMAGE2;
// Generic Video HX_MOF struct
typedef struct tag_HX_FORMAT_VIDEO
{
ULONG32 cbLength; // the size of this struct in bytes
HX_MOFTAG moftag; // always == HX_MEDIA_VIDEO
HX_MOFTAG submoftag; // video format identifier
// General attributes of the video stream independent of bitwise encoding
UINT16 uiWidth; // width of the image in pixels
UINT16 uiHeight; // height of the image in pixels
UINT16 uiBitCount; // color depth in bits
UINT16 uiPadWidth; // number of padded columns for codecs that
// need certian block sizes e.g. 8x8
UINT16 uiPadHeight; // number of padded rows for codecs that
// need certian block sizes e.g. 8x8
UFIXED32 framesPerSecond; // frames per second
} HX_FORMAT_VIDEO;
typedef struct tag_HX_FORMAT_TRANSFORM
{
ULONG32 cbLength; //total transform header length in bytes;
HX_MOFTAG moftag; //always == HX_MEDIA_VIDEO
HX_MOFTAG submoftag; //fourcc name of transform pluggin
ULONG32 subcbLength; //size of specific opaque transform header in bytes
INT32 viewLeft; //replicates HXxRect structure for initial viewing position
INT32 viewTop;
INT32 viewRight;
INT32 viewBottom;
} HX_FORMAT_TRANSFORM;
// Unfortunately we did not 4 byte align the HX_FORMAT_VIDEO struct. Since this struct must be 26 bytes in size
// we cannot do sizeof(HX_FORMAT_VIDEO) on several UNIX platforms and PowerPC macs. We are therefore going to
// hardcode the size to 26 bytes.
#define SIZE_OF_HX_FORMAT_VIDEO 26
#define HX_FORMAT_PACKETIZER_SIZE (3 * sizeof(ULONG32))
typedef BOOL (HXEXPORT_PTR FP_MEDIAFORMATSCALLBACK)(void *userData,
HX_MOF * pmof);
#if defined(_MACINTOSH) || defined(_MAC_UNIX)
#pragma export on
#endif
// HXCODEC_INIT struct used in HXStream_Open()
typedef struct tag_HXCODEC_INIT
{
HX_MOF *pInMof;
HX_MOF *pOutMof;
HXMEMORY memoryRef;
IUnknown* pContext;
}HXCODEC_INIT;
// HXCODEC_SETMENTINFO
#ifndef TAG_HXCODEC_SEGMENTINFO
#define TAG_HXCODEC_SEGMENTINFO
typedef struct tag_HXCODEC_SEGMENTINFO
{
LONG32 bIsValid;
ULONG32 ulSegmentOffset;
} HXCODEC_SEGMENTINFO;
#define HXCODEC_SEGMENTINFO_SIZE (8)
#endif
// HXCODEC_SETMENTINFO
/*
typedef struct tag_HXCODEC_SEGMENTINFO
{
BOOL bIsValid;
ULONG32 ulSegmentOffset;
} HXCODEC_SEGMENTINFO;
#define HXCODEC_SEGMENTINFO_SIZE (4 + sizeof(BOOL)) // BOOL is an int which changes size
*/
// HXCODEC_DATA struct used in PNStream_Input() and data_callback functions.
typedef struct tag_HXCODEC_DATA
{
ULONG32 dataLength;
UCHAR *data;
ULONG32 timestamp;
UINT16 sequenceNum;
UINT16 flags;
BOOL lastPacket;
ULONG32 numSegments;
HXCODEC_SEGMENTINFO Segments[1];
} HXCODEC_DATA;
// Since this is an internal structure for which we don't know the alignment
// changed to use sizeof srobinson 11/98
#define HXCODEC_DATA_SIZE (sizeof(HXCODEC_DATA))
#define HXCODEC_PTR_POPULATED_SIZE(x) (((UINT8*) (&((x)->Segments[(x)->numSegments]))) - ((UINT8*) (x)))
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Open)(HX_MOFTAG moftFormatTag,HXCODEC *codecRef);
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Close)(HXCODEC codecRef);
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetUIName)(HXCODEC codecRef,char *nameBuf);
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetVersion)(HXCODEC codecRef, ULONG32 *pVersion);
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_QueryMediaFormat)(HXCODEC codecRef,HX_MOF * pmofIn,
HX_MOF * pmofOut, UINT16 ioDirection);
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_PreferredMediaFormat)(HXCODEC codecRef,HX_MOF * pmofIn,
HX_MOF * pmofOut, UINT16 ioDirection);
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetMediaFormats)(HXCODEC codecRef, UINT16 ioDirection,
FP_MEDIAFORMATSCALLBACK fpCallback, void *userData);
#if defined ADD_HXCODEC_INPUT
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Input)(HXCODEC codecRef, HXCODEC_DATA *pData);
#endif
#if defined ADD_HXCODEC_GETIPNUNKNOWN
PIHXUnknown HXEXPORT ENTRYPOINT(PNCodec_GetIPNUnknown)(HXCODEC codecRef);
#endif
// FP_STREAM_DATA typedef
typedef HX_RESULT (HXEXPORT_PTR FP_STREAM_DATA)(HXSTREAM streamRef,
HXSTREAM fromstreamRef, HXCODEC_DATA *pData);
HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_StreamOpen)(HXCODEC codecRef,HXSTREAM *streamRef,HXCODEC_INIT
*params);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_Close)(HXSTREAM streamRef);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetDataCallback)(HXSTREAM streamRef,HXSTREAM callbackRef,
HXMEMORY memoryRef, FP_STREAM_DATA data_callback);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetProperty)(HXSTREAM streamRef, ULONG32 prop,
void *pValue);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetProperty)(HXSTREAM streamRef, ULONG32 prop,
void *pValue);
#ifdef HW_VIDEO_MEMORY_FRONTEND
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_PostProcess)(HXSTREAM streamRef,
HXCODEC_DATA *pncData,
ULONG32 uCurrentTime,
UCHAR *pDestBuffer,
UINT32 uDestPitch,
INT32 cidDestColorFormat);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_ReleaseFrame)(HXSTREAM streamRef,
HXCODEC_DATA *pncData);
#endif
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetStreamHeaderSize)(HXSTREAM streamRef,
ULONG32 *puSize);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetStreamHeader)(HXSTREAM streamRef, HX_MOF *pHeader);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_Input)(HXSTREAM streamRef,HXSTREAM fromStreamRef,
HXCODEC_DATA *pData);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetOutputPacketSize)(HXSTREAM streamRef,ULONG32 prefSize,
ULONG32 maxSize,ULONG32 *actualSize);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetInputBufferSize)(HXSTREAM streamRef,ULONG32 *puSize);
HX_RESULT HXEXPORT ENTRYPOINT(PNStream_OpenSettingsBox)(HXSTREAM streamRef, void * platformData);
PIHXUnknown HXEXPORT ENTRYPOINT(PNStream_GetIPNUnknown)(HXSTREAM streamRef);
#if defined(_MACINTOSH) || defined(_MAC_UNIX)
#pragma export off
#endif
#ifdef __cplusplus
}
#endif /* __cplusplus */
#ifdef __cplusplus
class IHXUnknown
{
public:
virtual HX_RESULT QueryInterface(HX_IID iid, void** ppvObj) = 0;
virtual ULONG32 AddRef() = 0;
virtual ULONG32 Release() = 0;
};
class IHX20Codec : public IHXUnknown
{
public:
virtual HX_RESULT PNCodec_Close() = 0;
virtual HX_RESULT PNCodec_GetUIName(char *pnameBuf) = 0;
virtual HX_RESULT PNCodec_GetVersion(ULONG32 *pVersion) = 0;
virtual HX_RESULT PNCodec_QueryMediaFormat(HX_MOF * pmofIn,
HX_MOF * pmofOut, UINT16 ioDirection) = 0;
virtual HX_RESULT PNCodec_PreferredMediaFormat(HX_MOF * pmofIn,
HX_MOF * pmofOut, UINT16 ioDirection) = 0;
virtual HX_RESULT PNCodec_GetMediaFormats(UINT16 ioDirection,
FP_MEDIAFORMATSCALLBACK fpCallback, void *userData) = 0;
virtual HX_RESULT PNCodec_StreamOpen(HXSTREAM * pStreamRef,
HXCODEC_INIT * pParams) = 0;
#if defined ADD_HXCODEC_INPUT
virtual HX_RESULT PNCodec_Input(HXCODEC_DATA *pData) = 0;
#endif
#if defined ADD_HXCODEC_GETIPNUNKNOWN
virtual IHXUnknown * PNCodec_GetIPNUnknown() = 0;
#endif
};
class IHX20Stream : public IHXUnknown
{
public:
virtual HX_RESULT HXStream_Init(HXCODEC_INIT * pInitParams) = 0;
virtual HX_RESULT PNStream_SetDataCallback(HXSTREAM callbackRef,
HXMEMORY memoryRef, FP_STREAM_DATA fpDataCallback) = 0;
virtual HX_RESULT PNStream_GetStreamHeaderSize(ULONG32 * puSize) = 0;
virtual HX_RESULT PNStream_GetStreamHeader(HX_MOF * pmofStreamHeader) = 0;
virtual HX_RESULT PNStream_Close() = 0;
virtual HX_RESULT PNStream_Input(HXSTREAM fromStreamRef,
HXCODEC_DATA * pData) = 0;
virtual HX_RESULT PNStream_SetOutputPacketSize(ULONG32 PrefSize,
ULONG32 MaxSize, ULONG32 *pActualSize) = 0;
virtual HX_RESULT PNStream_GetInputBufferSize(ULONG32 * puSize) = 0;
virtual HX_RESULT PNStream_SetProperty(ULONG32 prop, void *pValue) = 0;
virtual HX_RESULT PNStream_GetProperty(ULONG32 prop, void *pValue) = 0;
#ifdef HW_VIDEO_MEMORY_FRONTEND
virtual HX_RESULT PNStream_PostProcess(
HXCODEC_DATA *pncData,
ULONG32 uCurrentTime,
UCHAR *pDestBuffer,
UINT32 uDestPitch,
INT32 cidDestColorFormat) = 0;
virtual HX_RESULT PNStream_ReleaseFrame(
HXCODEC_DATA *pncData) = 0;
#endif
virtual HX_RESULT PNStream_OpenSettingsBox(void * platformData) = 0;
virtual IHXUnknown * PNStream_GetIPNUnknown() = 0;
};
typedef struct allocatorProps
{
ULONG32 uBufferSize;
ULONG32 nNumBuffers;
} HX20ALLOCPROPS;
class IHX20MemoryAllocator : public IHXUnknown
{
public:
virtual UCHAR * GetPacketBuffer(IHXUnknown ** pPacketBuffer) = 0;
virtual HX_RESULT SetProperties(HX20ALLOCPROPS* pRequest, HX20ALLOCPROPS* pActual) = 0;
virtual HX_RESULT GetProperties(HX20ALLOCPROPS* pProps) = 0;
virtual UINT16 AddRefPacketPtr(UCHAR * memPtr) = 0;
virtual UINT16 ReleasePacketPtr(UCHAR * memPtr) = 0;
};
#define USER_DATA_REALAUDIO_SURROUND 0x00000001
#endif // __cplusplus
#if defined( _WIN32 ) || defined( _WINDOWS )
#pragma pack()
// Restore warnings
#pragma warning( default : 4200 )
#endif
// Byte alignment settings for Mac
#if defined( _MACINTOSH ) || defined(_MAC_UNIX)
#pragma options align=reset
#endif
#endif // __HXCODEC_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -