[libcamera-devel] [PATCH v2 04/27] gst: utils: Add simple scoped lockers for GMutex and GRectMutex
Nicolas Dufresne
nicolas.dufresne at collabora.com
Thu Feb 27 21:03:44 CET 2020
While GLib has locker implementation already using g_autoptr(), recursive mutext
locker was onmly introduced in recent GLib. Implement a simple locker for GMutex
and GRectMutex in order to allow making locking simplier and safer.
Signed-off-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>
---
src/gstreamer/gstlibcamera-utils.h | 51 ++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/src/gstreamer/gstlibcamera-utils.h b/src/gstreamer/gstlibcamera-utils.h
index 33160b8..737ca63 100644
--- a/src/gstreamer/gstlibcamera-utils.h
+++ b/src/gstreamer/gstlibcamera-utils.h
@@ -15,4 +15,55 @@
GstCaps *gst_libcamera_stream_formats_to_caps(const libcamera::StreamFormats &formats);
+/**
+ * \class GLibLocker
+ * \brief A simple scoped mutex locker for GMutex
+ */
+class GLibLocker
+{
+public:
+ GLibLocker(GMutex *mutex)
+ : mutex_(mutex)
+ {
+ g_mutex_lock(mutex_);
+ }
+
+ GLibLocker(GstObject *object)
+ : mutex_(GST_OBJECT_GET_LOCK(object))
+ {
+ g_mutex_lock(mutex_);
+ }
+
+ ~GLibLocker()
+ {
+ g_mutex_unlock(mutex_);
+ }
+
+private:
+ GMutex *mutex_;
+};
+
+/**
+ * \class GLibRecLocker
+ * \brief A simple scoped mutex locker for GRecMutex
+ */
+class GLibRecLocker
+{
+public:
+ GLibRecLocker(GRecMutex *mutex)
+ : mutex_(mutex)
+ {
+ g_rec_mutex_lock(mutex_);
+ }
+
+ ~GLibRecLocker()
+ {
+ g_rec_mutex_unlock(mutex_);
+ }
+
+private:
+ GRecMutex *mutex_;
+};
+
+
#endif /* __GST_LIBCAMERA_UTILS_H_ */
--
2.24.1
More information about the libcamera-devel
mailing list