diff --git a/src/ui/MxcMediaProxy.cpp b/src/ui/MxcMediaProxy.cpp
index df0298da..a93d0fc0 100644
--- a/src/ui/MxcMediaProxy.cpp
+++ b/src/ui/MxcMediaProxy.cpp
@@ -7,6 +7,7 @@
#include <QDir>
#include <QFile>
#include <QFileInfo>
+#include <QMediaMetaData>
#include <QMediaObject>
#include <QMediaPlayer>
#include <QMimeDatabase>
@@ -23,6 +24,28 @@
#include "MatrixClient.h"
#include "timeline/TimelineModel.h"
+MxcMediaProxy::MxcMediaProxy(QObject *parent)
+ : QMediaPlayer(parent)
+{
+ connect(this, &MxcMediaProxy::eventIdChanged, &MxcMediaProxy::startDownload);
+ connect(this, &MxcMediaProxy::roomChanged, &MxcMediaProxy::startDownload);
+ connect(this,
+ qOverload<QMediaPlayer::Error>(&MxcMediaProxy::error),
+ [this](QMediaPlayer::Error error) {
+ nhlog::ui()->info("Media player error {} and errorStr {}",
+ error,
+ this->errorString().toStdString());
+ });
+ connect(this, &MxcMediaProxy::mediaStatusChanged, [this](QMediaPlayer::MediaStatus status) {
+ nhlog::ui()->info("Media player status {} and error {}", status, this->error());
+ });
+ connect(this,
+ qOverload<const QString &, const QVariant &>(&MxcMediaProxy::metaDataChanged),
+ [this](QString t, QVariant) {
+ if (t == QMediaMetaData::Orientation)
+ emit orientationChanged();
+ });
+}
void
MxcMediaProxy::setVideoSurface(QAbstractVideoSurface *surface)
{
@@ -37,6 +60,15 @@ MxcMediaProxy::getVideoSurface()
return m_surface;
}
+int
+MxcMediaProxy::orientation() const
+{
+ nhlog::ui()->debug("metadata: {}", availableMetaData().join(",").toStdString());
+ auto orientation = metaData(QMediaMetaData::Orientation).toInt();
+ nhlog::ui()->debug("Video orientation: {}", orientation);
+ return orientation;
+}
+
void
MxcMediaProxy::startDownload()
{
diff --git a/src/ui/MxcMediaProxy.h b/src/ui/MxcMediaProxy.h
index 18152c75..e33fc105 100644
--- a/src/ui/MxcMediaProxy.h
+++ b/src/ui/MxcMediaProxy.h
@@ -25,23 +25,10 @@ class MxcMediaProxy : public QMediaPlayer
Q_PROPERTY(QString eventId READ eventId WRITE setEventId NOTIFY eventIdChanged)
Q_PROPERTY(QAbstractVideoSurface *videoSurface READ getVideoSurface WRITE setVideoSurface)
Q_PROPERTY(bool loaded READ loaded NOTIFY loadedChanged)
+ Q_PROPERTY(int orientation READ orientation NOTIFY orientationChanged)
+
public:
- MxcMediaProxy(QObject *parent = nullptr)
- : QMediaPlayer(parent)
- {
- connect(this, &MxcMediaProxy::eventIdChanged, &MxcMediaProxy::startDownload);
- connect(this, &MxcMediaProxy::roomChanged, &MxcMediaProxy::startDownload);
- connect(this,
- qOverload<QMediaPlayer::Error>(&MxcMediaProxy::error),
- [this](QMediaPlayer::Error error) {
- nhlog::ui()->info("Media player error {} and errorStr {}",
- error,
- this->errorString().toStdString());
- });
- connect(this, &MxcMediaProxy::mediaStatusChanged, [this](QMediaPlayer::MediaStatus status) {
- nhlog::ui()->info("Media player status {} and error {}", status, this->error());
- });
- }
+ MxcMediaProxy(QObject *parent = nullptr);
bool loaded() const { return buffer.size() > 0; }
QString eventId() const { return eventId_; }
@@ -59,12 +46,16 @@ public:
void setVideoSurface(QAbstractVideoSurface *surface);
QAbstractVideoSurface *getVideoSurface();
+ int orientation() const;
+
signals:
void roomChanged();
void eventIdChanged();
void loadedChanged();
void newBuffer(QMediaContent, QIODevice *buf);
+ void orientationChanged();
+
private slots:
void startDownload();
|