184 lines
6.7 KiB
C++
184 lines
6.7 KiB
C++
#ifndef _SAPXFERNODE_H_
|
|
#define _SAPXFERNODE_H_
|
|
|
|
// SapXferNode.h : header file
|
|
//
|
|
|
|
#include "SapClassBasicDef.h"
|
|
|
|
//
|
|
// SapXferParams class declaration
|
|
//
|
|
class SAPCLASSBASIC_CLASS SapXferParams
|
|
{
|
|
public:
|
|
// Transfer frame types
|
|
typedef int FrameType;
|
|
enum _FrameType
|
|
{
|
|
FrameInterlaced = CORXFER_VAL_FRAME_INTERLACED,
|
|
FrameProgressive = CORXFER_VAL_FRAME_NON_INTERLACED
|
|
};
|
|
|
|
// Transfer field order
|
|
typedef int FieldOrder;
|
|
enum _FieldOrder
|
|
{
|
|
FieldOrderOddEven = CORXFER_VAL_FIELD_ORDER_ODD_EVEN,
|
|
FieldOrderEvenOdd = CORXFER_VAL_FIELD_ORDER_EVEN_ODD,
|
|
FieldOrderNext = CORXFER_VAL_FIELD_ORDER_NEXT_FIELD
|
|
};
|
|
|
|
public:
|
|
// Constructor/destructor
|
|
SapXferParams();
|
|
~SapXferParams();
|
|
|
|
// Access to implementation
|
|
FrameType GetFrameType() const { return m_Frame; }
|
|
FieldOrder GetFieldOrder() const { return m_FieldOrder; }
|
|
int GetWidth() const { return m_Width; }
|
|
int GetHeight() const { return m_Height; }
|
|
SapFormat GetFormat() const { return m_Format; }
|
|
int GetPixelDepth() const { return m_PixelDepth; }
|
|
int GetPixelShift() const { return m_PixelShift; }
|
|
void GetParameters(FrameType *frame, FieldOrder *fieldOrder, int *width, int *height, SapFormat *format, int *pixelDepth, int *pixelShift) const;
|
|
|
|
void SetFrameType(FrameType frameType) { m_Frame = frameType; }
|
|
void SetFieldOrder(FieldOrder fieldOrder) { m_FieldOrder = fieldOrder; }
|
|
void SetWidth(int width) { m_Width = width; }
|
|
void SetHeight(int height) { m_Height = height; }
|
|
void SetFormat(SapFormat format) { m_Format = format; SetPixelDepth(CorManGetPixelDepthMax(m_Format)); }
|
|
void SetPixelDepth(int pixelDepth) { m_PixelDepth = pixelDepth; SetPixelShift(CorManGetPixelDepthMax(m_Format) - pixelDepth); }
|
|
void SetPixelShift(int pixelShift) { m_PixelShift = pixelShift; }
|
|
void SetParameters(FrameType frame, FieldOrder fieldOrder, int width, int height, SapFormat format, int pixelDepth, int pixelShift);
|
|
|
|
// Utility
|
|
operator CORXFER_DESC();
|
|
|
|
// Obsolete methods
|
|
FrameType GetFrame() const { return GetFrameType(); }
|
|
void Get(FrameType *frame, FieldOrder *fieldOrder, int *width, int *height, SapFormat *format, int *pixelDepth, int *pixelShift) const;
|
|
void SetFrame(FrameType frame) { SetFrameType(frame); }
|
|
void Set(FrameType frame, FieldOrder fieldOrder, int width, int height, SapFormat format, int pixelDepth, int pixelShift);
|
|
|
|
protected:
|
|
FrameType m_Frame;
|
|
FieldOrder m_FieldOrder;
|
|
int m_Width;
|
|
int m_Height;
|
|
SapFormat m_Format;
|
|
int m_PixelDepth;
|
|
int m_PixelShift;
|
|
};
|
|
|
|
//
|
|
// SapXferNode class declaration
|
|
//
|
|
|
|
class SAPCLASSBASIC_CLASS SapXferNode : public SapManager
|
|
{
|
|
public:
|
|
// Possible types for derived classes
|
|
enum XferNodeType
|
|
{
|
|
NodeTypeUnknown,
|
|
NodeTypeAcqDevice,
|
|
NodeTypeAcquisition,
|
|
NodeTypeBuffer,
|
|
NodeTypeCab,
|
|
NodeTypeObsolete1,
|
|
NodeTypePixPro,
|
|
NodeTypeRTPro,
|
|
NodeTypeBufferMulti
|
|
};
|
|
|
|
// Various constants
|
|
enum MiscValues
|
|
{
|
|
MaxXferParams = 32
|
|
};
|
|
|
|
public:
|
|
// Constructor/Destructor
|
|
SapXferNode(SapLocation location)
|
|
{ m_Location = location; m_pSrcNode = NULL; m_SrcPort = 0; m_hServer = m_handle = CORHANDLE_NULL; }
|
|
|
|
SapXferNode(SapLocation location, SapXferNode *pSrcNode)
|
|
{ m_Location = location; m_pSrcNode = pSrcNode; m_SrcPort = 0; m_hServer = m_handle = CORHANDLE_NULL; }
|
|
|
|
SapXferNode(SapLocation location, SapXferParams xferParams)
|
|
{ m_Location = location; m_pSrcNode = NULL; m_SrcPort = 0; m_XferParams[0] = xferParams; m_hServer = m_handle = CORHANDLE_NULL; }
|
|
|
|
//should copy all xferParams
|
|
SapXferNode(const SapXferNode& node)
|
|
{ m_Location = node.m_Location; m_pSrcNode = node.m_pSrcNode; m_SrcPort = node.m_SrcPort;m_XferParams[0] = node.m_XferParams[0]; m_hServer = m_handle = CORHANDLE_NULL; }
|
|
|
|
virtual ~SapXferNode() {}
|
|
|
|
SapXferNode& operator= (const SapXferNode& node)
|
|
{
|
|
m_Location = node.m_Location; m_pSrcNode = node.m_pSrcNode; m_SrcPort = node.m_SrcPort; m_XferParams[0] = node.m_XferParams[0]; m_bInitOK = FALSE; m_hServer = m_handle = CORHANDLE_NULL;
|
|
return *this;
|
|
}
|
|
|
|
// Creation/destruction
|
|
virtual BOOL Create() = 0;
|
|
virtual BOOL Destroy() = 0;
|
|
|
|
public:
|
|
// Access to implementation
|
|
SapLocation GetLocation() const { return m_Location; }
|
|
SapXferNode *GetSrcNode() const { return m_pSrcNode; }
|
|
int GetSrcPort() const { return m_SrcPort; }
|
|
CORSERVER GetServer() const { return m_hServer; }
|
|
virtual SapXferParams GetXferParams(int portIndex = 0) const { return m_XferParams[CORXFER_PORT_INDEX_MASK(portIndex)]; }
|
|
virtual SapXferParams GetInputXferParams(int portIndex = 0) const { return GetXferParams(CORXFER_PORT_INDEX_MASK(portIndex)); }
|
|
virtual SapXferParams GetOutputXferParams(int portIndex = 0) const { return GetXferParams(CORXFER_PORT_INDEX_MASK(portIndex)); }
|
|
|
|
BOOL SetLocation(SapLocation loc) { if( m_bInitOK) return FALSE; m_Location = loc; return TRUE;}
|
|
virtual BOOL SetSrcNode(SapXferNode *pSrcNode, int srcPort = 0) { if( m_bInitOK) return FALSE; m_pSrcNode = pSrcNode; m_SrcPort = srcPort; return TRUE;}
|
|
virtual BOOL SetXferParams(SapXferParams xferParams, int portIndex = 0) { if( m_bInitOK) return FALSE; m_XferParams[portIndex] = xferParams; return TRUE;}
|
|
virtual BOOL SetInputXferParams(SapXferParams params, int portIndex = 0) { return SetXferParams(params, CORXFER_PORT_INDEX_MASK(portIndex)); }
|
|
virtual BOOL SetOutputXferParams(SapXferParams params, int portIndex = 0) { return SetXferParams(params, CORXFER_PORT_INDEX_MASK(portIndex)); }
|
|
|
|
virtual CORHANDLE GetHandle() const { return m_handle; }
|
|
virtual void GetXferParamsFromSrcNode()
|
|
{ if (m_pSrcNode) SetInputXferParams(m_pSrcNode->GetOutputXferParams( m_SrcPort)); }
|
|
|
|
// All classes derived from SapXferNode need to implement this
|
|
virtual XferNodeType GetXferNodeType() = 0;
|
|
|
|
// Obsolete method
|
|
virtual BOOL IsBuffer() { return GetXferNodeType() == NodeTypeBuffer; }
|
|
|
|
public:
|
|
// Cycling specific methods
|
|
virtual CORHANDLE GetHandle(int index) const { return index == 0 ? m_handle : CORHANDLE_NULL; }
|
|
virtual CORHANDLE operator[] (int index) const { return GetHandle(index); }
|
|
virtual int GetCount() const { return 1; }
|
|
virtual int GetIndex() const { return 0; }
|
|
virtual BOOL SetIndex(int index) { return TRUE; }
|
|
virtual void ResetIndex() {}
|
|
virtual void Next() {}
|
|
|
|
virtual CORHANDLE GetTrash() const { return CORHANDLE_NULL; }
|
|
|
|
// Obsolete methods
|
|
virtual BOOL Empty() { return TRUE; }
|
|
virtual BOOL Empty(int index) { return TRUE; }
|
|
virtual BOOL EmptyAll() { return TRUE; }
|
|
|
|
protected:
|
|
// Parameters
|
|
SapLocation m_Location;
|
|
SapXferNode *m_pSrcNode;
|
|
int m_SrcPort;
|
|
SapXferParams m_XferParams[MaxXferParams];
|
|
CORSERVER m_hServer;
|
|
CORHANDLE m_handle;
|
|
};
|
|
|
|
#endif // _SAPXFERNODE_H_
|
|
|