On 15/04/14 14:21, wm4 wrote:
> On Tue, 15 Apr 2014 05:09:59 +0200
> Vittorio Giovara <[email protected]> wrote:
> 
>> On Mon, Apr 14, 2014 at 3:29 PM, Roman Savchenko <[email protected]> wrote:
>>> Hi All,
>>> For first I add AV_FRAME_DATA_MB_TYPE and AV_FRAME_DATA_MOTION_VAL in
>>> AVFrameSideData enum.
>>
>> So far so good.
>>
>>> For second i try to decide what type (or rather copy) in side data  I
>>> should use. Because If I'll use AVBufferRef I must (should I?) to ref with
>>> av_buffer_ref. But it will provide a allocation for AVBufferRef and
>>> AVFrameSideData will provide allocation for AVBufferRef too.  It'll not be
>>> a problem if I will copy by value.
>>
>> the "data" field can be anything, you can put an AVBufferRef. If you
>> need to use the values directly you can just memcpy it (I think) but
>> if you want to use it normally you'll have to ref/unref it when you
>> get it from get_side_data. Sorry I can't help you further about
>> AVBufferRef as i'm not much familiar with those.
> 
> I don't think this will really work. Side data can not participate in
> reference counting - it's copied when a AVFrame is referenced, and it
> is always copied with memcpy. You could probably attempt to stuff it
> into the AVFrame.extended_buf array, but then it still won't work,
> because referencing an AVBufferRef creates a newly allocated object, so
> the pointer in the side data will become outdated.
> 
> You could do it if something else explicitly frees the side data
> AVBufferRef, but that would require changing every single API user.
> 

I think would be easier to mark this side-data as refcounted and act
accordingly with a proper incref and a proper destructor and such in the
normal av_frame_unref.

lu
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to