[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