Split the Raspberry Pi pipeline handler and IPA source code into common and VC4/BCM2835 specific file structures. For the pipeline handler, the common code files now live in src/libcamera/pipeline/rpi/common/ and the VC4-specific files in src/libcamera/pipeline/rpi/vc4/. For the IPA, the common code files now live in src/ipa/rpi/{cam_helper,controller}/ and the vc4 specific files in src/ipa/rpi/vc4/. With this change, the camera tuning files are now installed under share/libcamera/ipa/rpi/vc4/. To build the pipeline and IPA, the meson configuration options have now changed from "raspberrypi" to "rpi/vc4": meson setup build -Dipas=rpi/vc4 -Dpipelines=rpi/vc4 Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
66 lines
1.4 KiB
C++
66 lines
1.4 KiB
C++
/* SPDX-License-Identifier: BSD-2-Clause */
|
|
/*
|
|
* Copyright (C) 2021, Raspberry Pi Ltd
|
|
*
|
|
* cam_helper_ov9281.cpp - camera information for ov9281 sensor
|
|
*/
|
|
|
|
#include <assert.h>
|
|
|
|
#include "cam_helper.h"
|
|
|
|
using namespace RPiController;
|
|
|
|
class CamHelperOv9281 : public CamHelper
|
|
{
|
|
public:
|
|
CamHelperOv9281();
|
|
uint32_t gainCode(double gain) const override;
|
|
double gain(uint32_t gainCode) const override;
|
|
void getDelays(int &exposureDelay, int &gainDelay,
|
|
int &vblankDelay, int &hblankDelay) const override;
|
|
|
|
private:
|
|
/*
|
|
* Smallest difference between the frame length and integration time,
|
|
* in units of lines.
|
|
*/
|
|
static constexpr int frameIntegrationDiff = 4;
|
|
};
|
|
|
|
/*
|
|
* OV9281 doesn't output metadata, so we have to use the "unicam parser" which
|
|
* works by counting frames.
|
|
*/
|
|
|
|
CamHelperOv9281::CamHelperOv9281()
|
|
: CamHelper({}, frameIntegrationDiff)
|
|
{
|
|
}
|
|
|
|
uint32_t CamHelperOv9281::gainCode(double gain) const
|
|
{
|
|
return static_cast<uint32_t>(gain * 16.0);
|
|
}
|
|
|
|
double CamHelperOv9281::gain(uint32_t gainCode) const
|
|
{
|
|
return static_cast<double>(gainCode) / 16.0;
|
|
}
|
|
|
|
void CamHelperOv9281::getDelays(int &exposureDelay, int &gainDelay,
|
|
int &vblankDelay, int &hblankDelay) const
|
|
{
|
|
/* The driver appears to behave as follows: */
|
|
exposureDelay = 2;
|
|
gainDelay = 2;
|
|
vblankDelay = 2;
|
|
hblankDelay = 2;
|
|
}
|
|
|
|
static CamHelper *create()
|
|
{
|
|
return new CamHelperOv9281();
|
|
}
|
|
|
|
static RegisterCamHelper reg("ov9281", &create);
|