{"id":2734,"url":"https://patchwork.libcamera.org/api/covers/2734/?format=json","web_url":"https://patchwork.libcamera.org/cover/2734/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20200129033210.278800-1-nicolas@ndufresne.ca>","date":"2020-01-29T03:31:47","name":"[libcamera-devel,v1,00/23] GStreamer Element for libcamera","submitter":{"id":30,"url":"https://patchwork.libcamera.org/api/people/30/?format=json","name":"Nicolas Dufresne","email":"nicolas@ndufresne.ca"},"mbox":"https://patchwork.libcamera.org/cover/2734/mbox/","series":[{"id":648,"url":"https://patchwork.libcamera.org/api/series/648/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=648","date":"2020-01-29T03:31:47","name":"GStreamer Element for libcamera","version":1,"mbox":"https://patchwork.libcamera.org/series/648/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/2734/comments/","headers":{"Return-Path":"<nicolas@ndufresne.ca>","Received":["from bhuna.collabora.co.uk (bhuna.collabora.co.uk\n\t[IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9F5EE60447\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 29 Jan 2020 04:35:11 +0100 (CET)","from nicolas-tpx395.localdomain (unknown\n\t[IPv6:2002:c0de:c115:0:66fc:8b:2a38:8313])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits))\n\t(No client certificate requested) (Authenticated sender: nicolas)\n\tby bhuna.collabora.co.uk (Postfix) with ESMTPSA id 5E0BA28EA9F;\n\tWed, 29 Jan 2020 03:35:10 +0000 (GMT)"],"From":"Nicolas Dufresne <nicolas@ndufresne.ca>","To":"libcamera-devel@lists.libcamera.org","Cc":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","Date":"Tue, 28 Jan 2020 22:31:47 -0500","Message-Id":"<20200129033210.278800-1-nicolas@ndufresne.ca>","X-Mailer":"git-send-email 2.24.1","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v1 00/23] GStreamer Element for libcamera","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Wed, 29 Jan 2020 03:35:11 -0000"},"content":"From: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n\nThis patchset introduces two GStreamer features for libcamera. A\nGstDeviceProvider that allow enumerating the cameras and a libcamerasrc element\nthe allow streaming from a selected camera.\n\nThis is an early implementation that is not feature complete. It is designed to\nsupport multiple streams even though it currently only allow one srcpad. The goal\nof this submission is to get an inital element merged so that further\nimprovement can happen incrementally.\n\nTo test these features, you'll need GStreamer 1.16 (downgrade might be\npossible). To get the list of cameras you can run the following. Regression\nexist in the monitor of GStreamer 1.16.2 that may cause a crash, and also in\nmaster that may show nothing. This will be addressed in later release of\nGStreamer.\n\n  gst-device-monitor-1.0 Video/Source\n\nTo stream from a cameram, you can use the following pipeline:\n\n  gst-launch-1.0 libcamerasrc ! videoconvert ! autovideosink\n\nNicolas Dufresne (23):\n  Add GStreamer plugin and element skeleton\n  gst: Add utility to convert StreamFormats to GstCaps\n  gst: Add initial device provider\n  gst: utils: Add a macro to use a GMutexLocker\n  gst: Add pads to the source\n  gst: libcamerasrc: Allocate and add static pad\n  gst: libcamerasrc: Add camera-name property\n  gst: libcamerasrc: Add a debug category\n  gst: libcamerasrc: Implement selection and acquisition\n  gst: libcamerasrc: Start/Stop the streaming thread\n  gst: libcamerapad: Add a method to access the role\n  gst: libcamerasrc: Store the srcpad in a vector\n  gst: libcamerasrc: Send stream start event\n  gst: utils: Add StreamConfiguration helpers\n  gst: libcamerasrc: Implement minimal caps negotiation\n  gst: libcamerasrc: Push segment event\n  gst: Add a pool and an allocator implementation\n  gst: libcamerapad: Allow storing a pool\n  gst: libcamerasrc: Allocate and release buffers\n  gst: Add getters for Stream and FrameBuffer\n  gst: pad: Add method to store retrieve pending buffers\n  gst: libcamerasrc: Implement initial streaming\n  gst: libcamerasrc: Add a TODO comment\n\n meson_options.txt                       |   5 +\n src/gstreamer/gstlibcamera-utils.cpp    | 163 +++++++\n src/gstreamer/gstlibcamera-utils.h      |  23 +\n src/gstreamer/gstlibcamera.c            |  27 +\n src/gstreamer/gstlibcameraallocator.cpp | 249 ++++++++++\n src/gstreamer/gstlibcameraallocator.h   |  31 ++\n src/gstreamer/gstlibcamerapad.cpp       | 182 +++++++\n src/gstreamer/gstlibcamerapad.h         |  35 ++\n src/gstreamer/gstlibcamerapool.cpp      | 129 +++++\n src/gstreamer/gstlibcamerapool.h        |  34 ++\n src/gstreamer/gstlibcameraprovider.cpp  | 227 +++++++++\n src/gstreamer/gstlibcameraprovider.h    |  23 +\n src/gstreamer/gstlibcamerasrc.cpp       | 622 ++++++++++++++++++++++++\n src/gstreamer/gstlibcamerasrc.h         |  22 +\n src/gstreamer/meson.build               |  31 ++\n src/meson.build                         |   2 +\n 16 files changed, 1805 insertions(+)\n create mode 100644 src/gstreamer/gstlibcamera-utils.cpp\n create mode 100644 src/gstreamer/gstlibcamera-utils.h\n create mode 100644 src/gstreamer/gstlibcamera.c\n create mode 100644 src/gstreamer/gstlibcameraallocator.cpp\n create mode 100644 src/gstreamer/gstlibcameraallocator.h\n create mode 100644 src/gstreamer/gstlibcamerapad.cpp\n create mode 100644 src/gstreamer/gstlibcamerapad.h\n create mode 100644 src/gstreamer/gstlibcamerapool.cpp\n create mode 100644 src/gstreamer/gstlibcamerapool.h\n create mode 100644 src/gstreamer/gstlibcameraprovider.cpp\n create mode 100644 src/gstreamer/gstlibcameraprovider.h\n create mode 100644 src/gstreamer/gstlibcamerasrc.cpp\n create mode 100644 src/gstreamer/gstlibcamerasrc.h\n create mode 100644 src/gstreamer/meson.build"}