[FFmpeg-devel] [PATCH] vaapi_encode: explicitly free buffers after vaEndPicture
Mark Thompson
sw at jkqxz.net
Wed Jun 8 20:43:41 CEST 2016
On 08/06/16 18:23, Will Kelleher wrote:
> Hi all -
>
> I'm experiencing some significant heap growth when encoding with VAAPI on
> my Ivy Bridge hardware. Based on what I'm seeing from Massif, it seems like
> the parameter buffers allocated in vaapi_encode_make_param_buffer are leaking.
>
> I came across this thread [1] that indicates that vaEndPicture might not be
> freeing the param buffers like the libva documentation says it should.
>
> I also noticed that VLC [2] seems to explicitly call vaDestroyBuffer on the
> param buffers after vaEndPicture.
>
> When I try that, the leak is gone.
Yes, I wrote essentially the same code on observing the same issue.
Unfortunately, you need a lot more machinery to do this safely - the change makes all buffer operations thread-unsafe (another thread could allocate a buffer with the ID you are about to try to destroy). That results in needing VADisplay-global locks around pretty much everything to do with buffers (including any time the user makes use of them).
I don't much like the idea of writing all the code to have locking everywhere (including in all user code talking to libavcodec), so I took the cowardly approach of doing nothing and hiding behind the documentation :/
Therefore, dunno. Maybe we should talk to the libva people about it?
- Mark
More information about the ffmpeg-devel
mailing list