00001 /* 00002 * SceneChangeDetector 00003 * 00004 * Detect scene changes based on histogram analysis. 00005 */ 00006 00007 #ifndef __SCENECHANGEDETECTOR_H__ 00008 #define __SCENECHANGEDETECTOR_H__ 00009 00010 #include "FrameAnalyzer.h" 00011 00012 typedef struct AVPicture AVPicture; 00013 class HistogramAnalyzer; 00014 00015 class SceneChangeDetector : public FrameAnalyzer 00016 { 00017 public: 00018 /* Ctor/dtor. */ 00019 SceneChangeDetector(HistogramAnalyzer *ha, QString debugdir); 00020 ~SceneChangeDetector(void); 00021 00022 /* FrameAnalyzer interface. */ 00023 const char *name(void) const { return "SceneChangeDetector"; } 00024 enum analyzeFrameResult nuppelVideoPlayerInited(NuppelVideoPlayer *nvp, 00025 long long nframes); 00026 enum analyzeFrameResult analyzeFrame(const VideoFrame *frame, 00027 long long frameno, long long *pNextFrame); 00028 int finished(long long nframes, bool final); 00029 int reportTime(void) const; 00030 00031 /* SceneChangeDetector interface. */ 00032 const FrameAnalyzer::FrameMap *getChanges(void) const { return &changeMap; } 00033 00034 typedef struct scenechange_data { 00035 unsigned char color; 00036 unsigned char frequency; 00037 } SceneChangeData[UCHAR_MAX + 1]; 00038 00039 private: 00040 HistogramAnalyzer *histogramAnalyzer; 00041 float fps; 00042 00043 /* per-frame info */ 00044 SceneChangeData *scdata; 00045 unsigned short *scdiff; 00046 00047 FrameAnalyzer::FrameMap changeMap; 00048 00049 /* Debugging */ 00050 int debugLevel; 00051 QString debugdata; /* filename */ 00052 bool debug_scenechange; 00053 bool scenechange_done; 00054 }; 00055 00056 #endif /* !__SCENECHANGEDETECTOR_H__ */ 00057 00058 /* vim: set expandtab tabstop=4 shiftwidth=4: */ 00059
1.5.5