summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorAlexander Volkov <a.volkov@rusbitech.ru>2018-11-29 14:48:58 +0300
committerAlexander Volkov <a.volkov@rusbitech.ru>2019-02-01 13:59:46 +0000
commitc877776c354a625373e1dc0f38ac4918da9a056f (patch)
tree2feb1e9be8a346e63f378509fe375cd9bb0e55a3 /src/plugins
parentb0c7dffcdb1150dd9d8cbf92b93ce0cae4fa10ad (diff)
GStreamer: support video orientation
Change-Id: I233c45824f517c185cb245d8a7d77cab8551fc51 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinmetadata.cpp41
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp8
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);
}