00001 #include "ClassicSceneChangeDetector.h"
00002 #include <algorithm>
00003 #include "Histogram.h"
00004
00005 #include "libmyth/mythcontext.h"
00006
00007 ClassicSceneChangeDetector::ClassicSceneChangeDetector(unsigned int width,
00008 unsigned int height, unsigned int commdetectborder_in,
00009 unsigned int xspacing_in, unsigned int yspacing_in):
00010 SceneChangeDetectorBase(width,height),
00011 frameNumber(0),
00012 previousFrameWasSceneChange(false),
00013 xspacing(xspacing_in),
00014 yspacing(yspacing_in),
00015 commdetectborder(commdetectborder_in)
00016 {
00017 histogram = new Histogram;
00018 previousHistogram = new Histogram;
00019 }
00020
00021 ClassicSceneChangeDetector::~ClassicSceneChangeDetector()
00022 {
00023 delete histogram;
00024 delete previousHistogram;
00025 }
00026
00027 void ClassicSceneChangeDetector::processFrame(unsigned char* frame)
00028 {
00029 histogram->generateFromImage(frame, width, height, commdetectborder,
00030 width-commdetectborder, commdetectborder,
00031 height-commdetectborder, xspacing, yspacing);
00032 float similar = histogram->calculateSimilarityWith(*previousHistogram);
00033
00034 bool isSceneChange = (similar < .85 && !previousFrameWasSceneChange);
00035
00036 emit(haveNewInformation(frameNumber,isSceneChange,similar));
00037 previousFrameWasSceneChange = isSceneChange;
00038
00039 std::swap(histogram,previousHistogram);
00040 frameNumber++;
00041 }
00042
00043
00044