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