libcamera: pipeline: uvcvideo: Implement capture support

Replace the buffer allocation, capture start/stop and request queue
stubs with real implementations.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Kieran Bingham 2019-02-05 15:41:50 +01:00 committed by Laurent Pinchart
parent bd38112b77
commit 17ae772e8d

View file

@ -6,6 +6,7 @@
*/
#include <libcamera/camera.h>
#include <libcamera/request.h>
#include <libcamera/stream.h>
#include "device_enumerator.h"
@ -84,35 +85,53 @@ int PipelineHandlerUVC::configureStreams(Camera *camera,
{
StreamConfiguration *cfg = &config[&stream_];
LOG(UVC, Info) << "TODO: Configure the camera for resolution "
<< cfg->width << "x" << cfg->height;
LOG(UVC, Debug) << "Configure the camera for resolution "
<< cfg->width << "x" << cfg->height;
return 0;
V4L2DeviceFormat format = {};
format.width = cfg->width;
format.height = cfg->height;
format.fourcc = cfg->pixelFormat;
return video_->setFormat(&format);
}
int PipelineHandlerUVC::allocateBuffers(Camera *camera, Stream *stream)
{
return -ENOTRECOVERABLE;
const StreamConfiguration &cfg = stream->configuration();
LOG(UVC, Debug) << "Requesting " << cfg.bufferCount << " buffers";
return video_->exportBuffers(cfg.bufferCount, &stream->bufferPool());
}
int PipelineHandlerUVC::freeBuffers(Camera *camera, Stream *stream)
{
return 0;
return video_->releaseBuffers();
}
int PipelineHandlerUVC::start(const Camera *camera)
{
LOG(UVC, Error) << "TODO: start camera";
return 0;
return video_->streamOn();
}
void PipelineHandlerUVC::stop(const Camera *camera)
{
LOG(UVC, Error) << "TODO: stop camera";
video_->streamOff();
}
int PipelineHandlerUVC::queueRequest(const Camera *camera, Request *request)
{
Buffer *buffer = request->findBuffer(&stream_);
if (!buffer) {
LOG(UVC, Error)
<< "Attempt to queue request with invalid stream";
return -ENOENT;
}
video_->queueBuffer(buffer);
return 0;
}