Browse Source

libcamera: update the code style for all the patches

Signed-off-by: sw.multimedia <sw.multimedia@starfivetech.com>
Andy Hu 2 years ago
parent
commit
44338ba365

+ 16 - 16
package/libcamera/0001-add-starfive-pipeline.patch

@@ -1,7 +1,7 @@
-From 0a7af884c40080461ac59cf6eda86b8d1da035fd Mon Sep 17 00:00:00 2001
+From d936cae7ba6ab3ae4665ac889bcef4c90354c36b Mon Sep 17 00:00:00 2001
 From: sw.multimedia <sw.multimedia@starfivetech.com>
 Date: Sat, 9 Oct 2021 18:09:44 +0800
-Subject: [PATCH] add starfive pipeline
+Subject: [PATCH 01/10] add starfive pipeline
 
 ---
  include/libcamera/internal/v4l2_subdevice.h  |   1 +
@@ -29,7 +29,7 @@ index 97b89fb9..fe8835bd 100644
  protected:
  	std::string logPrefix() const override;
 diff --git a/include/linux/v4l2-subdev.h b/include/linux/v4l2-subdev.h
-index a38454d9..5f127523 100644
+index a38454d9..4c9af64d 100644
 --- a/include/linux/v4l2-subdev.h
 +++ b/include/linux/v4l2-subdev.h
 @@ -206,4 +206,13 @@ struct v4l2_subdev_capability {
@@ -39,11 +39,11 @@ index a38454d9..5f127523 100644
 +#define STF_ISPFW_FILENAME_MAX_LEN  30
 +
 +struct stfisp_fw_info {
-+        char filename[STF_ISPFW_FILENAME_MAX_LEN];
++	char filename[STF_ISPFW_FILENAME_MAX_LEN];
 +};
 +
 +#define VIDIOC_STFISP_LOAD_FW \
-+        _IOW('V', BASE_VIDIOC_PRIVATE + 1, struct stfisp_fw_info)
++	_IOW('V', BASE_VIDIOC_PRIVATE + 1, struct stfisp_fw_info)
 +
  #endif
 diff --git a/meson_options.txt b/meson_options.txt
@@ -60,10 +60,10 @@ index 2c80ad8b..14baa7ef 100644
  
  option('qcam',
 diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp
-index 0af91c1a..b40b78ae 100644
+index 3f242286..bce4960a 100644
 --- a/src/gstreamer/gstlibcamera-utils.cpp
 +++ b/src/gstreamer/gstlibcamera-utils.cpp
-@@ -126,6 +126,12 @@ gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg
+@@ -139,6 +139,12 @@ gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg
  			  "width", G_TYPE_INT, stream_cfg.size.width,
  			  "height", G_TYPE_INT, stream_cfg.size.height,
  			  nullptr);
@@ -76,7 +76,7 @@ index 0af91c1a..b40b78ae 100644
  	gst_caps_append_structure(caps, s);
  
  	return caps;
-@@ -217,6 +223,7 @@ gst_libcamera_resume_task(GstTask *task)
+@@ -230,6 +236,7 @@ gst_libcamera_resume_task(GstTask *task)
  	/* We only want to resume the task if it's paused. */
  	GLibLocker lock(GST_OBJECT(task));
  	if (GST_TASK_STATE(task) == GST_TASK_PAUSED) {
@@ -85,7 +85,7 @@ index 0af91c1a..b40b78ae 100644
  		GST_TASK_SIGNAL(task);
  	}
 diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
-index 2be44edd..fab2aa2a 100644
+index 812ba7a2..1dd0e807 100644
 --- a/src/gstreamer/gstlibcamerasrc.cpp
 +++ b/src/gstreamer/gstlibcamerasrc.cpp
 @@ -46,6 +46,7 @@ using namespace libcamera;
@@ -111,15 +111,15 @@ index 2be44edd..fab2aa2a 100644
 -		if (do_pause)
 +		if (do_pause){
 +			self->task_pause_count ++;
-+	        GST_DEBUG_OBJECT(self, "task_pause_count: %d'", self->task_pause_count);
++			GST_DEBUG_OBJECT(self, "task_pause_count: %d'", self->task_pause_count);
 +		} else {
 +			self->task_pause_count = 0;
-+	        GST_DEBUG_OBJECT(self, "reset task_pause_count ");
++			GST_DEBUG_OBJECT(self, "reset task_pause_count ");
 +		}
 +
 +		if ( self->task_pause_count > TASK_PAUSE_COUNT_MAX)
 +		{
-+	        GST_DEBUG_OBJECT(self, "gst_task_pause");
++			GST_DEBUG_OBJECT(self, "gst_task_pause");
  			gst_task_pause(self->task);
 +		}
 +
@@ -139,7 +139,7 @@ index 00000000..2f2d2a75
 +])
 diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp
 new file mode 100644
-index 00000000..3517679d
+index 00000000..8797bdcb
 --- /dev/null
 +++ b/src/libcamera/pipeline/starfive/starfive.cpp
 @@ -0,0 +1,940 @@
@@ -1084,10 +1084,10 @@ index 00000000..3517679d
 +
 +} /* namespace libcamera */
 diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
-index 8fe5e45b..0bdcf440 100644
+index 023e2328..bc7cbfec 100644
 --- a/src/libcamera/v4l2_subdevice.cpp
 +++ b/src/libcamera/v4l2_subdevice.cpp
-@@ -524,4 +524,16 @@ std::vector<SizeRange> V4L2Subdevice::enumPadSizes(unsigned int pad,
+@@ -525,4 +525,16 @@ std::vector<SizeRange> V4L2Subdevice::enumPadSizes(unsigned int pad,
  	return sizes;
  }
  
@@ -1105,5 +1105,5 @@ index 8fe5e45b..0bdcf440 100644
 +
  } /* namespace libcamera */
 -- 
-2.17.1
+2.25.1
 

+ 3 - 3
package/libcamera/0002-add-sensor-ctrls.patch

@@ -1,7 +1,7 @@
-From 0dafff3d38dd2b44a0bf602fcd1c25e55cdaaec6 Mon Sep 17 00:00:00 2001
+From a3756db6257742587da7e97546aa330ad363bfd1 Mon Sep 17 00:00:00 2001
 From: sw.multimedia <sw.multimedia@starfivetech.com>
 Date: Tue, 26 Oct 2021 12:29:30 +0800
-Subject: [PATCH] add sensor ctrls
+Subject: [PATCH 02/10] add sensor ctrls
 
 ---
  src/libcamera/pipeline/starfive/starfive.cpp | 118 ++++++++++++++++---
@@ -178,5 +178,5 @@ index 8797bdcb..f63af910 100644
  		return ret;
  
 -- 
-2.17.1
+2.25.1
 

+ 101 - 60
package/libcamera/0003-add-Meta-and-starfive-ipa-dummy.patch

