#ifndef _SAPXFER_MULTINODE_H_ #define _SAPXFER_MULTINODE_H_ // SapXferMultiNode.h : header file // #include "SapClassBasicDef.h" #include "SapTransfer.h" // // Class SapXferMultiNodeParam // Stores parameters that define an input or an output // of the SapXferMultiNode class. // class SAPCLASSBASIC_CLASS SapXferMultiNodeParam { public: // Various constants enum OnBrdBufferCreateMode { Default = 0x0001, AlwaysCreate = 0x0002, NeverCreate = 0x0004, }; public: // Constructor/destructor SapXferMultiNodeParam( SapXferNode *pSrcNode = NULL, int srcPort = 0, SapXferNode *pDstNode = NULL, int dstPort = 0, UINT32 nbOnBrdBuffers = 1, int relativeBufferIdx = 0, SapBuffer *pOnBrdbuffers = NULL, BOOL bOwnOnBrdBuffers = FALSE ) { m_pSrcNode = pSrcNode; m_SrcPort = srcPort; m_pDstNode = pDstNode; m_dstPort = dstPort; m_nbOnBrdBuffers = nbOnBrdBuffers; m_relativeBufferIdx = relativeBufferIdx; m_pOnBrdBuffers = pOnBrdbuffers; m_bOwnOnBrdBuffers = bOwnOnBrdBuffers; m_pXferCallBack = NULL; m_pXferContext = NULL; m_nbInputFrames = 1; m_nbOutputFrames = 1; m_OnBrdBufferCreateMode = Default; m_CycleMode = SapXferPair::CycleUnknown; m_pTrashCallBack = NULL; m_pTrashContext = NULL; } SapXferMultiNodeParam(const SapXferMultiNodeParam ¶m) { //use the = operator. *this = param; } virtual ~SapXferMultiNodeParam(){ return;} SapXferMultiNodeParam &operator=(const SapXferMultiNodeParam ¶m) { m_pSrcNode = param.m_pSrcNode; m_SrcPort = param.m_SrcPort; m_pDstNode = param.m_pDstNode; m_dstPort = param.m_dstPort; m_nbOnBrdBuffers = param.m_nbOnBrdBuffers; m_relativeBufferIdx = param.m_relativeBufferIdx; m_pOnBrdBuffers = param.m_pOnBrdBuffers; m_bOwnOnBrdBuffers = param.m_bOwnOnBrdBuffers; m_pXferCallBack = param.m_pXferCallBack; m_pXferContext = param.m_pXferContext; m_nbInputFrames = param.m_nbInputFrames; m_nbOutputFrames = param.m_nbOutputFrames; m_CycleMode = param.m_CycleMode; m_pTrashCallBack = param.m_pTrashCallBack; m_pTrashContext = param.m_pTrashContext; return *this; } BOOL SetSrcNode(SapXferNode* pSrcNode) { m_pSrcNode = pSrcNode; return TRUE;} BOOL SetSrcPort(int srcPort) { m_SrcPort = srcPort; return TRUE;} BOOL SetDstNode(SapXferNode *pDstNode) { m_pDstNode = pDstNode; return TRUE;} BOOL SetDstPort(int dstPort) { m_dstPort = dstPort; return TRUE;} BOOL SetNbInputFrames( int nbInputFrames) { m_nbInputFrames = nbInputFrames; return TRUE;} BOOL SetNbOutputFrames( int nbOutputFrames) { m_nbOutputFrames = nbOutputFrames; return TRUE;} BOOL SetNbOnBrdBuffers(int nbOnBrdBuffers) { m_nbOnBrdBuffers = nbOnBrdBuffers; return TRUE;} BOOL SetRelativeBufferIdx(int relativeBufferIdx) { m_relativeBufferIdx = relativeBufferIdx; return TRUE;} BOOL SetOnBrdBuffers(SapBuffer *pOnBrdBuffers) { m_pOnBrdBuffers = pOnBrdBuffers; return TRUE;} BOOL SetOnBrdBufferOwner(BOOL bOwnOnBrdBuffers) { m_bOwnOnBrdBuffers = bOwnOnBrdBuffers; return TRUE;} BOOL SetOnBrdBufferCreateMode( OnBrdBufferCreateMode createMode) { m_OnBrdBufferCreateMode = createMode; return TRUE;} BOOL SetXferCallbackInfo( SapXferCallback pCallback, void *pContext= NULL){ m_pXferCallBack = pCallback; m_pXferContext = pContext; return TRUE;} BOOL SetTrashCallbackInfo( SapXferCallback pCallback, void *pContext= NULL){ m_pTrashCallBack = pCallback; m_pTrashContext = pContext; return TRUE;} BOOL SetCycleMode( SapXferPair::CycleMode cycleMode) { m_CycleMode = cycleMode; return TRUE;} SapXferNode *GetSrcNode() { return m_pSrcNode;} int GetSrcPort() { return m_SrcPort;} SapXferNode *GetDstNode() { return m_pDstNode;} int GetDstPort() { return m_dstPort;} int GetNbOnBrdBuffers() { return m_nbOnBrdBuffers;} int GetRelativeBufferIdx() { return m_relativeBufferIdx;} SapBuffer *GetOnBrdBuffers() { return m_pOnBrdBuffers;} BOOL GetOnBrdBufferOwner() { return m_bOwnOnBrdBuffers;} OnBrdBufferCreateMode GetOnBrdBufferCreateMode() { return m_OnBrdBufferCreateMode;} SapXferCallback GetXferCallback( ){ return m_pXferCallBack;} void *GetXferContext( ) { return m_pXferContext;} int GetNbInputFrames( ) { return m_nbInputFrames;} int GetNbOutputFrames( ) { return m_nbOutputFrames;} SapXferCallback GetTrashCallback( ){ return m_pTrashCallBack;} void *GetTrashContext( ) { return m_pTrashContext;} SapXferPair::CycleMode GetCycleMode(void) { return m_CycleMode;} protected: //for xfernode connections. SapXferNode *m_pSrcNode; // src node for this input or output. int m_SrcPort; // src port for this input or output. SapXferNode *m_pDstNode; // dstNode for this input or output int m_dstPort; // dst port for this output int m_nbOnBrdBuffers; // number of onboard buffers to create. int m_relativeBufferIdx; // relative buffer index to use SapBuffer *m_pOnBrdBuffers; // optional sapera onboard buffers. BOOL m_bOwnOnBrdBuffers; // True if onboard buffers were created internally by SapXferMultiNode object. SapXferCallback m_pXferCallBack; void *m_pXferContext; int m_nbInputFrames; int m_nbOutputFrames; OnBrdBufferCreateMode m_OnBrdBufferCreateMode; SapXferPair::CycleMode m_CycleMode; SapXferCallback m_pTrashCallBack; void *m_pTrashContext; }; // // SapXferMultiNode class declaration // class SAPCLASSBASIC_CLASS SapXferMultiNode : public SapManager { public: // Various constants enum MiscValues { MaxInputs = 32, MaxOutputs = 32 }; public: // Constructor/Destructor SapXferMultiNode( SapLocation location = SapLocation::ServerSystem); virtual ~SapXferMultiNode(); //copy functions SapXferMultiNode(const SapXferMultiNode &xferMultiNode); SapXferMultiNode &operator=(const SapXferMultiNode &xferMultiNode); SapLocation GetLocation() const { return m_Location; } //setting input using a src SapXferNode. virtual BOOL SetInputSrc( int inputIdx, SapXferNode *pSrcNode, int srcPort = 0, int relativeBufferIdx = 0, int nbOnBrdBuffer = 2, SapBuffer *pOnBrdBuffers = NULL ); //set input using the output of a SapXferMultiNode object . virtual BOOL SetInputSrc( int inputIdx, SapXferMultiNode *pXferMultiNode, int outputIdx, int relativeBufferIdx = 0 ); //set output using a destination SapXferNode virtual BOOL SetOutputDst( int outputIdx, SapXferNode *pDstNode, int dstPort = 0, int nbOnBrdBuffer = 2, SapBuffer *pOnBrdBuffers = NULL ); virtual BOOL SetOutputNbInOutFrames( int outputIdx, int nbInputFrames, int nbOutputFrames); virtual BOOL SetOutputXferCallbackInfo( UINT32 outputIdx, SapXferCallback pCallback, void *pContext= NULL); virtual BOOL SetOutputOnBrdBufferCreateMode( int outputIdx, SapXferMultiNodeParam::OnBrdBufferCreateMode createMode); virtual BOOL SetInputOnBrdBufferCreateMode( int inputIdx, SapXferMultiNodeParam::OnBrdBufferCreateMode createMode); virtual BOOL SetOutputCycleMode( int outputIdx, SapXferPair::CycleMode cycleMode); virtual BOOL SetOutputTrashCallbackInfo( UINT32 outputIdx, SapXferCallback pCallback, void *pContext= NULL); //obsolete, use the SetOutputXferCallbackInfo instead. virtual BOOL SetXferCallbackInfo( SapXferCallback pCallback, void *pContext= NULL); BOOL SetOutputXferParam( int outputIdx, SapXferParams xferParam); SapXferParams GetInputXferParam( int inputIdx); SapBuffer *GetInputOnBrdBuffers( int inputIdx); SapXferNode *GetInputSrcNode( int inputIdx); SapXferNode *GetOutputDstNode( int outputIdx); SapBuffer *GetOutputOnBrdBuffers( int outputIdx); virtual BOOL GetOutputNbInOutFrames( int outputIdx, int *pNbInputFrames, int *pNbOutputFrames); virtual SapXferMultiNodeParam *GetOutputXferParam( UINT32 outputIdx) { if( outputIdx < MaxOutputs) { return m_pOutputInfo[ outputIdx]; } else { return NULL; } }; virtual SapXferPair::CycleMode GetOutputCycleMode( int outputIdx); //called by SapTransfer to add the transfer paths to make the multi node connections. virtual BOOL AddXferPaths( SapTransfer *pTransfer); virtual BOOL Create( void); virtual BOOL Destroy( void); protected: SapLocation m_Location; SapXferCallback m_pXferCallBack; void *m_pXferContext; SapXferMultiNodeParam *m_pInputInfo[ MaxInputs]; SapXferMultiNodeParam *m_pOutputInfo[ MaxOutputs]; //internal functions to manage connections. virtual BOOL DefineInput( int inputIdx, SapXferNode *pDstNode, int dstPort); virtual BOOL UndefineInput( int inputIdx ); virtual BOOL DefineOutput( int outputIdx, SapXferNode *pSrcNode, int srcPort); virtual BOOL UndefineOutput( int outputIdx ); virtual BOOL AddAllInputXferPaths( SapTransfer *pTransfer); virtual BOOL AddInputXferPath( SapTransfer *pTransfer, int inputIdx); virtual BOOL AddAllOutputXferPaths( SapTransfer *pTransfer); virtual BOOL AddOutputXferPath( SapTransfer *pTransfer, int outputIdx); }; #endif // _SAPXFER_MULTINODE_H_