MythTV master
SceneChangeDetector.h
Go to the documentation of this file.
1/*
2 * SceneChangeDetector
3 *
4 * Detect scene changes based on histogram analysis.
5 */
6
7#ifndef SCENECHANGEDETECTOR_H
8#define SCENECHANGEDETECTOR_H
9
10#include <QString>
11
12#include "FrameAnalyzer.h"
13
14using AVFrame = struct AVFrame;
16
18{
19public:
20 SceneChangeDetector(std::shared_ptr<HistogramAnalyzer> ha, const QString& debugdir);
21 virtual void deleteLater(void) {};
22
23 /* FrameAnalyzer interface. */
24 const char *name(void) const override // FrameAnalyzer
25 { return "SceneChangeDetector"; }
27 long long nframes) override; // FrameAnalyzer
29 long long frameno, long long *pNextFrame) override; // FrameAnalyzer
30 int finished(long long nframes, bool final) override; // FrameAnalyzer
31 int reportTime(void) const override; // FrameAnalyzer
32 FrameMap GetMap(unsigned int /*index*/) const override // FrameAnalyzer
33 { return m_changeMap; }
34
35 /* SceneChangeDetector interface. */
36 const FrameAnalyzer::FrameMap *getChanges(void) const { return &m_changeMap; }
37
39 unsigned char color;
40 unsigned char frequency;
41 };
42 using SceneChangeData = std::array<scenechange_data,UCHAR_MAX + 1>;
43
44 protected:
45 ~SceneChangeDetector(void) override = default;
46
47 private:
48 std::shared_ptr<HistogramAnalyzer> m_histogramAnalyzer {nullptr};
49 float m_fps {0.0F};
50
51 /* per-frame info */
52 std::vector<SceneChangeData> m_scData;
53 std::vector<uint16_t> m_scDiff;
54
56
57 /* Debugging */
58 int m_debugLevel {0};
59 QString m_debugData; /* filename */
60 bool m_debugSceneChange {false};
61 bool m_sceneChangeDone {false};
62};
63
64#endif /* !SCENECHANGEDETECTOR_H */
65
66/* vim: set expandtab tabstop=4 shiftwidth=4: */
AVFrame AVFrame
QMap< long long, long long > FrameMap
Definition: FrameAnalyzer.h:45
virtual void deleteLater(void)
std::vector< SceneChangeData > m_scData
std::array< scenechange_data, UCHAR_MAX+1 > SceneChangeData
std::vector< uint16_t > m_scDiff
std::shared_ptr< HistogramAnalyzer > m_histogramAnalyzer
int finished(long long nframes, bool final) override
const FrameAnalyzer::FrameMap * getChanges(void) const
const char * name(void) const override
FrameMap GetMap(unsigned int) const override
enum analyzeFrameResult MythPlayerInited(MythPlayer *player, long long nframes) override
~SceneChangeDetector(void) override=default
SceneChangeDetector(std::shared_ptr< HistogramAnalyzer > ha, const QString &debugdir)
FrameAnalyzer::FrameMap m_changeMap
int reportTime(void) const override
enum analyzeFrameResult analyzeFrame(const MythVideoFrame *frame, long long frameno, long long *pNextFrame) override