diff options
author | Jay Sorg <jay.sorg@gmail.com> | 2013-07-19 20:02:16 -0700 |
---|---|---|
committer | Jay Sorg <jay.sorg@gmail.com> | 2013-07-19 20:02:16 -0700 |
commit | 6a5f1417691b48dadca244544bf552c7cad2013d (patch) | |
tree | fc79bcf174f64123e52757cdc1fe4b8ebcb0024e /vrplayer | |
parent | 12381b1c0d7cc6a497a12b32c2d7e9be19ddb309 (diff) | |
download | xrdp-proprietary-6a5f1417691b48dadca244544bf552c7cad2013d.tar.gz xrdp-proprietary-6a5f1417691b48dadca244544bf552c7cad2013d.zip |
vrplayer: update from neutrinolabs
Diffstat (limited to 'vrplayer')
-rw-r--r-- | vrplayer/demuxmedia.cpp | 3 | ||||
-rw-r--r-- | vrplayer/mainwindow.cpp | 146 | ||||
-rw-r--r-- | vrplayer/mainwindow.h | 11 | ||||
-rw-r--r-- | vrplayer/mainwindow.ui | 12 | ||||
-rw-r--r-- | vrplayer/ourinterface.cpp | 12 | ||||
-rw-r--r-- | vrplayer/ourinterface.h | 1 | ||||
-rw-r--r-- | vrplayer/playaudio.cpp | 3 | ||||
-rw-r--r-- | vrplayer/playvideo.cpp | 3 | ||||
-rw-r--r-- | vrplayer/vrplayer.pro | 9 |
9 files changed, 187 insertions, 13 deletions
diff --git a/vrplayer/demuxmedia.cpp b/vrplayer/demuxmedia.cpp index ed91b387..c6893ceb 100644 --- a/vrplayer/demuxmedia.cpp +++ b/vrplayer/demuxmedia.cpp @@ -1,3 +1,6 @@ + +#include <unistd.h> + #include "demuxmedia.h" DemuxMedia::DemuxMedia(QObject *parent, QQueue<MediaPacket *> *audioQueue, diff --git a/vrplayer/mainwindow.cpp b/vrplayer/mainwindow.cpp index b97da148..1782f710 100644 --- a/vrplayer/mainwindow.cpp +++ b/vrplayer/mainwindow.cpp @@ -4,12 +4,18 @@ /* * TODO * o should we use tick marks in QSlider? + * o check for memory leaks + * o double click should make it full screen + * o when opening files, pause video */ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { + gotMediaOnCmdline = false; + moveResizeTimer = NULL; + /* connect to remote client */ interface = new OurInterface(); if (interface->oneTimeInit()) @@ -35,16 +41,42 @@ MainWindow::MainWindow(QWidget *parent) : connect(interface, SIGNAL(onMediaDurationInSeconds(int)), this, SLOT(onMediaDurationInSeconds(int))); + + /* if media file is specified on cmd line, use it */ + QStringList args = QApplication::arguments(); + if (args.count() > 1) + { + if (QFile::exists(args.at(1))) + { + interface->setFilename(args.at(1)); + filename = args.at(1); + gotMediaOnCmdline = true; + on_actionOpen_Media_File_triggered(); + } + else + { + QMessageBox::warning(this, "Invalid media file specified", + "\nThe media file\n\n" + args.at(1) + + "\n\ndoes not exist"); + } + } } MainWindow::~MainWindow() { delete ui; + + if (moveResizeTimer) + delete moveResizeTimer; } void MainWindow::closeEvent(QCloseEvent *event) { - if (!oneTimeInitSuccess) + if (oneTimeInitSuccess) + { + interface->deInitRemoteClient(); + } + else { QMessageBox::warning(this, "Closing application", "This is not an xrdp session with xrdpvr"); @@ -54,22 +86,68 @@ void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::resizeEvent(QResizeEvent *) { - QRect rect; + if (vcrFlag != VCR_PLAY) + { + QRect rect; - getVdoGeometry(&rect); - interface->sendGeometry(rect); + getVdoGeometry(&rect); + interface->sendGeometry(rect); + return; + } + + interface->setVcrOp(VCR_PAUSE); + vcrFlag = VCR_PAUSE; + + if (!moveResizeTimer) + { + moveResizeTimer = new QTimer; + connect(moveResizeTimer, SIGNAL(timeout()), + this, SLOT(onMoveCompleted())); + } + lblVideo->setStyleSheet("QLabel { background-color : black; color : blue; }"); + moveResizeTimer->start(1000); } void MainWindow::moveEvent(QMoveEvent *) { - QRect rect; + if (vcrFlag != VCR_PLAY) + { + QRect rect; - getVdoGeometry(&rect); - interface->sendGeometry(rect); + getVdoGeometry(&rect); + interface->sendGeometry(rect); + return; + } + + interface->setVcrOp(VCR_PAUSE); + vcrFlag = VCR_PAUSE; + + if (!moveResizeTimer) + { + moveResizeTimer = new QTimer; + connect(moveResizeTimer, SIGNAL(timeout()), + this, SLOT(onMoveCompleted())); + } + lblVideo->setStyleSheet("QLabel { background-color : black; color : blue; }"); + moveResizeTimer->start(1000); +} + +void MainWindow::onVolSliderValueChanged(int value) +{ + int volume; + + volume = (value * 0xffff) / 100; + if (interface != 0) + { + interface->setVolume(volume); + } + qDebug() << "vol = " << volume; } void MainWindow::setupUI() { + this->setWindowTitle("vrplayer"); + /* setup area to display video */ lblVideo = new QLabel(); lblVideo->setMinimumWidth(320); @@ -134,10 +212,26 @@ void MainWindow::setupUI() connect(btnRewind, SIGNAL(clicked(bool)), this, SLOT(onBtnRewindClicked(bool))); + /* setup volume control slider */ + volSlider = new QSlider(); + volSlider->setOrientation(Qt::Horizontal); + volSlider->setMinimumWidth(100); + volSlider->setMaximumWidth(100); + volSlider->setMinimum(0); + volSlider->setMaximum(100); + volSlider->setValue(20); + volSlider->setTickPosition(QSlider::TicksAbove); + volSlider->setTickInterval(10); + + connect(volSlider, SIGNAL(valueChanged(int)), + this, SLOT(onVolSliderValueChanged(int))); + /* add buttons to bottom panel */ hboxLayoutBottom = new QHBoxLayout; hboxLayoutBottom->addWidget(btnPlay); hboxLayoutBottom->addWidget(btnStop); + hboxLayoutBottom->addWidget(volSlider); + //hboxLayoutBottom->addWidget(btnRewind); hboxLayoutBottom->addStretch(); @@ -208,9 +302,14 @@ void MainWindow::clearDisplay() void MainWindow::on_actionOpen_Media_File_triggered() { if (vcrFlag != 0) - onBtnStopClicked(false); + onBtnStopClicked(true); + + /* if media was specified on cmd line, use it just once */ + if (gotMediaOnCmdline) + gotMediaOnCmdline = false; + else + openMediaFile(); - openMediaFile(); if (filename.length() == 0) { /* cancel btn was clicked */ @@ -238,7 +337,7 @@ void MainWindow::on_actionOpen_Media_File_triggered() remoteClientInited = true; interface->playMedia(); - if (vcrFlag != 0) + //if (vcrFlag != 0) { interface->setVcrOp(VCR_PLAY); btnPlay->setText("Pause"); @@ -404,3 +503,30 @@ void MainWindow::onSliderActionTriggered(int action) } } +void MainWindow::onMoveCompleted() +{ + QRect rect; + + getVdoGeometry(&rect); + interface->sendGeometry(rect); + + interface->setVcrOp(VCR_PLAY); + vcrFlag = VCR_PLAY; + moveResizeTimer->stop(); +} + +void MainWindow::on_actionAbout_triggered() +{ +#if 0 + QMessageBox msgBox; + + msgBox.setText("VRPlayer version 1.2"); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.exec(); +#else + DlgAbout *dlgabt = new DlgAbout(this); + dlgabt->exec(); + +#endif +} diff --git a/vrplayer/mainwindow.h b/vrplayer/mainwindow.h index 802fd10d..4fef0d60 100644 --- a/vrplayer/mainwindow.h +++ b/vrplayer/mainwindow.h @@ -25,12 +25,15 @@ #include <QTimer> #include <QPixmap> #include <QPainter> +#include <QFile> +#include <QTimer> #include "xrdpapi.h" #include "xrdpvr.h" #include "decoder.h" #include "ourinterface.h" #include "playvideo.h" +#include "dlgabout.h" /* ffmpeg related stuff */ extern "C" @@ -75,6 +78,11 @@ private slots: void onMediaDurationInSeconds(int duration); void onElapsedTime(int secs); void onSliderActionTriggered(int value); + void onMoveCompleted(); + + void on_actionAbout_triggered(); + + void onVolSliderValueChanged(int value); protected: void resizeEvent(QResizeEvent *e); @@ -96,8 +104,10 @@ private: QPushButton *btnStop; QPushButton *btnRewind; QSlider *slider; + QSlider *volSlider; QWidget *window; bool acceptSliderMove; + QTimer *moveResizeTimer; /* private stuff */ OurInterface *interface; @@ -109,6 +119,7 @@ private: int stream_id; int64_t elapsedTime; /* elapsed time in usecs since play started */ int vcrFlag; + bool gotMediaOnCmdline; /* private methods */ void setupUI(); diff --git a/vrplayer/mainwindow.ui b/vrplayer/mainwindow.ui index af924894..b9c2a85c 100644 --- a/vrplayer/mainwindow.ui +++ b/vrplayer/mainwindow.ui @@ -31,7 +31,14 @@ <addaction name="separator"/> <addaction name="actionExit"/> </widget> + <widget class="QMenu" name="menuHelp"> + <property name="title"> + <string>Help</string> + </property> + <addaction name="actionAbout"/> + </widget> <addaction name="menuFile"/> + <addaction name="menuHelp"/> </widget> <widget class="QToolBar" name="mainToolBar"> <attribute name="toolBarArea"> @@ -55,6 +62,11 @@ <string>Exit application</string> </property> </action> + <action name="actionAbout"> + <property name="text"> + <string>About</string> + </property> + </action> </widget> <layoutdefault spacing="6" margin="11"/> <resources/> diff --git a/vrplayer/ourinterface.cpp b/vrplayer/ourinterface.cpp index 094a84f7..cee66691 100644 --- a/vrplayer/ourinterface.cpp +++ b/vrplayer/ourinterface.cpp @@ -215,3 +215,15 @@ void OurInterface::setVcrOp(int op) if (demuxMedia) demuxMedia->setVcrOp(op); } + +int OurInterface::setVolume(int volume) +{ + printf("OurInterface::setVolume\n"); + if (xrdpvr_set_volume(channel, volume)) + { + emit on_ErrorMsg("I/O Error", + "Error sending volume to remote client"); + return -1; + } + return 0; +} diff --git a/vrplayer/ourinterface.h b/vrplayer/ourinterface.h index ea402048..86352001 100644 --- a/vrplayer/ourinterface.h +++ b/vrplayer/ourinterface.h @@ -42,6 +42,7 @@ public: void playMedia(); PlayVideo *getPlayVideoInstance(); void setVcrOp(int op); + int setVolume(int volume); public slots: void onGeometryChanged(int x, int y, int width, int height); diff --git a/vrplayer/playaudio.cpp b/vrplayer/playaudio.cpp index bab7d38b..fee98f9d 100644 --- a/vrplayer/playaudio.cpp +++ b/vrplayer/playaudio.cpp @@ -1,3 +1,6 @@ + +#include <unistd.h> + #include "playaudio.h" #include <QDebug> diff --git a/vrplayer/playvideo.cpp b/vrplayer/playvideo.cpp index e1a7ec90..24ef492d 100644 --- a/vrplayer/playvideo.cpp +++ b/vrplayer/playvideo.cpp @@ -1,3 +1,6 @@ + +#include <unistd.h> + #include "playvideo.h" #include <QDebug> diff --git a/vrplayer/vrplayer.pro b/vrplayer/vrplayer.pro index a6e53231..1708a7f4 100644 --- a/vrplayer/vrplayer.pro +++ b/vrplayer/vrplayer.pro @@ -16,16 +16,19 @@ SOURCES += main.cpp\ mediapacket.cpp \ playaudio.cpp \ demuxmedia.cpp \ - ourinterface.cpp + ourinterface.cpp \ + dlgabout.cpp HEADERS += mainwindow.h \ mediapacket.h \ playvideo.h \ playaudio.h \ demuxmedia.h \ - ourinterface.h + ourinterface.h \ + dlgabout.h -FORMS += mainwindow.ui +FORMS += mainwindow.ui \ + dlgabout.ui # added by LK INCLUDEPATH += ../xrdpvr |