summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-09-24 21:35:54 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-09-30 14:24:42 +0200
commitdf2af09050514c64c4af8cef0581423a705490af (patch)
treefcf48033bfa93e52fe020c5be917313b07d0ce4b
parent62372b7164999c46bedf8aef75d57746ccd10397 (diff)
libcamera: pipeline: rkisp1: Move path configuration to RkISP1Path
Move the path configuration to RkISP1Path to increase code reuse and make the V4L2 subdevice resizer private to the path. There is no functional change. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp55
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1_path.cpp55
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1_path.h10
3 files changed, 68 insertions, 52 deletions
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 6e6ebe4c..857c9330 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -817,60 +817,17 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
data->mainPathActive_ = false;
data->selfPathActive_ = false;
for (const StreamConfiguration &cfg : *config) {
- V4L2SubdeviceFormat ispFormat = format;
- V4L2Subdevice *resizer;
- V4L2VideoDevice *video;
-
if (cfg.stream() == &data->mainPathStream_) {
- resizer = mainPath_.resizer_;
- video = mainPath_.video_;
+ ret = mainPath_.configure(cfg, format);
+ if (ret)
+ return ret;
data->mainPathActive_ = true;
} else {
- resizer = selfPath_.resizer_;
- video = selfPath_.video_;
+ ret = selfPath_.configure(cfg, format);
+ if (ret)
+ return ret;
data->selfPathActive_ = true;
}
-
- ret = resizer->setFormat(0, &ispFormat);
- if (ret < 0)
- return ret;
-
- const char *name = resizer == mainPath_.resizer_ ? "main" : "self";
-
- LOG(RkISP1, Debug)
- << "Configured " << name << " resizer input pad with "
- << ispFormat.toString();
-
- ispFormat.size = cfg.size;
-
- LOG(RkISP1, Debug)
- << "Configuring " << name << " resizer output pad with "
- << ispFormat.toString();
-
- ret = resizer->setFormat(1, &ispFormat);
- if (ret < 0)
- return ret;
-
- LOG(RkISP1, Debug)
- << "Configured " << name << " resizer output pad with "
- << ispFormat.toString();
-
- const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
- V4L2DeviceFormat outputFormat = {};
- outputFormat.fourcc = video->toV4L2PixelFormat(cfg.pixelFormat);
- outputFormat.size = cfg.size;
- outputFormat.planesCount = info.numPlanes();
-
- ret = video->setFormat(&outputFormat);
- if (ret)
- return ret;
-
- if (outputFormat.size != cfg.size ||
- outputFormat.fourcc != video->toV4L2PixelFormat(cfg.pixelFormat)) {
- LOG(RkISP1, Error)
- << "Unable to configure capture in " << cfg.toString();
- return -EINVAL;
- }
}
V4L2DeviceFormat paramFormat = {};
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
index 2eae4234..66b5eebd 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
@@ -7,14 +7,18 @@
#include "rkisp1_path.h"
+#include <libcamera/stream.h>
+
#include "libcamera/internal/media_device.h"
#include "libcamera/internal/v4l2_subdevice.h"
#include "libcamera/internal/v4l2_videodevice.h"
namespace libcamera {
+LOG_DECLARE_CATEGORY(RkISP1)
+
RkISP1Path::RkISP1Path(const char *name)
- : resizer_(nullptr), video_(nullptr), name_(name)
+ : video_(nullptr), name_(name), resizer_(nullptr)
{
}
@@ -40,6 +44,55 @@ bool RkISP1Path::init(MediaDevice *media)
return true;
}
+int RkISP1Path::configure(const StreamConfiguration &config,
+ const V4L2SubdeviceFormat &inputFormat)
+{
+ int ret;
+
+ V4L2SubdeviceFormat ispFormat = inputFormat;
+
+ ret = resizer_->setFormat(0, &ispFormat);
+ if (ret < 0)
+ return ret;
+
+ LOG(RkISP1, Debug)
+ << "Configured " << name_ << " resizer input pad with "
+ << ispFormat.toString();
+
+ ispFormat.size = config.size;
+
+ LOG(RkISP1, Debug)
+ << "Configuring " << name_ << " resizer output pad with "
+ << ispFormat.toString();
+
+ ret = resizer_->setFormat(1, &ispFormat);
+ if (ret < 0)
+ return ret;
+
+ LOG(RkISP1, Debug)
+ << "Configured " << name_ << " resizer output pad with "
+ << ispFormat.toString();
+
+ const PixelFormatInfo &info = PixelFormatInfo::info(config.pixelFormat);
+ V4L2DeviceFormat outputFormat = {};
+ outputFormat.fourcc = video_->toV4L2PixelFormat(config.pixelFormat);
+ outputFormat.size = config.size;
+ outputFormat.planesCount = info.numPlanes();
+
+ ret = video_->setFormat(&outputFormat);
+ if (ret)
+ return ret;
+
+ if (outputFormat.size != config.size ||
+ outputFormat.fourcc != video_->toV4L2PixelFormat(config.pixelFormat)) {
+ LOG(RkISP1, Error)
+ << "Unable to configure capture in " << config.toString();
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
RkISP1MainPath::RkISP1MainPath()
: RkISP1Path("main")
{
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.h b/src/libcamera/pipeline/rkisp1/rkisp1_path.h
index d3172e22..6eb01529 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.h
+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.h
@@ -12,6 +12,8 @@ namespace libcamera {
class MediaDevice;
class V4L2Subdevice;
class V4L2VideoDevice;
+struct StreamConfiguration;
+struct V4L2SubdeviceFormat;
class RkISP1Path
{
@@ -21,12 +23,16 @@ public:
bool init(MediaDevice *media);
- /* \todo Make resizer and video private. */
- V4L2Subdevice *resizer_;
+ int configure(const StreamConfiguration &config,
+ const V4L2SubdeviceFormat &inputFormat);
+
+ /* \todo Make video private. */
V4L2VideoDevice *video_;
private:
const char *name_;
+
+ V4L2Subdevice *resizer_;
};
class RkISP1MainPath : public RkISP1Path