mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-19 02:15:05 +03:00
libcamera: vimc: Fill stride and frameSize at config validation
Fill the stride and frameSize fields of the StreamConfiguration at configuration validation time instead of at camera configuration time. This allows applications to get the stride when trying a configuration without modifying the active configuration of the camera. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
d0395efd3a
commit
7c3831d2d1
1 changed files with 18 additions and 5 deletions
|
@ -72,9 +72,12 @@ public:
|
|||
class VimcCameraConfiguration : public CameraConfiguration
|
||||
{
|
||||
public:
|
||||
VimcCameraConfiguration();
|
||||
VimcCameraConfiguration(VimcCameraData *data);
|
||||
|
||||
Status validate() override;
|
||||
|
||||
private:
|
||||
VimcCameraData *data_;
|
||||
};
|
||||
|
||||
class PipelineHandlerVimc : public PipelineHandler
|
||||
|
@ -115,8 +118,8 @@ static const std::map<PixelFormat, uint32_t> pixelformats{
|
|||
|
||||
} /* namespace */
|
||||
|
||||
VimcCameraConfiguration::VimcCameraConfiguration()
|
||||
: CameraConfiguration()
|
||||
VimcCameraConfiguration::VimcCameraConfiguration(VimcCameraData *data)
|
||||
: CameraConfiguration(), data_(data)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -160,6 +163,17 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()
|
|||
|
||||
cfg.bufferCount = 4;
|
||||
|
||||
V4L2DeviceFormat format = {};
|
||||
format.fourcc = data_->video_->toV4L2PixelFormat(cfg.pixelFormat);
|
||||
format.size = cfg.size;
|
||||
|
||||
int ret = data_->video_->tryFormat(&format);
|
||||
if (ret)
|
||||
return Invalid;
|
||||
|
||||
cfg.stride = format.planes[0].bpl;
|
||||
cfg.frameSize = format.planes[0].size;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -171,8 +185,8 @@ PipelineHandlerVimc::PipelineHandlerVimc(CameraManager *manager)
|
|||
CameraConfiguration *PipelineHandlerVimc::generateConfiguration(Camera *camera,
|
||||
const StreamRoles &roles)
|
||||
{
|
||||
CameraConfiguration *config = new VimcCameraConfiguration();
|
||||
VimcCameraData *data = cameraData(camera);
|
||||
CameraConfiguration *config = new VimcCameraConfiguration(data);
|
||||
|
||||
if (roles.empty())
|
||||
return config;
|
||||
|
@ -282,7 +296,6 @@ int PipelineHandlerVimc::configure(Camera *camera, CameraConfiguration *config)
|
|||
return ret;
|
||||
|
||||
cfg.setStream(&data->stream_);
|
||||
cfg.stride = format.planes[0].bpl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue