00001 #ifndef _COMMDETECTOR2_H_
00002 #define _COMMDETECTOR2_H_
00003
00004
00005 #include <vector>
00006 using namespace std;
00007
00008
00009 #include <QDateTime>
00010
00011
00012 #include "programinfo.h"
00013
00014
00015 #include "CommDetectorBase.h"
00016 #include "FrameAnalyzer.h"
00017
00018 class MythPlayer;
00019 class TemplateFinder;
00020 class TemplateMatcher;
00021 class BlankFrameDetector;
00022 class SceneChangeDetector;
00023
00024 namespace commDetector2 {
00025
00026 QString debugDirectory(int chanid, const QDateTime& recstartts);
00027 void createDebugDirectory(QString dirname, QString comment);
00028 QString frameToTimestamp(long long frameno, float fps);
00029 QString frameToTimestampms(long long frameno, float fps);
00030 QString strftimeval(const struct timeval *tv);
00031
00032 };
00033
00034 typedef vector<FrameAnalyzer*> FrameAnalyzerItem;
00035 typedef vector<FrameAnalyzerItem> FrameAnalyzerList;
00036
00037 class CommDetector2 : public CommDetectorBase
00038 {
00039 public:
00040 CommDetector2(
00041 SkipType commDetectMethod,
00042 bool showProgress, bool fullSpeed, MythPlayer* player,
00043 int chanid, const QDateTime& startts, const QDateTime& endts,
00044 const QDateTime& recstartts, const QDateTime& recendts, bool useDB);
00045 virtual bool go(void);
00046 virtual void GetCommercialBreakList(frm_dir_map_t &comms);
00047 virtual void recordingFinished(long long totalFileSize);
00048 virtual void requestCommBreakMapUpdate(void);
00049 virtual void PrintFullMap(
00050 ostream &out, const frm_dir_map_t *comm_breaks, bool verbose) const;
00051
00052 private:
00053 virtual ~CommDetector2() {}
00054
00055 void reportState(int elapsed_sec, long long frameno, long long nframes,
00056 unsigned int passno, unsigned int npasses);
00057 int computeBreaks(long long nframes);
00058
00059 private:
00060 enum SkipTypes commDetectMethod;
00061 bool showProgress;
00062 bool fullSpeed;
00063 MythPlayer *player;
00064 QDateTime startts, endts, recstartts, recendts;
00065
00066 bool isRecording;
00067 bool sendBreakMapUpdates;
00068 bool breakMapUpdateRequested;
00069 bool finished;
00070
00071 long long currentFrameNumber;
00072 FrameAnalyzerList frameAnalyzers;
00073 FrameAnalyzerList::iterator currentPass;
00074 FrameAnalyzerItem finishedAnalyzers;
00075
00076 FrameAnalyzer::FrameMap breaks;
00077
00078 TemplateFinder *logoFinder;
00079 TemplateMatcher *logoMatcher;
00080 BlankFrameDetector *blankFrameDetector;
00081 SceneChangeDetector *sceneChangeDetector;
00082
00083 QString debugdir;
00084 };
00085
00086 #endif
00087
00088