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/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 diff --git a/clickslider.cpp b/clickslider.cpp index 4662506..f9ac70d 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 @@ -11,31 +22,15 @@ 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; 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) { @@ -47,7 +42,7 @@ void ClickSlider::mousePressEvent ( QMouseEvent * event ) if (invertedAppearance() == true) { - setValue( maximum() - newVal ); + setValue(maximum() - newVal); pos = maximum() - newVal; } else 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/csrplayer.cpp b/csrplayer.cpp index 65211b0..2243f60 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,16 @@ 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->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())); @@ -89,6 +94,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 +102,15 @@ 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))); + + 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"), @@ -124,7 +139,11 @@ csrplayer::~csrplayer() delete player; delete playlist; delete coverLabel; - delete playlistModel; + delete playlistModel; +#ifdef ENABLE_PLAYLISTVIEW + delete playlistView; +#endif + delete m_pMsgThread; } void csrplayer::open() @@ -134,19 +153,63 @@ void csrplayer::open() qDebug() << ui->videoWidget->geometry(); #endif -#if 0 - QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open Files")); +#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"); + fileTypeLabel->hide(); + + QLabel *fileNameLabel = fileDialog->findChild("fileNameLabel"); + fileNameLabel->hide(); + + QLabel *lookInLabel = fileDialog->findChild("lookInLabel"); + 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->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(); @@ -158,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) { @@ -229,18 +291,31 @@ 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 = 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() @@ -273,6 +348,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()) { @@ -283,20 +393,25 @@ 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)); -#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 +#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 48e0207..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 @@ -37,15 +38,18 @@ class csrplayer : public QMainWindow ~csrplayer(); signals: + void playModeChanged(int mode); + void appPaused(); private slots: void open(); - void on_closeButton_clicked(); + void on_closeButton_clicked(); void durationChanged(qint64 duration); void positionChanged(qint64 progress); void metaDataChanged(); void previousClicked(); + void setMode(int mode); void setOpenEnabled(QMediaPlayer::State state); void seek(int seconds); @@ -59,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); @@ -77,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 d2f1d93..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 \ @@ -29,6 +31,8 @@ FORMS += csrplayer.ui OTHER_FILES += +LIBS += -ldl + RESOURCES += csrplayer.qrc target.path = $$[QT_INSTALL_EXAMPLES]/multimediawidgets/player diff --git a/csrplayer.qrc b/csrplayer.qrc index 53640cf..e591215 100644 --- a/csrplayer.qrc +++ b/csrplayer.qrc @@ -1,5 +1,22 @@ 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 + resources/ic_minimize.png diff --git a/csrplayer.ui b/csrplayer.ui index 6b09353..fa2c613 100644 --- a/csrplayer.ui +++ b/csrplayer.ui @@ -6,8 +6,8 @@ 0 0 - 1024 - 600 + 800 + 480 @@ -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; } @@ -188,7 +188,7 @@ QScrollBar::down-arrow:vertical { - + 0 @@ -256,6 +256,31 @@ QScrollBar::down-arrow:vertical { + + + + + 0 + 0 + + + + + 50 + 50 + + + + + + + + 50 + 50 + + + + @@ -312,11 +337,6 @@ QScrollBar::down-arrow:vertical { QSlider
clickslider.h
- - Ticker - QLabel -
ticker.h
-
diff --git a/filedialog.cpp b/filedialog.cpp index 46fe1c2..184d848 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) @@ -9,8 +23,9 @@ 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)" - << "Audio files (*.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 (*)"; m_filedlg->setNameFilters(filters); @@ -34,6 +49,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,10 +69,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); - m_mediainfo->setText(info); + QByteArray filename = m_fileinfo->absoluteFilePath().toLatin1(); + if(mediainfo)(* mediainfo)(filename.data(), msg); + m_mediainfo->setText(QString::fromStdString(msg)); } } diff --git a/filedialog.h b/filedialog.h index f3757a5..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__ @@ -13,6 +27,10 @@ #include #include #include +#include + +#define MEDIA_LIB "libmediainfo.so.0" +typedef void (*M_FUNC)(char *, char *); class Dialog : public QDialog { @@ -23,6 +41,7 @@ class Dialog : public QDialog QFileDialog* GetFileDlg() { + if (handle) dlclose(handle); return m_filedlg; } @@ -43,5 +62,9 @@ private slots: QTableWidgetItem *m_item; QGridLayout *m_mainLaout; QString m_file; + + void *handle; + M_FUNC mediainfo; + char msg[4096]; }; #endif diff --git a/main.cpp b/main.cpp index 851d36e..60295fa 100644 --- a/main.cpp +++ b/main.cpp @@ -1,53 +1,99 @@ /**************************************************************************** -** -** 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" #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[]) { - QApplication app(argc, 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; - //player.resize(800,480); - player.show(); - return app.exec(); + player.resize(800,480); + player.showFullScreen(); + //player.show(); + return app.exec(); } 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/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 0000000..e76fb7d Binary files /dev/null and b/resources/ic_close.png differ diff --git a/resources/ic_loop.png b/resources/ic_loop.png new file mode 100755 index 0000000..e0873ad Binary files /dev/null and b/resources/ic_loop.png differ diff --git a/resources/ic_minimize.png b/resources/ic_minimize.png new file mode 100755 index 0000000..4b72a31 Binary files /dev/null and b/resources/ic_minimize.png differ diff --git a/resources/ic_mute.png b/resources/ic_mute.png new file mode 100755 index 0000000..097d7b7 Binary files /dev/null and b/resources/ic_mute.png differ diff --git a/resources/ic_mute1.png b/resources/ic_mute1.png new file mode 100755 index 0000000..efc108a Binary files /dev/null and b/resources/ic_mute1.png differ diff --git a/resources/ic_mute2.png b/resources/ic_mute2.png new file mode 100755 index 0000000..638103e Binary files /dev/null and b/resources/ic_mute2.png differ diff --git a/resources/ic_mute3.png b/resources/ic_mute3.png new file mode 100755 index 0000000..0dcfa01 Binary files /dev/null and b/resources/ic_mute3.png differ diff --git a/resources/ic_next.png b/resources/ic_next.png new file mode 100755 index 0000000..3229e7d Binary files /dev/null and b/resources/ic_next.png differ diff --git a/resources/ic_open.png b/resources/ic_open.png new file mode 100755 index 0000000..8b59bb7 Binary files /dev/null and b/resources/ic_open.png differ diff --git a/resources/ic_pause.png b/resources/ic_pause.png new file mode 100755 index 0000000..67adcbe Binary files /dev/null and b/resources/ic_pause.png differ diff --git a/resources/ic_play.png b/resources/ic_play.png new file mode 100755 index 0000000..14a6554 Binary files /dev/null and b/resources/ic_play.png differ diff --git a/resources/ic_previous.png b/resources/ic_previous.png new file mode 100755 index 0000000..12c24f1 Binary files /dev/null and b/resources/ic_previous.png differ diff --git a/resources/ic_random.png b/resources/ic_random.png new file mode 100755 index 0000000..7928c07 Binary files /dev/null and b/resources/ic_random.png differ diff --git a/resources/ic_sequential.png b/resources/ic_sequential.png new file mode 100755 index 0000000..d67e71d Binary files /dev/null and b/resources/ic_sequential.png differ diff --git a/resources/ic_single.png b/resources/ic_single.png new file mode 100755 index 0000000..8d28ce0 Binary files /dev/null and b/resources/ic_single.png differ diff --git a/resources/ic_singleloop.png b/resources/ic_singleloop.png new file mode 100755 index 0000000..c469855 Binary files /dev/null and b/resources/ic_singleloop.png differ diff --git a/resources/ic_stop.png b/resources/ic_stop.png new file mode 100755 index 0000000..6a70be2 Binary files /dev/null and b/resources/ic_stop.png differ 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