00001
00002
00003
00004
00005
00006
00007
00008
00013 #ifndef _BLT_MEDIA_NODE_H_
00014 #define _BLT_MEDIA_NODE_H_
00015
00057
00058
00059
00060 #include "Atomix.h"
00061 #include "BltDefs.h"
00062 #include "BltTypes.h"
00063 #include "BltErrors.h"
00064 #include "BltModule.h"
00065 #include "BltMedia.h"
00066 #include "BltCore.h"
00067 #include "BltMediaPort.h"
00068 #include "BltStream.h"
00069
00070
00071
00072
00073 #define BLT_ERROR_NO_SUCH_MEDIA_NODE (BLT_ERROR_BASE_MEDIA_NODE - 0)
00074
00075
00076
00077
00078 typedef enum {
00079 BLT_MEDIA_NODE_STATE_RESET,
00080 BLT_MEDIA_NODE_STATE_IDLE,
00081 BLT_MEDIA_NODE_STATE_RUNNING,
00082 BLT_MEDIA_NODE_STATE_PAUSED
00083 } BLT_MediaNodeState;
00084
00085 typedef struct {
00086 BLT_Module* module;
00087 BLT_CString name;
00088 BLT_Flags flags;
00089 } BLT_MediaNodeInfo;
00090
00091 typedef struct {
00092 BLT_MediaPortInterfaceSpec input;
00093 BLT_MediaPortInterfaceSpec output;
00094 } BLT_MediaNodeSpec;
00095
00096 struct BLT_MediaNodeConstructor {
00097 BLT_CString name;
00098 BLT_MediaNodeSpec spec;
00099 };
00100
00101 typedef struct {
00102
00103 ATX_IMPLEMENTS(BLT_MediaNode);
00104 ATX_IMPLEMENTS(ATX_Referenceable);
00105
00106
00107 BLT_Cardinal reference_count;
00108 BLT_Core* core;
00109 BLT_Stream* context;
00110 BLT_MediaNodeInfo info;
00111 } BLT_BaseMediaNode;
00112
00113
00114
00115
00116 ATX_BEGIN_INTERFACE_DEFINITION(BLT_MediaNode)
00117 BLT_Result (*GetInfo)(BLT_MediaNode* self, BLT_MediaNodeInfo* info);
00118 BLT_Result (*GetPortByName)(BLT_MediaNode* self,
00119 BLT_CString name,
00120 BLT_MediaPort** port);
00121 BLT_Result (*Activate)(BLT_MediaNode* self, BLT_Stream* stream);
00122 BLT_Result (*Deactivate)(BLT_MediaNode* self);
00123 BLT_Result (*Start)(BLT_MediaNode* self);
00124 BLT_Result (*Stop)(BLT_MediaNode* self);
00125 BLT_Result (*Pause)(BLT_MediaNode* self);
00126 BLT_Result (*Resume)(BLT_MediaNode* self);
00127 BLT_Result (*Seek)(BLT_MediaNode* self,
00128 BLT_SeekMode* mode,
00129 BLT_SeekPoint* point);
00130 ATX_END_INTERFACE_DEFINITION
00131
00132
00133
00134
00135 #define BLT_MediaNode_GetInfo(object, info) \
00136 ATX_INTERFACE(object)->GetInfo(object, info)
00137
00138 #define BLT_MediaNode_GetPortByName(object, name, port) \
00139 ATX_INTERFACE(object)->GetPortByName(object, name, port)
00140
00141 #define BLT_MediaNode_Activate(object, stream) \
00142 ATX_INTERFACE(object)->Activate(object, stream)
00143
00144 #define BLT_MediaNode_Deactivate(object) \
00145 ATX_INTERFACE(object)->Deactivate(object)
00146
00147 #define BLT_MediaNode_Start(object) \
00148 ATX_INTERFACE(object)->Start(object)
00149
00150 #define BLT_MediaNode_Stop(object) \
00151 ATX_INTERFACE(object)->Stop(object)
00152
00153 #define BLT_MediaNode_Pause(object) \
00154 ATX_INTERFACE(object)->Pause(object)
00155
00156 #define BLT_MediaNode_Resume(object) \
00157 ATX_INTERFACE(object)->Resume(object)
00158
00159 #define BLT_MediaNode_Seek(object, mode, point) \
00160 ATX_INTERFACE(object)->Seek(object, mode, point)
00161
00162
00163
00164
00165 #if defined(__cplusplus)
00166 extern "C" {
00167 #endif
00168
00169 BLT_Result BLT_BaseMediaNode_Construct(BLT_BaseMediaNode* self,
00170 BLT_Module* module,
00171 BLT_Core* core);
00172 BLT_Result BLT_BaseMediaNode_Destruct(BLT_BaseMediaNode* self);
00173 BLT_Result BLT_BaseMediaNode_GetInfo(BLT_MediaNode* self,
00174 BLT_MediaNodeInfo* info);
00175 BLT_Result BLT_BaseMediaNode_Activate(BLT_MediaNode* self,
00176 BLT_Stream* stream);
00177 BLT_Result BLT_BaseMediaNode_Deactivate(BLT_MediaNode* self);
00178 BLT_Result BLT_BaseMediaNode_Start(BLT_MediaNode* self);
00179 BLT_Result BLT_BaseMediaNode_Stop(BLT_MediaNode* self);
00180 BLT_Result BLT_BaseMediaNode_Pause(BLT_MediaNode* self);
00181 BLT_Result BLT_BaseMediaNode_Resume(BLT_MediaNode* self);
00182 BLT_Result BLT_BaseMediaNode_Seek(BLT_MediaNode* self,
00183 BLT_SeekMode* mode,
00184 BLT_SeekPoint* point);
00185
00186 #if defined(__cplusplus)
00187 }
00188 #endif
00189
00190
00191
00192
00193 #define BLT_MODULE_IMPLEMENT_SIMPLE_MEDIA_NODE_FACTORY(_module_type, _class) \
00194 BLT_METHOD \
00195 _module_type##_CreateInstance(BLT_Module* self, \
00196 BLT_Core* core, \
00197 BLT_ModuleParametersType parameters_type, \
00198 BLT_AnyConst parameters, \
00199 const ATX_InterfaceId* interface_id, \
00200 ATX_Object** object) \
00201 { \
00202 if (ATX_INTERFACE_IDS_EQUAL(interface_id, \
00203 &ATX_INTERFACE_ID__BLT_MediaNode)) { \
00204 return _class##_Create(self, \
00205 core, \
00206 parameters_type, \
00207 parameters, \
00208 (BLT_MediaNode**)object); \
00209 } else { \
00210 return BLT_ERROR_INVALID_INTERFACE; \
00211 } \
00212 } \
00213
00214 #endif