[FFmpeg-devel] [RFC] av_decode_video and CODEC_CAP_DR1
Cyril Russo
stage.nexvision
Mon Jun 7 16:44:45 CEST 2010
Hi all,
From the documentation, it's not possible to prevent av_decode_video2
from reusing allocated frame, unless these two conditions are set:
1) Codec support CAP_DR1 capability
2) codecContext's get_buffer et al are overridden
As I understand it, some codec might not have the flag set and in that
case, one must copy/duplicate the frame if it's stored for later
consumption (like in another thread)
I've checked all source tree to find out which video decoder doesn't
have this flag set, and only libschrodinger & libdirac doesn't.
So what about inverting/dropping the flag, and thus simplifying the code ?
Precisely, I think about adding some code in libschro&dirac like this:
// Pseudo code
int decode_frame(...)
{
[... Previous decoding code...]
if (codecContext.get_buffer != default_get_buffer)
{
// If user overriden get_buffer, let's call it and copy the
data in the generated buffer
frame = codecContext.get_buffer(...)
copyFrame(frame, frameFromOriginalCode);
}
}
This would result in easier documentation, and less complexity in user
code.
The final documentation would say:
if get_buffer et al are overridden, av_decode_video2 will not reuse the
given frame internally.
When get_buffer is not overriden, then the current behaviour is kept as
it is now.
Regards,
Cyril
More information about the ffmpeg-devel
mailing list