[Ffmpeg-devel] Post processing of codecs which require it.
Sat Feb 4 01:07:09 CET 2006
Short explanation: I believe that avcodec_decode_video is incomplete
Long explanation: I started out by trying to add a decoding feature to
MythTV. For a long time now MythTV mpeg-4 playback has not had
post-processing at all. This results in very nasty macroblocking, even at
high-bit rates - which were really unnecessary if post-processed correctly.
It does have it's own filter-plugin mechanism, however only raw frames are
available to the output filter. Qscale_table and qstride are really
necessary in order to properly post-process and mpeg-4 frame. There was an
effort more than a year ago to push these out with each frame into the
buffer and then into the filter plugins - and it never worked. So I sat down
and decided to try and fix this, except I wasn't going to bother trying to
buffer these values, but rather post-process directly after the decoded
frame was received as it was codec specific -who wants to (or should)
deblock/dering mpeg2/rtjpeg/HD/etc video?? Having never seen exactly how
this is done and with little documentation, I noticed there are a lot of
internal variables that I shouldn't really have to be concerned with or know
what they do when using ffmpeg as a library. The call should be simple and
abstract. I believe when you call avcodec_decode_video() to get a frame,
this frame should be _fully processed_ when you get it back, and the proper
place to make a code change is not MythTV, but ffmpeg. Right now
conceptually we are only getting half-decoded frames back, as mpeg-4
decoding involves a post-processing stage to really be mpeg-4. This applies
to all the other codecs that need post-processing as well.
What do you guys think?
Also if you disagree - it would be nice to update api_example.c with how to
do this properly for us n00bs :)
More information about the ffmpeg-devel