buffer: store sequence number for metas
authorTim-Philipp Müller <tim@centricular.com>
Fri, 2 Dec 2016 17:56:59 +0000 (17:56 +0000)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 12 Feb 2019 17:53:08 +0000 (17:53 +0000)
commitf62ee975922ec6c790d587c43d268cf6a373fb92
treeac5675e62d80edf86d539e9a0f67fc7532598c6b
parent335826a3eb640224ba466964db128eb7a422862b
buffer: store sequence number for metas

For metas where order might be significant if multiple metas are
attached to the same buffer, so store a sequence number with the
meta when adding it to the buffer. This allows users of the meta
to make sure metas are processed in the right order.

We need a 64-bit integer for the sequence number here in the API,
a 32-bit one might overflow too easily with high packet/buffer
rates. We could do it rtp-seqnum style of course, but that's a
bit of a pain.

We could also make it so that gst_buffer_add_meta() just keeps metas in
order or rely on the order we add the metas in, but that seems too
fragile overall, when buffers (incl. metas) get merged or split.

Also add a compare function for easier sorting.

We store the seqnum in the MetaItem struct here and not in the
GstMeta struct since there's no padding in the GstMeta struct.
We could add a private struct to GstMeta before the start of
GstMeta, but that's what MetaItem effectively is implementation-
wise. We can still change this later if we want, since it's all
private.

Fixes #262
docs/gst/gstreamer-sections.txt
gst/gst_private.h
gst/gstbuffer.c
gst/gstmeta.c
gst/gstmeta.h
tests/check/gst/gstmeta.c