GstMeta buffers

John P Poet jppoet at gmail.com
Thu Sep 29 22:26:28 UTC 2016


I forgot to ask another related question.   When reading Ancillary data
embedded in the frame for a Decklink source, there can be multiple VANC
packets in a a single frame.  Do I need to combine those into a single
GstMeta object, or can I have several _VANCMeta objects attached to a video
frame buffer?  If I can have several, do I need to do anything special to
maintain serialization, so they are parsed in the correct order?

Thanks,

John

On Thu, Sep 29, 2016 at 4:21 PM John P Poet <jppoet at gmail.com> wrote:

> In the example for creating a new meta info type:
>
>
> https://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/section-allocation-meta.html
>
> It says
>
> > Lastly, you implement a gst_buffer_add_*_meta() that adds the metadata
> implementation to a buffer and sets the values of the metadata.
>
> And the example just show assigning values to local variables in the
> structure.  It does not show any memory allocation, so I assume that is not
> necessary.  In that structure I would like it to hold a c++ class:
>
> struct _VANCMeta {
>   GstMeta       meta;
>   AncillaryPacket packet;
> };
>
> AncillaryPacket would have various methods as well as data.  Will that
> work, or do I need to use more "base" types in my metadata structure?
> There are only a few data elements in there, so just having those elements
> in the VANCMeta struct would be easy, but it would be nice to have the
> methods automatically available by whatever reads the metadata.
>
> If I do need to just have 'simple' data types, and one of those types is
> an array of uint16_t, is there a preferred way of allocating the memory for
> it?  I assume I would use a GArray rather than a GstBuffer, right?   Or
> would I just use a basic C style array of uint16_t?
>
> struct _VANCMeta {
>   GstMeta       meta;
>
>   // primary data id.
>   int data_id;
>   // data block number (type 1), or secondary data id (type 2).
>   int dbn_sdid;
>   // number of words of data.
>   int data_count;
>   // actual data.
>   uint16_t* buf;
> };
>
> I would like to understand how the memory is deallocated after the life of
> the struct is over.  Who is responsible for that deallocation, and how do
> they know how to deallocate the memory?
>
> Thanks,
>
> John
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20160929/68ad5df8/attachment.html>


More information about the gstreamer-devel mailing list