SapXferMultiNode.h 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. #ifndef _SAPXFER_MULTINODE_H_
  2. #define _SAPXFER_MULTINODE_H_
  3. // SapXferMultiNode.h : header file
  4. //
  5. #include "SapClassBasicDef.h"
  6. #include "SapTransfer.h"
  7. //
  8. // Class SapXferMultiNodeParam
  9. // Stores parameters that define an input or an output
  10. // of the SapXferMultiNode class.
  11. //
  12. class SAPCLASSBASIC_CLASS SapXferMultiNodeParam
  13. {
  14. public:
  15. // Various constants
  16. enum OnBrdBufferCreateMode
  17. {
  18. Default = 0x0001,
  19. AlwaysCreate = 0x0002,
  20. NeverCreate = 0x0004,
  21. };
  22. public:
  23. // Constructor/destructor
  24. SapXferMultiNodeParam( SapXferNode *pSrcNode = NULL,
  25. int srcPort = 0,
  26. SapXferNode *pDstNode = NULL,
  27. int dstPort = 0,
  28. UINT32 nbOnBrdBuffers = 1,
  29. int relativeBufferIdx = 0,
  30. SapBuffer *pOnBrdbuffers = NULL,
  31. BOOL bOwnOnBrdBuffers = FALSE )
  32. {
  33. m_pSrcNode = pSrcNode;
  34. m_SrcPort = srcPort;
  35. m_pDstNode = pDstNode;
  36. m_dstPort = dstPort;
  37. m_nbOnBrdBuffers = nbOnBrdBuffers;
  38. m_relativeBufferIdx = relativeBufferIdx;
  39. m_pOnBrdBuffers = pOnBrdbuffers;
  40. m_bOwnOnBrdBuffers = bOwnOnBrdBuffers;
  41. m_pXferCallBack = NULL;
  42. m_pXferContext = NULL;
  43. m_nbInputFrames = 1;
  44. m_nbOutputFrames = 1;
  45. m_OnBrdBufferCreateMode = Default;
  46. m_CycleMode = SapXferPair::CycleUnknown;
  47. m_pTrashCallBack = NULL;
  48. m_pTrashContext = NULL;
  49. }
  50. SapXferMultiNodeParam(const SapXferMultiNodeParam &param)
  51. {
  52. //use the = operator.
  53. *this = param;
  54. }
  55. virtual ~SapXferMultiNodeParam(){ return;}
  56. SapXferMultiNodeParam &operator=(const SapXferMultiNodeParam &param)
  57. {
  58. m_pSrcNode = param.m_pSrcNode;
  59. m_SrcPort = param.m_SrcPort;
  60. m_pDstNode = param.m_pDstNode;
  61. m_dstPort = param.m_dstPort;
  62. m_nbOnBrdBuffers = param.m_nbOnBrdBuffers;
  63. m_relativeBufferIdx = param.m_relativeBufferIdx;
  64. m_pOnBrdBuffers = param.m_pOnBrdBuffers;
  65. m_bOwnOnBrdBuffers = param.m_bOwnOnBrdBuffers;
  66. m_pXferCallBack = param.m_pXferCallBack;
  67. m_pXferContext = param.m_pXferContext;
  68. m_nbInputFrames = param.m_nbInputFrames;
  69. m_nbOutputFrames = param.m_nbOutputFrames;
  70. m_CycleMode = param.m_CycleMode;
  71. m_pTrashCallBack = param.m_pTrashCallBack;
  72. m_pTrashContext = param.m_pTrashContext;
  73. return *this;
  74. }
  75. BOOL SetSrcNode(SapXferNode* pSrcNode) { m_pSrcNode = pSrcNode; return TRUE;}
  76. BOOL SetSrcPort(int srcPort) { m_SrcPort = srcPort; return TRUE;}
  77. BOOL SetDstNode(SapXferNode *pDstNode) { m_pDstNode = pDstNode; return TRUE;}
  78. BOOL SetDstPort(int dstPort) { m_dstPort = dstPort; return TRUE;}
  79. BOOL SetNbInputFrames( int nbInputFrames) { m_nbInputFrames = nbInputFrames; return TRUE;}
  80. BOOL SetNbOutputFrames( int nbOutputFrames) { m_nbOutputFrames = nbOutputFrames; return TRUE;}
  81. BOOL SetNbOnBrdBuffers(int nbOnBrdBuffers) { m_nbOnBrdBuffers = nbOnBrdBuffers; return TRUE;}
  82. BOOL SetRelativeBufferIdx(int relativeBufferIdx) { m_relativeBufferIdx = relativeBufferIdx; return TRUE;}
  83. BOOL SetOnBrdBuffers(SapBuffer *pOnBrdBuffers) { m_pOnBrdBuffers = pOnBrdBuffers; return TRUE;}
  84. BOOL SetOnBrdBufferOwner(BOOL bOwnOnBrdBuffers) { m_bOwnOnBrdBuffers = bOwnOnBrdBuffers; return TRUE;}
  85. BOOL SetOnBrdBufferCreateMode( OnBrdBufferCreateMode createMode) { m_OnBrdBufferCreateMode = createMode; return TRUE;}
  86. BOOL SetXferCallbackInfo( SapXferCallback pCallback, void *pContext= NULL){ m_pXferCallBack = pCallback; m_pXferContext = pContext; return TRUE;}
  87. BOOL SetTrashCallbackInfo( SapXferCallback pCallback, void *pContext= NULL){ m_pTrashCallBack = pCallback; m_pTrashContext = pContext; return TRUE;}
  88. BOOL SetCycleMode( SapXferPair::CycleMode cycleMode) { m_CycleMode = cycleMode; return TRUE;}
  89. SapXferNode *GetSrcNode() { return m_pSrcNode;}
  90. int GetSrcPort() { return m_SrcPort;}
  91. SapXferNode *GetDstNode() { return m_pDstNode;}
  92. int GetDstPort() { return m_dstPort;}
  93. int GetNbOnBrdBuffers() { return m_nbOnBrdBuffers;}
  94. int GetRelativeBufferIdx() { return m_relativeBufferIdx;}
  95. SapBuffer *GetOnBrdBuffers() { return m_pOnBrdBuffers;}
  96. BOOL GetOnBrdBufferOwner() { return m_bOwnOnBrdBuffers;}
  97. OnBrdBufferCreateMode GetOnBrdBufferCreateMode() { return m_OnBrdBufferCreateMode;}
  98. SapXferCallback GetXferCallback( ){ return m_pXferCallBack;}
  99. void *GetXferContext( ) { return m_pXferContext;}
  100. int GetNbInputFrames( ) { return m_nbInputFrames;}
  101. int GetNbOutputFrames( ) { return m_nbOutputFrames;}
  102. SapXferCallback GetTrashCallback( ){ return m_pTrashCallBack;}
  103. void *GetTrashContext( ) { return m_pTrashContext;}
  104. SapXferPair::CycleMode GetCycleMode(void) { return m_CycleMode;}
  105. protected:
  106. //for xfernode connections.
  107. SapXferNode *m_pSrcNode; // src node for this input or output.
  108. int m_SrcPort; // src port for this input or output.
  109. SapXferNode *m_pDstNode; // dstNode for this input or output
  110. int m_dstPort; // dst port for this output
  111. int m_nbOnBrdBuffers; // number of onboard buffers to create.
  112. int m_relativeBufferIdx; // relative buffer index to use
  113. SapBuffer *m_pOnBrdBuffers; // optional sapera onboard buffers.
  114. BOOL m_bOwnOnBrdBuffers; // True if onboard buffers were created internally by SapXferMultiNode object.
  115. SapXferCallback m_pXferCallBack;
  116. void *m_pXferContext;
  117. int m_nbInputFrames;
  118. int m_nbOutputFrames;
  119. OnBrdBufferCreateMode m_OnBrdBufferCreateMode;
  120. SapXferPair::CycleMode m_CycleMode;
  121. SapXferCallback m_pTrashCallBack;
  122. void *m_pTrashContext;
  123. };
  124. //
  125. // SapXferMultiNode class declaration
  126. //
  127. class SAPCLASSBASIC_CLASS SapXferMultiNode : public SapManager
  128. {
  129. public:
  130. // Various constants
  131. enum MiscValues
  132. {
  133. MaxInputs = 32,
  134. MaxOutputs = 32
  135. };
  136. public:
  137. // Constructor/Destructor
  138. SapXferMultiNode( SapLocation location = SapLocation::ServerSystem);
  139. virtual ~SapXferMultiNode();
  140. //copy functions
  141. SapXferMultiNode(const SapXferMultiNode &xferMultiNode);
  142. SapXferMultiNode &operator=(const SapXferMultiNode &xferMultiNode);
  143. SapLocation GetLocation() const { return m_Location; }
  144. //setting input using a src SapXferNode.
  145. virtual BOOL SetInputSrc( int inputIdx,
  146. SapXferNode *pSrcNode,
  147. int srcPort = 0,
  148. int relativeBufferIdx = 0,
  149. int nbOnBrdBuffer = 2,
  150. SapBuffer *pOnBrdBuffers = NULL );
  151. //set input using the output of a SapXferMultiNode object .
  152. virtual BOOL SetInputSrc( int inputIdx,
  153. SapXferMultiNode *pXferMultiNode,
  154. int outputIdx,
  155. int relativeBufferIdx = 0 );
  156. //set output using a destination SapXferNode
  157. virtual BOOL SetOutputDst( int outputIdx,
  158. SapXferNode *pDstNode,
  159. int dstPort = 0,
  160. int nbOnBrdBuffer = 2,
  161. SapBuffer *pOnBrdBuffers = NULL );
  162. virtual BOOL SetOutputNbInOutFrames( int outputIdx, int nbInputFrames, int nbOutputFrames);
  163. virtual BOOL SetOutputXferCallbackInfo( UINT32 outputIdx, SapXferCallback pCallback, void *pContext= NULL);
  164. virtual BOOL SetOutputOnBrdBufferCreateMode( int outputIdx, SapXferMultiNodeParam::OnBrdBufferCreateMode createMode);
  165. virtual BOOL SetInputOnBrdBufferCreateMode( int inputIdx, SapXferMultiNodeParam::OnBrdBufferCreateMode createMode);
  166. virtual BOOL SetOutputCycleMode( int outputIdx, SapXferPair::CycleMode cycleMode);
  167. virtual BOOL SetOutputTrashCallbackInfo( UINT32 outputIdx, SapXferCallback pCallback, void *pContext= NULL);
  168. //obsolete, use the SetOutputXferCallbackInfo instead.
  169. virtual BOOL SetXferCallbackInfo( SapXferCallback pCallback, void *pContext= NULL);
  170. BOOL SetOutputXferParam( int outputIdx, SapXferParams xferParam);
  171. SapXferParams GetInputXferParam( int inputIdx);
  172. SapBuffer *GetInputOnBrdBuffers( int inputIdx);
  173. SapXferNode *GetInputSrcNode( int inputIdx);
  174. SapXferNode *GetOutputDstNode( int outputIdx);
  175. SapBuffer *GetOutputOnBrdBuffers( int outputIdx);
  176. virtual BOOL GetOutputNbInOutFrames( int outputIdx, int *pNbInputFrames, int *pNbOutputFrames);
  177. virtual SapXferMultiNodeParam *GetOutputXferParam( UINT32 outputIdx)
  178. {
  179. if( outputIdx < MaxOutputs)
  180. {
  181. return m_pOutputInfo[ outputIdx];
  182. }
  183. else
  184. {
  185. return NULL;
  186. }
  187. };
  188. virtual SapXferPair::CycleMode GetOutputCycleMode( int outputIdx);
  189. //called by SapTransfer to add the transfer paths to make the multi node connections.
  190. virtual BOOL AddXferPaths( SapTransfer *pTransfer);
  191. virtual BOOL Create( void);
  192. virtual BOOL Destroy( void);
  193. protected:
  194. SapLocation m_Location;
  195. SapXferCallback m_pXferCallBack;
  196. void *m_pXferContext;
  197. SapXferMultiNodeParam *m_pInputInfo[ MaxInputs];
  198. SapXferMultiNodeParam *m_pOutputInfo[ MaxOutputs];
  199. //internal functions to manage connections.
  200. virtual BOOL DefineInput( int inputIdx, SapXferNode *pDstNode, int dstPort);
  201. virtual BOOL UndefineInput( int inputIdx );
  202. virtual BOOL DefineOutput( int outputIdx, SapXferNode *pSrcNode, int srcPort);
  203. virtual BOOL UndefineOutput( int outputIdx );
  204. virtual BOOL AddAllInputXferPaths( SapTransfer *pTransfer);
  205. virtual BOOL AddInputXferPath( SapTransfer *pTransfer, int inputIdx);
  206. virtual BOOL AddAllOutputXferPaths( SapTransfer *pTransfer);
  207. virtual BOOL AddOutputXferPath( SapTransfer *pTransfer, int outputIdx);
  208. };
  209. #endif // _SAPXFER_MULTINODE_H_