22 #include <gst/gstelement.h>
23 #include <gst/gstutils.h>
27 State Element::currentState()
const
30 getState(&r, NULL, 0);
34 State Element::pendingState()
const
37 getState(NULL, &r, 0);
41 StateChangeReturn Element::getState(State *state, State *pending, ClockTime timeout)
const
43 GstState curState, pendingState;
44 GstStateChangeReturn result = gst_element_get_state(object<GstElement>(),
45 &curState, &pendingState, timeout);
47 *state =
static_cast<State
>(curState);
50 *pending =
static_cast<State
>(pendingState);
52 return static_cast<StateChangeReturn
>(result);
55 StateChangeReturn Element::setState(State state)
57 return static_cast<StateChangeReturn
>(gst_element_set_state(object<GstElement>(),
58 static_cast<GstState>(state)));
61 bool Element::syncStateWithParent()
63 return gst_element_sync_state_with_parent(object<GstElement>());
66 bool Element::stateIsLocked()
const
68 return gst_element_is_locked_state(object<GstElement>());
71 bool Element::setStateLocked(
bool locked)
73 return gst_element_set_locked_state(object<GstElement>(), locked);
76 bool Element::addPad(
const PadPtr & pad)
78 return gst_element_add_pad(object<GstElement>(), pad);
81 bool Element::removePad(
const PadPtr & pad)
83 return gst_element_remove_pad(object<GstElement>(), pad);
86 PadPtr Element::getStaticPad(
const char *name)
88 GstPad *pad = gst_element_get_static_pad(object<GstElement>(), name);
92 PadPtr Element::getRequestPad(
const char *name)
94 GstPad *pad = gst_element_get_request_pad(object<GstElement>(), name);
98 void Element::releaseRequestPad(
const PadPtr & pad)
100 gst_element_release_request_pad(object<GstElement>(), pad);
103 bool Element::link(
const char *srcPadName,
const ElementPtr & dest,
104 const char *sinkPadName,
const CapsPtr & filter)
106 return gst_element_link_pads_filtered(object<GstElement>(), srcPadName,
107 dest, sinkPadName, filter);
110 bool Element::link(
const char *srcPadName,
const ElementPtr & dest,
const CapsPtr & filter)
112 return link(srcPadName, dest, NULL, filter);
115 bool Element::link(
const ElementPtr & dest,
const char *sinkPadName,
const CapsPtr & filter)
117 return link(NULL, dest, sinkPadName, filter);
120 bool Element::link(
const ElementPtr & dest,
const CapsPtr & filter)
122 return link(NULL, dest, NULL, filter);
132 sinkPadName =
"sink";
135 gst_element_unlink_pads(object<GstElement>(), srcPadName, dest, sinkPadName);
145 unlink(
"src", dest, sinkPadName);
147 gst_element_unlink(object<GstElement>(), dest);
151 bool Element::query(
const QueryPtr & query)
153 return gst_element_query(object<GstElement>(), query);
156 ClockPtr Element::clock()
const
158 if (gst_element_provides_clock(object<GstElement>())) {
159 return ClockPtr::wrap(gst_element_get_clock(object<GstElement>()),
false);
165 bool Element::setClock(
const ClockPtr & clock)
167 return gst_element_set_clock(object<GstElement>(), clock);
170 bool Element::sendEvent(
const EventPtr &event)
174 gst_event_ref(event);
175 return gst_element_send_event(object<GstElement>(), event);
178 bool Element::seek(Format format, SeekFlags flags, quint64 position)
180 return gst_element_seek_simple(object<GstElement>(), static_cast<GstFormat>(format),
181 static_cast<GstSeekFlags>(static_cast<int>(flags)), position);