diff options
author | Alexander Volkov <a.volkov@rusbitech.ru> | 2018-11-29 14:48:58 +0300 |
---|---|---|
committer | Alexander Volkov <a.volkov@rusbitech.ru> | 2019-02-01 13:59:46 +0000 |
commit | c877776c354a625373e1dc0f38ac4918da9a056f (patch) | |
tree | 2feb1e9be8a346e63f378509fe375cd9bb0e55a3 /src/plugins/gstreamer | |
parent | b0c7dffcdb1150dd9d8cbf92b93ce0cae4fa10ad (diff) |
GStreamer: support video orientation
Change-Id: I233c45824f517c185cb245d8a7d77cab8551fc51
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
Diffstat (limited to 'src/plugins/gstreamer')
-rw-r--r-- | src/plugins/gstreamer/camerabin/camerabinmetadata.cpp | 41 | ||||
-rw-r--r-- | src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp | 8 |
2 files changed, 13 insertions, 36 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp index 6ae41de0e..afda2346d 100644 --- a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp @@ -43,45 +43,12 @@ #include <gst/gst.h> #include <gst/gstversion.h> +#include <private/qgstutils_p.h> #include <QDebug> QT_BEGIN_NAMESPACE -#if GST_CHECK_VERSION(0,10,30) - -static QVariant fromGStreamerOrientation(const QVariant &value) -{ - // Note gstreamer tokens either describe the counter clockwise rotation of the - // image or the clockwise transform to apply to correct the image. The orientation - // value returned is the clockwise rotation of the image. - const QString token = value.toString(); - if (token == QStringLiteral("rotate-90")) - return 270; - else if (token == QStringLiteral("rotate-180")) - return 180; - else if (token == QStringLiteral("rotate-270")) - return 90; - else - return 0; -} - -#endif - -static QVariant toGStreamerOrientation(const QVariant &value) -{ - switch (value.toInt()) { - case 90: - return QStringLiteral("rotate-270"); - case 180: - return QStringLiteral("rotate-180"); - case 270: - return QStringLiteral("rotate-90"); - default: - return QStringLiteral("rotate-0"); - } -} - namespace { struct QGStreamerMetaDataKey { @@ -196,7 +163,7 @@ QVariant CameraBinMetaData::metaData(const QString &key) const { #if GST_CHECK_VERSION(0,10,30) if (key == QMediaMetaData::Orientation) { - return fromGStreamerOrientation(m_values.value(QByteArray(GST_TAG_IMAGE_ORIENTATION))); + return QGstUtils::fromGStreamerOrientation(m_values.value(QByteArray(GST_TAG_IMAGE_ORIENTATION))); } else if (key == QMediaMetaData::GPSSpeed) { const double metersPerSec = m_values.value(QByteArray(GST_TAG_GEO_LOCATION_MOVEMENT_SPEED)).toDouble(); return (metersPerSec * 3600) / 1000; @@ -214,14 +181,16 @@ QVariant CameraBinMetaData::metaData(const QString &key) const void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value) { QVariant correctedValue = value; +#if GST_CHECK_VERSION(0,10,30) if (value.isValid()) { if (key == QMediaMetaData::Orientation) { - correctedValue = toGStreamerOrientation(value); + correctedValue = QGstUtils::toGStreamerOrientation(value); } else if (key == QMediaMetaData::GPSSpeed) { // kilometers per hour to meters per second. correctedValue = (value.toDouble() * 1000) / 3600; } } +#endif const auto keys = *qt_gstreamerMetaDataKeys(); for (const QGStreamerMetaDataKey &metadataKey : keys) { diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp index 50ab0256b..8f2f6643c 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp +++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp @@ -43,6 +43,7 @@ #include <QtMultimedia/qmediametadata.h> #include <gst/gstversion.h> +#include <private/qgstutils_p.h> QT_BEGIN_NAMESPACE @@ -99,6 +100,9 @@ static const QGstreamerMetaDataKeyLookup *qt_gstreamerMetaDataKeys() // Image/Video metadataKeys->insert("resolution", QMediaMetaData::Resolution); metadataKeys->insert("pixel-aspect-ratio", QMediaMetaData::PixelAspectRatio); +#if GST_CHECK_VERSION(0,10,30) + metadataKeys->insert(GST_TAG_IMAGE_ORIENTATION, QMediaMetaData::Orientation); +#endif // Video //metadataKeys->insert(0, QMediaMetaData::VideoFrameRate); @@ -145,6 +149,10 @@ bool QGstreamerMetaDataProvider::isWritable() const QVariant QGstreamerMetaDataProvider::metaData(const QString &key) const { +#if GST_CHECK_VERSION(0,10,30) + if (key == QMediaMetaData::Orientation) + return QGstUtils::fromGStreamerOrientation(m_tags.value(key)); +#endif return m_tags.value(key); } |