00001 #ifndef _COMMDETECTOR2_H_
00002 #define _COMMDETECTOR2_H_
00003
00004 #include <qdatetime.h>
00005 #include <qptrlist.h>
00006 #include <qvaluelist.h>
00007
00008 #include "CommDetector.h"
00009 #include "CommDetectorBase.h"
00010 #include "FrameAnalyzer.h"
00011
00012 class NuppelVideoPlayer;
00013 class TemplateFinder;
00014 class TemplateMatcher;
00015 class BlankFrameDetector;
00016 class SceneChangeDetector;
00017
00018 namespace commDetector2 {
00019
00020 QString debugDirectory(int chanid, const QDateTime& recstartts);
00021 void createDebugDirectory(QString dirname, QString comment);
00022 QString frameToTimestamp(long long frameno, float fps);
00023 QString frameToTimestampms(long long frameno, float fps);
00024 QString strftimeval(const struct timeval *tv);
00025
00026 };
00027
00028 class CommDetector2 : public CommDetectorBase
00029 {
00030 public:
00031 CommDetector2(enum SkipTypes commDetectMethod,
00032 bool showProgress, bool fullSpeed, NuppelVideoPlayer* nvp,
00033 int chanid, const QDateTime& startts, const QDateTime& endts,
00034 const QDateTime& recstartts, const QDateTime& recendts);
00035 virtual bool go(void);
00036 virtual void getCommercialBreakList(QMap<long long, int> &comms);
00037 virtual void recordingFinished(long long totalFileSize);
00038 virtual void requestCommBreakMapUpdate(void);
00039
00040 private:
00041 void reportState(int elapsed_sec, long long frameno, long long nframes,
00042 unsigned int passno, unsigned int npasses);
00043 int computeBreaks(long long nframes);
00044
00045 enum SkipTypes commDetectMethod;
00046 bool showProgress;
00047 bool fullSpeed;
00048 NuppelVideoPlayer *nvp;
00049 QDateTime startts, endts, recstartts, recendts;
00050
00051 bool isRecording;
00052 bool sendBreakMapUpdates;
00053 bool breakMapUpdateRequested;
00054 bool finished;
00055
00056 long long currentFrameNumber;
00057 typedef QValueList<QPtrList<FrameAnalyzer> > frameAnalyzerList;
00058 frameAnalyzerList frameAnalyzers;
00059 frameAnalyzerList::iterator currentPass;
00060 QPtrList<FrameAnalyzer> finishedAnalyzers;
00061
00062 FrameAnalyzer::FrameMap breaks;
00063
00064 TemplateFinder *logoFinder;
00065 TemplateMatcher *logoMatcher;
00066 BlankFrameDetector *blankFrameDetector;
00067 SceneChangeDetector *sceneChangeDetector;
00068
00069 QString debugdir;
00070 };
00071
00072 #endif
00073
00074