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 <QString> 00011 00012 #include "FrameAnalyzer.h" 00013 00014 typedef struct AVPicture AVPicture; 00015 class HistogramAnalyzer; 00016 00017 class SceneChangeDetector : public FrameAnalyzer 00018 { 00019 public: 00020 SceneChangeDetector(HistogramAnalyzer *ha, QString debugdir); 00021 virtual void deleteLater(void); 00022 00023 /* FrameAnalyzer interface. */ 00024 const char *name(void) const { return "SceneChangeDetector"; } 00025 enum analyzeFrameResult MythPlayerInited(MythPlayer *player, 00026 long long nframes); 00027 enum analyzeFrameResult analyzeFrame(const VideoFrame *frame, 00028 long long frameno, long long *pNextFrame); 00029 int finished(long long nframes, bool final); 00030 int reportTime(void) const; 00031 FrameMap GetMap(unsigned int) const { return changeMap; } 00032 00033 /* SceneChangeDetector interface. */ 00034 const FrameAnalyzer::FrameMap *getChanges(void) const { return &changeMap; } 00035 00036 typedef struct scenechange_data { 00037 unsigned char color; 00038 unsigned char frequency; 00039 } SceneChangeData[UCHAR_MAX + 1]; 00040 00041 protected: 00042 virtual ~SceneChangeDetector(void) {} 00043 00044 private: 00045 HistogramAnalyzer *histogramAnalyzer; 00046 float fps; 00047 00048 /* per-frame info */ 00049 SceneChangeData *scdata; 00050 unsigned short *scdiff; 00051 00052 FrameAnalyzer::FrameMap changeMap; 00053 00054 /* Debugging */ 00055 int debugLevel; 00056 QString debugdata; /* filename */ 00057 bool debug_scenechange; 00058 bool scenechange_done; 00059 }; 00060 00061 #endif /* !__SCENECHANGEDETECTOR_H__ */ 00062 00063 /* vim: set expandtab tabstop=4 shiftwidth=4: */ 00064
1.6.3