[mythtv] New Method for Commercial Detection.
Lucas Meijer
lucas at mach8.nl
Wed May 3 08:33:22 UTC 2006
Robert Dunn wrote:
> Now i'm in the process of getting myself a PVR-350 and a linux box to
> test on. Does anyone who is familiar with the commercial detection in
> myth feel like giving me a hand by explaining briefly how
> CommDetectorBase etc all fits in with the operation of MythTV, ill get
> it eventually but a quick summary just a paragraph just to point me in
> the right direction would be wonderful.
>
Commercial detection is done my a program called mythcommflag which
you'll find in (surprise)
programs/mythcommflag. mythcommflag can be initiated by a backend. It is
expected to return
a list of commercial start & end points (often refered to as the
breakmap).. This map gets stored
in the database. Not only after commflagging has finished, but it gets
updated as the commflagger
goes along, so we can flag a live recording. It also sends out events to
frontends that are currently
watching this recording that the breakmap has updated..
mythcommflag takes care of looking up the file requested, stuffing
results into the database & notifying
frontends. The actual work is being done by an implementation of the
virtual class CommDetectBase.
There are few restrictions on what the implementation can choose to do
or not do. The implementation is
provided a NuppelVideoPlayer*, which it can use to seek around in the
recording, and analyze the video.
It is expected to pause when instructed to, as well as stop when its
instructed to. The base class provides
several events that you should signal:
- gotNewCommercialBreakList()
signal this event if your detection code has a new idea on what might or
might not be commercial (This doesn't
perse mean this is going to be another detected commercial. It could
also change its mind on something it
has considered commercial a while before).
- statusUpdate()
call this with a string to indicate some sort of progress message.
mythcommflag will output this either to the console
or to the database depending on how it is run.. the current
implementation says things like "looking for logo"
"processing video 34%" or stuff like that.
- breathe()
call this from time to time, to give mythcommflag an opportunity to do
some maintainence (like checking if
we received a command to stop or pause).. I think it is currently
called after processing 10 frames or something
like that.
What you need to start with is modify mythcommflag to also provide
CommDetector implementations with a means
to get at the audio bytes. I remember discussing this with isaac a while
ago, and he suggested making a class similar
to AudioOutputNULL, that provides its user with a means to access the
actual sound data. mythcommflag should then
instantiate your new AudioOutput class when it is making the
NuppelVideoPlayer. (NuppelVideoPlayer::SetAudioOutput())
A CommDetector implementation can then call GetAudioOutput() on the
NuppelVideoPlayer it is provided, and get its
hands on the actual audio data...
You should add your CommDetector class to the commdetector factory, and
just assign a number to it. There is a command
line option for mythcommflag to specify which commdetector
implementation to chose.
That should hopefully get you started, ah well, I might as well add
this to the wiki..
Bye, Lucas
More information about the mythtv-dev
mailing list