mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-26 01:55:51 +03:00
libcamera: camera_sensor: Register ColorFilterArrangement
Inspect the list of media bus codes supported by the camera sensor in order to deduce the color filter arrangement and register the ColorFilterArrangement draft property. Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
1c0096d751
commit
0a0264da8d
1 changed files with 32 additions and 4 deletions
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include <libcamera/property_ids.h>
|
#include <libcamera/property_ids.h>
|
||||||
|
|
||||||
|
#include "libcamera/internal/bayer_format.h"
|
||||||
#include "libcamera/internal/formats.h"
|
#include "libcamera/internal/formats.h"
|
||||||
#include "libcamera/internal/sysfs.h"
|
#include "libcamera/internal/sysfs.h"
|
||||||
#include "libcamera/internal/utils.h"
|
#include "libcamera/internal/utils.h"
|
||||||
|
@ -178,10 +179,6 @@ int CameraSensor::init()
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = initProperties();
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/* Enumerate, sort and cache media bus codes and sizes. */
|
/* Enumerate, sort and cache media bus codes and sizes. */
|
||||||
formats_ = subdev_->formats(pad_);
|
formats_ = subdev_->formats(pad_);
|
||||||
if (formats_.empty()) {
|
if (formats_.empty()) {
|
||||||
|
@ -210,6 +207,10 @@ int CameraSensor::init()
|
||||||
*/
|
*/
|
||||||
resolution_ = sizes_.back();
|
resolution_ = sizes_.back();
|
||||||
|
|
||||||
|
ret = initProperties();
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,6 +308,33 @@ int CameraSensor::initProperties()
|
||||||
properties_.set(properties::PixelArrayActiveAreas, { crop });
|
properties_.set(properties::PixelArrayActiveAreas, { crop });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Color filter array pattern, register only for RAW sensors. */
|
||||||
|
for (const auto &format : formats_) {
|
||||||
|
unsigned int mbusCode = format.first;
|
||||||
|
BayerFormat bayerFormat = BayerFormat::fromMbusCode(mbusCode);
|
||||||
|
if (!bayerFormat.isValid())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
int32_t cfa;
|
||||||
|
switch (bayerFormat.order) {
|
||||||
|
case BayerFormat::BGGR:
|
||||||
|
cfa = properties::draft::BGGR;
|
||||||
|
break;
|
||||||
|
case BayerFormat::GBRG:
|
||||||
|
cfa = properties::draft::GBRG;
|
||||||
|
break;
|
||||||
|
case BayerFormat::GRBG:
|
||||||
|
cfa = properties::draft::GRBG;
|
||||||
|
break;
|
||||||
|
case BayerFormat::RGGB:
|
||||||
|
cfa = properties::draft::RGGB;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
properties_.set(properties::draft::ColorFilterArrangement, cfa);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue