[FFmpeg-devel] About avpicture_alloc (deprecate?)
Sun May 2 19:31:44 CEST 2010
Le 02/05/2010 17:57, Reimar D?ffinger a ?crit :
> I think you are confusing it with avcodec_alloc_frame.
> Which is basically the reason I'd like to change it since I get
> the suspicion a lot of people confuse the two.
> Given the signature of
> int avpicture_alloc(AVPicture *picture, enum PixelFormat pix_fmt, int width, int height)
> it doesn't work at all for that purpose.
As soon as you use swscale, you need it.
avcodec_alloc_frame allocate the frame structure but not the "data"
buffer, while avpicture_alloc does.
So unless you want people starting to allocate data et al, by
themselves (and doing bad thing with alignment since it's very hard to
find out the required stride for decoder, see issue1909)
I'm almost sure it's linked with the other question about improving the
documentation, and you're probably seing that there is an issue.
I agree both function sounds similar, which is confusing.
What even more confusing, is that avcodec_alloc_frame is required for
avcodec_decode_video2(context, &frame, .... // Might crash, it's
confusing since the doc might say that it allocates frame
But this leaks:
avpicture_alloc((AVPicture*)&frame, pix_fmt, width, height);
avcodec_decode_video2(context, &frame, .... // Leaks
This is good:
AVFrame * frame = NULL;
frame = avcodec_alloc_frame();
avcodec_decode_video2(context, frame, .... // Should work
Initially, I've tried to say in the avcodec_decode_video dox that
calling avpicture_alloc beforehand was to avoid.
For me, the option would probably to render picture & frame not binary
compatible, so casting from any other is not possible. That way, when
you deal with a AVFrame, you call x_frame functions, and when you deal
with picture, you call x_picture functions.
More information about the ffmpeg-devel