summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer
diff options
context:
space:
mode:
authorVaL Doroshchuk <valentyn.doroshchuk@qt.io>2019-07-11 17:54:10 +0200
committerVaL Doroshchuk <valentyn.doroshchuk@qt.io>2019-07-17 10:55:30 +0200
commit411bd814849dace75ec755c46f668604eb6f4821 (patch)
tree9a1d0298b28cb1265d936d211005e4b613698319 /src/plugins/gstreamer
parentff7dcf3a38f33bb262c876ce1e959e7a1bc29f5a (diff)
GStreamer: Implement fetching audio/video codecs by container
Moved stream types to QGstCodecsInfo and added possibility to fetch audio or video codecs by a container. Or fetch containers by audio or video codec. It would allow to debug supported codecs and containers: QGstCodecsInfo containers(QGstCodecsInfo::Muxer); QGstCodecsInfo audioCodecs(QGstCodecsInfo::AudioEncoder); for (auto &container: containers.supportedCodecs()) qDebug() << audioCodecs.supportedCodecs(containers.supportedStreamTypes(container)); Change-Id: I26bf5579db6974a166d408c4865a9ffe314e3e15 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Diffstat (limited to 'src/plugins/gstreamer')
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp12
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h2
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp38
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h3
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp11
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h1
6 files changed, 3 insertions, 64 deletions
diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
index 40294214a..6a0816343 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
@@ -50,16 +50,6 @@ QGstreamerAudioEncode::QGstreamerAudioEncode(QObject *parent)
:QAudioEncoderSettingsControl(parent)
, m_codecs(QGstCodecsInfo::AudioEncoder)
{
- for (const QString& codecName : m_codecs.supportedCodecs()) {
- GstElementFactory *factory = gst_element_factory_find(m_codecs.codecElement(codecName).constData());
-
- if (factory) {
- m_streamTypes.insert(codecName,
- QGstreamerMediaContainerControl::supportedStreamTypes(factory, GST_PAD_SRC));
-
- gst_object_unref(GST_OBJECT(factory));
- }
- }
}
QGstreamerAudioEncode::~QGstreamerAudioEncode()
@@ -247,5 +237,5 @@ GstElement *QGstreamerAudioEncode::createEncoder()
QSet<QString> QGstreamerAudioEncode::supportedStreamTypes(const QString &codecName) const
{
- return m_streamTypes.value(codecName);
+ return m_codecs.supportedStreamTypes(codecName);
}
diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h
index 04de602ad..0cfbb4e91 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h
+++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h
@@ -86,8 +86,6 @@ private:
QMap<QString, QMap<QString, QVariant> > m_options;
- QMap<QString, QSet<QString> > m_streamTypes;
-
QAudioEncoderSettings m_audioSettings;
};
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp
index 05f1c8af5..33351476d 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp
@@ -47,47 +47,11 @@ QGstreamerMediaContainerControl::QGstreamerMediaContainerControl(QObject *parent
:QMediaContainerControl(parent)
, m_containers(QGstCodecsInfo::Muxer)
{
- QSet<QString> allTypes;
-
- for (const QString& formatName : supportedContainers()) {
- GstElementFactory *factory = gst_element_factory_find(m_containers.codecElement(formatName).constData());
- if (factory) {
- if (formatName == QByteArray("raw")) {
- m_streamTypes.insert(formatName, allTypes);
- } else {
- QSet<QString> types = supportedStreamTypes(factory, GST_PAD_SINK);
- m_streamTypes.insert(formatName, types);
- allTypes.unite(types);
- }
-
- gst_object_unref(GST_OBJECT(factory));
- }
- }
}
-QSet<QString> QGstreamerMediaContainerControl::supportedStreamTypes(GstElementFactory *factory, GstPadDirection direction)
-{
- QSet<QString> types;
- const GList *pads = gst_element_factory_get_static_pad_templates(factory);
- for (const GList *pad = pads; pad; pad = g_list_next(pad)) {
- GstStaticPadTemplate *templ = (GstStaticPadTemplate*)pad->data;
- if (templ->direction == direction) {
- GstCaps *caps = gst_static_caps_get(&templ->static_caps);
- for (uint i=0; i<gst_caps_get_size(caps); i++) {
- GstStructure *structure = gst_caps_get_structure(caps, i);
- types.insert( QString::fromUtf8(gst_structure_get_name(structure)) );
- }
- gst_caps_unref(caps);
- }
- }
-
- return types;
-}
-
-
QSet<QString> QGstreamerMediaContainerControl::supportedStreamTypes(const QString &container) const
{
- return m_streamTypes.value(container);
+ return m_containers.supportedStreamTypes(container);
}
QString QGstreamerMediaContainerControl::containerExtension() const
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h
index 5c730b21d..02c7346b1 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h
+++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h
@@ -68,14 +68,11 @@ public:
QSet<QString> supportedStreamTypes(const QString &container) const;
- static QSet<QString> supportedStreamTypes(GstElementFactory *factory, GstPadDirection direction);
-
QString containerExtension() const;
private:
QString m_format;
QGstCodecsInfo m_containers;
- QMap<QString, QSet<QString> > m_streamTypes;
};
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
index 6b4dbe4b7..62d9bbd8c 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
@@ -49,15 +49,6 @@ QGstreamerVideoEncode::QGstreamerVideoEncode(QGstreamerCaptureSession *session)
:QVideoEncoderSettingsControl(session), m_session(session)
, m_codecs(QGstCodecsInfo::VideoEncoder)
{
- for (const QString& codecName : supportedVideoCodecs()) {
- GstElementFactory *factory = gst_element_factory_find(m_codecs.codecElement(codecName).constData());
- if (factory) {
- m_streamTypes.insert(codecName,
- QGstreamerMediaContainerControl::supportedStreamTypes(factory, GST_PAD_SRC));
-
- gst_object_unref(GST_OBJECT(factory));
- }
- }
}
QGstreamerVideoEncode::~QGstreamerVideoEncode()
@@ -303,5 +294,5 @@ QPair<int,int> QGstreamerVideoEncode::rateAsRational() const
QSet<QString> QGstreamerVideoEncode::supportedStreamTypes(const QString &codecName) const
{
- return m_streamTypes.value(codecName);
+ return m_codecs.supportedStreamTypes(codecName);
}
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h
index bc6636012..a35e2b456 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h
+++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h
@@ -90,7 +90,6 @@ private:
QVideoEncoderSettings m_videoSettings;
QMap<QString, QMap<QString, QVariant> > m_options;
- QMap<QString, QSet<QString> > m_streamTypes;
};
QT_END_NAMESPACE