[FFmpeg-devel] [PATCH 0/2]: allow hwaccel vda module to manage its buffers lifetime.
Sebastien Zwickert
dilaroga at gmail.com
Fri May 24 00:42:31 CEST 2013
On May 23, 2013, at 9:21 AM, Xidorn Quan <quanxunzhen at gmail.com> wrote:
> On Thu, May 23, 2013 at 3:19 PM, Hendrik Leppkes <h.leppkes at gmail.com>wrote:
>
>> On Thu, May 23, 2013 at 9:14 AM, Sebastien Zwickert <dilaroga at gmail.com>
>> wrote:
>>> On May 23, 2013, at 8:29 AM, Hendrik Leppkes <h.leppkes at gmail.com>
>> wrote:
>>>> On Wed, May 22, 2013 at 9:53 PM, Sebastien Zwickert <dilaroga at gmail.com>
>> wrote:
>>>>> This patchset fixes memory leaks of vda core video buffers while
>> seeking.
>>>>> It allows hwaccel modules to set a custom callback for freeing av
>> buffers.
>>>>> Then vda decoder can flush correctly dropped frames.
>>>>>
>>>>> Thanks to Xidorn Quan who gives me good feebacks about the patch I
>> shared
>>>>> with him in private.
>>>>>
>>>>> Sebastien Zwickert (2):
>>>>> hwaccel: allow to set a user-defined callback for releasing private
>>>>> av buffer.
>>>>> vda: use hwaccel custom callback for releasing private picture
>>>>> context.
>>>>>
>>>>> libavcodec/avcodec.h | 12 ++++++++++++
>>>>> libavcodec/h264.c | 9 ++++++++-
>>>>> libavcodec/mpegvideo.c | 9 ++++++++-
>>>>> libavcodec/vda.h | 12 +++++++++++-
>>>>> libavcodec/vda_h264.c | 18 ++++++++++++++++++
>>>>> 5 files changed, 57 insertions(+), 3 deletions(-)
>>>>>
>>>>> --
>>>>> 1.7.9.6 (Apple Git-31.1)
>>>>>
>>>>> _______________________________________________
>>>>> ffmpeg-devel mailing list
>>>>> ffmpeg-devel at ffmpeg.org
>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>
>>>> You set frame->data[3] to the same buffer that needs freeing, why not
>>>> simply also set frame->buf appropriately to a AVBufferRef you create,
>>>> so that it gets free'ed with a callback there?
>>>> No extra release buffer callback needed from where i stand.
>>>
>>> I'm not sure to understand correctly but the vda buffer is part of
>>> Core Video SDK which is based on a ref counted memory management
>>> and must be released with CVPixelBufferRelease().
>>> So custom callback for freeing Core Video types is necessary.
>>>
>>
>> You can do that if you just create a AVBufferRef around your buffer
>> (you can specify a release callback for AVBufferRefs) and put it
>> somewhere in frame->buf, it'll be free'ed with the frame then.
>> I'm not really liking the new function in AVHWAccel, because its not
>> really required with the new buffer management functions.
Ok it makes sense.
>>
>> Considering frame->data[3] is set by the code, i think its safe to
>> also set frame->buf[3] to the AVBufferRef managing this buffer without
>> worrying about user-code.
>>
>
> So you may like to have a look at my solution here:
> http://ffmpeg.org/pipermail/ffmpeg-devel/2013-May/143988.html
This patch applies what you explain here and works fine.
More information about the ffmpeg-devel
mailing list