<div dir="ltr"><div>Hi,</div><div><br></div><div>360 video panning in the Qt sample player since vlc supports 360 videos. It might be a good starting point.</div><div><br></div><div>From: Ayush Sinha <<a href="mailto:ayush.sinha09@gmail.com">ayush.sinha09@gmail.com</a>><br><br>    QtPlayer example: Add 360 video panning<br><br>diff --git a/doc/libvlc/QtPlayer/QtVLC.pro b/doc/libvlc/QtPlayer/QtVLC.pro<br>index c050c97126..e358b3b055 100644<br>--- a/doc/libvlc/QtPlayer/QtVLC.pro<br>+++ b/doc/libvlc/QtPlayer/QtVLC.pro<br>@@ -3,6 +3,7 @@ TARGET = qtvlc<br> DEPENDPATH += .<br> INCLUDEPATH += .<br> LIBS += -lvlc -lX11<br>+QT += widgets<br> <br> # Input<br> HEADERS += player.h<br>diff --git a/doc/libvlc/QtPlayer/player.cpp b/doc/libvlc/QtPlayer/player.cpp<br>index 6a25564c62..e98e05262c 100644<br>--- a/doc/libvlc/QtPlayer/player.cpp<br>+++ b/doc/libvlc/QtPlayer/player.cpp<br>@@ -11,6 +11,12 @@<br> #define qtu( i ) ((i).toUtf8().constData())<br> <br> #include <QtGui><br>+#include <QMessageBox><br>+#include <QMenuBar><br>+#include <QAction><br>+#include <QHBoxLayout><br>+#include <QVBoxLayout><br>+#include <QFileDialog><br> <br> Mwindow::Mwindow() {<br>     vlcPlayer = NULL;<br>@@ -89,7 +95,7 @@ void Mwindow::initUI() {<br> <br>     /* Central Widgets */<br>     QWidget* centralWidget = new QWidget;<br>-    videoWidget = new QWidget;<br>+    videoWidget = new VideoWidget();<br> <br>     videoWidget->setAutoFillBackground( true );<br>     QPalette plt = palette();<br>@@ -133,6 +139,14 @@ void Mwindow::openFile() {<br>     /* Create a new libvlc player */<br>     vlcPlayer = libvlc_media_player_new_from_media (vlcMedia);<br> <br>+    /* Mouse/keyboard input disable so video widget can receive mouse events */<br>+    libvlc_video_set_mouse_input(vlcPlayer, 0);<br>+    libvlc_video_set_key_input(vlcPlayer, 0);<br>+<br>+    /* Set the media player instance in VideoWidget */<br>+    if(vlcPlayer)<br>+        videoWidget->setVlcMediaPlayer(vlcPlayer);<br>+<br>     /* Release the media */<br>     libvlc_media_release(vlcMedia);<br> <br>@@ -250,3 +264,43 @@ void Mwindow::closeEvent(QCloseEvent *event) {<br>     stop();<br>     event->accept();<br> }<br>+<br>+/* ##################################################<br>+ * VideoWidget<br>+ * ##################################################<br>+ */<br>+<br>+void VideoWidget::setVlcMediaPlayer(libvlc_media_player_t *mp) {<br>+    mVlcPlayer = mp;<br>+    currentViewpoint = libvlc_video_new_viewpoint();<br>+    libvlc_video_update_viewpoint(mVlcPlayer, currentViewpoint, true);<br>+}<br>+<br>+void VideoWidget::mousePressEvent(QMouseEvent *event) {<br>+    currentX = event->x();<br>+    currentY = event->y();<br>+}<br>+<br>+void VideoWidget::mouseReleaseEvent(QMouseEvent *event) {<br>+    currentX = -1;<br>+    currentY = -1;<br>+}<br>+<br>+void VideoWidget::mouseMoveEvent(QMouseEvent *event) {<br>+    dx = event->x() - currentX;<br>+    dy = event->y() - currentY;<br>+    currentX = event->x();<br>+    currentY = event->y();<br>+<br>+    float yaw = -1 * moveSensitivity * dx;<br>+    float pitch = -1 * moveSensitivity * dy;<br>+<br>+    currentViewpoint->f_yaw = yaw;<br>+    currentViewpoint->f_pitch = pitch;<br>+    currentViewpoint->f_roll = currentViewpoint->f_field_of_view = 0;<br>+<br>+    if(mVlcPlayer != nullptr)<br>+        libvlc_video_update_viewpoint(mVlcPlayer, currentViewpoint, false);<br>+    else<br>+        qDebug() << "media player is null";<br>+}<br>diff --git a/doc/libvlc/QtPlayer/player.h b/doc/libvlc/QtPlayer/player.h<br>index 495ea95311..551d017926 100644<br>--- a/doc/libvlc/QtPlayer/player.h<br>+++ b/doc/libvlc/QtPlayer/player.h<br>@@ -9,8 +9,35 @@<br> #define PLAYER<br> <br> #include <QtGui><br>+#include <QMainWindow><br>+#include <QPushButton><br>+#include <QSlider><br>+#include <QWidget><br> #include <vlc/vlc.h><br> <br>+<br>+class VideoWidget:public QWidget<br>+{<br>+    public:<br>+        VideoWidget () {}<br>+        ~VideoWidget () {}<br>+        void setVlcMediaPlayer(libvlc_media_player_t *mp);<br>+<br>+    protected:<br>+        virtual void mousePressEvent(QMouseEvent *event);<br>+        virtual void mouseReleaseEvent(QMouseEvent *event);<br>+        virtual void mouseMoveEvent(QMouseEvent *event);<br>+<br>+    private:<br>+        libvlc_media_player_t *mVlcPlayer = nullptr;<br>+        libvlc_video_viewpoint_t* currentViewpoint;<br>+        float dx = 0;<br>+        float dy = 0;<br>+        float moveSensitivity = 0.5;<br>+        int currentX = -1;<br>+        int currentY = -1;<br>+};<br>+<br> class Mwindow : public QMainWindow {<br> <br>     Q_OBJECT<br>@@ -38,7 +65,7 @@ class Mwindow : public QMainWindow {<br>                QPushButton *playBut;<br>                QSlider *volumeSlider;<br>                QSlider *slider;<br>-               QWidget *videoWidget;<br>+               VideoWidget *videoWidget;<br> <br>                libvlc_instance_t *vlcInstance;<br>                libvlc_media_player_t *vlcPlayer;<br></div></div>