QtGStreamer 0.10.1
|
00001 /* 00002 Copyright (C) 2010 Collabora Multimedia. 00003 @author Mauricio Piacentini <mauricio.piacentini@collabora.co.uk> 00004 00005 This library is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU Lesser General Public License as published 00007 by the Free Software Foundation; either version 2.1 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU Lesser General Public License 00016 along with this program. If not, see <http://www.gnu.org/licenses/>. 00017 */ 00018 #include "event.h" 00019 #include "message.h" 00020 #include "object.h" 00021 #include <QtCore/QDebug> 00022 #include <gst/gst.h> 00023 00024 namespace QGst { 00025 00026 ObjectPtr Event::source() const 00027 { 00028 return ObjectPtr::wrap(GST_EVENT_SRC(object<GstEvent>())); 00029 } 00030 00031 quint64 Event::timestamp() const 00032 { 00033 return object<GstEvent>()->timestamp; 00034 } 00035 00036 EventType Event::type() const 00037 { 00038 return static_cast<EventType>(GST_EVENT_TYPE(object<GstEvent>())); 00039 } 00040 00041 QString Event::typeName() const 00042 { 00043 return QString::fromUtf8(GST_EVENT_TYPE_NAME(object<GstQuery>())); 00044 } 00045 00046 StructurePtr Event::internalStructure() 00047 { 00048 return SharedStructure::fromMiniObject(object<GstEvent>()->structure, MiniObjectPtr(this)); 00049 } 00050 00051 quint32 Event::sequenceNumber() const 00052 { 00053 return gst_event_get_seqnum(object<GstEvent>()); 00054 } 00055 00056 void Event::setSequenceNumber(quint32 num) 00057 { 00058 gst_event_set_seqnum(object<GstEvent>(), num); 00059 } 00060 00061 EventPtr Event::copy() const 00062 { 00063 return EventPtr::wrap(gst_event_copy(object<GstEvent>()), false); 00064 } 00065 00066 //******************************************************** 00067 00068 FlushStartEventPtr FlushStartEvent::create() 00069 { 00070 return FlushStartEventPtr::wrap(gst_event_new_flush_start(), false); 00071 } 00072 00073 //******************************************************** 00074 00075 FlushStopEventPtr FlushStopEvent::create() 00076 { 00077 return FlushStopEventPtr::wrap(gst_event_new_flush_stop(), false); 00078 } 00079 00080 //******************************************************** 00081 00082 EosEventPtr EosEvent::create() 00083 { 00084 return EosEventPtr::wrap(gst_event_new_eos(), false); 00085 } 00086 00087 //******************************************************** 00088 00089 NewSegmentEventPtr NewSegmentEvent::create(bool update, double rate, double appliedRate, 00090 Format format, qint64 start, qint64 stop, qint64 position) 00091 { 00092 GstEvent * e = gst_event_new_new_segment_full(update, rate, appliedRate, 00093 static_cast<GstFormat>(format), start, stop, 00094 position); 00095 00096 return NewSegmentEventPtr::wrap(e, false); 00097 } 00098 00099 bool NewSegmentEvent::isUpdate() const 00100 { 00101 gboolean u; 00102 gst_event_parse_new_segment_full(object<GstEvent>(), &u, NULL, NULL, NULL, NULL, NULL, NULL); 00103 return u; 00104 } 00105 00106 double NewSegmentEvent::rate() const 00107 { 00108 double r; 00109 gst_event_parse_new_segment_full(object<GstEvent>(), NULL, &r, NULL, NULL, NULL, NULL, NULL); 00110 return r; 00111 } 00112 00113 double NewSegmentEvent::appliedRate() const 00114 { 00115 double r; 00116 gst_event_parse_new_segment_full(object<GstEvent>(), NULL, NULL, &r, NULL, NULL, NULL, NULL); 00117 return r; 00118 } 00119 00120 Format NewSegmentEvent::format() const 00121 { 00122 GstFormat f; 00123 gst_event_parse_new_segment_full(object<GstEvent>(), NULL, NULL, NULL, &f, NULL, NULL, NULL); 00124 return static_cast<Format>(f); 00125 } 00126 00127 qint64 NewSegmentEvent::start() const 00128 { 00129 gint64 s; 00130 gst_event_parse_new_segment_full(object<GstEvent>(), NULL, NULL, NULL, NULL, &s, NULL, NULL); 00131 return s; 00132 } 00133 00134 qint64 NewSegmentEvent::stop() const 00135 { 00136 gint64 s; 00137 gst_event_parse_new_segment_full(object<GstEvent>(), NULL, NULL, NULL, NULL, NULL, &s, NULL); 00138 return s; 00139 } 00140 00141 qint64 NewSegmentEvent::position() const 00142 { 00143 gint64 p; 00144 gst_event_parse_new_segment_full(object<GstEvent>(), NULL, NULL, NULL, NULL, NULL, NULL, &p); 00145 return p; 00146 } 00147 00148 //******************************************************** 00149 00150 TagEventPtr TagEvent::create(const TagList & taglist) 00151 { 00152 GstEvent * e = gst_event_new_tag(gst_tag_list_copy(taglist)); 00153 return TagEventPtr::wrap(e, false); 00154 } 00155 00156 TagList TagEvent::taglist() const 00157 { 00158 GstTagList * t; 00159 gst_event_parse_tag(object<GstEvent>(), &t); 00160 TagList tl(t); 00161 return tl; 00162 } 00163 00164 //******************************************************** 00165 00166 BufferSizeEventPtr BufferSizeEvent::create(Format format, qint64 minSize, qint64 maxSize, 00167 bool isAsync) 00168 { 00169 GstEvent * e = gst_event_new_buffer_size(static_cast<GstFormat>(format), minSize, maxSize, 00170 isAsync); 00171 00172 return BufferSizeEventPtr::wrap(e, false); 00173 } 00174 00175 Format BufferSizeEvent::format() const 00176 { 00177 GstFormat f; 00178 gst_event_parse_buffer_size(object<GstEvent>(), &f, NULL, NULL, NULL); 00179 return static_cast<Format>(f); 00180 } 00181 00182 qint64 BufferSizeEvent::minSize() const 00183 { 00184 gint64 s; 00185 gst_event_parse_buffer_size(object<GstEvent>(), NULL, &s, NULL, NULL); 00186 return s; 00187 } 00188 00189 qint64 BufferSizeEvent::maxSize() const 00190 { 00191 gint64 s; 00192 gst_event_parse_buffer_size(object<GstEvent>(), NULL, NULL, &s, NULL); 00193 return s; 00194 } 00195 00196 bool BufferSizeEvent::isAsync() const 00197 { 00198 gboolean u; 00199 gst_event_parse_buffer_size(object<GstEvent>(), NULL, NULL, NULL, &u); 00200 return u; 00201 } 00202 00203 //******************************************************** 00204 00205 SinkMessageEventPtr SinkMessageEvent::create(const MessagePtr & msg) 00206 { 00207 GstEvent * e = gst_event_new_sink_message(msg); 00208 return SinkMessageEventPtr::wrap(e, false); 00209 } 00210 00211 MessagePtr SinkMessageEvent::message() const 00212 { 00213 GstMessage * msg; 00214 gst_event_parse_sink_message(object<GstEvent>(), &msg); 00215 //Wrap message (refcount was already increased), will unref() when MessagePtr is destroyed 00216 return MessagePtr::wrap(msg, false); 00217 } 00218 00219 //******************************************************** 00220 00221 QosEventPtr QosEvent::create(double proportion, ClockTimeDiff diff, ClockTime timeStamp) 00222 { 00223 GstEvent * e = gst_event_new_qos(proportion, diff, static_cast<GstClockTime>(timeStamp)); 00224 return QosEventPtr::wrap(e, false); 00225 } 00226 00227 double QosEvent::proportion() const 00228 { 00229 double d; 00230 gst_event_parse_qos(object<GstEvent>(), &d, NULL, NULL); 00231 return d; 00232 } 00233 00234 ClockTimeDiff QosEvent::diff() const 00235 { 00236 GstClockTimeDiff c; 00237 gst_event_parse_qos(object<GstEvent>(), NULL, &c, NULL); 00238 return c; 00239 } 00240 00241 ClockTime QosEvent::timestamp() const 00242 { 00243 GstClockTime c; 00244 gst_event_parse_qos(object<GstEvent>(), NULL, NULL, &c); 00245 return c; 00246 } 00247 00248 //******************************************************** 00249 00250 SeekEventPtr SeekEvent::create(double rate, Format format, SeekFlags flags, SeekType startType, 00251 qint64 start, SeekType stopType, qint64 stop) 00252 { 00253 GstEvent * e = gst_event_new_seek(rate, static_cast<GstFormat>(format), 00254 static_cast<GstSeekFlags>(static_cast<int>(flags)), 00255 static_cast<GstSeekType>(startType), start, 00256 static_cast<GstSeekType>(stopType), stop ); 00257 return SeekEventPtr::wrap(e, false); 00258 } 00259 00260 double SeekEvent::rate() const 00261 { 00262 double d; 00263 gst_event_parse_seek(object<GstEvent>(), &d, NULL, NULL, NULL, NULL, NULL, NULL); 00264 return d; 00265 } 00266 00267 Format SeekEvent::format() const 00268 { 00269 GstFormat f; 00270 gst_event_parse_seek(object<GstEvent>(), NULL, &f, NULL, NULL, NULL, NULL, NULL); 00271 return static_cast<Format>(f); 00272 } 00273 00274 SeekFlags SeekEvent::flags() const 00275 { 00276 GstSeekFlags f; 00277 gst_event_parse_seek(object<GstEvent>(), NULL, NULL, &f, NULL, NULL, NULL, NULL); 00278 return static_cast<SeekFlags>(f); 00279 } 00280 00281 SeekType SeekEvent::startType() const 00282 { 00283 GstSeekType t; 00284 gst_event_parse_seek(object<GstEvent>(), NULL, NULL, NULL, &t, NULL, NULL, NULL); 00285 return static_cast<SeekType>(t); 00286 } 00287 00288 qint64 SeekEvent::start() const 00289 { 00290 gint64 s; 00291 gst_event_parse_seek(object<GstEvent>(), NULL, NULL, NULL, NULL, &s, NULL, NULL); 00292 return s; 00293 } 00294 00295 SeekType SeekEvent::stopType() const 00296 { 00297 GstSeekType t; 00298 gst_event_parse_seek(object<GstEvent>(), NULL, NULL, NULL, NULL, NULL, &t, NULL); 00299 return static_cast<SeekType>(t); 00300 } 00301 00302 qint64 SeekEvent::stop() const 00303 { 00304 gint64 s; 00305 gst_event_parse_seek(object<GstEvent>(), NULL, NULL, NULL, NULL, NULL, NULL, &s); 00306 return s; 00307 } 00308 00309 //******************************************************** 00310 00311 NavigationEventPtr NavigationEvent::create(const Structure & structure) 00312 { 00313 GstStructure * s = structure.isValid() ? gst_structure_copy(structure) : NULL; 00314 GstEvent * e = gst_event_new_navigation(s); 00315 return NavigationEventPtr::wrap(e, false); 00316 } 00317 00318 //******************************************************** 00319 00320 LatencyEventPtr LatencyEvent::create(ClockTime latency) 00321 { 00322 GstEvent * e = gst_event_new_latency(latency); 00323 return LatencyEventPtr::wrap(e, false); 00324 } 00325 00326 ClockTime LatencyEvent::latency() const 00327 { 00328 GstClockTime c; 00329 gst_event_parse_latency(object<GstEvent>(), &c); 00330 return c; 00331 } 00332 00333 //******************************************************** 00334 00335 StepEventPtr StepEvent::create(Format format, quint64 amount, double rate, bool flush, 00336 bool intermediate) 00337 { 00338 GstEvent * e = gst_event_new_step(static_cast<GstFormat>(format), amount, rate, flush, 00339 intermediate); 00340 return StepEventPtr::wrap(e, false); 00341 } 00342 00343 Format StepEvent::format() const 00344 { 00345 GstFormat f; 00346 gst_event_parse_step(object<GstEvent>(), &f, NULL, NULL, NULL, NULL); 00347 return static_cast<Format>(f); 00348 } 00349 00350 quint64 StepEvent::amount() const 00351 { 00352 guint64 a; 00353 gst_event_parse_step(object<GstEvent>(), NULL, &a, NULL, NULL, NULL); 00354 return a; 00355 } 00356 00357 double StepEvent::rate() const 00358 { 00359 double d; 00360 gst_event_parse_step(object<GstEvent>(), NULL, NULL, &d, NULL, NULL); 00361 return d; 00362 00363 } 00364 00365 bool StepEvent::flush() const 00366 { 00367 gboolean f; 00368 gst_event_parse_step(object<GstEvent>(), NULL, NULL, NULL, &f, NULL); 00369 return f; 00370 } 00371 00372 bool StepEvent::intermediate() const 00373 { 00374 gboolean i; 00375 gst_event_parse_step(object<GstEvent>(), NULL, NULL, NULL, NULL, &i); 00376 return i; 00377 } 00378 00379 } //namespace QGst