@@ -1,7 +1,33 @@
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/include/libcamera/ipa/meson.build libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/include/libcamera/ipa/meson.build
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/include/libcamera/ipa/meson.build	2021-09-07 07:11:15.000000000 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/include/libcamera/ipa/meson.build	2021-10-26 10:35:08.196358414 +0800
-@@ -63,6 +63,7 @@
+From 26127511bf0b6d2f016c16956d04332858bd8d7f Mon Sep 17 00:00:00 2001
+From: sw.multimedia <sw.multimedia@starfivetech.com>
+Date: Thu, 13 Jan 2022 13:52:11 +0800
+Subject: [PATCH 03/10] libcamera: 1. add caps for src templ            2. add
+ starfive ipa (dummy)
+
+---
+ include/libcamera/ipa/meson.build            |   1 +
+ include/libcamera/ipa/starfive.mojom         |  45 +++++
+ meson_options.txt                            |   2 +-
+ src/gstreamer/gstlibcamerasrc.cpp            |  11 +-
+ src/ipa/starfive/data/meson.build            |   8 +
+ src/ipa/starfive/data/starfive.conf          |   3 +
+ src/ipa/starfive/meson.build                 |  23 +++
+ src/ipa/starfive/starfive.cpp                | 200 +++++++++++++++++++
+ src/libcamera/ipa_manager.cpp                |   4 +-
+ src/libcamera/pipeline/starfive/starfive.cpp |  56 +++++-
+ src/meson.build                              |   1 +
+ 11 files changed, 350 insertions(+), 4 deletions(-)
+ create mode 100644 include/libcamera/ipa/starfive.mojom
+ create mode 100644 src/ipa/starfive/data/meson.build
+ create mode 100644 src/ipa/starfive/data/starfive.conf
+ create mode 100644 src/ipa/starfive/meson.build
+ create mode 100644 src/ipa/starfive/starfive.cpp
+
+diff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build
+index 6ea94fb5..b84358a6 100644
+--- a/include/libcamera/ipa/meson.build
++++ b/include/libcamera/ipa/meson.build
+@@ -65,6 +65,7 @@ ipa_mojom_files = [
      'raspberrypi.mojom',
      'rkisp1.mojom',
      'vimc.mojom',
@@ -9,9 +35,11 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/include/libcamera/
  ]
  
  ipa_mojoms = []
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/include/libcamera/ipa/starfive.mojom libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/include/libcamera/ipa/starfive.mojom
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/include/libcamera/ipa/starfive.mojom	1970-01-01 08:00:00.000000000 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/include/libcamera/ipa/starfive.mojom	2021-10-26 10:35:08.196358414 +0800
+diff --git a/include/libcamera/ipa/starfive.mojom b/include/libcamera/ipa/starfive.mojom
+new file mode 100644
+index 00000000..b302b609
+--- /dev/null
++++ b/include/libcamera/ipa/starfive.mojom
 @@ -0,0 +1,45 @@
 +/* SPDX-License-Identifier: LGPL-2.1-or-later */
 +
@@ -58,10 +86,11 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/include/libcamera/
 +interface IPAStarfiveEventInterface {
 +	paramsFilled(uint32 bufferId);
 +};
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/meson_options.txt libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/meson_options.txt
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/meson_options.txt	2021-10-26 10:40:32.171834666 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/meson_options.txt	2021-10-26 10:35:08.196358414 +0800
-@@ -27,7 +27,7 @@
+diff --git a/meson_options.txt b/meson_options.txt
+index 14baa7ef..ba4ecb0b 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -27,7 +27,7 @@ option('gstreamer',
  
  option('ipas',
          type : 'array',
@@ -70,23 +99,23 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/meson_options.txt
          description : 'Select which IPA modules to build')
  
  option('lc-compliance',
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/gstreamer/gstlibcamerasrc.cpp libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/gstreamer/gstlibcamerasrc.cpp
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/gstreamer/gstlibcamerasrc.cpp	2021-10-26 10:40:32.171834666 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/gstreamer/gstlibcamerasrc.cpp	2021-10-26 10:36:19.850655340 +0800
-@@ -140,9 +140,19 @@
+diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
+index 1dd0e807..6329b01a 100644
+--- a/src/gstreamer/gstlibcamerasrc.cpp
++++ b/src/gstreamer/gstlibcamerasrc.cpp
+@@ -140,9 +140,18 @@ G_DEFINE_TYPE_WITH_CODE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT,
  
  #define TEMPLATE_CAPS GST_STATIC_CAPS("video/x-raw; image/jpeg")
  
 +#define TEMPLATE_CAPS_SRC GST_STATIC_CAPS("video/x-raw, "\
-+      "format = { (string)BG24,(string)RG24,(string)BA24, \
-+      	          (string)NV12, (string)NV21, (string)NV16, \
-+      	          (string)NV61, (string)NV24, (string)UYVY, \
-+      	          (string)VYUY, (string)YUYV, (string)YVYU}, "\
-+      "width = " GST_VIDEO_SIZE_RANGE ", "\
-+      "height = " GST_VIDEO_SIZE_RANGE ", "\
-+      "framerate = " GST_VIDEO_FPS_RANGE ";"\
++		"format = { (string)BG24,(string)RG24,(string)BA24, \
++			(string)NV12, (string)NV21, (string)NV16, \
++			(string)NV61, (string)NV24, (string)UYVY, \
++			(string)VYUY, (string)YUYV, (string)YVYU}, "\
++			"width = " GST_VIDEO_SIZE_RANGE ", "\
++			"height = " GST_VIDEO_SIZE_RANGE ", "\
++			"framerate = " GST_VIDEO_FPS_RANGE ";"\
 +)
-+
  /* For the simple case, we have a src pad that is always present. */
  GstStaticPadTemplate src_template = {
 -	"src", GST_PAD_SRC, GST_PAD_ALWAYS, TEMPLATE_CAPS
@@ -94,9 +123,11 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/gstreamer/gstl
  };
  
  /* More pads can be requested in state < PAUSED */
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/data/meson.build libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/ipa/starfive/data/meson.build
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/data/meson.build	1970-01-01 08:00:00.000000000 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/ipa/starfive/data/meson.build	2021-10-26 10:35:08.196358414 +0800
+diff --git a/src/ipa/starfive/data/meson.build b/src/ipa/starfive/data/meson.build
+new file mode 100644
+index 00000000..0ce6a9b4
+--- /dev/null
++++ b/src/ipa/starfive/data/meson.build
 @@ -0,0 +1,8 @@
 +# SPDX-License-Identifier: CC0-1.0
 +
@@ -106,16 +137,20 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/d
 +
 +install_data(conf_files,
 +             install_dir : ipa_data_dir / 'starfive')
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/data/starfive.conf libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/ipa/starfive/data/starfive.conf
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/data/starfive.conf	1970-01-01 08:00:00.000000000 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/ipa/starfive/data/starfive.conf	2021-10-26 10:35:08.196358414 +0800
+diff --git a/src/ipa/starfive/data/starfive.conf b/src/ipa/starfive/data/starfive.conf
+new file mode 100644
+index 00000000..6b74f622
+--- /dev/null
++++ b/src/ipa/starfive/data/starfive.conf
 @@ -0,0 +1,3 @@
 +# SPDX-License-Identifier: LGPL-2.1-or-later
 +#
 +# Dummy configuration file for the starfive IPA.
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/meson.build libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/ipa/starfive/meson.build
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/meson.build	1970-01-01 08:00:00.000000000 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/ipa/starfive/meson.build	2021-10-26 10:35:08.196358414 +0800
+diff --git a/src/ipa/starfive/meson.build b/src/ipa/starfive/meson.build
+new file mode 100644
+index 00000000..c93bd058
+--- /dev/null
++++ b/src/ipa/starfive/meson.build
 @@ -0,0 +1,23 @@
 +# SPDX-License-Identifier: CC0-1.0
 +
@@ -140,9 +175,11 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/m
 +endif
 +
 +subdir('data')
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/starfive.cpp libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/ipa/starfive/starfive.cpp
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/starfive.cpp	1970-01-01 08:00:00.000000000 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/ipa/starfive/starfive.cpp	2021-10-26 10:35:08.196358414 +0800
+diff --git a/src/ipa/starfive/starfive.cpp b/src/ipa/starfive/starfive.cpp
+new file mode 100644
+index 00000000..e1207606
+--- /dev/null
++++ b/src/ipa/starfive/starfive.cpp
 @@ -0,0 +1,200 @@
 +/* SPDX-License-Identifier: LGPL-2.1-or-later */
 +/*
@@ -344,10 +381,11 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/ipa/starfive/s
 +}
 +
 +} /* namespace libcamera */
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/ipa_manager.cpp libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/libcamera/ipa_manager.cpp
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/ipa_manager.cpp	2021-09-07 07:11:15.000000000 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/libcamera/ipa_manager.cpp	2021-10-26 10:35:08.196358414 +0800
-@@ -276,7 +276,9 @@
+diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
+index ec966045..634cbb8d 100644
+--- a/src/libcamera/ipa_manager.cpp
++++ b/src/libcamera/ipa_manager.cpp
+@@ -276,7 +276,9 @@ IPAModule *IPAManager::module(PipelineHandler *pipe, uint32_t minVersion,
  
  bool IPAManager::isSignatureValid([[maybe_unused]] IPAModule *ipa) const
  {
@@ -358,10 +396,11 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/ipa_
  	char *force = utils::secure_getenv("LIBCAMERA_IPA_FORCE_ISOLATION");
  	if (force && force[0] != '\0') {
  		LOG(IPAManager, Debug)
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipeline/starfive/starfive.cpp libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/libcamera/pipeline/starfive/starfive.cpp
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipeline/starfive/starfive.cpp	2021-10-26 10:40:32.175834819 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/libcamera/pipeline/starfive/starfive.cpp	2021-10-26 10:35:08.196358414 +0800
-@@ -23,6 +23,11 @@
+diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp
+index f63af910..bc82a062 100644
+--- a/src/libcamera/pipeline/starfive/starfive.cpp
++++ b/src/libcamera/pipeline/starfive/starfive.cpp
+@@ -23,6 +23,10 @@
  #include <linux/videodev2.h>
  #include <linux/v4l2-subdev.h>
  
@@ -369,11 +408,10 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
 +#include <libcamera/ipa/ipa_module_info.h>
 +#include <libcamera/ipa/starfive_ipa_interface.h>
 +#include <libcamera/ipa/starfive_ipa_proxy.h>
-+
  #include "libcamera/internal/camera.h"
  #include "libcamera/internal/camera_sensor.h"
  #include "libcamera/internal/device_enumerator.h"
-@@ -189,6 +194,7 @@
+@@ -189,6 +193,7 @@ public:
  	std::vector<SizeRange> sensorSizes() const;
  	std::vector<PixelFormat> sensorFormats() const;
  	std::vector<PixelFormat> videoFormats() const;
@@ -381,7 +419,7 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
  
  	MediaDevice *media_;
  	V4L2VideoDevice *video_;
-@@ -197,6 +203,8 @@
+@@ -197,6 +202,8 @@ public:
  	CameraSensor *sensor_;
  	Stream outStream_;
  	Stream rawStream_;
@@ -390,7 +428,7 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
  
  private:
  	bool haveRaw_;
-@@ -591,6 +599,22 @@
+@@ -591,6 +598,22 @@ int PipelineHandlerStarFive::configure(Camera *camera, CameraConfiguration *c)
  			    data->video_->toV4L2PixelFormat(cfg.pixelFormat))
  				return -EINVAL;
  		}
@@ -399,8 +437,8 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
 +		/* Inform IPA of stream configuration and sensor controls. */
 +		std::map<unsigned int, IPAStream> streamConfig;
 +		streamConfig.emplace(std::piecewise_construct,
-+				     std::forward_as_tuple(0),
-+				     std::forward_as_tuple(cfg.pixelFormat, cfg.size));
++					std::forward_as_tuple(0),
++					std::forward_as_tuple(cfg.pixelFormat, cfg.size));
 +
 +		std::map<unsigned int, ControlInfoMap> entityControls;
 +		entityControls.emplace(0, data->sensor_->controls());
@@ -413,7 +451,7 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
  	}
  
  	return 0;
