summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-02-08 16:32:38 +0100
committerLars Knoll <lars.knoll@qt.io>2021-02-12 07:55:14 +0000
commitf62e7ba660b7214d609df30fe739e612584c1f32 (patch)
tree59b5e8ef2f06d17ec3822994f401b314846a4602 /src/multimedia/platform
parentf8512bcafadef8d71244f78ce7f4bc88e06698f3 (diff)
Cleanup QImageEncoderSettings
Define a list of supported file formats, as with QMediaEncoderSettings. Implement support for detecting those on gstreamer. Remove the old interface in QCameraImageEncoderControl. Change-Id: Ic3d67dd19fe13336ba2017dc8055014274619ce6 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/multimedia/platform')
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol.cpp13
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol_p.h2
-rw-r--r--src/multimedia/platform/android/qandroidformatsinfo.cpp2
-rw-r--r--src/multimedia/platform/darwin/camera/avfimageencodercontrol.mm13
-rw-r--r--src/multimedia/platform/darwin/qdarwinformatsinfo.mm3
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode.cpp13
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode_p.h3
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp57
-rw-r--r--src/multimedia/platform/qmediaplatformformatinfo_p.h4
-rw-r--r--src/multimedia/platform/qnx/camera/bbimageencodercontrol.cpp18
-rw-r--r--src/multimedia/platform/qnx/camera/bbimageencodercontrol_p.h3
11 files changed, 65 insertions, 66 deletions
diff --git a/src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol.cpp
index 9ef5eb90e..7be520941 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol.cpp
@@ -50,19 +50,6 @@ QAndroidImageEncoderControl::QAndroidImageEncoderControl(QAndroidCameraSession *
{
}
-QStringList QAndroidImageEncoderControl::supportedImageCodecs() const
-{
- return QStringList() << QLatin1String("jpeg");
-}
-
-QString QAndroidImageEncoderControl::imageCodecDescription(const QString &codecName) const
-{
- if (codecName == QLatin1String("jpeg"))
- return tr("JPEG image");
-
- return QString();
-}
-
QImageEncoderSettings QAndroidImageEncoderControl::imageSettings() const
{
return m_session->imageSettings();
diff --git a/src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol_p.h
index a162171f9..19555879e 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidimageencodercontrol_p.h
@@ -63,8 +63,6 @@ class QAndroidImageEncoderControl : public QImageEncoderControl
public:
explicit QAndroidImageEncoderControl(QAndroidCameraSession *session);
- QStringList supportedImageCodecs() const override;
- QString imageCodecDescription(const QString &codecName) const override;
QImageEncoderSettings imageSettings() const override;
void setImageSettings(const QImageEncoderSettings &settings) override;
diff --git a/src/multimedia/platform/android/qandroidformatsinfo.cpp b/src/multimedia/platform/android/qandroidformatsinfo.cpp
index 1faaca87b..c0cf72149 100644
--- a/src/multimedia/platform/android/qandroidformatsinfo.cpp
+++ b/src/multimedia/platform/android/qandroidformatsinfo.cpp
@@ -52,6 +52,8 @@ QAndroidFormatInfo::QAndroidFormatInfo()
{ QMediaFormat::VideoCodec::H264, QMediaFormat::VideoCodec::H265 } }
};
encoders = decoders;
+
+ imageFormats << QImageEncoderSettings::JPEG;
}
QAndroidFormatInfo::~QAndroidFormatInfo()
diff --git a/src/multimedia/platform/darwin/camera/avfimageencodercontrol.mm b/src/multimedia/platform/darwin/camera/avfimageencodercontrol.mm
index 7b04e5f70..95508abe5 100644
--- a/src/multimedia/platform/darwin/camera/avfimageencodercontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfimageencodercontrol.mm
@@ -59,19 +59,6 @@ AVFImageEncoderControl::AVFImageEncoderControl(AVFCameraService *service)
Q_ASSERT(service);
}
-QStringList AVFImageEncoderControl::supportedImageCodecs() const
-{
- return QStringList() << QLatin1String("jpeg");
-}
-
-QString AVFImageEncoderControl::imageCodecDescription(const QString &codecName) const
-{
- if (codecName == QLatin1String("jpeg"))
- return tr("JPEG image");
-
- return QString();
-}
-
QImageEncoderSettings AVFImageEncoderControl::requestedSettings() const
{
return m_settings;
diff --git a/src/multimedia/platform/darwin/qdarwinformatsinfo.mm b/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
index 11a458dea..d168c5d45 100644
--- a/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
+++ b/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
@@ -162,6 +162,9 @@ QDarwinFormatInfo::QDarwinFormatInfo()
{} }
};
#endif
+
+ // ###
+ imageFormats << QImageEncoderSettings::JPEG;
}
QDarwinFormatInfo::~QDarwinFormatInfo()
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode.cpp
index e5b2859d2..01b2dbb93 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode.cpp
@@ -53,19 +53,6 @@ QGstreamerImageEncode::~QGstreamerImageEncode()
{
}
-QStringList QGstreamerImageEncode::supportedImageCodecs() const
-{
- return QStringList() << "jpeg";
-}
-
-QString QGstreamerImageEncode::imageCodecDescription(const QString &codecName) const
-{
- if (codecName == "jpeg")
- return tr("JPEG image encoder");
-
- return QString();
-}
-
QImageEncoderSettings QGstreamerImageEncode::imageSettings() const
{
return m_settings;
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode_p.h
index 89ace7d3c..d9b330f0e 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimageencode_p.h
@@ -69,9 +69,6 @@ public:
QGstreamerImageEncode(QGstreamerCaptureSession *session);
virtual ~QGstreamerImageEncode();
- QStringList supportedImageCodecs() const override;
- QString imageCodecDescription(const QString &codecName) const override;
-
QImageEncoderSettings imageSettings() const override;
void setImageSettings(const QImageEncoderSettings &settings) override;
diff --git a/src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp b/src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp
index c185a563e..c01688535 100644
--- a/src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp
+++ b/src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp
@@ -139,6 +139,25 @@ static QMediaFormat::FileFormat fileFormatForCaps(QGstStructure structure)
return QMediaFormat::UnspecifiedFormat;
}
+
+static QImageEncoderSettings::FileFormat imageFormatForCaps(QGstStructure structure)
+{
+ const char *name = structure.name();
+
+ if (!strcmp(name, "image/jpeg")) {
+ return QImageEncoderSettings::JPEG;
+ } else if (!strcmp(name, "image/png")) {
+ return QImageEncoderSettings::PNG;
+ } else if (!strcmp(name, "image/webp")) {
+ return QImageEncoderSettings::WebP;
+ } else if (!strcmp(name, "image/webp")) {
+ return QImageEncoderSettings::WebP;
+ } else if (!strcmp(name, "image/tiff")) {
+ return QImageEncoderSettings::Tiff;
+ }
+ return QImageEncoderSettings::UnspecifiedFormat;
+}
+
static QPair<QList<QMediaFormat::AudioCodec>, QList<QMediaFormat::VideoCodec>> getCodecsList(bool decode)
{
QList<QMediaFormat::AudioCodec> audio;
@@ -250,6 +269,42 @@ QList<QGstreamerFormatsInfo::CodecMap> QGstreamerFormatsInfo::getMuxerList(bool
return muxers;
}
+static QList<QImageEncoderSettings::FileFormat> getImageFormatList()
+{
+ QSet<QImageEncoderSettings::FileFormat> formats;
+
+ GList *elementList = gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_ENCODER,
+ GST_RANK_MARGINAL);
+
+ GList *element = elementList;
+ while (element) {
+ GstElementFactory *factory = (GstElementFactory *)element->data;
+ element = element->next;
+
+ const GList *padTemplates = gst_element_factory_get_static_pad_templates(factory);
+ while (padTemplates) {
+ GstStaticPadTemplate *padTemplate = (GstStaticPadTemplate *)padTemplates->data;
+ padTemplates = padTemplates->next;
+
+ if (padTemplate->direction == GST_PAD_SRC) {
+ QGstCaps caps = gst_static_caps_get(&padTemplate->static_caps);
+
+ for (int i = 0; i < caps.size(); i++) {
+ QGstStructure structure = caps.at(i);
+ auto f = imageFormatForCaps(structure);
+ if (f != QImageEncoderSettings::UnspecifiedFormat) {
+ qDebug() << structure.toString() << f;
+ formats.insert(f);
+ }
+ }
+ caps.unref();
+ }
+ }
+ }
+ gst_plugin_feature_list_free(elementList);
+ return formats.values();
+}
+
#if 0
static void dumpMuxers(const QList<QGstreamerFormatsInfo::CodecMap> &muxerList)
{
@@ -274,6 +329,8 @@ QGstreamerFormatsInfo::QGstreamerFormatsInfo()
codecs = getCodecsList(/*decode = */ false);
encoders = getMuxerList(/* demuxer = */false, codecs.first, codecs.second);
//dumpMuxers(encoders);
+
+ imageFormats = getImageFormatList();
}
QGstreamerFormatsInfo::~QGstreamerFormatsInfo()
diff --git a/src/multimedia/platform/qmediaplatformformatinfo_p.h b/src/multimedia/platform/qmediaplatformformatinfo_p.h
index 1cba1b086..05ea7b495 100644
--- a/src/multimedia/platform/qmediaplatformformatinfo_p.h
+++ b/src/multimedia/platform/qmediaplatformformatinfo_p.h
@@ -52,7 +52,7 @@
//
#include <private/qtmultimediaglobal_p.h>
-#include <qmediaformat.h>
+#include <qmediaencodersettings.h>
QT_BEGIN_NAMESPACE
@@ -75,6 +75,8 @@ public:
};
QList<CodecMap> encoders;
QList<CodecMap> decoders;
+
+ QList<QImageEncoderSettings::FileFormat> imageFormats;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/qnx/camera/bbimageencodercontrol.cpp b/src/multimedia/platform/qnx/camera/bbimageencodercontrol.cpp
index 960accb02..65ebf2d63 100644
--- a/src/multimedia/platform/qnx/camera/bbimageencodercontrol.cpp
+++ b/src/multimedia/platform/qnx/camera/bbimageencodercontrol.cpp
@@ -48,24 +48,6 @@ BbImageEncoderControl::BbImageEncoderControl(BbCameraSession *session, QObject *
{
}
-QStringList BbImageEncoderControl::supportedImageCodecs() const
-{
- return QStringList() << QLatin1String("jpeg");
-}
-
-QString BbImageEncoderControl::imageCodecDescription(const QString &codecName) const
-{
- if (codecName == QLatin1String("jpeg"))
- return tr("JPEG image");
-
- return QString();
-}
-
-QList<QSize> BbImageEncoderControl::supportedResolutions(const QImageEncoderSettings &settings, bool *continuous) const
-{
- return m_session->supportedResolutions(settings, continuous);
-}
-
QImageEncoderSettings BbImageEncoderControl::imageSettings() const
{
return m_session->imageSettings();
diff --git a/src/multimedia/platform/qnx/camera/bbimageencodercontrol_p.h b/src/multimedia/platform/qnx/camera/bbimageencodercontrol_p.h
index 2ace35b4f..f7e4d4445 100644
--- a/src/multimedia/platform/qnx/camera/bbimageencodercontrol_p.h
+++ b/src/multimedia/platform/qnx/camera/bbimageencodercontrol_p.h
@@ -62,9 +62,6 @@ class BbImageEncoderControl : public QImageEncoderControl
public:
explicit BbImageEncoderControl(BbCameraSession *session, QObject *parent = 0);
- QStringList supportedImageCodecs() const override;
- QString imageCodecDescription(const QString &codecName) const override;
- QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const override;
QImageEncoderSettings imageSettings() const override;
void setImageSettings(const QImageEncoderSettings &settings) override;