From f920d43285d4edbe2f8db41bd09f4846f281478d Mon Sep 17 00:00:00 2001 From: chenjingtao Date: Wed, 24 Jun 2015 15:24:07 +0800 Subject: [PATCH 01/24] Create README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8a0ca89 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# player +Demo player based on Qt and GStreamer From 999ecb6893a723b827b0294d96fa6e991b218156 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Fri, 26 Jun 2015 17:36:32 +0800 Subject: [PATCH 02/24] add metadata, overflow issue Signed-off-by: Jingtao Chen --- csrplayer.pro | 2 ++ filedialog.cpp | 18 ++++++++++++++++-- filedialog.h | 10 ++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/csrplayer.pro b/csrplayer.pro index d2f1d93..70ce800 100644 --- a/csrplayer.pro +++ b/csrplayer.pro @@ -29,6 +29,8 @@ FORMS += csrplayer.ui OTHER_FILES += +LIBS += -lmediainfo -ldl + RESOURCES += csrplayer.qrc target.path = $$[QT_INSTALL_EXAMPLES]/multimediawidgets/player diff --git a/filedialog.cpp b/filedialog.cpp index 46fe1c2..dbe7bd2 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -34,6 +34,19 @@ Dialog::Dialog(QWidget *parent, const QString &filename, int mode) QObject::connect(m_filedlg, SIGNAL(finished(int)), this, SLOT(dialogQuit())); QObject::connect(m_filedlg, SIGNAL(currentChanged(QString)), this, SLOT(currentFile(QString))); QObject::connect(m_filedlg, SIGNAL(fileSelected(QString)), this, SLOT(selectFile(QString))); + + handle = dlopen (MEDIA_LIB, RTLD_LAZY); + if(!handle) + { + qDebug() << MEDIA_LIB << " open failed!"; + } + + *(void **) (&mediainfo) = dlsym(handle, "media_info"); + + if(!mediainfo) + { + qDebug() << "Get mediainfo" << " open failed!"; + } } void Dialog::currentFile(QString file) @@ -41,9 +54,10 @@ void Dialog::currentFile(QString file) m_fileinfo->setFile(file); if (m_fileinfo->isFile()) { - QString info; - info = "FilePath: \n" + m_fileinfo->absoluteFilePath() + "\n" + "FileName: \n" + m_fileinfo->fileName(); m_mediainfo->setFontPointSize(12); + QByteArray filename = m_fileinfo->absoluteFilePath().toLatin1(); + if(mediainfo)offset = (* mediainfo)(filename.data(), msg); + QString info = QString::fromStdString(msg); m_mediainfo->setText(info); } } diff --git a/filedialog.h b/filedialog.h index f3757a5..9db51dc 100644 --- a/filedialog.h +++ b/filedialog.h @@ -13,6 +13,10 @@ #include #include #include +#include + +#define MEDIA_LIB "libmediainfo.so" +typedef int (*M_FUNC)(char *, char *); class Dialog : public QDialog { @@ -23,6 +27,7 @@ class Dialog : public QDialog QFileDialog* GetFileDlg() { + if (handle) dlclose(handle); return m_filedlg; } @@ -43,5 +48,10 @@ private slots: QTableWidgetItem *m_item; QGridLayout *m_mainLaout; QString m_file; + + void *handle; + M_FUNC mediainfo; + char msg[4096]; + int offset; }; #endif From 91487be196172fd0fb9c72daccc76555ba7fb5c8 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 29 Jun 2015 11:11:11 +0800 Subject: [PATCH 03/24] fix Signed-off-by: Jingtao Chen --- filedialog.cpp | 5 ++--- filedialog.h | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/filedialog.cpp b/filedialog.cpp index dbe7bd2..24a23a0 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -56,9 +56,8 @@ void Dialog::currentFile(QString file) { m_mediainfo->setFontPointSize(12); QByteArray filename = m_fileinfo->absoluteFilePath().toLatin1(); - if(mediainfo)offset = (* mediainfo)(filename.data(), msg); - QString info = QString::fromStdString(msg); - m_mediainfo->setText(info); + if(mediainfo)(* mediainfo)(filename.data(), msg); + m_mediainfo->setText(QString::fromStdString(msg)); } } diff --git a/filedialog.h b/filedialog.h index 9db51dc..2d0b564 100644 --- a/filedialog.h +++ b/filedialog.h @@ -16,7 +16,7 @@ #include #define MEDIA_LIB "libmediainfo.so" -typedef int (*M_FUNC)(char *, char *); +typedef void (*M_FUNC)(char *, char *); class Dialog : public QDialog { @@ -52,6 +52,5 @@ private slots: void *handle; M_FUNC mediainfo; char msg[4096]; - int offset; }; #endif From 0e3b441af9aeb845f77946f5c7cca5b9f04f1f59 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 29 Jun 2015 11:32:14 +0800 Subject: [PATCH 04/24] clear msg Signed-off-by: Jingtao Chen --- filedialog.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/filedialog.cpp b/filedialog.cpp index 24a23a0..839f9fe 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -58,6 +58,7 @@ void Dialog::currentFile(QString file) QByteArray filename = m_fileinfo->absoluteFilePath().toLatin1(); if(mediainfo)(* mediainfo)(filename.data(), msg); m_mediainfo->setText(QString::fromStdString(msg)); + msg[0]={'\0'}; } } From e32169e466602c8ca87420ca0ebff4eba56afbb3 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 29 Jun 2015 15:04:31 +0800 Subject: [PATCH 05/24] fix Signed-off-by: Jingtao Chen --- filedialog.cpp | 3 ++- filedialog.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/filedialog.cpp b/filedialog.cpp index 839f9fe..8283788 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -56,7 +56,8 @@ void Dialog::currentFile(QString file) { m_mediainfo->setFontPointSize(12); QByteArray filename = m_fileinfo->absoluteFilePath().toLatin1(); - if(mediainfo)(* mediainfo)(filename.data(), msg); + if(mediainfo)offset = (* mediainfo)(filename.data(), msg); + msg[offset] = '\0'; m_mediainfo->setText(QString::fromStdString(msg)); msg[0]={'\0'}; } diff --git a/filedialog.h b/filedialog.h index 2d0b564..9db51dc 100644 --- a/filedialog.h +++ b/filedialog.h @@ -16,7 +16,7 @@ #include #define MEDIA_LIB "libmediainfo.so" -typedef void (*M_FUNC)(char *, char *); +typedef int (*M_FUNC)(char *, char *); class Dialog : public QDialog { @@ -52,5 +52,6 @@ private slots: void *handle; M_FUNC mediainfo; char msg[4096]; + int offset; }; #endif From 05ac4f54fb1bec8e6c768b36f50535b9b9a2f249 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 29 Jun 2015 15:47:39 +0800 Subject: [PATCH 06/24] Revert "fix" This reverts commit e32169e466602c8ca87420ca0ebff4eba56afbb3. --- filedialog.cpp | 3 +-- filedialog.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/filedialog.cpp b/filedialog.cpp index 8283788..839f9fe 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -56,8 +56,7 @@ void Dialog::currentFile(QString file) { m_mediainfo->setFontPointSize(12); QByteArray filename = m_fileinfo->absoluteFilePath().toLatin1(); - if(mediainfo)offset = (* mediainfo)(filename.data(), msg); - msg[offset] = '\0'; + if(mediainfo)(* mediainfo)(filename.data(), msg); m_mediainfo->setText(QString::fromStdString(msg)); msg[0]={'\0'}; } diff --git a/filedialog.h b/filedialog.h index 9db51dc..2d0b564 100644 --- a/filedialog.h +++ b/filedialog.h @@ -16,7 +16,7 @@ #include #define MEDIA_LIB "libmediainfo.so" -typedef int (*M_FUNC)(char *, char *); +typedef void (*M_FUNC)(char *, char *); class Dialog : public QDialog { @@ -52,6 +52,5 @@ private slots: void *handle; M_FUNC mediainfo; char msg[4096]; - int offset; }; #endif From fd2125c8e7bb351a7ca82d63463b65655d3fe973 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 29 Jun 2015 16:56:15 +0800 Subject: [PATCH 07/24] remove lmediaindo Signed-off-by: Jingtao Chen --- csrplayer.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csrplayer.pro b/csrplayer.pro index 70ce800..5be5420 100644 --- a/csrplayer.pro +++ b/csrplayer.pro @@ -29,7 +29,7 @@ FORMS += csrplayer.ui OTHER_FILES += -LIBS += -lmediainfo -ldl +LIBS += -ldl RESOURCES += csrplayer.qrc From c721757fb0c38cb071a4c00f661af41128a93272 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Fri, 24 Jul 2015 16:08:59 +0800 Subject: [PATCH 08/24] new filter Signed-off-by: Jingtao Chen --- filedialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/filedialog.cpp b/filedialog.cpp index 839f9fe..c3ba56d 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -9,7 +9,8 @@ Dialog::Dialog(QWidget *parent, const QString &filename, int mode) m_filedlg->resize(800, 480); QStringList filters; - filters << "Video files (*.3gp *.avi *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp4 *.mpg *.ts *.wmv)" + filters << "Supported files (*.3gp *.avi *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp4 *.mpg *.ts *.wmv *.mp3 *.ogg)" + << "Video files (*.3gp *.avi *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp4 *.mpg *.ts *.wmv)" << "Audio files (*.mp3 *.ogg)" << "Any files (*)"; m_filedlg->setNameFilters(filters); @@ -58,7 +59,6 @@ void Dialog::currentFile(QString file) QByteArray filename = m_fileinfo->absoluteFilePath().toLatin1(); if(mediainfo)(* mediainfo)(filename.data(), msg); m_mediainfo->setText(QString::fromStdString(msg)); - msg[0]={'\0'}; } } From 01c29498b080d86899cc765d7215cc0d8891b94f Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Fri, 24 Jul 2015 17:33:51 +0800 Subject: [PATCH 09/24] alpha=255 Signed-off-by: Jingtao Chen --- csrplayer.ui | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/csrplayer.ui b/csrplayer.ui index 6b09353..16d0926 100644 --- a/csrplayer.ui +++ b/csrplayer.ui @@ -23,13 +23,13 @@ QMainWindow { background: none; - background-color: rgba(60, 60, 60,60); + background-color: rgba(60, 60, 60, 255); } QListView { background: none; - background-color: rgba(200, 200, 200,200); + background-color: rgba(200, 200, 200,255); } QHBoxLayout @@ -83,7 +83,7 @@ QSlider::sub-page:horizontal { QScrollBar:vertical { background: none; - background: rgba(0, 0, 0, 0); + background: rgba(0, 0, 0, 255); margin: 17px 0px 17px 0px; width: 20px; } @@ -94,14 +94,14 @@ QScrollBar::handle:vertical { QScrollBar::add-line:vertical { background: none; - background: rgba(0, 0, 0, 0); + background: rgba(0, 0, 0, 255); height: 20px; subcontrol-origin: margin; } QScrollBar::sub-line:vertical { background: none; - background: rgba(0, 0, 0, 0); + background: rgba(0, 0, 0, 255); height: 20px; subcontrol-origin: margin; } From 5aef95911dbce991b06a038f4631edc518c974ec Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 27 Jul 2015 11:15:38 +0800 Subject: [PATCH 10/24] full screen Signed-off-by: Jingtao Chen --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 851d36e..55b775b 100644 --- a/main.cpp +++ b/main.cpp @@ -48,6 +48,6 @@ int main(int argc, char *argv[]) csrplayer player; //player.resize(800,480); - player.show(); + player.showFullScreen(); return app.exec(); } From 03f07315f87149f359e3dde108af563f355be3c3 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 27 Jul 2015 12:07:25 +0800 Subject: [PATCH 11/24] maximize dialog Signed-off-by: Jingtao Chen --- csrplayer.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/csrplayer.cpp b/csrplayer.cpp index 65211b0..99ed8c0 100644 --- a/csrplayer.cpp +++ b/csrplayer.cpp @@ -135,18 +135,25 @@ void csrplayer::open() #endif #if 0 - QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open Files")); + //QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open Files")); + //addToPlaylist(fileNames); + QFileDialog *fileDialog = new QFileDialog(this); + fileDialog->setWindowTitle(tr("Open File")); + fileDialog->setDirectory("/media/mmcblk0p6/"); + fileDialog->setStyleSheet ("font: 32pt \"Courier\";"); + fileDialog->setWindowFlags(Qt::Window); + fileDialog->showFullScreen(); + fileDialog->setViewMode(QFileDialog::List); + if(fileDialog->exec() == QDialog::Accepted) { + QStringList fileNames = fileDialog->selectedFiles(); addToPlaylist(fileNames); + } #else Dialog *fileDialog = new Dialog(this, "/media/mmcblk1p1/", QFileDialog::List); fileDialog->setWindowTitle(tr("Open File")); fileDialog->setStyleSheet ("font: 20pt \"Courier\";"); - fileDialog->resize(1024, 600); - /*if(fileDialog->exec() == QDialog::Accepted) { - QString fileNames = fileDialog->GetFile(); - qDebug()<resize(1024, 600); + fileDialog->showMaximized(); fileDialog->exec(); #ifdef DEBUG_OPEN qDebug()<GetFile(); From f10f16d2f2db3fa69ec3587343c956e84fe303fd Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 25 May 2015 11:38:07 +0800 Subject: [PATCH 12/24] Bugfix for APBU-10439 [A7DA][MM][APE,MP3]Some APE audio clip's length isn't same as PC root cause: int/int Change-Id: Ieb314786398a7926a338ba91bd5a5e269c8acb1b Signed-off-by: Jingtao Chen --- csrplayer.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/csrplayer.cpp b/csrplayer.cpp index 99ed8c0..3db6cd2 100644 --- a/csrplayer.cpp +++ b/csrplayer.cpp @@ -238,16 +238,16 @@ void csrplayer::addToPlaylist(const QStringList& fileNames) void csrplayer::durationChanged(qint64 duration) { - this->duration = duration/1000; - ui->slider->setMaximum(duration / 1000); + this->duration = int(duration/1000.0 + 0.5); + ui->slider->setMaximum(int(duration/1000.0 + 0.5)); } void csrplayer::positionChanged(qint64 progress) { if (!ui->slider->isSliderDown()) { - ui->slider->setValue(progress / 1000); + ui->slider->setValue(progress/1000); } - updateDurationInfo(progress / 1000); + updateDurationInfo(progress/1000); } void csrplayer::metaDataChanged() From 5c3a3162932cb37e955e00d67c440a261a74a4aa Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Fri, 31 Jul 2015 11:57:29 +0800 Subject: [PATCH 13/24] 800x480 for entry board Change-Id: I5c1f9564d129a16029d0a7cb26eae624b0ab8ef2 Signed-off-by: Jingtao Chen --- csrplayer.ui | 4 +-- main.cpp | 85 ++++++++++++++++++++++++++-------------------------- 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/csrplayer.ui b/csrplayer.ui index 16d0926..bfc3482 100644 --- a/csrplayer.ui +++ b/csrplayer.ui @@ -6,8 +6,8 @@ 0 0 - 1024 - 600 + 800 + 480 diff --git a/main.cpp b/main.cpp index 55b775b..5d8d22a 100644 --- a/main.cpp +++ b/main.cpp @@ -1,42 +1,42 @@ /**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ + ** + ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). + ** Contact: http://www.qt-project.org/legal + ** + ** This file is part of the examples of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:BSD$ + ** You may use this file under the terms of the BSD license as follows: + ** + ** "Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions are + ** met: + ** * Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** * Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in + ** the documentation and/or other materials provided with the + ** distribution. + ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names + ** of its contributors may be used to endorse or promote products derived + ** from this software without specific prior written permission. + ** + ** + ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ #include "csrplayer.h" @@ -44,10 +44,11 @@ int main(int argc, char *argv[]) { - QApplication app(argc, argv); + QApplication app(argc, argv); csrplayer player; - //player.resize(800,480); - player.showFullScreen(); - return app.exec(); + player.resize(800,480); + player.showFullScreen(); + player.show(); + return app.exec(); } From 98243f1c65325a80371451c216d10acb417cdf94 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Fri, 31 Jul 2015 12:25:40 +0800 Subject: [PATCH 14/24] Full screen Signed-off-by: Jingtao Chen --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 5d8d22a..96550de 100644 --- a/main.cpp +++ b/main.cpp @@ -49,6 +49,6 @@ int main(int argc, char *argv[]) csrplayer player; player.resize(800,480); player.showFullScreen(); - player.show(); + //player.show(); return app.exec(); } From 3968d3cf3f28a7159837df82f39a28f41cdf4a29 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Tue, 25 Aug 2015 14:23:20 +0800 Subject: [PATCH 15/24] Add license Change-Id: I7751407b0e36bbcbbe763529546951e0a2a282d1 Signed-off-by: Jingtao Chen --- COPYING | 9 + LICENSE.LGPL | 514 --------------------------------------------------- csrplayer.h | 2 +- filedialog.h | 2 +- 4 files changed, 11 insertions(+), 516 deletions(-) create mode 100644 COPYING delete mode 100644 LICENSE.LGPL diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..6dc00e9 --- /dev/null +++ b/COPYING @@ -0,0 +1,9 @@ +Copyright (c) [2015] Qualcomm Technologies International, Ltd. +All Rights Reserved. +Qualcomm Technologies Inc. Confidential and Proprietary. +Not a Contribution. Notifications and licenses are retained for attribution +purposes only . Your use of this code is governed by the terms of your license +agreement with Qualcomm Technologies International, Ltd.(“QTIL”). +Except as may be granted by separate express written agreement, this file +provides no rights under or license to any QTIL or its affiliates patents, +trademarks, copyrights,or other intellectual property. diff --git a/LICENSE.LGPL b/LICENSE.LGPL deleted file mode 100644 index 3788d79..0000000 --- a/LICENSE.LGPL +++ /dev/null @@ -1,514 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - - The Qt Toolkit is Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). - Contact: http://www.qt-project.org/legal - - You may use, distribute and copy the Qt GUI Toolkit under the terms of - GNU Lesser General Public License version 2.1, which is displayed below. - -------------------------------------------------------------------------- - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/csrplayer.h b/csrplayer.h index 48e0207..bc7ac71 100644 --- a/csrplayer.h +++ b/csrplayer.h @@ -40,7 +40,7 @@ class csrplayer : public QMainWindow private slots: void open(); - void on_closeButton_clicked(); + void on_closeButton_clicked(); void durationChanged(qint64 duration); void positionChanged(qint64 progress); void metaDataChanged(); diff --git a/filedialog.h b/filedialog.h index 2d0b564..c8e1095 100644 --- a/filedialog.h +++ b/filedialog.h @@ -15,7 +15,7 @@ #include #include -#define MEDIA_LIB "libmediainfo.so" +#define MEDIA_LIB "libmediainfo.so.0" typedef void (*M_FUNC)(char *, char *); class Dialog : public QDialog From f99662728a4ae8c30be63e625e5cf579220c35f9 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Tue, 25 Aug 2015 14:41:41 +0800 Subject: [PATCH 16/24] Add license in source code Change-Id: Ic2e19b7e5da25469bf9acb06d19eb7b459b6904f Signed-off-by: Jingtao Chen --- clickslider.cpp | 17 ++++++++++++++--- clickslider.h | 16 +++++++++++++--- filedialog.cpp | 14 ++++++++++++++ filedialog.h | 14 ++++++++++++++ ticker.cpp | 14 ++++++++++++++ ticker.h | 14 ++++++++++++++ 6 files changed, 83 insertions(+), 6 deletions(-) diff --git a/clickslider.cpp b/clickslider.cpp index 4662506..5229a20 100644 --- a/clickslider.cpp +++ b/clickslider.cpp @@ -1,6 +1,17 @@ -/********************** - ** clickslider.cpp - **********************/ +/**************************************************************************** +** +** Copyright (c) [2015] Qualcomm Technologies International, Ltd. +** All Rights Reserved. +** Qualcomm Technologies Inc. Confidential and Proprietary. +** Not a Contribution. Notifications and licenses are retained for attribution +** purposes only . Your use of this code is governed by the terms of your +** license agreement with Qualcomm Technologies International, Ltd.(“QTIL”). +** Except as may be granted by separate express written agreement, this file +** provides no rights under or license to any QTIL or its affiliates patents, +** trademarks, copyrights,or other intellectual property. +** +****************************************************************************/ + #include #include #include diff --git a/clickslider.h b/clickslider.h index e844b29..b4ea9b5 100644 --- a/clickslider.h +++ b/clickslider.h @@ -1,6 +1,16 @@ -/********************** - ** clickslider.h -**********************/ +/**************************************************************************** +** +** Copyright (c) [2015] Qualcomm Technologies International, Ltd. +** All Rights Reserved. +** Qualcomm Technologies Inc. Confidential and Proprietary. +** Not a Contribution. Notifications and licenses are retained for attribution +** purposes only . Your use of this code is governed by the terms of your +** license agreement with Qualcomm Technologies International, Ltd.(“QTIL”). +** Except as may be granted by separate express written agreement, this file +** provides no rights under or license to any QTIL or its affiliates patents, +** trademarks, copyrights,or other intellectual property. +** +****************************************************************************/ #ifndef CLICKSLIDER_H #define CLICKSLIDER_H diff --git a/filedialog.cpp b/filedialog.cpp index c3ba56d..3808bd3 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -1,3 +1,17 @@ +/**************************************************************************** +** +** Copyright (c) [2015] Qualcomm Technologies International, Ltd. +** All Rights Reserved. +** Qualcomm Technologies Inc. Confidential and Proprietary. +** Not a Contribution. Notifications and licenses are retained for attribution +** purposes only . Your use of this code is governed by the terms of your +** license agreement with Qualcomm Technologies International, Ltd.(“QTIL”). +** Except as may be granted by separate express written agreement, this file +** provides no rights under or license to any QTIL or its affiliates patents, +** trademarks, copyrights,or other intellectual property. +** +****************************************************************************/ + #include "filedialog.h" Dialog::Dialog(QWidget *parent, const QString &filename, int mode) diff --git a/filedialog.h b/filedialog.h index c8e1095..6c062e0 100644 --- a/filedialog.h +++ b/filedialog.h @@ -1,3 +1,17 @@ +/**************************************************************************** +** +** Copyright (c) [2015] Qualcomm Technologies International, Ltd. +** All Rights Reserved. +** Qualcomm Technologies Inc. Confidential and Proprietary. +** Not a Contribution. Notifications and licenses are retained for attribution +** purposes only . Your use of this code is governed by the terms of your +** license agreement with Qualcomm Technologies International, Ltd.(“QTIL”). +** Except as may be granted by separate express written agreement, this file +** provides no rights under or license to any QTIL or its affiliates patents, +** trademarks, copyrights,or other intellectual property. +** +****************************************************************************/ + #ifndef __FILE_DIALOG_H__ #define __FILE_DIALOG_H__ diff --git a/ticker.cpp b/ticker.cpp index 8aa8deb..63fc7ed 100644 --- a/ticker.cpp +++ b/ticker.cpp @@ -1,3 +1,17 @@ +/**************************************************************************** +** +** Copyright (c) [2015] Qualcomm Technologies International, Ltd. +** All Rights Reserved. +** Qualcomm Technologies Inc. Confidential and Proprietary. +** Not a Contribution. Notifications and licenses are retained for attribution +** purposes only . Your use of this code is governed by the terms of your +** license agreement with Qualcomm Technologies International, Ltd.(“QTIL”). +** Except as may be granted by separate express written agreement, this file +** provides no rights under or license to any QTIL or its affiliates patents, +** trademarks, copyrights,or other intellectual property. +** +****************************************************************************/ + #include #include "ticker.h" diff --git a/ticker.h b/ticker.h index 7ce7a77..9fc9e03 100644 --- a/ticker.h +++ b/ticker.h @@ -1,3 +1,17 @@ +/**************************************************************************** +** +** Copyright (c) [2015] Qualcomm Technologies International, Ltd. +** All Rights Reserved. +** Qualcomm Technologies Inc. Confidential and Proprietary. +** Not a Contribution. Notifications and licenses are retained for attribution +** purposes only . Your use of this code is governed by the terms of your +** license agreement with Qualcomm Technologies International, Ltd.(“QTIL”). +** Except as may be granted by separate express written agreement, this file +** provides no rights under or license to any QTIL or its affiliates patents, +** trademarks, copyrights,or other intellectual property. +** +****************************************************************************/ + #ifndef TICKER_H #define TICKER_H #include From 1b76093c05eb84bc1654f10a0335703a460eb51f Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 31 Aug 2015 17:29:41 +0800 Subject: [PATCH 17/24] APBU-10875 [A7DA][MM]CSRPlayer don't support some container formats in spec of audio Add formats in default container filter Change-Id: Ib192f8da201ad62129d41c4146c67cb707033d4f Signed-off-by: Jingtao Chen --- clickslider.cpp | 20 +------------------- filedialog.cpp | 6 +++--- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/clickslider.cpp b/clickslider.cpp index 5229a20..102f918 100644 --- a/clickslider.cpp +++ b/clickslider.cpp @@ -22,24 +22,6 @@ ClickSlider::ClickSlider( QWidget * parent) :QSlider(parent) } -/* - void ClickSlider::mousePressEvent ( QMouseEvent * mouseEvent ) - { - if(mouseEvent->button()==Qt::LeftButton && isEnabled()) - { - int duration = maximum() - minimum(); - int pos = minimum() + duration * ((double)mouseEvent->x() / width()); - qDebug() << Q_FUNC_INFO << " pos" << pos; - if(pos != sliderPosition()) - { - setValue(pos); - } -// else ok. -emit(sliderMoved(pos)); -} -} - */ - void ClickSlider::mousePressEvent ( QMouseEvent * event ) { QStyleOptionSlider opt; @@ -58,7 +40,7 @@ void ClickSlider::mousePressEvent ( QMouseEvent * event ) if (invertedAppearance() == true) { - setValue( maximum() - newVal ); + setValue(maximum() - newVal); pos = maximum() - newVal; } else diff --git a/filedialog.cpp b/filedialog.cpp index 3808bd3..40d5d25 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -23,9 +23,9 @@ Dialog::Dialog(QWidget *parent, const QString &filename, int mode) m_filedlg->resize(800, 480); QStringList filters; - filters << "Supported files (*.3gp *.avi *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp4 *.mpg *.ts *.wmv *.mp3 *.ogg)" - << "Video files (*.3gp *.avi *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp4 *.mpg *.ts *.wmv)" - << "Audio files (*.mp3 *.ogg)" + filters << "Supported files (*.3gp *.ape *.avi *.flac *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp2 *.mp4 *.mpg *.ts *.wav *.wmv *.mp3 *.ogg)" + //<< "Video files (*.3gp *.ape *.avi *.flac *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp2 *.mp4 *.mpg *.ts *.wmv)" + //<< "Audio files (*.mp3 *.ogg *.wav)" << "Any files (*)"; m_filedlg->setNameFilters(filters); From a9d0a90512204297a4e321e14a1bcd5e285a0847 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Tue, 1 Sep 2015 15:28:42 +0800 Subject: [PATCH 18/24] APBU-10851 [A7DA][MM]CSRPlayer change to stop status after seek via drag progress bar Change-Id: Iabed13bd008116877fea9ae14ff6a3f9f8c78ae0 Signed-off-by: Jingtao Chen --- clickslider.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clickslider.cpp b/clickslider.cpp index 102f918..f9ac70d 100644 --- a/clickslider.cpp +++ b/clickslider.cpp @@ -26,9 +26,11 @@ void ClickSlider::mousePressEvent ( QMouseEvent * event ) { QStyleOptionSlider opt; initStyleOption(&opt); - int pos; + int pos = 0; QRect sr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); + pos = value(); + if (event->button() == Qt::LeftButton && sr.contains(event->pos()) == false) { From d326c15aadb1656064bdd09dab7c9147e42cd2c5 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Fri, 25 Sep 2015 16:10:48 +0800 Subject: [PATCH 19/24] Add asf, m4a and vob containers in default filter Refer to Multimedia Solution for Linux User Guide Change-Id: Ifa1286aee0e59061cba014c7514c7a2d2e2f6379 Signed-off-by: Jingtao Chen --- filedialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/filedialog.cpp b/filedialog.cpp index 40d5d25..184d848 100644 --- a/filedialog.cpp +++ b/filedialog.cpp @@ -23,7 +23,7 @@ Dialog::Dialog(QWidget *parent, const QString &filename, int mode) m_filedlg->resize(800, 480); QStringList filters; - filters << "Supported files (*.3gp *.ape *.avi *.flac *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp2 *.mp4 *.mpg *.ts *.wav *.wmv *.mp3 *.ogg)" + filters << "Supported files (*.3gp *.ape *.asf *.avi *.flac *.flv *.h264 *.m4a *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp2 *.mp4 *.mpg *.ts *.vob *.wav *.wmv *.mp3 *.ogg)" //<< "Video files (*.3gp *.ape *.avi *.flac *.flv *.h264 *.m4v *.mkv *.mov *.mpeg *.mpeg2 *.mpeg4 *.mp2 *.mp4 *.mpg *.ts *.wmv)" //<< "Audio files (*.mp3 *.ogg *.wav)" << "Any files (*)"; From b770f76d3e952fea3cf1548601ba0fcd6091444c Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Tue, 27 Oct 2015 15:40:30 +0800 Subject: [PATCH 20/24] Disable marquee and add filelist, as System test's requirement Change-Id: Ib738ba696dd3abc06ff5f10b19ea422f51245dec Signed-off-by: Jingtao Chen --- csrplayer.cpp | 15 +++++++++------ csrplayer.h | 2 +- csrplayer.ui | 7 +------ 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/csrplayer.cpp b/csrplayer.cpp index 3db6cd2..7a8dab6 100644 --- a/csrplayer.cpp +++ b/csrplayer.cpp @@ -290,20 +290,23 @@ void csrplayer::jump(const QModelIndex &index) void csrplayer::playlistPositionChanged(int currentItem) { + QUrl fileUrl = playlistModel->playlist()->currentMedia().canonicalUrl(); #ifdef ENABLE_PLAYLISTVIEW playlistView->setCurrentIndex(playlistModel->index(currentItem, 0)); -#endif - QUrl fileUrl = playlistModel->playlist()->currentMedia().canonicalUrl(); -#ifdef DEBUG_OPEN - qDebug() << fileUrl.fileName(); - qDebug() << fileUrl.fileName().length(); -#endif + ui->label->setText(fileUrl.fileName()); +#else QString dispName = fileUrl.fileName(); if (dispName.length() <= 32) dispName += QString(2*(36-dispName.length()), ' '); else dispName += " "; ui->label->setText(dispName); +#endif + +#ifdef DEBUG_OPEN + qDebug() << fileUrl.fileName(); + qDebug() << fileUrl.fileName().length(); +#endif } void csrplayer::seek(int seconds) diff --git a/csrplayer.h b/csrplayer.h index bc7ac71..f0c5c55 100644 --- a/csrplayer.h +++ b/csrplayer.h @@ -23,7 +23,7 @@ class csrplayer; } QT_END_NAMESPACE -//#define ENABLE_PLAYLISTVIEW +#define ENABLE_PLAYLISTVIEW #define USE_V4L2sink #define DEFAULE_W 1920 #define DEFAULT_H 1080 diff --git a/csrplayer.ui b/csrplayer.ui index bfc3482..57d4299 100644 --- a/csrplayer.ui +++ b/csrplayer.ui @@ -188,7 +188,7 @@ QScrollBar::down-arrow:vertical { - + 0 @@ -312,11 +312,6 @@ QScrollBar::down-arrow:vertical { QSlider
clickslider.h
- - Ticker - QLabel -
ticker.h
-
From 2d07bc9095e6d85adb73b964d2a03c971f97bea8 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Wed, 4 Nov 2015 16:20:15 +0800 Subject: [PATCH 21/24] For demo only Change-Id: Ic27e23ae3e130b0abd86e6f2e32bb6b52ca7fef6 Signed-off-by: Jingtao Chen --- csrplayer.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/csrplayer.cpp b/csrplayer.cpp index 7a8dab6..ea30c5c 100644 --- a/csrplayer.cpp +++ b/csrplayer.cpp @@ -124,7 +124,7 @@ csrplayer::~csrplayer() delete player; delete playlist; delete coverLabel; - delete playlistModel; + delete playlistModel; } void csrplayer::open() @@ -134,16 +134,56 @@ void csrplayer::open() qDebug() << ui->videoWidget->geometry(); #endif -#if 0 +#if 1 //QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open Files")); //addToPlaylist(fileNames); QFileDialog *fileDialog = new QFileDialog(this); + fileDialog->setOption(QFileDialog::DontUseNativeDialog,true); + + QLabel *fileTypeLabel = fileDialog->findChild("fileTypeLabel"); + //qDebug() << "Label" << fileTypeLabel->text(); + fileTypeLabel->hide(); + + QLabel *fileNameLabel = fileDialog->findChild("fileNameLabel"); + //qDebug() << "Label" << fileNameLabel->text(); + fileNameLabel->hide(); + + QLabel *lookInLabel = fileDialog->findChild("lookInLabel"); + //qDebug() << "Label" << lookInLabel->text(); + lookInLabel->hide(); + + QToolButton *backButton = fileDialog->findChild("backButton"); + backButton->hide(); + + QToolButton *detailModeButton = fileDialog->findChild("detailModeButton"); + detailModeButton->hide(); + + QToolButton *forwardButton = fileDialog->findChild("forwardButton"); + forwardButton->hide(); + + QToolButton *listModeButton = fileDialog->findChild("listModeButton"); + listModeButton->hide(); + + QToolButton *newFolderButton = fileDialog->findChild("newFolderButton"); + newFolderButton->hide(); + + QToolButton *toParentButton = fileDialog->findChild("toParentButton"); + toParentButton->hide(); + + QDialogButtonBox *buttonBox = fileDialog->findChild("buttonBox"); + //buttonBox->hide(); + buttonBox->setOrientation(Qt::Horizontal); + + QComboBox *fileTypeCombo = fileDialog->findChild("fileTypeCombo"); + fileTypeCombo->hide(); + fileDialog->setWindowTitle(tr("Open File")); - fileDialog->setDirectory("/media/mmcblk0p6/"); + //fileDialog->setDirectory("/media/mmcblk0p6/"); + fileDialog->setDirectory("/home/jc46/Videos/"); fileDialog->setStyleSheet ("font: 32pt \"Courier\";"); - fileDialog->setWindowFlags(Qt::Window); - fileDialog->showFullScreen(); - fileDialog->setViewMode(QFileDialog::List); + fileDialog->setWindowFlags(Qt::Window); + fileDialog->showFullScreen(); + fileDialog->setViewMode(QFileDialog::List); if(fileDialog->exec() == QDialog::Accepted) { QStringList fileNames = fileDialog->selectedFiles(); addToPlaylist(fileNames); @@ -164,7 +204,7 @@ void csrplayer::open() #ifdef USE_V4L2sink #ifdef ENABLE_PLAYLISTVIEW - player->setOverlay(ui->videoWidget->geometry().y(), ui->videoWidget->geometry().x(), ui->videoWidget->geometry().width(), ui->videoWidget->geometry().height()); + //player->setOverlay(ui->videoWidget->geometry().y(), ui->videoWidget->geometry().x(), ui->videoWidget->geometry().width(), ui->videoWidget->geometry().height()); #else int x, y, w, h; From 18e2d336cc4514d67cd0dbc008cdf1fd16d263f5 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Fri, 6 Nov 2015 12:37:38 +0800 Subject: [PATCH 22/24] New function and feature 1. New icons 2. Mode button, 5 modes 3. Disable file list and file name label Change-Id: I7218b2d7f58b08088a476deeea0f745e746509b6 Signed-off-by: Jingtao Chen --- csrplayer.cpp | 50 +++++++++++++++++++++--- csrplayer.h | 4 +- csrplayer.qrc | 16 ++++++++ playercontrols.cpp | 75 ++++++++++++++++++++++++++++++------ playercontrols.h | 7 +++- resources/LICENSE | 4 ++ resources/ic_close.png | Bin 0 -> 425 bytes resources/ic_loop.png | Bin 0 -> 347 bytes resources/ic_mute.png | Bin 0 -> 346 bytes resources/ic_mute1.png | Bin 0 -> 439 bytes resources/ic_mute2.png | Bin 0 -> 582 bytes resources/ic_mute3.png | Bin 0 -> 780 bytes resources/ic_next.png | Bin 0 -> 186 bytes resources/ic_open.png | Bin 0 -> 478 bytes resources/ic_pause.png | Bin 0 -> 142 bytes resources/ic_play.png | Bin 0 -> 520 bytes resources/ic_previous.png | Bin 0 -> 170 bytes resources/ic_random.png | Bin 0 -> 270 bytes resources/ic_sequential.png | Bin 0 -> 173 bytes resources/ic_single.png | Bin 0 -> 174 bytes resources/ic_singleloop.png | Bin 0 -> 541 bytes resources/ic_stop.png | Bin 0 -> 144 bytes 22 files changed, 137 insertions(+), 19 deletions(-) create mode 100644 resources/LICENSE create mode 100755 resources/ic_close.png create mode 100755 resources/ic_loop.png create mode 100755 resources/ic_mute.png create mode 100755 resources/ic_mute1.png create mode 100755 resources/ic_mute2.png create mode 100755 resources/ic_mute3.png create mode 100755 resources/ic_next.png create mode 100755 resources/ic_open.png create mode 100755 resources/ic_pause.png create mode 100755 resources/ic_play.png create mode 100755 resources/ic_previous.png create mode 100755 resources/ic_random.png create mode 100755 resources/ic_sequential.png create mode 100755 resources/ic_single.png create mode 100755 resources/ic_singleloop.png create mode 100755 resources/ic_stop.png diff --git a/csrplayer.cpp b/csrplayer.cpp index ea30c5c..edc384d 100644 --- a/csrplayer.cpp +++ b/csrplayer.cpp @@ -28,6 +28,7 @@ csrplayer::csrplayer(QWidget *parent) player = new QMediaPlayer(this); // owned by PlaylistModel playlist = new QMediaPlaylist(); + playlist->setPlaybackMode(QMediaPlaylist::CurrentItemOnce); player->setPlaylist(playlist); //! [create-objs] @@ -69,12 +70,12 @@ csrplayer::csrplayer(QWidget *parent) connect(ui->slider, SIGNAL(sliderMoved(int)), this, SLOT(seek(int))); - ui->openButton->setIcon(style()->standardIcon(QStyle::SP_ComputerIcon)); + ui->openButton->setIcon(QIcon(":/icons/resources/ic_open.png")); ui->openButton->setIconSize(QSize(40, 40)); ui->openButton->setEnabled(true); connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(setOpenEnabled(QMediaPlayer::State))); - ui->closeButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton)); + ui->closeButton->setIcon(QIcon(":/icons/resources/ic_close.png")); ui->closeButton->setIconSize(QSize(40, 40)); connect(ui->openButton, SIGNAL(clicked()), this, SLOT(open())); @@ -89,6 +90,7 @@ csrplayer::csrplayer(QWidget *parent) connect(ui->controls, SIGNAL(previous()), this, SLOT(previousClicked())); connect(ui->controls, SIGNAL(changeVolume(int)), player, SLOT(setVolume(int))); connect(ui->controls, SIGNAL(changeMuting(bool)), player, SLOT(setMuted(bool))); + connect(ui->controls, SIGNAL(changeMode(int)), this, SLOT(setMode(int))); connect(ui->controls, SIGNAL(stop()), ui->videoWidget, SLOT(update())); @@ -96,6 +98,7 @@ csrplayer::csrplayer(QWidget *parent) ui->controls, SLOT(setState(QMediaPlayer::State))); connect(player, SIGNAL(volumeChanged(int)), ui->controls, SLOT(setVolume(int))); connect(player, SIGNAL(mutedChanged(bool)), ui->controls, SLOT(setMuted(bool))); + connect(this, SIGNAL(playModeChanged(int)), ui->controls, SLOT(setMode(int))); if (!player->isAvailable()) { QMessageBox::warning(this, tr("Service not available"), @@ -137,19 +140,17 @@ void csrplayer::open() #if 1 //QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open Files")); //addToPlaylist(fileNames); + QFileDialog *fileDialog = new QFileDialog(this); fileDialog->setOption(QFileDialog::DontUseNativeDialog,true); QLabel *fileTypeLabel = fileDialog->findChild("fileTypeLabel"); - //qDebug() << "Label" << fileTypeLabel->text(); fileTypeLabel->hide(); QLabel *fileNameLabel = fileDialog->findChild("fileNameLabel"); - //qDebug() << "Label" << fileNameLabel->text(); fileNameLabel->hide(); QLabel *lookInLabel = fileDialog->findChild("lookInLabel"); - //qDebug() << "Label" << lookInLabel->text(); lookInLabel->hide(); QToolButton *backButton = fileDialog->findChild("backButton"); @@ -204,7 +205,7 @@ void csrplayer::open() #ifdef USE_V4L2sink #ifdef ENABLE_PLAYLISTVIEW - //player->setOverlay(ui->videoWidget->geometry().y(), ui->videoWidget->geometry().x(), ui->videoWidget->geometry().width(), ui->videoWidget->geometry().height()); + player->setOverlay(ui->videoWidget->geometry().y(), ui->videoWidget->geometry().x(), ui->videoWidget->geometry().width(), ui->videoWidget->geometry().height()); #else int x, y, w, h; @@ -320,6 +321,41 @@ void csrplayer::previousClicked() player->setPosition(0); } +void csrplayer::setMode(int mode) +{ +#ifdef DEBUG_OPEN + qDebug() << "Set mode" << mode; + qDebug() << "Current play mode is " << playlist->playbackMode(); +#endif + + switch (mode) { + case 0: + playlist->setPlaybackMode(QMediaPlaylist::CurrentItemOnce); + emit playModeChanged(0); + break; + case 1: + playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop); + emit playModeChanged(1); + break; + case 2: + playlist->setPlaybackMode(QMediaPlaylist::Sequential); + emit playModeChanged(2); + break; + case 3: + playlist->setPlaybackMode(QMediaPlaylist::Loop); + emit playModeChanged(3); + break; + case 4: + playlist->setPlaybackMode(QMediaPlaylist::Random); + emit playModeChanged(4); + break; + default: + playlist->setPlaybackMode(QMediaPlaylist::CurrentItemOnce); + emit playModeChanged(0); + break; + } +} + void csrplayer::jump(const QModelIndex &index) { if (index.isValid()) { @@ -331,6 +367,7 @@ void csrplayer::jump(const QModelIndex &index) void csrplayer::playlistPositionChanged(int currentItem) { QUrl fileUrl = playlistModel->playlist()->currentMedia().canonicalUrl(); +#if 0 #ifdef ENABLE_PLAYLISTVIEW playlistView->setCurrentIndex(playlistModel->index(currentItem, 0)); ui->label->setText(fileUrl.fileName()); @@ -342,6 +379,7 @@ void csrplayer::playlistPositionChanged(int currentItem) ui->label->setText(dispName); #endif +#endif #ifdef DEBUG_OPEN qDebug() << fileUrl.fileName(); diff --git a/csrplayer.h b/csrplayer.h index f0c5c55..b052444 100644 --- a/csrplayer.h +++ b/csrplayer.h @@ -23,7 +23,7 @@ class csrplayer; } QT_END_NAMESPACE -#define ENABLE_PLAYLISTVIEW +//#define ENABLE_PLAYLISTVIEW #define USE_V4L2sink #define DEFAULE_W 1920 #define DEFAULT_H 1080 @@ -37,6 +37,7 @@ class csrplayer : public QMainWindow ~csrplayer(); signals: + void playModeChanged(int mode); private slots: void open(); @@ -46,6 +47,7 @@ private slots: void metaDataChanged(); void previousClicked(); + void setMode(int mode); void setOpenEnabled(QMediaPlayer::State state); void seek(int seconds); diff --git a/csrplayer.qrc b/csrplayer.qrc index 53640cf..e2260b1 100644 --- a/csrplayer.qrc +++ b/csrplayer.qrc @@ -1,5 +1,21 @@ resources/ic_slider.png + resources/ic_close.png + resources/ic_loop.png + resources/ic_mute.png + resources/ic_mute1.png + resources/ic_mute2.png + resources/ic_mute3.png + resources/ic_next.png + resources/ic_open.png + resources/ic_pause.png + resources/ic_play.png + resources/ic_previous.png + resources/ic_random.png + resources/ic_single.png + resources/ic_singleloop.png + resources/ic_stop.png + resources/ic_sequential.png diff --git a/playercontrols.cpp b/playercontrols.cpp index 75f566f..dbf7ce7 100644 --- a/playercontrols.cpp +++ b/playercontrols.cpp @@ -59,20 +59,22 @@ PlayerControls::PlayerControls(QWidget *parent) , playerMuted(false) , playButton(0) , stopButton(0) + , modeButton(0) , nextButton(0) , previousButton(0) , muteButton(0) , volumeSlider(0) + , playMode(0) { playButton = new QToolButton(this); - playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); + playButton->setIcon(QIcon(":/icons/resources/ic_play.png")); playButton->setIconSize(QSize(ICON_SIZE_DEFAULT, ICON_SIZE_DEFAULT)); playButton->setMinimumSize(QSize(SIZE_DEFAULT, SIZE_DEFAULT)); connect(playButton, SIGNAL(clicked()), this, SLOT(playClicked())); stopButton = new QToolButton(this); - stopButton->setIcon(style()->standardIcon(QStyle::SP_MediaStop)); + stopButton->setIcon(QIcon(":/icons/resources/ic_stop.png")); stopButton->setIconSize(QSize(ICON_SIZE_DEFAULT, ICON_SIZE_DEFAULT)); stopButton->setEnabled(false); stopButton->setMinimumSize(QSize(SIZE_DEFAULT, SIZE_DEFAULT)); @@ -80,26 +82,34 @@ PlayerControls::PlayerControls(QWidget *parent) connect(stopButton, SIGNAL(clicked()), this, SIGNAL(stop())); nextButton = new QToolButton(this); - nextButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipForward)); + nextButton->setIcon(QIcon(":/icons/resources/ic_next.png")); nextButton->setIconSize(QSize(ICON_SIZE_DEFAULT, ICON_SIZE_DEFAULT)); nextButton->setMinimumSize(QSize(SIZE_DEFAULT, SIZE_DEFAULT)); connect(nextButton, SIGNAL(clicked()), this, SIGNAL(next())); previousButton = new QToolButton(this); - previousButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipBackward)); + previousButton->setIcon(QIcon(":/icons/resources/ic_previous.png")); previousButton->setIconSize(QSize(ICON_SIZE_DEFAULT, ICON_SIZE_DEFAULT)); previousButton->setMinimumSize(QSize(SIZE_DEFAULT, SIZE_DEFAULT)); connect(previousButton, SIGNAL(clicked()), this, SIGNAL(previous())); muteButton = new QToolButton(this); - muteButton->setIcon(style()->standardIcon(QStyle::SP_MediaVolume)); + muteButton->setIcon(QIcon(":/icons/resources/ic_mute2.png")); muteButton->setIconSize(QSize(ICON_SIZE_DEFAULT, ICON_SIZE_DEFAULT)); muteButton->setMinimumSize(QSize(SIZE_DEFAULT, SIZE_DEFAULT)); connect(muteButton, SIGNAL(clicked()), this, SLOT(muteClicked())); + modeButton = new QToolButton(this); + modeButton->setIcon(QIcon(":/icons/resources/ic_single.png")); + modeButton->setIconSize(QSize(ICON_SIZE_DEFAULT, ICON_SIZE_DEFAULT)); + modeButton->setMinimumSize(QSize(SIZE_DEFAULT, SIZE_DEFAULT)); + modeButton->setEnabled(false); + + connect(modeButton, SIGNAL(clicked()), this, SLOT(modeClicked())); + volumeSlider = new ClickSlider(this); volumeSlider->setRange(0, 100); volumeSlider->setOrientation(Qt::Horizontal); @@ -113,6 +123,7 @@ PlayerControls::PlayerControls(QWidget *parent) QBoxLayout *layout = new QHBoxLayout; layout->setMargin(0); + layout->addWidget(modeButton); layout->addWidget(stopButton); layout->addWidget(previousButton); layout->addWidget(playButton); @@ -141,15 +152,18 @@ void PlayerControls::setState(QMediaPlayer::State state) switch (state) { case QMediaPlayer::StoppedState: stopButton->setEnabled(false); - playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); + modeButton->setEnabled(false); + playButton->setIcon(QIcon(":/icons/resources/ic_play.png")); break; case QMediaPlayer::PlayingState: stopButton->setEnabled(true); - playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause)); + modeButton->setEnabled(true); + playButton->setIcon(QIcon(":/icons/resources/ic_pause.png")); break; case QMediaPlayer::PausedState: stopButton->setEnabled(true); - playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); + modeButton->setEnabled(true); + playButton->setIcon(QIcon(":/icons/resources/ic_play.png")); break; } } @@ -182,9 +196,35 @@ void PlayerControls::setMuted(bool muted) if (muted != playerMuted) { playerMuted = muted; - muteButton->setIcon(style()->standardIcon(muted - ? QStyle::SP_MediaVolumeMuted - : QStyle::SP_MediaVolume)); + muteButton->setIcon(muted + ? QIcon(":/icons/resources/ic_mute.png") + : QIcon(":/icons/resources/ic_mute2.png")); + } +} + +void PlayerControls::setMode(int mode) +{ +#ifdef DEBUG_OPEN + qDebug() << "Set mode in controls " << mode; +#endif + switch (mode) { + case 0: + modeButton->setIcon(QIcon(":/icons/resources/ic_single.png")); + break; + case 1: + modeButton->setIcon(QIcon(":/icons/resources/ic_singleloop.png")); + break; + case 2: + modeButton->setIcon(QIcon(":/icons/resources/ic_sequential.png")); + break; + case 3: + modeButton->setIcon(QIcon(":/icons/resources/ic_loop.png")); + break; + case 4: + modeButton->setIcon(QIcon(":/icons/resources/ic_random.png")); + break; + default: + break; } } @@ -211,3 +251,16 @@ void PlayerControls::muteClicked() #endif emit changeMuting(!playerMuted); } + +void PlayerControls::modeClicked() +{ +#ifdef DEBUG_OPEN + qDebug() << "Mode button pressed"; + qDebug() << "current playMode is " << playMode; +#endif + playMode++; +#ifdef DEBUG_OPEN + qDebug() << "new playMode is " << playMode; +#endif + emit changeMode(playMode % 5); +} diff --git a/playercontrols.h b/playercontrols.h index cd00398..bd85f57 100644 --- a/playercontrols.h +++ b/playercontrols.h @@ -45,7 +45,7 @@ #include #include "clickslider.h" -#define DEBUG_OPEN +//#define DEBUG_OPEN QT_BEGIN_NAMESPACE class QAbstractButton; @@ -68,6 +68,7 @@ public slots: void setState(QMediaPlayer::State state); void setVolume(int volume); void setMuted(bool muted); + void setMode(int mode); signals: void play(); @@ -77,10 +78,12 @@ public slots: void previous(); void changeVolume(int volume); void changeMuting(bool muting); + void changeMode(int playMode); private slots: void playClicked(); void muteClicked(); + void modeClicked(); private: QMediaPlayer::State playerState; @@ -90,7 +93,9 @@ private slots: QAbstractButton *nextButton; QAbstractButton *previousButton; QAbstractButton *muteButton; + QAbstractButton *modeButton; ClickSlider *volumeSlider; + int playMode; }; #endif // PLAYERCONTROLS_H diff --git a/resources/LICENSE b/resources/LICENSE new file mode 100644 index 0000000..33f925b --- /dev/null +++ b/resources/LICENSE @@ -0,0 +1,4 @@ +http://www.icojam.com/blog/?p=668 +http://www.easyicon.net/1137025-player-icons_icon.html + +License: These icons are free to use in any kind of commercial or non-commercial project unlimited times. diff --git a/resources/ic_close.png b/resources/ic_close.png new file mode 100755 index 0000000000000000000000000000000000000000..e76fb7d1335ab726def0e88c60e5a825f42391fa GIT binary patch literal 425 zcmV;a0apHrP)M1M~taniK2tEkv0lYw=+WL?cYRztUX5&O5 zAM~Z!?Eac|XXrwkdb0(b0nfk;m>axiz>8bA7sB;`dteCc09hTMI3k%_?+SPzfII<4 zHYRU|z^U)z6R>Azsmw0r*Ik(@ux@9mOb2-PU7Q<2Liy%cYf2HD7ML0-@EjzKy4A0 zAd`TXz(JhpM+)E~V%)D4>blbYX{t5<3OEHenu54=fRDvD7J;vnr%X*|+c_$81dOpe zc3VycTm#3x0h_=ra0BcET^ko&x84}IqdY_n4jurHzyzBU)`?qhfZaoB^LO$IH?E%u TO^&tj00000NkvXXu0mjf2bZ?} literal 0 HcmV?d00001 diff --git a/resources/ic_loop.png b/resources/ic_loop.png new file mode 100755 index 0000000000000000000000000000000000000000..e0873ad6dbc3a6af44faf2dbb119623267894845 GIT binary patch literal 347 zcmV-h0i^zkP)rMZ%_kL%1Fe?lmV5{4@d+NS}-Dqok)@KWA;HJq4}ge?e6@a zwSEm4cTN_t=N)(iwuxPmQ2-}k{Ldbp6qsZh3QV${0kFb7trc+T87JWB*ZxJzx=L!U zBqN9^a0E(VMEC1xB61UD?M!Nxk}>s_dj&p$T(QrxU1_UR_=!-?zq+L za7WNZDmf&}>#J0e_MYn_lT0<2p7{^b$!Rmg7bl`M^WiToLNLKtOfVJ`jKu_FF~L}x z1kZ#u^r2*u*+`S1_aAN~17P1a*(A6D<~P&1=1nry41q6nJxMG%a3J8sX6U;*U+P`m tEVR%wu7TR2>x;FclA3GDFbw0a`38T@SDCCZ{X+l%002ovPDHLkV1oJ*mlXg2 literal 0 HcmV?d00001 diff --git a/resources/ic_mute.png b/resources/ic_mute.png new file mode 100755 index 0000000000000000000000000000000000000000..097d7b7c65a9b418a2d8d0fdb9e4a37e2f8dcd07 GIT binary patch literal 346 zcmV-g0j2(lP)}=T4xrcRL7?^twhx0OD_b{}y{2#V+3yfnEpSdNfSi>{Ea*K>&1y9%)P;eO!I4ahm z1Q&3R(^4#qU?9>-RPa9kEJoS+4tfzX)m6y z$Y&RvK@T^APBWw#@ERAAaG4N-q+5K4^PzYcLDEdv$8jkZN{}=g4sckk!wJGF90YyF8C7{7%6z4 z6`aJp{11s@34a=cHD7gM=N6F_T){aWu;J};=$JdqbQqgA#Z?^PP?scQ)=^Px1;^No z=)3J8v9VQQx`!hAZ#zhA>~Ac*r=w315;6Q0YIj@85*!mUL=?T6;?ELZgB2mwbY&Mm zV!FfFJi!TF&V%1^FTavpd4DBY)}u<&ikff+94>gD6`azeTHJ~O?BJwe;L=YsgsD2f zuD9tb2|+@tI2F!@S&|VXoCz=SBh!|YAYn(>vDSD_P7uD}Mo3Rd3KA0gorDEp4$oyv hv}3Vsfj)gc46i-ER^vm+&G-NS002ovPDHLkV1f_BzRCaq literal 0 HcmV?d00001 diff --git a/resources/ic_mute2.png b/resources/ic_mute2.png new file mode 100755 index 0000000000000000000000000000000000000000..638103e04e9e0a8e7f199d1bff1aec76c398bccc GIT binary patch literal 582 zcmV-M0=fN(P)qFZDkS1hg#<`$8<7M7G!cVVTxM0xoOEJdIh8a380lSS)x3UxlH+DkM-LFS#+?!lgt! zZHQOn2%h2rHuYAGQQW}w%I}zFb8rL)@xJoi6AHL2^xjy?^LCPCt&miEy6E+Xv$%(1 zgXghe37ggTa`o8ZKzc2>mT( zOh)DJ(wD0R=!ezvNVm*9-BH@}Wz8`RIsI`R-K;(~C1h}k8>TKEO)GK!=n z$$DL02M^%0^qu6HaLj5)@Tjnp%Jffm1!21Z{%@wr?tTjl8S-E98#8Nj UpZ}sZ6951J07*qoM6N<$g0t-w^#A|> literal 0 HcmV?d00001 diff --git a/resources/ic_mute3.png b/resources/ic_mute3.png new file mode 100755 index 0000000000000000000000000000000000000000..0dcfa0172504c09efb0a8ac09126f05b835464f2 GIT binary patch literal 780 zcmV+n1M~ceP)a4)xk6q&00+;3=i#w}_Jg>Bq4rCo4`*>OWlIY@fWL7G zA7VYG<-F&`TAelR6gLxJVOjZLyla!HS$Z>+w7K+aYc`KC4~RO9)Kp5ewvx z+HaQkaH1UoN5tsO%qc6gNS262wJ~F_h*8WN;nExs^RBN!d0OByyr6!Rld`KA$k=z` zRFR0+F<$E|dz}|6w-IT9JMcX&i#eEOJI-Wmb1;Fq%>-V-%4QWx3QSlgM*V|~y+?fT zOBwqp-n`pR%F?K91?R9iW8aJSGq&A1wo;vxp;_CtV#Ly{67DC>t6~wh)JYLVZO8F! z>bVy;Gj*!?F|Tn?%d*NdE@F4Wzv|u94Gp}+R0w=ZBnSz;xRt5XCq&lKX@P4+Z2mQ6 zTdICuE)<@mj!p`!;FxgqX@=DM!YY1h_Oc1_Wv!66NUGZG2R93md68sHc>6K}-w~1I zlJb${aa>mrNt$s;j7Ft|zyZx;@n2eu#m$(8kMV`pvzh1I*&?KQv}V7jY=#(-QGBXC zLoUh(w}>oeTTc05d~&bi5-K1f{`M?MMm@h>0*S>khCK}g?sI2P zavU4v?@3naz@8*w0WOH#FDtNLUl{-`+J8WYZU7|+}fQC+$`G~5POVxmK|z`!s70000< KMNUMnLSTYo+2hROT+C$&*&bTp;r(KbPR*1tDnm{r-UW|d;Ce+ literal 0 HcmV?d00001 diff --git a/resources/ic_open.png b/resources/ic_open.png new file mode 100755 index 0000000000000000000000000000000000000000..8b59bb7a34e5ef3e9982456211af2ef9e3ed5703 GIT binary patch literal 478 zcmV<40U`d0P)xj#P4LX?N?}r{FTu(pAU1+nSy%`vXre^L zG=Zp_VmKJ)c5g42oi!Z$z`)(i?#;8m+5O(!(a~`-xR38Bj@Z89RvUubxID&rH}Jk; zmr{x`&pU%(O^T#U=lt*{n0Uc`{B!h&D{kL#w{D_w@4+Tm#;3Z2{-@y3`6vD!%+5pz zt_op%oF}!eiC!OIJ(Z}sNoVl`3nN@eQ=G%^{+qfAuHXgU!;#&6!qk8Xs|~1*v$>&sZ!QOa-su zO>U!vn|PgeRxR-w9%t1Vq=${F!MK8_h3uQpEEF?~pO{Mr$}0E(Tf&d1w&>^WZq)&C z1-FE-Y?Io&?F*jA4o>AZiWr)==@R$wO!&fXi;?oSz!W}UsRgM%Bj;^_t9YAPDCN4E zyp5N*hs~@ygFG@~-WEdkoy}7C UB*@*RKmY&$07*qoM6N<$f|Ar*7po;%2Sz<}Yf!{j|y zh0|Z>z2xaV(6Z>aw07YA*n73xX6@cs8J4V&iU*d~Jh*cs#&g~yzyIHuQtzmdKI;Vst0J)qq9RL6T literal 0 HcmV?d00001 diff --git a/resources/ic_play.png b/resources/ic_play.png new file mode 100755 index 0000000000000000000000000000000000000000..14a65541aec2d7840d7b60e41a4a8f90601eea4a GIT binary patch literal 520 zcmV+j0{8uiP)cD^jts|`;OW)z#*ml34{(l;*zHDV zmVD|s!!uFy&<50;7AzRx)759MJ)Kz=2@>^=M9m`|)vOXM*c12VXHm9QmJuZC9g3RA zTCBOOV8O0>1$~V0 z1;a$wL^?sD<|B;pQuP+KG${oO`Z&c`32HVWNYs2NYQ9pVW>bO%eVpJM_Sd;U(}G03 z5&q!%ydQMAG7ZGDGQ%DGTJ-`=6)bP*wf4#;1dGl5OoGikrC=sz^F++*B)3*7!P^@8 zcUV_26Ek=sX7W~TqbceL4#n&pY48ojI)XhhYsX^tCa+dzRl%W{v8P&kud}RRPt4S@ zn6ZskE3=H?zL=#aI(QpaCAf{(qS^y3Rx7he@IX}ifSaw^%wbw^8*fCl`#P#trYv}X z?|6?J-RR7ci)wF0wR<+8TA3U_@Xmr|vTH7J*M?OqbFFKE|AK!ouw??T$ORGr0000< KMNUMnLSTaWGW5Uz literal 0 HcmV?d00001 diff --git a/resources/ic_previous.png b/resources/ic_previous.png new file mode 100755 index 0000000000000000000000000000000000000000..12c24f17e12d1639b412577a436dc1cbefab4201 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEg`O^sAr*7po;%3d;vm3qux|Eb z?re`oskgvG^!@|-S7dN4Z_Uj239R+6?UP}y;pQ4wCq~0Wx*}BSUF*#|L>gKO%W;>OQx)x zHdI?biDp~1q1yTpIcH8A8m&)xZsmLsLZRnY33h#_E{ef_Wg?%cXm-?%j Y{w7;XxGB3m1=`Qx>FVdQ&MBb@07TqK_5c6? literal 0 HcmV?d00001 diff --git a/resources/ic_single.png b/resources/ic_single.png new file mode 100755 index 0000000000000000000000000000000000000000..8d28ce0a6d56531ccc4989309880c0dc6f7f1a99 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dErJgR1Ar*7po;T!T3gmIU$b4(Z z%9%M{g}bk9=FrV?eKoGfosd(VXzQg^ zJ;mjlM(3NrI+uGN=OmcLRMoxPT5)`>dwb0$uRAl2^m^S{0VY;HevtNPM+e6q2B8OT Vre5XGvVjg@@O1TaS?83{1OW3MNg)6L literal 0 HcmV?d00001 diff --git a/resources/ic_singleloop.png b/resources/ic_singleloop.png new file mode 100755 index 0000000000000000000000000000000000000000..c4698552fea3be7eed44713a143831fbdbf11814 GIT binary patch literal 541 zcmV+&0^l#2^TxhO6Q7i{?h+~h)()`8uN3ndpn zN-1h1EOOcQ{5X7{UC;A0GtbO?Csxh7rup&xem?V_neTVzGt|`7)GS(d;36Jl8ms=T z&L8&R2|nWn4r3FRB=l|NSSG3x8^l$7!6_`u5!1qDe8SeTjj?(OvJ&V(3XdZ@zyEhV%!yvw5Yf5{J;FwUdMRN_~DQz)=PjNgVet{-_U~@uS zS-~TCi=}0ydO0h6J9`V%GJ@-ciE$uSs*?dcz#U;+&Qnxy4PM}UMP6O35PpvCV|Dvj z5y34&v3k8?uP%mgQ>bvpDy=e1Bv~G;v6{m>JxY{;K-xG=-9W3KuLQ fv6`Bin*WvG9BN||DVv{^00000NkvXXu0mjf$Y}N` literal 0 HcmV?d00001 diff --git a/resources/ic_stop.png b/resources/ic_stop.png new file mode 100755 index 0000000000000000000000000000000000000000..6a70be2a6a219b9777e68204fc2b933f510992f8 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dE;hrvzAr*7p-Z122P~bS=VEXU> zX{&C%Wz5IEm_@ws(fk#|``Ke<#L;E0We>{sr-s}ym|%nxR@rTkFT1I4@lsQmWd)0U TO8f&}pcM?Bu6{1-oD!M<@&z&8 literal 0 HcmV?d00001 From 3cbe6b7f60c66a3d7b5c403ff06bb74dd5390ec4 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Mon, 9 Nov 2015 11:06:35 +0800 Subject: [PATCH 23/24] Set default path: mmcblk0p6 Change-Id: Iaba51dd9f4e20d17198ec04831ce4604430bbe3c Signed-off-by: Jingtao Chen --- csrplayer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/csrplayer.cpp b/csrplayer.cpp index edc384d..f5c310b 100644 --- a/csrplayer.cpp +++ b/csrplayer.cpp @@ -179,8 +179,7 @@ void csrplayer::open() fileTypeCombo->hide(); fileDialog->setWindowTitle(tr("Open File")); - //fileDialog->setDirectory("/media/mmcblk0p6/"); - fileDialog->setDirectory("/home/jc46/Videos/"); + fileDialog->setDirectory("/media/mmcblk0p6/"); fileDialog->setStyleSheet ("font: 32pt \"Courier\";"); fileDialog->setWindowFlags(Qt::Window); fileDialog->showFullScreen(); From f59087327631fe3e74cde774947b01f72bd845f4 Mon Sep 17 00:00:00 2001 From: Jingtao Chen Date: Wed, 18 Nov 2015 11:50:05 +0800 Subject: [PATCH 24/24] Add minimize button for demo Change-Id: I5afac48ff30c8e658fa013441f516d67aff50957 Signed-off-by: Jingtao Chen --- csrplayer.cpp | 32 ++++++++++++- csrplayer.h | 9 ++++ csrplayer.pro | 2 + csrplayer.qrc | 1 + csrplayer.ui | 25 ++++++++++ main.cpp | 45 +++++++++++++++++ msgthread.cpp | 98 ++++++++++++++++++++++++++++++++++++++ msgthread.h | 62 ++++++++++++++++++++++++ resources/ic_minimize.png | Bin 0 -> 194 bytes 9 files changed, 272 insertions(+), 2 deletions(-) create mode 100644 msgthread.cpp create mode 100644 msgthread.h create mode 100755 resources/ic_minimize.png diff --git a/csrplayer.cpp b/csrplayer.cpp index f5c310b..2243f60 100644 --- a/csrplayer.cpp +++ b/csrplayer.cpp @@ -75,6 +75,10 @@ csrplayer::csrplayer(QWidget *parent) ui->openButton->setEnabled(true); connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(setOpenEnabled(QMediaPlayer::State))); + ui->minimizeButton->setIcon(QIcon(":/icons/resources/ic_minimize.png")); + ui->minimizeButton->setIconSize(QSize(40, 40)); + ui->minimizeButton->setEnabled(true); + connect(ui->minimizeButton, SIGNAL(clicked()), this, SLOT(playerMinimize())); ui->closeButton->setIcon(QIcon(":/icons/resources/ic_close.png")); ui->closeButton->setIconSize(QSize(40, 40)); connect(ui->openButton, SIGNAL(clicked()), this, SLOT(open())); @@ -100,6 +104,14 @@ csrplayer::csrplayer(QWidget *parent) connect(player, SIGNAL(mutedChanged(bool)), ui->controls, SLOT(setMuted(bool))); connect(this, SIGNAL(playModeChanged(int)), ui->controls, SLOT(setMode(int))); + m_pMsgThread = new MsgThread(this, id1, id2); + if (id1 != -1 && id2 != -1) + { + connect(m_pMsgThread, SIGNAL(appResume()), this, SLOT(playerShow())); + connect(this, SIGNAL(appPaused()), m_pMsgThread, SLOT(onAppPaused())); + m_pMsgThread->start(); + } + if (!player->isAvailable()) { QMessageBox::warning(this, tr("Service not available"), tr("The QMediaPlayer object does not have a valid service.\n"\ @@ -128,6 +140,10 @@ csrplayer::~csrplayer() delete playlist; delete coverLabel; delete playlistModel; +#ifdef ENABLE_PLAYLISTVIEW + delete playlistView; +#endif + delete m_pMsgThread; } void csrplayer::open() @@ -205,8 +221,7 @@ void csrplayer::open() #ifdef USE_V4L2sink #ifdef ENABLE_PLAYLISTVIEW player->setOverlay(ui->videoWidget->geometry().y(), ui->videoWidget->geometry().x(), ui->videoWidget->geometry().width(), ui->videoWidget->geometry().height()); -#else - int x, y, w, h; +#els if (ui->videoWidget->geometry().width() * DEFAULT_H > ui->videoWidget->geometry().height() * DEFAULE_W) { @@ -276,6 +291,19 @@ void csrplayer::addToPlaylist(const QStringList& fileNames) } } +void csrplayer::playerMinimize() +{ + player->setOverlay(0, 0, 1, 1); + hide(); + emit appPaused(); +} + +void csrplayer::playerShow() +{ + show(); + player->setOverlay(y, x, w, h); +} + void csrplayer::durationChanged(qint64 duration) { this->duration = int(duration/1000.0 + 0.5); diff --git a/csrplayer.h b/csrplayer.h index b052444..1c89750 100644 --- a/csrplayer.h +++ b/csrplayer.h @@ -1,6 +1,7 @@ #ifndef CSRPLAYER_H #define CSRPLAYER_H +#include "msgthread.h" #include "videowidget.h" #include "ui_csrplayer.h" #include @@ -38,6 +39,7 @@ class csrplayer : public QMainWindow signals: void playModeChanged(int mode); + void appPaused(); private slots: void open(); @@ -61,6 +63,9 @@ private slots: void displayErrorMessage(); void addToPlaylist(const QStringList &fileNames); + void playerMinimize(); + void playerShow(); + private: void setTrackInfo(const QString &info); void setStatusInfo(const QString &info); @@ -79,6 +84,10 @@ private slots: QString trackInfo; QString statusInfo; qint64 duration; + + int x, y, w, h; + MsgThread *m_pMsgThread; + int id1, id2; }; #endif // CSRPLAYER_H diff --git a/csrplayer.pro b/csrplayer.pro index 5be5420..1c615ac 100644 --- a/csrplayer.pro +++ b/csrplayer.pro @@ -12,6 +12,7 @@ HEADERS = \ csrplayer.h \ clickslider.h \ filedialog.h \ + msgthread.h \ playercontrols.h \ playlistmodel.h \ ticker.h \ @@ -20,6 +21,7 @@ SOURCES = main.cpp \ csrplayer.cpp \ clickslider.cpp \ filedialog.cpp \ + msgthread.cpp \ playercontrols.cpp \ playlistmodel.cpp \ ticker.cpp \ diff --git a/csrplayer.qrc b/csrplayer.qrc index e2260b1..e591215 100644 --- a/csrplayer.qrc +++ b/csrplayer.qrc @@ -17,5 +17,6 @@ resources/ic_singleloop.png resources/ic_stop.png resources/ic_sequential.png + resources/ic_minimize.png diff --git a/csrplayer.ui b/csrplayer.ui index 57d4299..fa2c613 100644 --- a/csrplayer.ui +++ b/csrplayer.ui @@ -256,6 +256,31 @@ QScrollBar::down-arrow:vertical {
+ + + + + 0 + 0 + + + + + 50 + 50 + + + + + + + + 50 + 50 + + + + diff --git a/main.cpp b/main.cpp index 96550de..60295fa 100644 --- a/main.cpp +++ b/main.cpp @@ -41,9 +41,54 @@ #include "csrplayer.h" #include +#include "getopt.h" + +#define APP_MGR_PROCESS_NAME "AppMgr" +#define NATIVE_APP_MSG_QID_ARG "nMsgId" +#define APP_MANAGER_MSG_QID_ARG "rMsgId" int main(int argc, char *argv[]) { + + /* Response Msg Queue id from application to AppMgr */ + /* AppMgr (waiting on respAppMqId)<---Sends--- Application */ + int messageQueueID1 = -1; + + /* Send Msg Queue id to launched application */ + /* AppMgr ----Sends---> Application (waiting on sendAppMqId) */ + int messageQueueID2 = -1; + + /* Parse args and get required msg queue id's :*/ + struct option long_options[] = + { + /* Ignore */ + {"platform", required_argument, 0, 'p'}, + {"plugin", required_argument, 0, 'P'}, + /* Args to parse */ + /* AppMgr <--- Application */ + {NATIVE_APP_MSG_QID_ARG, required_argument, 0, 'n'}, + /* AppMgr ---> Application */ + {APP_MANAGER_MSG_QID_ARG, required_argument, 0, 'r'}, + }; + + int c; + int opt_index = 0; + while ((c = getopt_long_only(argc, argv, "n:r:p:P", long_options, &opt_index)) != -1) + { + switch (c) + { + case 'n': + printf("App Response MsgId: %s\n", optarg); + messageQueueID1 = atoi(optarg); + break; + case 'r': + printf("App Receive MsgId: %s\n", optarg); + messageQueueID2 = atoi(optarg); + break; + default: + break; + } + } QApplication app(argc, argv); csrplayer player; diff --git a/msgthread.cpp b/msgthread.cpp new file mode 100644 index 0000000..cc16c61 --- /dev/null +++ b/msgthread.cpp @@ -0,0 +1,98 @@ +#include "msgthread.h" + +#include +#include +#include +#include +#include + +#define APP_ID 6 + +MsgThread::MsgThread(QObject *parent, int msgqid1, int msgqid2) : + QThread(parent), + msgQId1(msgqid1), + msgQId2(msgqid2) +{ +} + +MsgThread::~MsgThread() +{ +} + +void MsgThread::setMessageQueueId(int id1, int id2) +{ + //LOGF("setMessageQueueId(%d, %d)", id1, id2); + + msgQId1 = id1; + msgQId2 = id2; +} + +void MsgThread::sendMessage(int messageQueueID,int sMsg) +{ + + msg_buf sbuf; + + sbuf.mtype = 1; + sbuf.event = sMsg; + sbuf.appId = APP_ID; + size_t buf_length = sizeof(sbuf); + + //LOGD("starts to send message"); + + int returnValue = msgsnd(messageQueueID, &sbuf, buf_length, IPC_NOWAIT) ; + + if( returnValue < 0) + { + //LOGE("msgsnd failed - %d", returnValue); + perror("msgsend"); + } + + //LOGD("the message has been sent"); +} + +int MsgThread::receiveMessage(int messageQueueID) +{ + /* DO NOT use printf in this function. + Or it will cause crash, cause unknown */ + msg_buf rbuf; + + //qDebug("waiting for the message to receive \n"); + + int status = msgrcv(messageQueueID,&rbuf, sizeof(rbuf), 0, 0); + + if(status < 0) + { + return -1; + } + + //qDebug("the message received is %d\n" + // , rbuf.event); + + return rbuf.event; +} + +void MsgThread::run() +{ + int msg; + while (true) + { + msg = receiveMessage(msgQId2); + switch (msg) + { + case APP_RESUME: + emit appResume(); + break; + case APP_STOP: + emit appStop(); + break; + default: + break; + } + } +} + +void MsgThread::onAppPaused() +{ + //LOGF(__FUNCTION__); + sendMessage(msgQId1, APP_PAUSED); +} diff --git a/msgthread.h b/msgthread.h new file mode 100644 index 0000000..8843e88 --- /dev/null +++ b/msgthread.h @@ -0,0 +1,62 @@ +#ifndef MSGTHREAD_H +#define MSGTHREAD_H + +#include +#include + +typedef struct { + /*! + * \brief mType - App Mgr message with the event + */ + int mtype; + + /*! + * \brief event - App manager events (Launch, request for display or exit) + */ + int event; + + /*! + * \brief applicationID - Calling application ID. + */ + int appId; + +}msg_buf; + +/* Commands from Launcher to app */ +#define APP_RESUME 101 +#define APP_STOP 102 +#define APP_QUITTING 103 + +/* Commands from app to Launcher */ +#define APP_PAUSED 102 +#define APP_STARTED 103 +#define APP_RESUMED 104 + +class MsgThread : public QThread +{ + Q_OBJECT +public: + explicit MsgThread(QObject *parent = 0 + , int msgqid1 = 0, int msgqid2 = 0); + ~MsgThread(); + + void setMessageQueueId(int,int); + void sendMessage(int , int); + int receiveMessage(int); + +protected: + void run(); + +signals: + void appResume(); + void appStop(); + +public slots: + void onAppPaused(); + +private: + int msgQId1; //messeage ID to send to AppMgr + int msgQId2; //messeage ID to receive message +}; + +#endif // MSGTHREAD_H diff --git a/resources/ic_minimize.png b/resources/ic_minimize.png new file mode 100755 index 0000000000000000000000000000000000000000..4b72a31c34d2ae2949334f6153a539b8e0bfb827 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEot`d^Ar*7pUUcMYFyL{yc(ZEd zw-C|%2Z^>V>zINjWX)b8_^i>}IG&}WqhpIG!^uo-#)#@Ts|0yX>&hpot4}Q4@vEb3 ziPxNyhRxNh+6?A5w{ORhuYEg@)ymEl`d(I(6{D@>GG|4y5z|r5P8|*jb*I1A s)K9-*P}+5qVGiHmdKI;Vst0B+?>4FCWD literal 0 HcmV?d00001