00001
00002
00003
00004
00005
00006
00007 #ifndef __FRAMEANALYZER_H__
00008 #define __FRAMEANALYZER_H__
00009
00010
00011
00012 #include <limits.h>
00013 #include <qmap.h>
00014
00015
00016
00017
00018
00019 #ifndef LONG_LONG_MAX
00020 #define LONG_LONG_MAX __LONG_LONG_MAX__
00021 #endif
00022
00023 typedef struct VideoFrame_ VideoFrame;
00024 class NuppelVideoPlayer;
00025
00026 class FrameAnalyzer
00027 {
00028 public:
00029 virtual ~FrameAnalyzer(void) { }
00030
00031 virtual const char *name(void) const = 0;
00032
00033
00034 enum analyzeFrameResult {
00035 ANALYZE_OK,
00036 ANALYZE_ERROR,
00037 ANALYZE_FINISHED,
00038 ANALYZE_FATAL,
00039 };
00040
00041 virtual enum analyzeFrameResult nuppelVideoPlayerInited(
00042 NuppelVideoPlayer *nvp, long long nframes) {
00043 (void)nvp;
00044 (void)nframes;
00045 return ANALYZE_OK;
00046 };
00047
00048
00049
00050
00051
00052 static const long long ANYFRAME = LONG_LONG_MAX;
00053 static const long long NEXTFRAME = -1;
00054 virtual enum analyzeFrameResult analyzeFrame(const VideoFrame *frame,
00055 long long frameno, long long *pNextFrame ) = 0;
00056
00057 virtual int finished(long long nframes, bool final) {
00058 (void)nframes;
00059 (void)final;
00060 return 0;
00061 }
00062 virtual int reportTime(void) const { return 0; }
00063
00064
00065 typedef QMap<long long, long long> FrameMap;
00066 };
00067
00068 namespace frameAnalyzer {
00069
00070 bool rrccinrect(int rr, int cc, int rrow, int rcol, int rwidth, int rheight);
00071
00072 void frameAnalyzerReportMap(const FrameAnalyzer::FrameMap *frameMap,
00073 float fps, const char *comment);
00074
00075 void frameAnalyzerReportMapms(const FrameAnalyzer::FrameMap *frameMap,
00076 float fps, const char *comment);
00077
00078 long long frameAnalyzerMapSum(const FrameAnalyzer::FrameMap *frameMap);
00079
00080 bool removeShortBreaks(FrameAnalyzer::FrameMap *breakMap, float fps,
00081 int minbreaklen, bool verbose);
00082
00083 bool removeShortSegments(FrameAnalyzer::FrameMap *breakMap, long long nframes,
00084 float fps, int minseglen, bool verbose);
00085
00086 FrameAnalyzer::FrameMap::const_iterator frameMapSearchForwards(
00087 const FrameAnalyzer::FrameMap *frameMap, long long mark,
00088 long long markend);
00089
00090 FrameAnalyzer::FrameMap::const_iterator frameMapSearchBackwards(
00091 const FrameAnalyzer::FrameMap *frameMap, long long markbegin,
00092 long long mark);
00093
00094 };
00095
00096 #endif
00097
00098