[Libav-user] Frames corruption when seeking...

Jean-Yves Avenard jyavenard at gmail.com
Fri May 30 14:02:36 CEST 2014


On 30 May 2014 21:40, wm4 <nfxjfg at googlemail.com> wrote:

> Then you're probably doing something wrong. It's easily possible that
> this "wrong" thing was right (or just didn't cause problems) before the
> recent API changes.

oh, I'm sure I am... The question is what :)

I'll keep looking



> Are you using av_frame_free()? AVFrames are reference counted in the
> most recent release, so freeing the data isn't as simple as it was.
> av_frame_free() should take care of this properly.

with FFmpeg 1.2 I actually didn't allocate the AVFrame.

I had simply:
    AVFrame frame;
    avcodec_get_frame_defaults(&frame);

and use avcodec_decode_audio4 with a pointer to frame.

avcodec_get_frame_defaults being obsolete now, I have changed this to:
    AVFrame *frame;
    if (!(frame = av_frame_alloc()))
    {
        return AVERROR(ENOMEM);
    }

    ret = avcodec_decode_audio4(ctx, frame, &got_frame, pkt);
    ...

    av_frame_free(&frame);

but regardless of the method, the data pointed to within AVFrame is
never deallocated by either av_frame_free or avcodec_free_frame

Stepping into the code, it seems that the decoder is managing the
data, allocating it with get_buffer() and release it later...

so that makes sense.


> I get a mostly black screen with some artifacts when playing your video
> with vdpau decoding on an older nvidia card with binary drivers.

ah yes you're right... it's another video that gives me green blocks.

Maybe I should raise a bug then...

but seeing I couldn't reproduce it with mplayer, and as the new API
doesn't cause the issue, I thought the issue was on our side only,..

What are you using to play?


More information about the Libav-user mailing list