summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2020-01-27 17:41:08 -0500
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-03-07 01:58:08 +0200
commitdb50b1072a94a0b004f5099a7def5a7d0294bb50 (patch)
tree3034babbdedf7b08873a5b2813fea57daa1800a7 /src
parent6d0cf98bb1a808e767f7d0fe91599848ce955227 (diff)
gst: Add getters for Stream and FrameBuffer
This adds getters on pad/pool/allocator so that we can retrieve the Stream or FrameBuffer. Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/gstreamer/gstlibcameraallocator.cpp8
-rw-r--r--src/gstreamer/gstlibcameraallocator.h2
-rw-r--r--src/gstreamer/gstlibcamerapad.cpp11
-rw-r--r--src/gstreamer/gstlibcamerapad.h2
-rw-r--r--src/gstreamer/gstlibcamerapool.cpp20
-rw-r--r--src/gstreamer/gstlibcamerapool.h7
6 files changed, 50 insertions, 0 deletions
diff --git a/src/gstreamer/gstlibcameraallocator.cpp b/src/gstreamer/gstlibcameraallocator.cpp
index 861af596..d0b90eca 100644
--- a/src/gstreamer/gstlibcameraallocator.cpp
+++ b/src/gstreamer/gstlibcameraallocator.cpp
@@ -243,3 +243,11 @@ gst_libcamera_allocator_get_pool_size(GstLibcameraAllocator *self,
return pool->length;
}
+
+FrameBuffer *
+gst_libcamera_memory_get_frame_buffer(GstMemory *mem)
+{
+ auto *frame = reinterpret_cast<FrameWrap *>(gst_mini_object_get_qdata(GST_MINI_OBJECT_CAST(mem),
+ FrameWrap::getQuark()));
+ return frame->buffer_;
+}
diff --git a/src/gstreamer/gstlibcameraallocator.h b/src/gstreamer/gstlibcameraallocator.h
index b3f7f367..befdcad6 100644
--- a/src/gstreamer/gstlibcameraallocator.h
+++ b/src/gstreamer/gstlibcameraallocator.h
@@ -27,4 +27,6 @@ bool gst_libcamera_allocator_prepare_buffer(GstLibcameraAllocator *self,
gsize gst_libcamera_allocator_get_pool_size(GstLibcameraAllocator *allocator,
libcamera::Stream *stream);
+libcamera::FrameBuffer *gst_libcamera_memory_get_frame_buffer(GstMemory *mem);
+
#endif /* __GST_LIBCAMERA_ALLOCATOR_H__ */
diff --git a/src/gstreamer/gstlibcamerapad.cpp b/src/gstreamer/gstlibcamerapad.cpp
index dbe3361a..8616e067 100644
--- a/src/gstreamer/gstlibcamerapad.cpp
+++ b/src/gstreamer/gstlibcamerapad.cpp
@@ -126,3 +126,14 @@ gst_libcamera_pad_set_pool(GstPad *pad, GstLibcameraPool *pool)
g_object_unref(self->pool);
self->pool = pool;
}
+
+Stream *
+gst_libcamera_pad_get_stream(GstPad *pad)
+{
+ auto *self = GST_LIBCAMERA_PAD(pad);
+
+ if (self->pool)
+ return gst_libcamera_pool_get_stream(self->pool);
+
+ return nullptr;
+}
diff --git a/src/gstreamer/gstlibcamerapad.h b/src/gstreamer/gstlibcamerapad.h
index b03f47a2..f7dfc281 100644
--- a/src/gstreamer/gstlibcamerapad.h
+++ b/src/gstreamer/gstlibcamerapad.h
@@ -24,4 +24,6 @@ GstLibcameraPool *gst_libcamera_pad_get_pool(GstPad *pad);
void gst_libcamera_pad_set_pool(GstPad *pad, GstLibcameraPool *pool);
+libcamera::Stream *gst_libcamera_pad_get_stream(GstPad *pad);
+
#endif /* __GST_LIBCAMERA_PAD_H__ */
diff --git a/src/gstreamer/gstlibcamerapool.cpp b/src/gstreamer/gstlibcamerapool.cpp
index 75e189ab..3868905f 100644
--- a/src/gstreamer/gstlibcamerapool.cpp
+++ b/src/gstreamer/gstlibcamerapool.cpp
@@ -108,3 +108,23 @@ gst_libcamera_pool_new(GstLibcameraAllocator *allocator, Stream *stream)
return pool;
}
+
+Stream *
+gst_libcamera_pool_get_stream(GstLibcameraPool *self)
+{
+ return self->stream;
+}
+
+Stream *
+gst_libcamera_buffer_get_stream(GstBuffer *buffer)
+{
+ auto *self = (GstLibcameraPool *)buffer->pool;
+ return self->stream;
+}
+
+FrameBuffer *
+gst_libcamera_buffer_get_frame_buffer(GstBuffer *buffer)
+{
+ GstMemory *mem = gst_buffer_peek_memory(buffer, 0);
+ return gst_libcamera_memory_get_frame_buffer(mem);
+}
diff --git a/src/gstreamer/gstlibcamerapool.h b/src/gstreamer/gstlibcamerapool.h
index c0a04cfb..a3f1b685 100644
--- a/src/gstreamer/gstlibcamerapool.h
+++ b/src/gstreamer/gstlibcamerapool.h
@@ -24,4 +24,11 @@ G_DECLARE_FINAL_TYPE(GstLibcameraPool, gst_libcamera_pool, GST_LIBCAMERA, POOL,
GstLibcameraPool *gst_libcamera_pool_new(GstLibcameraAllocator *allocator,
libcamera::Stream *stream);
+libcamera::Stream *gst_libcamera_pool_get_stream(GstLibcameraPool *self);
+
+libcamera::Stream *gst_libcamera_buffer_get_stream(GstBuffer *buffer);
+
+libcamera::FrameBuffer *gst_libcamera_buffer_get_frame_buffer(GstBuffer *buffer);
+
+
#endif /* __GST_LIBCAMERA_POOL_H__ */