libcamera: ipu3: imgu: Remove ImgUOutput

The struct ImgUOutput now only contains one member that is in use, the
video device. Remove the struct and use the video device directly
instead.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Niklas Söderlund
2020-06-27 04:14:48 +02:00
parent 003645f598
commit 1e0cd804f0
3 changed files with 38 additions and 57 deletions

View File

@@ -54,31 +54,22 @@ int ImgUDevice::init(MediaDevice *media, unsigned int index)
if (ret)
return ret;
output_.dev = V4L2VideoDevice::fromEntityName(media, name_ + " output");
ret = output_.dev->open();
output_ = V4L2VideoDevice::fromEntityName(media, name_ + " output");
ret = output_->open();
if (ret)
return ret;
output_.pad = PAD_OUTPUT;
output_.name = "output";
viewfinder_.dev = V4L2VideoDevice::fromEntityName(media,
name_ + " viewfinder");
ret = viewfinder_.dev->open();
viewfinder_ = V4L2VideoDevice::fromEntityName(media,
name_ + " viewfinder");
ret = viewfinder_->open();
if (ret)
return ret;
viewfinder_.pad = PAD_VF;
viewfinder_.name = "viewfinder";
stat_.dev = V4L2VideoDevice::fromEntityName(media, name_ + " 3a stat");
ret = stat_.dev->open();
stat_ = V4L2VideoDevice::fromEntityName(media, name_ + " 3a stat");
ret = stat_->open();
if (ret)
return ret;
stat_.pad = PAD_STAT;
stat_.name = "stat";
return 0;
}
@@ -159,7 +150,7 @@ int ImgUDevice::configureVideoDevice(V4L2VideoDevice *dev, unsigned int pad,
return ret;
/* No need to apply format to the stat node. */
if (dev == stat_.dev)
if (dev == stat_)
return 0;
*outputFormat = {};
@@ -171,7 +162,7 @@ int ImgUDevice::configureVideoDevice(V4L2VideoDevice *dev, unsigned int pad,
if (ret)
return ret;
const char *name = dev == output_.dev ? "output" : "viewfinder";
const char *name = dev == output_ ? "output" : "viewfinder";
LOG(IPU3, Debug) << "ImgU " << name << " format = "
<< outputFormat->toString();
@@ -197,7 +188,7 @@ int ImgUDevice::allocateBuffers(unsigned int bufferCount)
*
* \todo To be revised when we'll actually use the stat node.
*/
ret = stat_.dev->importBuffers(bufferCount);
ret = stat_->importBuffers(bufferCount);
if (ret < 0) {
LOG(IPU3, Error) << "Failed to allocate ImgU stat buffers";
goto error;
@@ -208,13 +199,13 @@ int ImgUDevice::allocateBuffers(unsigned int bufferCount)
* corresponding stream is active or inactive, as the driver needs
* buffers to be requested on the V4L2 devices in order to operate.
*/
ret = output_.dev->importBuffers(bufferCount);
ret = output_->importBuffers(bufferCount);
if (ret < 0) {
LOG(IPU3, Error) << "Failed to import ImgU output buffers";
goto error;
}
ret = viewfinder_.dev->importBuffers(bufferCount);
ret = viewfinder_->importBuffers(bufferCount);
if (ret < 0) {
LOG(IPU3, Error) << "Failed to import ImgU viewfinder buffers";
goto error;
@@ -235,15 +226,15 @@ void ImgUDevice::freeBuffers()
{
int ret;
ret = output_.dev->releaseBuffers();
ret = output_->releaseBuffers();
if (ret)
LOG(IPU3, Error) << "Failed to release ImgU output buffers";
ret = stat_.dev->releaseBuffers();
ret = stat_->releaseBuffers();
if (ret)
LOG(IPU3, Error) << "Failed to release ImgU stat buffers";
ret = viewfinder_.dev->releaseBuffers();
ret = viewfinder_->releaseBuffers();
if (ret)
LOG(IPU3, Error) << "Failed to release ImgU viewfinder buffers";
@@ -257,19 +248,19 @@ int ImgUDevice::start()
int ret;
/* Start the ImgU video devices. */
ret = output_.dev->streamOn();
ret = output_->streamOn();
if (ret) {
LOG(IPU3, Error) << "Failed to start ImgU output";
return ret;
}
ret = viewfinder_.dev->streamOn();
ret = viewfinder_->streamOn();
if (ret) {
LOG(IPU3, Error) << "Failed to start ImgU viewfinder";
return ret;
}
ret = stat_.dev->streamOn();
ret = stat_->streamOn();
if (ret) {
LOG(IPU3, Error) << "Failed to start ImgU stat";
return ret;
@@ -288,9 +279,9 @@ int ImgUDevice::stop()
{
int ret;
ret = output_.dev->streamOff();
ret |= viewfinder_.dev->streamOff();
ret |= stat_.dev->streamOff();
ret = output_->streamOff();
ret |= viewfinder_->streamOff();
ret |= stat_->streamOff();
ret |= input_->streamOff();
return ret;

View File

@@ -22,28 +22,19 @@ struct StreamConfiguration;
class ImgUDevice
{
public:
/* ImgU output descriptor: group data specific to an ImgU output. */
struct ImgUOutput {
V4L2VideoDevice *dev;
unsigned int pad;
std::string name;
};
ImgUDevice()
: imgu_(nullptr), input_(nullptr)
: imgu_(nullptr), input_(nullptr), output_(nullptr),
viewfinder_(nullptr), stat_(nullptr)
{
output_.dev = nullptr;
viewfinder_.dev = nullptr;
stat_.dev = nullptr;
}
~ImgUDevice()
{
delete imgu_;
delete input_;
delete output_.dev;
delete viewfinder_.dev;
delete stat_.dev;
delete output_;
delete viewfinder_;
delete stat_;
}
int init(MediaDevice *media, unsigned int index);
@@ -53,22 +44,21 @@ public:
int configureOutput(const StreamConfiguration &cfg,
V4L2DeviceFormat *outputFormat)
{
return configureVideoDevice(output_.dev, PAD_OUTPUT, cfg,
return configureVideoDevice(output_, PAD_OUTPUT, cfg,
outputFormat);
}
int configureViewfinder(const StreamConfiguration &cfg,
V4L2DeviceFormat *outputFormat)
{
return configureVideoDevice(viewfinder_.dev, PAD_VF, cfg,
return configureVideoDevice(viewfinder_, PAD_VF, cfg,
outputFormat);
}
int configureStat(const StreamConfiguration &cfg,
V4L2DeviceFormat *outputFormat)
{
return configureVideoDevice(stat_.dev, PAD_STAT, cfg,
outputFormat);
return configureVideoDevice(stat_, PAD_STAT, cfg, outputFormat);
}
int allocateBuffers(unsigned int bufferCount);
@@ -81,9 +71,9 @@ public:
V4L2Subdevice *imgu_;
V4L2VideoDevice *input_;
ImgUOutput output_;
ImgUOutput viewfinder_;
ImgUOutput stat_;
V4L2VideoDevice *output_;
V4L2VideoDevice *viewfinder_;
V4L2VideoDevice *stat_;
/* \todo Add param video device for 3A tuning */
private:

View File

@@ -562,9 +562,9 @@ int PipelineHandlerIPU3::exportFrameBuffers(Camera *camera, Stream *stream,
unsigned int count = stream->configuration().bufferCount;
if (stream == &data->outStream_)
return data->imgu_->output_.dev->exportBuffers(count, buffers);
return data->imgu_->output_->exportBuffers(count, buffers);
else if (stream == &data->vfStream_)
return data->imgu_->viewfinder_.dev->exportBuffers(count, buffers);
return data->imgu_->viewfinder_->exportBuffers(count, buffers);
else if (stream == &data->rawStream_)
return data->cio2_.exportBuffers(count, buffers);
@@ -679,9 +679,9 @@ int PipelineHandlerIPU3::queueRequestDevice(Camera *camera, Request *request)
int ret;
if (stream == &data->outStream_)
ret = data->imgu_->output_.dev->queueBuffer(buffer);
ret = data->imgu_->output_->queueBuffer(buffer);
else if (stream == &data->vfStream_)
ret = data->imgu_->viewfinder_.dev->queueBuffer(buffer);
ret = data->imgu_->viewfinder_->queueBuffer(buffer);
else
continue;
@@ -809,9 +809,9 @@ int PipelineHandlerIPU3::registerCameras()
&IPU3CameraData::cio2BufferReady);
data->imgu_->input_->bufferReady.connect(&data->cio2_,
&CIO2Device::tryReturnBuffer);
data->imgu_->output_.dev->bufferReady.connect(data.get(),
data->imgu_->output_->bufferReady.connect(data.get(),
&IPU3CameraData::imguOutputBufferReady);
data->imgu_->viewfinder_.dev->bufferReady.connect(data.get(),
data->imgu_->viewfinder_->bufferReady.connect(data.get(),
&IPU3CameraData::imguOutputBufferReady);
/* Create and register the Camera instance. */