17 #ifndef QGST_ELEMENT_H
18 #define QGST_ELEMENT_H
22 #include "clocktime.h"
25 # include <boost/preprocessor.hpp>
37 State currentState()
const;
38 State pendingState()
const;
39 StateChangeReturn getState(State *state, State *pending,
ClockTime timeout)
const;
40 StateChangeReturn setState(State state);
41 bool syncStateWithParent();
43 bool stateIsLocked()
const;
44 bool setStateLocked(
bool locked);
46 bool addPad(
const PadPtr & pad);
47 bool removePad(
const PadPtr & pad);
49 PadPtr getStaticPad(
const char *name);
50 PadPtr getRequestPad(
const char *name);
51 void releaseRequestPad(
const PadPtr & pad);
54 bool setClock(
const ClockPtr & clock);
56 bool link(
const char *srcPadName,
const ElementPtr & dest,
58 bool link(
const char *srcPadName,
const ElementPtr & dest,
60 bool link(
const ElementPtr & dest,
const char *sinkPadName,
67 void unlink(
const char *srcPadName,
const ElementPtr & dest,
68 const char *sinkPadName = NULL);
69 void unlink(
const ElementPtr & dest,
const char *sinkPadName = NULL);
74 void unlink(
const char *srcPadName,
const ElementPtr & dest,
const char *sinkPadName);
84 return first->link(second);
89 first->unlink(second);
101 template <
typename First,
typename Second,
typename Third,
typename... Rest>
102 static inline bool linkMany(
const First & first,
const Second & second,
103 const Third & third,
const Rest & ... rest)
105 if (!first->link(second))
return false;
106 return linkMany(second, third, rest...);
115 template <
typename First,
typename Second,
typename Third,
typename... Rest>
116 static inline void unlinkMany(
const First & first,
const Second & second,
117 const Third & third,
const Rest & ... rest)
119 first->unlink(second);
120 unlinkMany(second, third, rest...);
122 #else //QGLIB_HAVE_CXX0X
124 # ifndef QGST_ELEMENT_LINK_MANY_MAX_ARGS
125 # define QGST_ELEMENT_LINK_MANY_MAX_ARGS 10
128 # ifndef QGST_ELEMENT_UNLINK_MANY_MAX_ARGS
129 # define QGST_ELEMENT_UNLINK_MANY_MAX_ARGS 10
132 # define QGST_ELEMENT_LINK_MANY_DECLARATION(z, n, data) \
133 static inline bool linkMany(BOOST_PP_ENUM_PARAMS(n, const ElementPtr & e)) \
135 if (!e0->link(e1)) return false; \
136 return linkMany(BOOST_PP_ENUM_SHIFTED_PARAMS(n, e)); \
139 # define QGST_ELEMENT_UNLINK_MANY_DECLARATION(z, n, data) \
140 static inline void unlinkMany(BOOST_PP_ENUM_PARAMS(n, const ElementPtr & e)) \
143 unlinkMany(BOOST_PP_ENUM_SHIFTED_PARAMS(n, e)); \
146 BOOST_PP_REPEAT_FROM_TO(3, BOOST_PP_INC(QGST_ELEMENT_LINK_MANY_MAX_ARGS),
147 QGST_ELEMENT_LINK_MANY_DECLARATION, dummy)
148 BOOST_PP_REPEAT_FROM_TO(3, BOOST_PP_INC(QGST_ELEMENT_UNLINK_MANY_MAX_ARGS),
149 QGST_ELEMENT_UNLINK_MANY_DECLARATION, dummy)
151 # undef QGST_ELEMENT_LINK_MANY_DECLARATION
152 # undef QGST_ELEMENT_UNLINK_MANY_DECLARATION
154 #endif //QGLIB_HAVE_CXX0X
157 bool sendEvent(
const EventPtr & event);
158 bool seek(Format format, SeekFlags flags, quint64 position);
165 #endif // QGST_ELEMENT_H