00001
00002
00003
00004
00005
00006
00007 #ifndef __HISTOGRAMANALYZER_H__
00008 #define __HISTOGRAMANALYZER_H__
00009
00010 #include "FrameAnalyzer.h"
00011
00012 typedef struct AVPicture AVPicture;
00013 class PGMConverter;
00014 class BorderDetector;
00015 class TemplateFinder;
00016
00017 class HistogramAnalyzer
00018 {
00019 public:
00020
00021 HistogramAnalyzer(PGMConverter *pgmc, BorderDetector *bd,
00022 QString debugdir);
00023 ~HistogramAnalyzer(void);
00024
00025 enum FrameAnalyzer::analyzeFrameResult nuppelVideoPlayerInited(
00026 NuppelVideoPlayer *nvp, long long nframes);
00027 void setLogoState(TemplateFinder *finder);
00028 static const long long UNCACHED = -1;
00029 enum FrameAnalyzer::analyzeFrameResult analyzeFrame(const VideoFrame *frame,
00030 long long frameno);
00031 int finished(long long nframes, bool final);
00032 int reportTime(void) const;
00033
00034
00035 typedef unsigned char Histogram[UCHAR_MAX + 1];
00036
00037 const float *getMeans(void) const { return mean; }
00038 const unsigned char *getMedians(void) const { return median; }
00039 const float *getStdDevs(void) const { return stddev; }
00040 const Histogram *getHistograms(void) const { return histogram; }
00041 const unsigned char *getMonochromatics(void) const { return monochromatic; }
00042
00043 private:
00044 PGMConverter *pgmConverter;
00045 BorderDetector *borderDetector;
00046
00047 TemplateFinder *logoFinder;
00048 const struct AVPicture *logo;
00049 int logowidth, logoheight;
00050 int logorr1, logocc1, logorr2, logocc2;
00051
00052
00053 float *mean;
00054 unsigned char *median;
00055 float *stddev;
00056 int *frow, *fcol;
00057 int *fwidth, *fheight;
00058 Histogram *histogram;
00059 unsigned char *monochromatic;
00060 int histval[UCHAR_MAX + 1];
00061 unsigned char *buf;
00062 long long lastframeno;
00063
00064
00065 int debugLevel;
00066 QString debugdata;
00067 bool debug_histval;
00068 bool histval_done;
00069 struct timeval analyze_time;
00070 };
00071
00072 #endif
00073
00074