00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #ifndef QVIMAGERETARDERWORKER_H
00026 #define QVIMAGERETARDERWORKER_H
00027
00028 #include <QVImage>
00029 #include <QVProcessingBlock>
00030
00031 #ifndef DOXYGEN_IGNORE_THIS
00032
00036 template <typename T, int C> class QVImageRetarderBlock: public QVProcessingBlock
00037 {
00038 private:
00039 QList< QVImage<T,C> > imageCache;
00040
00041 public:
00042 QVImageRetarderBlock(QString name = QString(), const int defaultRetardedFrames = 5, const int minRetardedFrames = 0, const int maxRetardedFrames = 255): QVProcessingBlock(name)
00043 {
00044
00045 addProperty< QVImage<T,C> >("Input image", inputFlag|outputFlag);
00046 addProperty< int >("Second image delay", inputFlag|outputFlag, defaultRetardedFrames, "Number of frames from the input image to the second", minRetardedFrames, maxRetardedFrames);
00047
00048
00049 addProperty< QVImage<T,C> >("Output image", outputFlag);
00050 }
00051
00052 void iterate()
00053 {
00054
00055 const QVImage<T,C> image = getPropertyValue< QVImage<uChar,C> >("Input image");
00056 const int secondImageDelay = getPropertyValue<int>("Second image delay");
00057
00058
00059 imageCache.append(image);
00060
00061
00062 setPropertyValue< QVImage<T,C> >("Output image", imageCache.front());
00063
00064
00065 while (imageCache.size() > secondImageDelay)
00066 imageCache.removeFirst();
00067 }
00068 };
00069
00070 #endif
00071
00072 #endif