-@@ -627,6 +651,17 @@
+@@ -630,6 +653,17 @@ int PipelineHandlerStarFive::start(Camera *camera, const ControlList *controls)
  	ret = data->video_->importBuffers(count);
  	if (ret < 0)
  		return ret;
@@ -431,7 +469,7 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
  
  	ret = data->video_->streamOn();
  	if (ret < 0)
-@@ -658,6 +693,7 @@
+@@ -661,6 +695,7 @@ int PipelineHandlerStarFive::start(Camera *camera, const ControlList *controls)
  
  	return ret;
  error:
@@ -439,11 +477,10 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
  	data->video_->releaseBuffers();
  	return ret;
  }
-@@ -668,6 +704,13 @@
+@@ -671,6 +706,12 @@ void PipelineHandlerStarFive::stop(Camera *camera)
  
  	StarFiveCameraData *data = cameraData(camera);
  	data->video_->streamOff();
-+
 +	std::vector<unsigned int> ids;
 +	for (const std::unique_ptr<FrameBuffer> &buffer : data->mockIPABufs_)
 +		ids.push_back(buffer->cookie());
@@ -453,7 +490,7 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
  	data->video_->releaseBuffers();
  	if (data->rawActive()) {
  		data->raw_->streamOff();
-@@ -810,8 +853,11 @@
+@@ -813,8 +854,11 @@ int PipelineHandlerStarFive::queueRequestDevice(Camera *camera, Request *request
  		LOG(STARFIVE, Debug)
  			<< "stream queueBuffer : " << stream->configuration().toString();
  
@@ -462,11 +499,11 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
  			ret = data->video_->queueBuffer(buffer);
 +			data->ipa_->processControls(request->sequence(), request->controls());
 +		}
-+			
++
  		else if (stream == &data->rawStream_)
  			ret = data->raw_->queueBuffer(buffer);
  		else
-@@ -915,6 +961,16 @@
+@@ -918,6 +962,16 @@ int PipelineHandlerStarFive::registerCameras()
  		if (data->init())
  			continue;
  
@@ -483,10 +520,11 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/libcamera/pipe
  		/* Create and register the camera. */
  		LOG(STARFIVE, Debug) << "register deviceName: "
  				     << videoEntiryName;
-diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/meson.build libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/meson.build
---- libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/meson.build	2021-09-07 07:11:15.000000000 +0800
-+++ libcamera-06e53199c2563105030bda4c72752b853da7edc8_after/src/meson.build	2021-10-26 10:35:08.196358414 +0800
-@@ -20,6 +20,7 @@
+diff --git a/src/meson.build b/src/meson.build
+index e0ea9c35..8ae89b5b 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -20,6 +20,7 @@ if openssl.found()
                                   output : ['ipa-priv-key.pem'],
                                   command : [gen_ipa_priv_key, '@OUTPUT@'])
      config_h.set('HAVE_IPA_PUBKEY', 1)
@@ -494,3 +532,6 @@ diff -Naur libcamera-06e53199c2563105030bda4c72752b853da7edc8/src/meson.build li
      ipa_sign_module = true
  else
      ipa_sign_module = false
+-- 
+2.25.1
+

+ 9 - 9
package/libcamera/0004-update-toV4L2PixelFormat.patch

@@ -1,17 +1,17 @@
-From 62bce91263c747e42d39bcaa6a15f03458c38e70 Mon Sep 17 00:00:00 2001
+From eb7bd9dc15d8a2636d12d4e8cec219946fea353d Mon Sep 17 00:00:00 2001
 From: sw.multimedia <sw.multimedia@starfivetech.com>
 Date: Tue, 16 Nov 2021 17:23:17 +0800
-Subject: [PATCH] update toV4L2PixelFormat
+Subject: [PATCH 04/10] update toV4L2PixelFormat
 
 ---
  src/libcamera/pipeline/starfive/starfive.cpp | 18 ++++++++++++------
  1 file changed, 12 insertions(+), 6 deletions(-)
 
 diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp
-index 36ef3b7b..159ead04 100644
+index bc82a062..58e1f55a 100644
 --- a/src/libcamera/pipeline/starfive/starfive.cpp
 +++ b/src/libcamera/pipeline/starfive/starfive.cpp
-@@ -441,7 +441,8 @@ CameraConfiguration::Status StarFiveCameraConfiguration::validate()
+@@ -440,7 +440,8 @@ CameraConfiguration::Status StarFiveCameraConfiguration::validate()
  				&& data_->haveRaw()) {
  			V4L2DeviceFormat format = {};
  			format.fourcc =
@@ -21,7 +21,7 @@ index 36ef3b7b..159ead04 100644
  			format.size = cfg.size;
  
  			int ret = data_->raw_->tryFormat(&format);
-@@ -455,7 +456,8 @@ CameraConfiguration::Status StarFiveCameraConfiguration::validate()
+@@ -454,7 +455,8 @@ CameraConfiguration::Status StarFiveCameraConfiguration::validate()
  		} else {
  			V4L2DeviceFormat format = {};
  			format.fourcc =
@@ -31,7 +31,7 @@ index 36ef3b7b..159ead04 100644
  			format.size = cfg.size;
  
  			int ret = data_->video_->tryFormat(&format);
-@@ -572,7 +574,8 @@ int PipelineHandlerStarFive::configure(Camera *camera, CameraConfiguration *c)
+@@ -571,7 +573,8 @@ int PipelineHandlerStarFive::configure(Camera *camera, CameraConfiguration *c)
  		if (stream == &data->rawStream_) {
  			V4L2DeviceFormat format = {};
  			format.fourcc =
@@ -41,7 +41,7 @@ index 36ef3b7b..159ead04 100644
  			format.size = cfg.size;
  
  			ret = data->raw_->setFormat(&format);
-@@ -581,13 +584,15 @@ int PipelineHandlerStarFive::configure(Camera *camera, CameraConfiguration *c)
+@@ -580,13 +583,15 @@ int PipelineHandlerStarFive::configure(Camera *camera, CameraConfiguration *c)
  
  			if (format.size != cfg.size ||
  			    format.fourcc !=
@@ -59,7 +59,7 @@ index 36ef3b7b..159ead04 100644
  			format.size = cfg.size;
  
  			ret = data->video_->setFormat(&format);
-@@ -596,7 +601,8 @@ int PipelineHandlerStarFive::configure(Camera *camera, CameraConfiguration *c)
+@@ -595,7 +600,8 @@ int PipelineHandlerStarFive::configure(Camera *camera, CameraConfiguration *c)
  
  			if (format.size != cfg.size ||
  			    format.fourcc !=
@@ -70,5 +70,5 @@ index 36ef3b7b..159ead04 100644
  		}
  
 -- 
-2.17.1
+2.25.1
 

+ 3 - 3
package/libcamera/0005-fix-build-gen-version-error.patch

@@ -1,7 +1,7 @@
-From 482311f6d06fa536c113dc0896829f74b172421c Mon Sep 17 00:00:00 2001
+From 4810d94989891c7bb825ab5847b7e01e9db5e14d Mon Sep 17 00:00:00 2001
 From: sw.multimedia <sw.multimedia@starfivetech.com>
 Date: Wed, 17 Nov 2021 10:07:35 +0800
-Subject: [PATCH] fix build gen version error
+Subject: [PATCH 05/10] fix build gen version error
 
 ---
  utils/gen-version.sh | 3 +++
@@ -26,5 +26,5 @@ index eb7c7268..ef548100 100755
  echo "$version"
 +cd $workdir
 -- 
-2.17.1
+2.25.1
 

+ 16 - 2
package/libcamera/0006-fix-yuy2-format-unsupported.patch

@@ -1,7 +1,19 @@
+From 652fa5837d0c54c4b850b6b2a2171dc94aab3c1f Mon Sep 17 00:00:00 2001
+From: sw.multimedia <sw.multimedia@starfivetech.com>
+Date: Thu, 13 Jan 2022 13:57:12 +0800
+Subject: [PATCH 06/10] libcamera: pixel formats supported should move to
+ request pads
+
+---
+ src/gstreamer/gstlibcamerasrc.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
+index 6329b01a..53247c3f 100644
 --- a/src/gstreamer/gstlibcamerasrc.cpp
 +++ b/src/gstreamer/gstlibcamerasrc.cpp
-@@ -152,12 +152,12 @@
- 
+@@ -151,12 +151,12 @@ G_DEFINE_TYPE_WITH_CODE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT,
+ )
  /* For the simple case, we have a src pad that is always present. */
  GstStaticPadTemplate src_template = {
 -	"src", GST_PAD_SRC, GST_PAD_ALWAYS, TEMPLATE_CAPS_SRC
@@ -15,4 +27,6 @@
  };
  
  void
+-- 
+2.25.1
 

+ 10 - 10
package/libcamera/0007-add-list-controls-and-properties.patch

@@ -1,17 +1,17 @@
-From 9eb2fc23e4d453acaef7f1f45874aca381d2fefd Mon Sep 17 00:00:00 2001
+From 5e558d4454fa476cc9e0670a30d631a1174b55a2 Mon Sep 17 00:00:00 2001
 From: sw.multimedia <sw.multimedia@starfivetech.com>
 Date: Tue, 23 Nov 2021 10:44:04 +0800
-Subject: [PATCH] add list controls and properties
+Subject: [PATCH 07/10] add list controls and properties
 
 ---
  src/libcamera/pipeline/starfive/starfive.cpp | 219 ++++++++++++++-----
  1 file changed, 165 insertions(+), 54 deletions(-)
 
 diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp
-index 159ead04..bb513387 100644
+index 58e1f55a..b91a85a4 100644
 --- a/src/libcamera/pipeline/starfive/starfive.cpp
 +++ b/src/libcamera/pipeline/starfive/starfive.cpp
-@@ -186,7 +186,9 @@ public:
+@@ -185,7 +185,9 @@ public:
  			delete ispSubDev_;
  	}
  
@@ -22,7 +22,7 @@ index 159ead04..bb513387 100644
  	void bufferReady(FrameBuffer *buffer);
  	bool haveRaw() const { return haveRaw_; }
  	bool rawActive() const { return rawActive_; }
-@@ -299,7 +301,7 @@ private:
+@@ -298,7 +300,7 @@ private:
  	StarFiveCameraData *data_;
  };
  
@@ -31,7 +31,7 @@ index 159ead04..bb513387 100644
  {
  	int ret;
  
-@@ -354,7 +356,38 @@ int StarFiveCameraData::init()
+@@ -353,7 +355,38 @@ int StarFiveCameraData::init()
  					&StarFiveCameraData::bufferReady);
  		}
  	}
@@ -71,7 +71,7 @@ index 159ead04..bb513387 100644
  	return 0;
  }
  
-@@ -736,97 +769,89 @@ int PipelineHandlerStarFive::processControls(StarFiveCameraData *data, const Con
+@@ -734,97 +767,89 @@ int PipelineHandlerStarFive::processControls(StarFiveCameraData *data, const Con
  
  	for (auto it : controls) {
  		unsigned int id = it.first;
@@ -211,7 +211,7 @@ index 159ead04..bb513387 100644
  	}
  
  	for (const auto &ctrl : SensorControls)
-@@ -967,7 +992,7 @@ int PipelineHandlerStarFive::registerCameras()
+@@ -965,7 +990,7 @@ int PipelineHandlerStarFive::registerCameras()
  					videoEntiryName, sensorEntityName);
  
  		/* Locate and open the capture video node. */
@@ -220,7 +220,7 @@ index 159ead04..bb513387 100644
  			continue;
  
  		/*create ipa module*/
-@@ -1077,6 +1102,92 @@ void StarFiveCameraData::bufferReady(FrameBuffer *buffer)
+@@ -1075,6 +1100,92 @@ void StarFiveCameraData::bufferReady(FrameBuffer *buffer)
  	pipe->completeRequest(request);
  }
  
@@ -314,5 +314,5 @@ index 159ead04..bb513387 100644
  
  } /* namespace libcamera */
 -- 
-2.17.1
+2.25.1
 

+ 12 - 12
package/libcamera/0008-support-use-yaml-file-to-config-sensor-pipeline.patch

@@ -1,11 +1,11 @@
-From dccc998ecf580e5c41b290a60e6b6f170601dc29 Mon Sep 17 00:00:00 2001
+From 4c51694d5f3fbb23423f60165f928e50e7d9c3a3 Mon Sep 17 00:00:00 2001
 From: sw.multimedia <sw.multimedia@starfivetech.com>
 Date: Wed, 15 Dec 2021 17:13:58 +0800
-Subject: [PATCH] support use yaml file to config sensor pipeline
+Subject: [PATCH 08/10] support use yaml file to config sensor pipeline
 
 ---
  src/libcamera/meson.build                     |   3 +
- .../pipeline/starfive/sensors_pipeline.yaml     |  35 ++++++
+ .../pipeline/starfive/sensors_pipeline.yaml   |  35 ++++++
  src/libcamera/pipeline/starfive/starfive.cpp  | 106 ++++++++++++++++--
  3 files changed, 132 insertions(+), 12 deletions(-)
  create mode 100644 src/libcamera/pipeline/starfive/sensors_pipeline.yaml
@@ -73,7 +73,7 @@ index 00000000..3446b0ac
 +    sensortype: 8
 +...
 diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp
-index bb513387..8afe5e89 100644
+index b91a85a4..864addfa 100644
 --- a/src/libcamera/pipeline/starfive/starfive.cpp
 +++ b/src/libcamera/pipeline/starfive/starfive.cpp
 @@ -9,6 +9,8 @@
@@ -85,7 +85,7 @@ index bb513387..8afe5e89 100644
  
  #include <libcamera/camera.h>
  #include <libcamera/control_ids.h>
-@@ -40,14 +42,7 @@
+@@ -39,14 +41,7 @@
  
  #define STF_MAX_CAMERAS   3
  
@@ -101,7 +101,7 @@ index bb513387..8afe5e89 100644
  
  namespace {
  
-@@ -67,14 +62,16 @@ typedef enum {
+@@ -66,14 +61,16 @@ typedef enum {
  typedef struct {
  	std::string sensorEntityName_;
  	std::string sensorFwImageName_;
@@ -120,7 +120,7 @@ index bb513387..8afe5e89 100644
  typedef struct {
  	std::string source;
  	std::string link;
-@@ -140,6 +137,40 @@ const std::vector<PipelineConfigLink> pipelineConfigs[SENSORTYPE_MAX] = {
+@@ -139,6 +136,40 @@ const std::vector<PipelineConfigLink> pipelineConfigs[SENSORTYPE_MAX] = {
  	mipicsi1raw1Config,
  };
  
@@ -161,7 +161,7 @@ index bb513387..8afe5e89 100644
  const std::map<uint32_t, PixelFormat> mbusCodesToPixelFormat = {
  	{ MEDIA_BUS_FMT_SBGGR10_1X10, formats::SBGGR12 },
  	{ MEDIA_BUS_FMT_SGBRG10_1X10, formats::SGBRG12 },
-@@ -147,8 +178,6 @@ const std::map<uint32_t, PixelFormat> mbusCodesToPixelFormat = {
+@@ -146,8 +177,6 @@ const std::map<uint32_t, PixelFormat> mbusCodesToPixelFormat = {
  	{ MEDIA_BUS_FMT_SRGGB10_1X10, formats::SRGGB12 },
  };
  
@@ -170,7 +170,7 @@ index bb513387..8afe5e89 100644
  class StarFiveCameraData : public Camera::Private
  {
  public:
-@@ -424,6 +453,7 @@ private:
+@@ -423,6 +452,7 @@ private:
  	int enableLinks(std::vector<PipelineConfigLink> config);
  
  	MediaDevice *starFiveMediaDev_;
@@ -178,7 +178,7 @@ index bb513387..8afe5e89 100644
  };
  
  StarFiveCameraConfiguration::StarFiveCameraConfiguration(StarFiveCameraData *data)
-@@ -1044,6 +1074,56 @@ int PipelineHandlerStarFive::enableLinks(std::vector<PipelineConfigLink> config)
+@@ -1042,6 +1072,56 @@ int PipelineHandlerStarFive::enableLinks(std::vector<PipelineConfigLink> config)
  	return ret;
  }
  
@@ -235,7 +235,7 @@ index bb513387..8afe5e89 100644
  bool PipelineHandlerStarFive::match(DeviceEnumerator *enumerator)
  {
  	int numCameras = 0;
-@@ -1061,6 +1141,8 @@ bool PipelineHandlerStarFive::match(DeviceEnumerator *enumerator)
+@@ -1059,6 +1139,8 @@ bool PipelineHandlerStarFive::match(DeviceEnumerator *enumerator)
  	if (starFiveMediaDev_->disableLinks())
  		return false;
  
@@ -245,5 +245,5 @@ index bb513387..8afe5e89 100644
  		MediaEntity *sensorEntity =
  			starFiveMediaDev_->getEntityByName(it.sensorEntityName_);
 -- 
-2.17.1
+2.25.1
 

+ 16 - 16
package/libcamera/0009-csi0-csi1-can-be-configured-to-the-same-ISP.patch

@@ -1,17 +1,17 @@
-From 6d04377edf1307e3f2325db3ecfc9ff86db35233 Mon Sep 17 00:00:00 2001
+From a24624e164f041e86d9c864a4eb83ab8c2befee4 Mon Sep 17 00:00:00 2001
 From: sw.multimedia <sw.multimedia@starfivetech.com>
 Date: Thu, 16 Dec 2021 17:46:03 +0800
-Subject: [PATCH] csi0/csi1 can be configured to the same ISP
+Subject: [PATCH 09/10] csi0/csi1 can be configured to the same ISP
 
 ---
  src/libcamera/pipeline/starfive/starfive.cpp | 146 +++++++++++--------
  1 file changed, 89 insertions(+), 57 deletions(-)
 
 diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp
-index 8afe5e89..c433ec0d 100644
+index 864addfa..61a2ddc6 100644
 --- a/src/libcamera/pipeline/starfive/starfive.cpp
 +++ b/src/libcamera/pipeline/starfive/starfive.cpp
-@@ -183,11 +183,11 @@ class StarFiveCameraData : public Camera::Private
+@@ -182,11 +182,11 @@ class StarFiveCameraData : public Camera::Private
  public:
  	StarFiveCameraData(PipelineHandler *pipe, MediaDevice *media,
  			std::string entityName,
@@ -25,7 +25,7 @@ index 8afe5e89..c433ec0d 100644
  		videoEntityName_ = entityName;
  		if ( videoEntityName_ == "stf_vin0_isp0_video1")
  			ispEntityName_ = "stf_isp0";
-@@ -222,10 +222,12 @@ public:
+@@ -221,10 +221,12 @@ public:
  	bool haveRaw() const { return haveRaw_; }
  	bool rawActive() const { return rawActive_; }
  	void setRawActive(bool val) { rawActive_ = val; }
@@ -38,7 +38,7 @@ index 8afe5e89..c433ec0d 100644
  
  	MediaDevice *media_;
  	V4L2VideoDevice *video_;
-@@ -241,8 +243,8 @@ private:
+@@ -240,8 +242,8 @@ private:
  	bool haveRaw_;
  	bool rawActive_;
  	std::string videoEntityName_;
@@ -48,7 +48,7 @@ index 8afe5e89..c433ec0d 100644
  	std::string getRawVideoEntityName()
  	{
  		LOG(STARFIVE, Debug) << __func__;
-@@ -253,7 +255,6 @@ private:
+@@ -252,7 +254,6 @@ private:
  		else
  			return "unknow";
  	}
@@ -56,7 +56,7 @@ index 8afe5e89..c433ec0d 100644
  };
  
  std::vector<PixelFormat> StarFiveCameraData::videoFormats() const
-@@ -335,17 +336,12 @@ int StarFiveCameraData::init(MediaDevice *media)
+@@ -334,17 +335,12 @@ int StarFiveCameraData::init(MediaDevice *media)
  	int ret;
  
  	LOG(STARFIVE, Debug) << __func__;
@@ -80,7 +80,7 @@ index 8afe5e89..c433ec0d 100644
  
  	if (ispEntityName_ != "unknow") {
  		ispSubDev_ =
-@@ -353,13 +349,6 @@ int StarFiveCameraData::init(MediaDevice *media)
+@@ -352,13 +348,6 @@ int StarFiveCameraData::init(MediaDevice *media)
  		LOG(STARFIVE, Debug) << "ispEntityName: " << ispEntityName_;
  		if (ispSubDev_->open())
  			return -ENODEV;
@@ -94,7 +94,7 @@ index 8afe5e89..c433ec0d 100644
  	}
  
  	video_ = new V4L2VideoDevice(media_->getEntityByName(videoEntityName_));
-@@ -551,10 +540,20 @@ PipelineHandlerStarFive::generateConfiguration(Camera *camera,
+@@ -550,10 +539,20 @@ PipelineHandlerStarFive::generateConfiguration(Camera *camera,
  	StarFiveCameraData *data = cameraData(camera);
  	StarFiveCameraConfiguration *config =
  		new StarFiveCameraConfiguration(data);
@@ -115,7 +115,7 @@ index 8afe5e89..c433ec0d 100644
  	for (const StreamRole role : roles) {
  		std::map<PixelFormat, std::vector<SizeRange>> streamFormats;
  		unsigned int bufferCount;
-@@ -1004,9 +1003,43 @@ int PipelineHandlerStarFive::registerCameras()
+@@ -1002,9 +1001,43 @@ int PipelineHandlerStarFive::registerCameras()
  	unsigned int numCameras = 0;
  
  	LOG(STARFIVE, Debug) << __func__;
@@ -162,7 +162,7 @@ index 8afe5e89..c433ec0d 100644
  		std::string videoEntiryName;
  		videoEntiryName = getVideoEntityNameById(id);
  		if (videoEntiryName == "unknow")
-@@ -1014,12 +1047,17 @@ int PipelineHandlerStarFive::registerCameras()
+@@ -1012,12 +1045,17 @@ int PipelineHandlerStarFive::registerCameras()
  
  		std::string sensorEntityName;
  		sensorEntityName = findSensorEntityName(videoEntiryName);
@@ -183,7 +183,7 @@ index 8afe5e89..c433ec0d 100644
  
  		/* Locate and open the capture video node. */
  		if (data->init(starFiveMediaDev_))
-@@ -1036,18 +1074,17 @@ int PipelineHandlerStarFive::registerCameras()
+@@ -1034,18 +1072,17 @@ int PipelineHandlerStarFive::registerCameras()
  		data->ipa_->init(IPASettings{ conf, data->sensor_->model() });
  
  		/* Create and register the camera. */
@@ -205,7 +205,7 @@ index 8afe5e89..c433ec0d 100644
  			registerCamera(std::move(camera));
  		}
  		numCameras++;
-@@ -1066,9 +1103,26 @@ int PipelineHandlerStarFive::enableLinks(std::vector<PipelineConfigLink> config)
+@@ -1064,9 +1101,26 @@ int PipelineHandlerStarFive::enableLinks(std::vector<PipelineConfigLink> config)
  		if (!link)
  			return -ENODEV;
  
@@ -235,7 +235,7 @@ index 8afe5e89..c433ec0d 100644
  	}
  
  	return ret;
-@@ -1138,30 +1192,8 @@ bool PipelineHandlerStarFive::match(DeviceEnumerator *enumerator)
+@@ -1136,30 +1190,8 @@ bool PipelineHandlerStarFive::match(DeviceEnumerator *enumerator)
  	if (!starFiveMediaDev_)
  		return false;
  
@@ -267,5 +267,5 @@ index 8afe5e89..c433ec0d 100644
  	if (numCameras)
  		LOG(STARFIVE, Debug)
 -- 
-2.17.1
+2.25.1
 

+ 248 - 247
package/libcamera/0010-libcamera-add-framerate-for-request-pad-src.patch

@@ -1,253 +1,254 @@
-From d93fba5044e5688df377b8f1087d22b0357c36ba Mon Sep 17 00:00:00 2001
-From: chenhb3487 <chenhb3487@thundersoft.com>
-Date: Tue, 11 Jan 2022 10:24:26 +0800
-Subject: [PATCH] libcamera: add framerate for request pad src.
+From 4d84bab2e88580bb96a24343051f2ea8132dc4e3 Mon Sep 17 00:00:00 2001
+From: sw.multimedia <sw.multimedia@starfivetech.com>
+Date: Thu, 13 Jan 2022 14:44:18 +0800
+Subject: [PATCH 10/10] libcamera: add framerate for request pad src.
 
 ---
- .../0010-add-framerate-from-v4l2.patch        | 234 ++++++++++++++++++
- 1 file changed, 234 insertions(+)
- create mode 100644 package/libcamera/0010-add-framerate-from-v4l2.patch
+ include/libcamera/internal/v4l2_videodevice.h |  7 +-
+ include/libcamera/stream.h                    |  8 +++
+ src/gstreamer/gstlibcamera-utils.cpp          | 16 +++--
+ src/libcamera/pipeline/starfive/starfive.cpp  | 37 ++++++++++
+ src/libcamera/v4l2_videodevice.cpp            | 68 +++++++++++++++++++
+ 5 files changed, 131 insertions(+), 5 deletions(-)
 
-diff --git a/package/libcamera/0010-add-framerate-from-v4l2.patch b/package/libcamera/0010-add-framerate-from-v4l2.patch
-new file mode 100644
-index 00000000..b2a558aa
---- /dev/null
-+++ b/package/libcamera/0010-add-framerate-from-v4l2.patch
-@@ -0,0 +1,234 @@
-+diff -Naur a/include/libcamera/internal/v4l2_videodevice.h libcamera-d6f4abeead1e86d89dc376e8a303849bdb98d5fd/include/libcamera/internal/v4l2_videodevice.h
-+--- a/include/libcamera/internal/v4l2_videodevice.h	2022-01-10 22:03:08.131869823 +0800
-++++ b/include/libcamera/internal/v4l2_videodevice.h	2022-01-11 10:12:46.551963256 +0800
-+@@ -35,6 +35,11 @@
-+ class MediaDevice;
-+ class MediaEntity;
-+ 
-++struct V4L2Framerate {
-++	uint32_t num = 0;
-++	uint32_t denom = 0;
-++};
-++
-+ struct V4L2Capability final : v4l2_capability {
-+ 	const char *driver() const
-+ 	{
-+@@ -215,7 +220,7 @@
-+ 
-+ 	static std::unique_ptr<V4L2VideoDevice>
-+ 	fromEntityName(const MediaDevice *media, const std::string &entity);
-+-
-++	std::vector<V4L2Framerate> getFramerates(uint32_t pixelformat, uint32_t width, uint32_t height);
-+ protected:
-+ 	std::string logPrefix() const override;
-+ 
-+diff -Naur a/include/libcamera/stream.h b/include/libcamera/stream.h
-+--- a/include/libcamera/stream.h	2022-01-10 22:03:08.131869823 +0800
-++++ b/include/libcamera/stream.h	2022-01-11 10:12:56.020027708 +0800
-+@@ -36,6 +36,11 @@
-+ 	std::map<PixelFormat, std::vector<SizeRange>> formats_;
-+ };
-+ 
-++struct Framerate {
-++	uint32_t num = 0;
-++	uint32_t denom = 0;
-++};
-++
-+ struct StreamConfiguration {
-+ 	StreamConfiguration();
-+ 	StreamConfiguration(const StreamFormats &formats);
-+@@ -51,11 +56,15 @@
-+ 	void setStream(Stream *stream) { stream_ = stream; }
-+ 	const StreamFormats &formats() const { return formats_; }
-+ 
-++	void setframeRates(std::vector<Framerate> framerates) { rates = framerates; }
-++	const std::vector<Framerate> getframeRates() const { return rates; }
-++
-+ 	std::string toString() const;
-+ 
-+ private:
-+ 	Stream *stream_;
-+ 	StreamFormats formats_;
-++	std::vector<Framerate> rates;
-+ };
-+ 
-+ enum StreamRole {
-+diff -Naur a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp
-+--- a/src/gstreamer/gstlibcamera-utils.cpp	2022-01-10 22:03:08.135869864 +0800
-++++ b/src/gstreamer/gstlibcamera-utils.cpp	2022-01-11 10:13:11.952135908 +0800
-+@@ -140,10 +140,18 @@
-+ 			  "height", G_TYPE_INT, stream_cfg.size.height,
-+ 			  nullptr);
-+ 
-+-	// Add framerate negotiation support
-+-	// the range will be [ 0/1, 2147483647/1 ] as there is not any args 
-+-	// required from driver for the time being.
-+-	gst_structure_set(s, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
-++	std::vector<libcamera::Framerate> rates = stream_cfg.getframeRates();
-++	guint index = 0;
-++	for (libcamera::Framerate it : rates) {
-++		libcamera::Framerate rate = it;
-++		gst_structure_set (s, "framerate", GST_TYPE_FRACTION, rate.denom, rate.num, NULL);
-++                //truncate rates. only remain the first one.
-++		if ( index == 0)
-++		{
-++			break;
-++		}
-++		index++;
-++	}
-+ 
-+ 	gst_caps_append_structure(caps, s);
-+ 
-+diff -Naur a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp
-+--- a/src/libcamera/pipeline/starfive/starfive.cpp	2022-01-10 22:03:08.139869906 +0800
-++++ b/src/libcamera/pipeline/starfive/starfive.cpp	2022-01-11 10:13:31.200266219 +0800
-+@@ -44,6 +44,9 @@
-+ 
-+ #define PIPELINE_CONFIG_FILENAME "/etc/starfive/sensors_pipeline.yaml"
-+ 
-++#define DEFAULT_FRAMERATE_NUM 25;
-++#define DEFAULT_FRAMERATE_DENOM 1;
-++
-+ namespace {
-+ 
-+ typedef enum {
-+@@ -226,6 +229,8 @@
-+ 	std::vector<SizeRange> sensorSizes() const;
-+ 	std::vector<PixelFormat> sensorFormats() const;
-+ 	std::vector<PixelFormat> videoFormats() const;
-++	std::vector<Framerate> videoFrameRates(unsigned int pixelformat, unsigned int width, unsigned int height) const;
-++
-+ 	void paramsFilled(unsigned int id){}
-+ 	int ispLoadFW(const char *filename);
-+ 
-+@@ -270,6 +275,24 @@
-+ 	return formats;
-+ }
-+ 
-++std::vector<Framerate> StarFiveCameraData::videoFrameRates(unsigned int pixelformat, unsigned int width, unsigned int height) const
-++{
-++	if (!video_)
-++		return {};
-++
-++	std::vector<Framerate> framerates;
-++	for (auto it : video_->getFramerates(pixelformat, width, height)) {
-++		V4L2Framerate v4l2_framerate = (V4L2Framerate)it;
-++		libcamera::Framerate rate;
-++		rate.num = v4l2_framerate.num;
-++		rate.denom = v4l2_framerate.denom;
-++		LOG(STARFIVE, Debug) << "videoFrameRates framerate:  rate.num=" << rate.num << " rate.denom= " << rate.denom;
-++		framerates.push_back(rate);
-++	}
-++
-++	return framerates;
-++}
-++
-+ std::vector<PixelFormat> StarFiveCameraData::sensorFormats() const
-+ {
-+ 	if (!sensor_)
-+@@ -481,6 +504,20 @@
-+ 		cfg.size.height = std::max(OUTPUT_MIN_SIZE.height,
-+ 				std::min(OUTPUT_MAX_SIZE.height, cfg.size.height));
-+ 
-++		std::vector<Framerate> rates;
-++		rates = data_->videoFrameRates(cfg.pixelFormat,size.width, size.height);
-++		if (rates.size() > 0){
-++			cfg.setframeRates(rates);
-++		} else {
-++			LOG(STARFIVE, Debug)
-++				<< "fail to obtian framerate, use default one ";
-++			Framerate rate;
-++			rate.num = DEFAULT_FRAMERATE_NUM;
-++			rate.denom = DEFAULT_FRAMERATE_DENOM;
-++			rates.emplace_back(rate);
-++			cfg.setframeRates(rates);
-++		}
-++
-+ 		if (cfg.size != size) {
-+ 			LOG(STARFIVE, Debug)
-+ 				<< "Adjusting size to " << cfg.size.toString();
-+diff -Naur a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
-+--- a/src/libcamera/v4l2_videodevice.cpp	2022-01-10 22:03:08.135869864 +0800
-++++ b/src/libcamera/v4l2_videodevice.cpp	2022-01-11 10:13:42.444342141 +0800
-+@@ -31,6 +31,7 @@
-+ #include "libcamera/internal/framebuffer.h"
-+ #include "libcamera/internal/media_device.h"
-+ #include "libcamera/internal/media_object.h"
-++#include <limits.h>
-+ 
-+ /**
-+  * \file v4l2_videodevice.h
-+@@ -1847,6 +1848,73 @@
-+ 	return std::make_unique<V4L2VideoDevice>(mediaEntity);
-+ }
-+ 
-++std::vector<V4L2Framerate> V4L2VideoDevice::getFramerates(uint32_t pixelformat, uint32_t width, uint32_t height)
-++{
-++    struct v4l2_frmivalenum ival;
-++    uint32_t num, denom;
-++
-++    memset (&ival, 0, sizeof (struct v4l2_frmivalenum));
-++    ival.index = 0;
-++    ival.pixel_format = pixelformat;
-++    ival.width = width;
-++    ival.height = height;
-++    std::vector<V4L2Framerate> rates;
-++    LOG(V4L2, Debug) << "getFramerates: width: " << width << " height: " << height << " pixelformat " << pixelformat;
-++
-++    if (ioctl (VIDIOC_ENUM_FRAMEINTERVALS, &ival) < 0){
-++        LOG(V4L2, Error) << "fail to ioctl: VIDIOC_ENUM_FRAMEINTERVALS";
-++        goto enum_frameintervals_failed;
-++    }
-++
-++    if (ival.type == V4L2_FRMIVAL_TYPE_DISCRETE) {
-++        struct V4L2Framerate rate;
-++        do {
-++          num = ival.discrete.numerator;
-++          denom = ival.discrete.denominator;
-++
-++          if (num > INT_MAX || denom > INT_MAX) {
-++            /* let us hope we don't get here... */
-++            LOG(V4L2, Error) << "num or denom is beyond INT_MAX";
-++            goto enum_frameintervals_failed;
-++          }
-++
-++          // /* swap to get the framerate */
-++          // gst_value_set_fraction (&rate, denom, num);
-++          rate.denom = denom;
-++          rate.num = num;
-++          LOG(V4L2, Debug) << "gstFramerates adding discrete framerate: " << denom << "/" << num;
-++          rates.emplace_back(rate);
-++          ival.index++;
-++        } while (ioctl (VIDIOC_ENUM_FRAMEINTERVALS, &ival) >= 0);
-++    } else if (ival.type == V4L2_FRMIVAL_TYPE_STEPWISE){
-++        //TODO 
-++        goto enum_frameintervals_unimplemented;
-++    } else if (ival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) {
-++        num = ival.stepwise.min.numerator;
-++        denom = ival.stepwise.min.denominator;
-++        if (num > INT_MAX || denom > INT_MAX) {
-++            LOG(V4L2, Error) << "continuous frame interval: num or denom is beyond INT_MAX";
-++            goto enum_frameintervals_failed;
-++        }
-++
-++        struct V4L2Framerate rate;
-++        rate.denom = denom;
-++        rate.num = num;
-++        LOG(V4L2, Debug) << "gstFramerates continuous frame interval: " << denom << "/" <<num;
-++        rates.emplace_back(rate);
-++    }
-++
-++    return rates;
-++
-++enum_frameintervals_failed:
-++enum_frameintervals_unimplemented:
-++  {
-++    LOG(V4L2, Error) << "fail to obtain framerate !!!";
-++    return rates;
-++  }
-++
-++}
-++
-+ /**
-+  * \class V4L2M2MDevice
-+  * \brief Memory-to-Memory video device
+diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
+index a1c458e4..650da22d 100644
+--- a/include/libcamera/internal/v4l2_videodevice.h
++++ b/include/libcamera/internal/v4l2_videodevice.h
+@@ -35,6 +35,11 @@ class FileDescriptor;
+ class MediaDevice;
+ class MediaEntity;
+ 
++struct V4L2Framerate {
++	uint32_t num = 0;
++	uint32_t denom = 0;
++};
++
+ struct V4L2Capability final : v4l2_capability {
+ 	const char *driver() const
+ 	{
+@@ -215,7 +220,7 @@ public:
+ 
+ 	static std::unique_ptr<V4L2VideoDevice>
+ 	fromEntityName(const MediaDevice *media, const std::string &entity);
+-
++	std::vector<V4L2Framerate> getFramerates(uint32_t pixelformat, uint32_t width, uint32_t height);
+ protected:
+ 	std::string logPrefix() const override;
+ 
+diff --git a/include/libcamera/stream.h b/include/libcamera/stream.h
+index 0c55e716..2e06d7d8 100644
+--- a/include/libcamera/stream.h
++++ b/include/libcamera/stream.h
+@@ -36,6 +36,11 @@ private:
+ 	std::map<PixelFormat, std::vector<SizeRange>> formats_;
+ };
+ 
++struct Framerate {
++	uint32_t num = 0;
++	uint32_t denom = 0;
++};
++
+ struct StreamConfiguration {
+ 	StreamConfiguration();
+ 	StreamConfiguration(const StreamFormats &formats);
+@@ -51,11 +56,14 @@ struct StreamConfiguration {
+ 	void setStream(Stream *stream) { stream_ = stream; }
+ 	const StreamFormats &formats() const { return formats_; }
+ 
++	void setframeRates(std::vector<Framerate> framerates) { rates = framerates; }
++	const std::vector<Framerate> getframeRates() const { return rates; }
+ 	std::string toString() const;
+ 
+ private:
+ 	Stream *stream_;
+ 	StreamFormats formats_;
++	std::vector<Framerate> rates;
+ };
+ 
+ enum StreamRole {
+diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp
+index bce4960a..4cd07508 100644
+--- a/src/gstreamer/gstlibcamera-utils.cpp
++++ b/src/gstreamer/gstlibcamera-utils.cpp
+@@ -140,10 +140,18 @@ gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg
+ 			  "height", G_TYPE_INT, stream_cfg.size.height,
+ 			  nullptr);
+ 
+-	// Add framerate negotiation support
+-	// the range will be [ 0/1, 2147483647/1 ] as there is not any args 
+-	// required from driver for the time being.
+-	gst_structure_set(s, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++	std::vector<libcamera::Framerate> rates = stream_cfg.getframeRates();
++	guint index = 0;
++	for (libcamera::Framerate it : rates) {
++		libcamera::Framerate rate = it;
++		gst_structure_set (s, "framerate", GST_TYPE_FRACTION, rate.denom, rate.num, NULL);
++                //truncate rates. only remain the first one.
++		if ( index == 0)
++		{
++			break;
++		}
++		index++;
++	}
+ 
+ 	gst_caps_append_structure(caps, s);
+ 
+diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp
+index 61a2ddc6..997d9835 100644
+--- a/src/libcamera/pipeline/starfive/starfive.cpp
++++ b/src/libcamera/pipeline/starfive/starfive.cpp
+@@ -43,6 +43,9 @@
+ 
+ #define PIPELINE_CONFIG_FILENAME "/etc/starfive/sensors_pipeline.yaml"
+ 
++#define DEFAULT_FRAMERATE_NUM 25;
++#define DEFAULT_FRAMERATE_DENOM 1;
++
+ namespace {
+ 
+ typedef enum {
+@@ -225,6 +228,8 @@ public:
+ 	std::vector<SizeRange> sensorSizes() const;
+ 	std::vector<PixelFormat> sensorFormats() const;
+ 	std::vector<PixelFormat> videoFormats() const;
++	std::vector<Framerate> videoFrameRates(unsigned int pixelformat, unsigned int width, unsigned int height) const;
++
+ 	void paramsFilled(unsigned int id){}
+ 	int ispLoadFW(const char *filename);
+ 
+@@ -269,6 +274,24 @@ std::vector<PixelFormat> StarFiveCameraData::videoFormats() const
+ 	return formats;
+ }
+ 
++std::vector<Framerate> StarFiveCameraData::videoFrameRates(unsigned int pixelformat, unsigned int width, unsigned int height) const
++{
++	if (!video_)
++		return {};
++
++	std::vector<Framerate> framerates;
++	for (auto it : video_->getFramerates(pixelformat, width, height)) {
++		V4L2Framerate v4l2_framerate = (V4L2Framerate)it;
++		libcamera::Framerate rate;
++		rate.num = v4l2_framerate.num;
++		rate.denom = v4l2_framerate.denom;
++		LOG(STARFIVE, Debug) << "videoFrameRates framerate:  rate.num=" << rate.num << " rate.denom= " << rate.denom;
++		framerates.push_back(rate);
++	}
++
++	return framerates;
++}
++
+ std::vector<PixelFormat> StarFiveCameraData::sensorFormats() const
+ {
+ 	if (!sensor_)
+@@ -480,6 +503,20 @@ CameraConfiguration::Status StarFiveCameraConfiguration::validate()
+ 		cfg.size.height = std::max(OUTPUT_MIN_SIZE.height,
+ 				std::min(OUTPUT_MAX_SIZE.height, cfg.size.height));
+ 
++		std::vector<Framerate> rates;
++		rates = data_->videoFrameRates(cfg.pixelFormat,size.width, size.height);
++		if (rates.size() > 0){
++			cfg.setframeRates(rates);
++		} else {
++			LOG(STARFIVE, Debug)
++				<< "fail to obtian framerate, use default one ";
++			Framerate rate;
++			rate.num = DEFAULT_FRAMERATE_NUM;
++			rate.denom = DEFAULT_FRAMERATE_DENOM;
++			rates.emplace_back(rate);
++			cfg.setframeRates(rates);
++		}
++
+ 		if (cfg.size != size) {
+ 			LOG(STARFIVE, Debug)
+ 				<< "Adjusting size to " << cfg.size.toString();
+diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
+index 4f04212d..5ccf70d9 100644
+--- a/src/libcamera/v4l2_videodevice.cpp
++++ b/src/libcamera/v4l2_videodevice.cpp
+@@ -31,6 +31,7 @@
+ #include "libcamera/internal/framebuffer.h"
+ #include "libcamera/internal/media_device.h"
+ #include "libcamera/internal/media_object.h"
++#include <limits.h>
+ 
+ /**
+  * \file v4l2_videodevice.h
+@@ -1847,6 +1848,73 @@ V4L2VideoDevice::fromEntityName(const MediaDevice *media,
+ 	return std::make_unique<V4L2VideoDevice>(mediaEntity);
+ }
+ 
++std::vector<V4L2Framerate> V4L2VideoDevice::getFramerates(uint32_t pixelformat, uint32_t width, uint32_t height)
++{
++	struct v4l2_frmivalenum ival;
++	uint32_t num, denom;
++
++	memset (&ival, 0, sizeof (struct v4l2_frmivalenum));
++	ival.index = 0;
++	ival.pixel_format = pixelformat;
++	ival.width = width;
++	ival.height = height;
++	std::vector<V4L2Framerate> rates;
++	LOG(V4L2, Debug) << "getFramerates: width: " << width << " height: " << height << " pixelformat " << pixelformat;
++
++	if (ioctl (VIDIOC_ENUM_FRAMEINTERVALS, &ival) < 0){
++		LOG(V4L2, Error) << "fail to ioctl: VIDIOC_ENUM_FRAMEINTERVALS";
++		goto enum_frameintervals_failed;
++	}
++
++	if (ival.type == V4L2_FRMIVAL_TYPE_DISCRETE) {
++		struct V4L2Framerate rate;
++		do {
++			num = ival.discrete.numerator;
++			denom = ival.discrete.denominator;
++
++			if (num > INT_MAX || denom > INT_MAX) {
++				/* let us hope we don't get here... */
++				LOG(V4L2, Error) << "num or denom is beyond INT_MAX";
++				goto enum_frameintervals_failed;
++			}
++
++			// /* swap to get the framerate */
++			// gst_value_set_fraction (&rate, denom, num);
++			rate.denom = denom;
++			rate.num = num;
++			LOG(V4L2, Debug) << "gstFramerates adding discrete framerate: " << denom << "/" << num;
++			rates.emplace_back(rate);
++			ival.index++;
++		} while (ioctl (VIDIOC_ENUM_FRAMEINTERVALS, &ival) >= 0);
++	} else if (ival.type == V4L2_FRMIVAL_TYPE_STEPWISE){
++		//TODO 
++		goto enum_frameintervals_unimplemented;
++	} else if (ival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) {
++		num = ival.stepwise.min.numerator;
++		denom = ival.stepwise.min.denominator;
++		if (num > INT_MAX || denom > INT_MAX) {
++			LOG(V4L2, Error) << "continuous frame interval: num or denom is beyond INT_MAX";
++			goto enum_frameintervals_failed;
++		}
++
++		struct V4L2Framerate rate;
++		rate.denom = denom;
++		rate.num = num;
++		LOG(V4L2, Debug) << "gstFramerates continuous frame interval: " << denom << "/" <<num;
++		rates.emplace_back(rate);
++	}
++
++	return rates;
++
++enum_frameintervals_failed:
++enum_frameintervals_unimplemented:
++{
++	LOG(V4L2, Error) << "fail to obtain framerate !!!";
++	return rates;
++}
++
++}
++
+ /**
+  * \class V4L2M2MDevice
+  * \brief Memory-to-Memory video device
 -- 
 2.25.1