1 /* This file is part of the KDE project 2 Copyright (C) 2005-2008 Matthias Kretz <kretz@kde.org> 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) version 3, or any 8 later version accepted by the membership of KDE e.V. (or its 9 successor approved by the membership of KDE e.V.), Nokia Corporation 10 (or its successors, if any) and the KDE Free Qt Foundation, which shall 11 act as a proxy defined in Section 6 of version 3 of the license. 12 13 This library is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 Lesser General Public License for more details. 17 18 You should have received a copy of the GNU Lesser General Public 19 License along with this library. If not, see <http://www.gnu.org/licenses/>. 20 21 */ 22 23 #ifndef PHONON_X_ABSTRACTVIDEODATAOUTPUT_H 24 #define PHONON_X_ABSTRACTVIDEODATAOUTPUT_H 25 26 #include "export.h" 27 #include "../abstractvideooutput.h" 28 #include "../phonondefs.h" 29 #include <QtCore/QObject> 30 #include "videoframe2.h" 31 32 #ifndef DOXYGEN_SHOULD_SKIP_THIS 33 template<typename T> class QSet; 34 #endif 35 36 namespace Phonon 37 { 38 namespace Experimental 39 { 40 41 class AbstractVideoDataOutputPrivate; 42 43 /** 44 * \short This class gives you the video data. 45 * 46 * This class implements a special AbstractVideoOutput that gives your 47 * application the video data. 48 * 49 * You can also use the video data for further processing (e.g. encoding and 50 * saving to a file). 51 * 52 * \author Matthias Kretz <kretz@kde.org> 53 * 54 * \see VideoDataOutput2 55 */ 56 class PHONONEXPERIMENTAL_EXPORT AbstractVideoDataOutput : public AbstractVideoOutput 57 { 58 P_DECLARE_PRIVATE(AbstractVideoDataOutput) 59 60 public: 61 /** 62 * Constructs an AbstractVideoDataOutput 63 */ 64 AbstractVideoDataOutput(); 65 ~AbstractVideoDataOutput(); 66 67 /** 68 * Lists the formats this output is allowed to pass via frameReady. 69 */ 70 virtual QSet<VideoFrame2::Format> allowedFormats() const; 71 72 // TODO: consider to remove the following function and make the above pure virtual 73 /** 74 * Defaults to VideoFrame2::Format_RGB888. 75 */ 76 void setAllowedFormats(const QSet<VideoFrame2::Format> &); 77 78 bool isRunning() const; 79 80 /** 81 * This function is called whenever a frame should be displayed. 82 * 83 * \warning frameReady can get called from any thread (other than the 84 * main thread or the thread affinity of this QObject). A common error to create a deadlock 85 * situation is to block the thread this function is called from, until the main thread 86 * has found time to handle the frame. If it is blocking while the main thread decides to 87 * stop/delete the MediaObject you might get a deadlock. 88 */ 89 virtual void frameReady(const VideoFrame2 &) = 0; 90 91 /** 92 * This function is called after the last frameReady of a MediaObject was called. 93 */ 94 virtual void endOfMedia() = 0; 95 96 void setRunning(bool running); 97 void start(); 98 void stop(); 99 100 protected: 101 AbstractVideoDataOutput(AbstractVideoDataOutputPrivate &dd); 102 }; 103 104 } // namespace Experimental 105 } //namespace Phonon 106 107 #endif // PHONON_X_ABSTRACTVIDEODATAOUTPUT_H 108