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>
This commit is contained in:
Niklas Söderlund
2020-09-24 21:35:54 +02:00
parent 62372b7164
commit df2af09050
3 changed files with 68 additions and 52 deletions
+54 -1
View File
@@ -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")
{