[prev in list] [next in list] [prev in thread] [next in thread]
List: gstreamer-cvs
Subject: gst-plugins-base: video: Make gst_buffer_get_video_meta() a real function, Return lowest id
From: thaytan () kemper ! freedesktop ! org (Jan Schmidt)
Date: 2015-05-29 15:12:34
Message-ID: 20150529151234.12BAA761E7 () kemper ! freedesktop ! org
[Download RAW message or body]
Module: gst-plugins-base
Branch: master
Commit: d18aa5b74148d0eb005730a0bf81959b4e294c57
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=d18aa5b74148d0eb005730a0bf81959b4e294c57
Author: Jan Schmidt <jan@centricular.com>
Date: Thu Oct 9 01:13:29 2014 +1100
video: Make gst_buffer_get_video_meta() a real function, Return lowest id
Instead of returning the first video meta found on a buffer, return the
one with the lowest id (which is usually the same thing, except on
multi-view buffers)
---
gst-libs/gst/video/gstvideometa.c | 32 ++++++++++++++++++++++++++++++++
gst-libs/gst/video/gstvideometa.h | 2 +-
win32/common/libgstvideo.def | 1 +
3 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/gst-libs/gst/video/gstvideometa.c b/gst-libs/gst/video/gstvideometa.c
index 14fca21..5ba9f36 100644
--- a/gst-libs/gst/video/gstvideometa.c
+++ b/gst-libs/gst/video/gstvideometa.c
@@ -97,6 +97,38 @@ gst_video_meta_get_info (void)
}
/**
+ * gst_buffer_get_video_meta:
+ * @buffer: a #GstBuffer
+ *
+ * Find the #GstVideoMeta on @buffer with the lowest @id.
+ *
+ * Buffers can contain multiple #GstVideoMeta metadata items when dealing with
+ * multiview buffers.
+ *
+ * Returns: the #GstVideoMeta with lowest id (usually 0) or %NULL when there
+ * is no such metadata on @buffer.
+ */
+GstVideoMeta *
+gst_buffer_get_video_meta (GstBuffer * buffer)
+{
+ gpointer state = NULL;
+ GstVideoMeta *out = NULL;
+ GstMeta *meta;
+ const GstMetaInfo *info = GST_VIDEO_META_INFO;
+
+ while ((meta = gst_buffer_iterate_meta (buffer, &state))) {
+ if (meta->info->api == info->api) {
+ GstVideoMeta *vmeta = (GstVideoMeta *) meta;
+ if (vmeta->id == 0)
+ return vmeta; /* Early out for id 0 */
+ if (out == NULL || vmeta->id < out->id)
+ out = vmeta;
+ }
+ }
+ return out;
+}
+
+/**
* gst_buffer_get_video_meta_id:
* @buffer: a #GstBuffer
* @id: a metadata id
diff --git a/gst-libs/gst/video/gstvideometa.h b/gst-libs/gst/video/gstvideometa.h
index 58dd20f..deb793d 100644
--- a/gst-libs/gst/video/gstvideometa.h
+++ b/gst-libs/gst/video/gstvideometa.h
@@ -78,7 +78,7 @@ struct _GstVideoMeta {
GType gst_video_meta_api_get_type (void);
const GstMetaInfo * gst_video_meta_get_info (void);
-#define gst_buffer_get_video_meta(b) \
((GstVideoMeta*)gst_buffer_get_meta((b),GST_VIDEO_META_API_TYPE)) +GstVideoMeta * \
gst_buffer_get_video_meta (GstBuffer *buffer); GstVideoMeta * \
gst_buffer_get_video_meta_id (GstBuffer *buffer, gint id);
GstVideoMeta * gst_buffer_add_video_meta (GstBuffer *buffer, \
GstVideoFrameFlags flags,
diff --git a/win32/common/libgstvideo.def b/win32/common/libgstvideo.def
index ba58325..7e039c6 100644
--- a/win32/common/libgstvideo.def
+++ b/win32/common/libgstvideo.def
@@ -6,6 +6,7 @@ EXPORTS
gst_buffer_add_video_overlay_composition_meta
gst_buffer_add_video_region_of_interest_meta
gst_buffer_add_video_region_of_interest_meta_id
+ gst_buffer_get_video_meta
gst_buffer_get_video_meta_id
gst_buffer_get_video_region_of_interest_meta_id
gst_buffer_pool_config_get_video_alignment
_______________________________________________
gstreamer-commits mailing list
gstreamer-commits@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/gstreamer-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic