18#include "discoverer.h"
23#include <gst/pbutils/gstdiscoverer.h>
27static QList<DiscovererStreamInfoPtr> wrapStreamInfoList(GList *input,
bool increaseRef)
29 QList<DiscovererStreamInfoPtr> output;
33 input = g_list_delete_link(input, input);
39DiscovererStreamInfoPtr DiscovererStreamInfo::previous()
const
44DiscovererStreamInfoPtr DiscovererStreamInfo::next()
const
49QString DiscovererStreamInfo::streamTypeNick()
const
51 return QString::fromUtf8(gst_discoverer_stream_info_get_stream_type_nick(object<GstDiscovererStreamInfo>()));
54CapsPtr DiscovererStreamInfo::caps()
const
56 return CapsPtr::wrap(gst_discoverer_stream_info_get_caps(object<GstDiscovererStreamInfo>()),
false);
59TagList DiscovererStreamInfo::tags()
const
61 return gst_discoverer_stream_info_get_tags(object<GstDiscovererStreamInfo>());
64Structure DiscovererStreamInfo::misc()
const
66 const GstStructure *
const misc = gst_discoverer_stream_info_get_misc(object<GstDiscovererStreamInfo>());
67 return misc ? Structure(misc) : Structure();
70QList<DiscovererStreamInfoPtr> DiscovererContainerInfo::streams()
const
72 return wrapStreamInfoList(gst_discoverer_container_info_get_streams(object<GstDiscovererContainerInfo>()),
false);
75uint DiscovererAudioInfo::channels()
const
77 return gst_discoverer_audio_info_get_channels(object<GstDiscovererAudioInfo>());
80uint DiscovererAudioInfo::sampleRate()
const
82 return gst_discoverer_audio_info_get_sample_rate(object<GstDiscovererAudioInfo>());
85uint DiscovererAudioInfo::depth()
const
87 return gst_discoverer_audio_info_get_depth(object<GstDiscovererAudioInfo>());
90uint DiscovererAudioInfo::bitrate()
const
92 return gst_discoverer_audio_info_get_bitrate(object<GstDiscovererAudioInfo>());
95uint DiscovererAudioInfo::maxBitrate()
const
97 return gst_discoverer_audio_info_get_max_bitrate(object<GstDiscovererAudioInfo>());
100QString DiscovererAudioInfo::language()
const
102 return QString::fromUtf8(gst_discoverer_audio_info_get_language(object<GstDiscovererAudioInfo>()));
105uint DiscovererVideoInfo::width()
const
107 return gst_discoverer_video_info_get_width(object<GstDiscovererVideoInfo>());
110uint DiscovererVideoInfo::height()
const
112 return gst_discoverer_video_info_get_height(object<GstDiscovererVideoInfo>());
115uint DiscovererVideoInfo::depth()
const
117 return gst_discoverer_video_info_get_depth(object<GstDiscovererVideoInfo>());
120Fraction DiscovererVideoInfo::framerate()
const
122 return Fraction(gst_discoverer_video_info_get_framerate_num(object<GstDiscovererVideoInfo>()),
123 gst_discoverer_video_info_get_framerate_denom(object<GstDiscovererVideoInfo>()));
126Fraction DiscovererVideoInfo::pixelAspectRatio()
const
128 return Fraction(gst_discoverer_video_info_get_par_num(object<GstDiscovererVideoInfo>()),
129 gst_discoverer_video_info_get_par_denom(object<GstDiscovererVideoInfo>()));
132uint DiscovererVideoInfo::bitrate()
const
134 return gst_discoverer_video_info_get_bitrate(object<GstDiscovererVideoInfo>());
137uint DiscovererVideoInfo::maxBitrate()
const
139 return gst_discoverer_video_info_get_max_bitrate(object<GstDiscovererVideoInfo>());
142bool DiscovererVideoInfo::isInterlaced()
const
144 return gst_discoverer_video_info_is_interlaced(object<GstDiscovererVideoInfo>());
147bool DiscovererVideoInfo::isImage()
const
149 return gst_discoverer_video_info_is_image(object<GstDiscovererVideoInfo>());
152QString DiscovererSubtitleInfo::language()
const
154 return QString::fromUtf8(gst_discoverer_subtitle_info_get_language(object<GstDiscovererSubtitleInfo>()));
157QUrl DiscovererInfo::uri()
const
159 return QUrl::fromEncoded(gst_discoverer_info_get_uri(object<GstDiscovererInfo>()));
162DiscovererResult DiscovererInfo::result()
const
164 return DiscovererResult(gst_discoverer_info_get_result(object<GstDiscovererInfo>()));
167ClockTime DiscovererInfo::duration()
const
169 return gst_discoverer_info_get_duration(object<GstDiscovererInfo>());
172bool DiscovererInfo::seekable()
const
174 return gst_discoverer_info_get_seekable(object<GstDiscovererInfo>());
177Structure DiscovererInfo::misc()
const
179 const GstStructure *
const misc = gst_discoverer_info_get_misc(object<GstDiscovererInfo>());
180 return misc ? Structure(misc) : Structure();
183TagList DiscovererInfo::tags()
const
185 return gst_discoverer_info_get_tags(object<GstDiscovererInfo>());
188DiscovererStreamInfoPtr DiscovererInfo::streamInfo()
const
193QList<DiscovererStreamInfoPtr> DiscovererInfo::streams()
const
195 return wrapStreamInfoList(gst_discoverer_info_get_stream_list(object<GstDiscovererInfo>()),
false);
198QList<DiscovererStreamInfoPtr> DiscovererInfo::streams(
QGlib::Type streamType)
const
200 return wrapStreamInfoList(gst_discoverer_info_get_streams(object<GstDiscovererInfo>(), streamType),
false);
203QList<DiscovererStreamInfoPtr> DiscovererInfo::audioStreams()
const
205 return wrapStreamInfoList(gst_discoverer_info_get_audio_streams(object<GstDiscovererInfo>()),
false);
208QList<DiscovererStreamInfoPtr> DiscovererInfo::videoStreams()
const
210 return wrapStreamInfoList(gst_discoverer_info_get_video_streams(object<GstDiscovererInfo>()),
false);
213QList<DiscovererStreamInfoPtr> DiscovererInfo::subtitleStreams()
const
215 return wrapStreamInfoList(gst_discoverer_info_get_subtitle_streams(object<GstDiscovererInfo>()),
false);
218QList<DiscovererStreamInfoPtr> DiscovererInfo::containerStreams()
const
220 return wrapStreamInfoList(gst_discoverer_info_get_container_streams(object<GstDiscovererInfo>()),
false);
223DiscovererPtr Discoverer::create(ClockTime timeout)
225 GError *error = NULL;
226 GstDiscoverer *discoverer = gst_discoverer_new(timeout, &error);
231 g_object_ref_sink(discoverer);
236void Discoverer::start()
238 gst_discoverer_start(object<GstDiscoverer>());
241void Discoverer::stop()
243 gst_discoverer_stop(object<GstDiscoverer>());
246bool Discoverer::discoverUriAsync(
const char *uri)
248 return gst_discoverer_discover_uri_async(object<GstDiscoverer>(), uri);
251DiscovererInfoPtr Discoverer::discoverUri(
const char *uri)
253 GError *error = NULL;
254 GstDiscovererInfo *info = gst_discoverer_discover_uri(object<GstDiscoverer>(), uri, &error);
261QDebug operator<<(QDebug debug, DiscovererResult result)
265 return debug <<
"QGst::DiscovererOk";
266 case DiscovererUriInvalid:
267 return debug <<
"QGst::DiscovererUriInvalid";
268 case DiscovererError:
269 return debug <<
"QGst::DiscovererError";
270 case DiscovererTimeout:
271 return debug <<
"QGst::DiscovererTimeout";
273 return debug <<
"QGst::DiscovererBusy";
274 case DiscovererMissingPlugins:
275 return debug <<
"QGst::DiscovererMissingPlugins";
278 return (debug.nospace() <<
"QGst::DiscovererResult(" << uint(result) <<
")").maybeSpace();
282static const char *typeName();
285static QDebug printStreamInfoDetails(QDebug debug,
const T &);
288const char *typeName<DiscovererStreamInfoPtr>()
290 return "QGst::DiscovererStreamInfoPtr";
294const char *typeName<DiscovererContainerInfoPtr>()
296 return "QGst::DiscovererContainerInfoPtr";
300const char *typeName<DiscovererAudioInfoPtr>()
302 return "QGst::DiscovererAudioInfoPtr";
306const char *typeName<DiscovererVideoInfoPtr>()
308 return "QGst::DiscovererVideoInfoPtr";
312const char *typeName<DiscovererSubtitleInfoPtr>()
314 return "QGst::DiscovererSubtitleInfoPtr";
318QDebug printStreamInfoDetails(QDebug debug,
const DiscovererStreamInfoPtr &)
324QDebug printStreamInfoDetails(QDebug debug,
const DiscovererContainerInfoPtr &info)
326 return debug.nospace()
327 <<
", streams=" << info->streams();
331QDebug printStreamInfoDetails(QDebug debug,
const DiscovererAudioInfoPtr &info)
333 return debug.nospace()
334 <<
", channels=" << info->channels()
335 <<
", sampleRate=" << info->sampleRate()
336 <<
", depth=" << info->depth()
337 <<
", bitrate=" << info->bitrate()
338 <<
", maxBitrate=" << info->maxBitrate()
339 <<
", language=" << info->language();
343QDebug printStreamInfoDetails(QDebug debug,
const DiscovererVideoInfoPtr &info)
345 return debug.nospace()
346 <<
", width=" << info->width()
347 <<
", height=" << info->height()
348 <<
", depth=" << info->depth()
349 <<
", framerate=" << info->framerate()
350 <<
", pixelAspectRatio=" << info->pixelAspectRatio()
351 <<
", bitrate=" << info->bitrate()
352 <<
", maxBitrate=" << info->maxBitrate()
353 <<
", isInterlaced=" << info->isInterlaced()
354 <<
", isImage=" << info->isImage();
358QDebug printStreamInfoDetails(QDebug debug,
const DiscovererSubtitleInfoPtr &info)
360 return debug.nospace()
361 <<
", language=" << info->language();
365static QDebug printStreamInfo(QDebug debug,
const T &info)
367 debug.nospace() << typeName<T>() <<
"(";
370 debug.nospace() << info->streamTypeNick()
371 <<
", caps=" << info->caps();
372 debug.nospace() <<
", tags=" << info->tags();
373 debug.nospace() <<
", misc=" << info->misc();
374 debug.nospace() <<
", hasPrevious=" << !info->previous().isNull();
375 debug.nospace() <<
", hasNext=" << !info->next().isNull();
376 debug = printStreamInfoDetails(debug, info);
381 return (debug <<
")").maybeSpace();
384QDebug operator<<(QDebug debug,
const DiscovererStreamInfoPtr &info)
386 if (
const DiscovererContainerInfoPtr containerInfo = info.dynamicCast<DiscovererContainerInfo>()) {
387 return printStreamInfo(debug, containerInfo);
389 if (
const DiscovererAudioInfoPtr audioInfo = info.dynamicCast<DiscovererAudioInfo>()) {
390 return printStreamInfo(debug, audioInfo);
392 if (
const DiscovererVideoInfoPtr videoInfo = info.dynamicCast<DiscovererVideoInfo>()) {
393 return printStreamInfo(debug, videoInfo);
395 if (
const DiscovererSubtitleInfoPtr subtitleInfo = info.dynamicCast<DiscovererSubtitleInfo>()) {
396 return printStreamInfo(debug, subtitleInfo);
399 return printStreamInfo(debug, info);
402QDebug operator<<(QDebug debug,
const DiscovererInfoPtr &info)
404 debug.nospace() <<
"QGst::DiscovererInfoPtr(";
407 debug.nospace() <<
"result=" << info->result()
408 <<
", uri=" << info->uri()
409 <<
", duration=" << info->duration()
410 <<
", seekable=" << info->seekable()
411 <<
", misc=" << info->misc();
412 debug.nospace() <<
", tags=" << info->tags();
413 debug.nospace() <<
", streamInfo=" << info->streamInfo();
414 debug.nospace() <<
", streams=" << info->streams();
415 debug.nospace() <<
", audioStreams=" << info->audioStreams();
416 debug.nospace() <<
", videoStreams=" << info->videoStreams();
417 debug.nospace() <<
", subtitleStreams=" << info->subtitleStreams();
418 debug.nospace() <<
", containerStreams=" << info->containerStreams();
423 return (debug <<
")").maybeSpace();
Wrapper class for GError.
static RefPointer< T > wrap(typename T::CType *nativePtr, bool increaseRef=true)
Wrappers for GStreamer classes.