From 9e679084899db5b212b439248f3670a2342e4f57 Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Fri, 15 Jul 2016 09:58:31 +0200 Subject: GStreamer: use QGstCodecsInfo in QGstreamerMediaContainerControl Dynamically retrieve the list of available codecs rather than having a hardcoded list. Change-Id: Ie78513b541786da2359c1853271536db2819aaaf Reviewed-by: Christian Stromme --- .../qgstreamermediacontainercontrol.cpp | 47 +++------------------- .../mediacapture/qgstreamermediacontainercontrol.h | 13 +++--- 2 files changed, 11 insertions(+), 49 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp index 4e07b35bd..05f1c8af5 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp @@ -39,53 +39,19 @@ #include "qgstreamermediacontainercontrol.h" +#include #include QGstreamerMediaContainerControl::QGstreamerMediaContainerControl(QObject *parent) :QMediaContainerControl(parent) + , m_containers(QGstCodecsInfo::Muxer) { - QList formatCandidates; - formatCandidates << "matroska" << "ogg" << "mp4" << "wav" << "quicktime" << "avi" << "3gpp"; - formatCandidates << "flv" << "amr" << "asf" << "dv" << "gif"; - formatCandidates << "mpeg" << "vob" << "mpegts" << "3g2" << "3gp"; - formatCandidates << "raw"; - - m_elementNames["matroska"] = "matroskamux"; - m_elementNames["ogg"] = "oggmux"; - m_elementNames["mp4"] = "ffmux_mp4"; - m_elementNames["quicktime"] = "ffmux_mov"; - m_elementNames["avi"] = "avimux"; - m_elementNames["3gpp"] = "gppmux"; - m_elementNames["flv"] = "flvmux"; - m_elementNames["wav"] = "wavenc"; - m_elementNames["amr"] = "ffmux_amr"; - m_elementNames["asf"] = "ffmux_asf"; - m_elementNames["dv"] = "ffmux_dv"; - m_elementNames["gif"] = "ffmux_gif"; - m_elementNames["mpeg"] = "ffmux_mpeg"; - m_elementNames["vob"] = "ffmux_vob"; - m_elementNames["mpegts"] = "ffmux_mpegts"; - m_elementNames["3g2"] = "ffmux_3g2"; - m_elementNames["3gp"] = "ffmux_3gp"; - m_elementNames["raw"] = "identity"; - - m_containerExtensions["matroska"] = "mkv"; - m_containerExtensions["quicktime"] = "mov"; - m_containerExtensions["mpegts"] = "m2t"; - m_containerExtensions["mpeg"] = "mpg"; - QSet allTypes; - for (const QByteArray& formatName : qAsConst(formatCandidates)) { - QByteArray elementName = m_elementNames[formatName]; - GstElementFactory *factory = gst_element_factory_find(elementName.constData()); + for (const QString& formatName : supportedContainers()) { + GstElementFactory *factory = gst_element_factory_find(m_containers.codecElement(formatName).constData()); if (factory) { - m_supportedContainers.append(formatName); - const gchar *descr = gst_element_factory_get_description(factory); - m_containerDescriptions.insert(formatName, QString::fromUtf8(descr)); - - if (formatName == QByteArray("raw")) { m_streamTypes.insert(formatName, allTypes); } else { @@ -97,9 +63,6 @@ QGstreamerMediaContainerControl::QGstreamerMediaContainerControl(QObject *parent gst_object_unref(GST_OBJECT(factory)); } } - - //if (!m_supportedContainers.isEmpty()) - // setContainerFormat(m_supportedContainers[0]); } QSet QGstreamerMediaContainerControl::supportedStreamTypes(GstElementFactory *factory, GstPadDirection direction) @@ -129,5 +92,5 @@ QSet QGstreamerMediaContainerControl::supportedStreamTypes(const QStrin QString QGstreamerMediaContainerControl::containerExtension() const { - return m_containerExtensions.value(m_format, m_format); + return QGstUtils::fileExtensionForMimeType(m_format); } diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h index b8e2cc045..0f25ad5d7 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h @@ -45,6 +45,8 @@ #include #include +#include + #include QT_BEGIN_NAMESPACE @@ -56,13 +58,13 @@ public: QGstreamerMediaContainerControl(QObject *parent); virtual ~QGstreamerMediaContainerControl() {}; - virtual QStringList supportedContainers() const { return m_supportedContainers; } + virtual QStringList supportedContainers() const { return m_containers.supportedCodecs(); } virtual QString containerFormat() const { return m_format; } virtual void setContainerFormat(const QString &formatMimeType) { m_format = formatMimeType; } - virtual QString containerDescription(const QString &formatMimeType) const { return m_containerDescriptions.value(formatMimeType); } + virtual QString containerDescription(const QString &formatMimeType) const { return m_containers.codecDescription(formatMimeType); } - QByteArray formatElementName() const { return m_elementNames.value(containerFormat()); } + QByteArray formatElementName() const { return m_containers.codecElement(containerFormat()); } QSet supportedStreamTypes(const QString &container) const; @@ -72,10 +74,7 @@ public: private: QString m_format; - QStringList m_supportedContainers; - QMap m_elementNames; - QMap m_containerDescriptions; - QMap m_containerExtensions; + QGstCodecsInfo m_containers; QMap > m_streamTypes; }; -- cgit v1.2.3