android: camera_stream: Plumb process() with Camera3RequestDescriptor
Data (or broader context) required for post processing of a camera request is saved via Camera3RequestDescriptor. Instead of passing individual arguments to CameraStream::process(), pass the Camera3RequestDescriptor pointer to it. All the arguments necessary to run the post-processor can be accessed from the descriptor. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
This commit is contained in:
parent
1abdcf803d
commit
1976179623
8 changed files with 15 additions and 20 deletions
|
@ -1153,9 +1153,8 @@ void CameraDevice::requestComplete(Request *request)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ret = cameraStream->process(*src, buffer,
|
int ret = cameraStream->process(*src, buffer, descriptor);
|
||||||
descriptor->settings_,
|
|
||||||
descriptor->resultMetadata_.get());
|
|
||||||
/*
|
/*
|
||||||
* Return the FrameBuffer to the CameraStream now that we're
|
* Return the FrameBuffer to the CameraStream now that we're
|
||||||
* done processing it.
|
* done processing it.
|
||||||
|
|
|
@ -144,8 +144,7 @@ int CameraStream::waitFence(int fence)
|
||||||
|
|
||||||
int CameraStream::process(const FrameBuffer &source,
|
int CameraStream::process(const FrameBuffer &source,
|
||||||
camera3_stream_buffer_t &camera3Dest,
|
camera3_stream_buffer_t &camera3Dest,
|
||||||
const CameraMetadata &requestMetadata,
|
Camera3RequestDescriptor *request)
|
||||||
CameraMetadata *resultMetadata)
|
|
||||||
{
|
{
|
||||||
/* Handle waiting on fences on the destination buffer. */
|
/* Handle waiting on fences on the destination buffer. */
|
||||||
int fence = camera3Dest.acquire_fence;
|
int fence = camera3Dest.acquire_fence;
|
||||||
|
@ -175,7 +174,7 @@ int CameraStream::process(const FrameBuffer &source,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return postProcessor_->process(source, &dest, requestMetadata, resultMetadata);
|
return postProcessor_->process(source, &dest, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
FrameBuffer *CameraStream::getBuffer()
|
FrameBuffer *CameraStream::getBuffer()
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
#include <libcamera/geometry.h>
|
#include <libcamera/geometry.h>
|
||||||
#include <libcamera/pixel_format.h>
|
#include <libcamera/pixel_format.h>
|
||||||
|
|
||||||
|
class Camera3RequestDescriptor;
|
||||||
class CameraDevice;
|
class CameraDevice;
|
||||||
class CameraMetadata;
|
|
||||||
class PostProcessor;
|
class PostProcessor;
|
||||||
|
|
||||||
class CameraStream
|
class CameraStream
|
||||||
|
@ -120,8 +120,7 @@ public:
|
||||||
int configure();
|
int configure();
|
||||||
int process(const libcamera::FrameBuffer &source,
|
int process(const libcamera::FrameBuffer &source,
|
||||||
camera3_stream_buffer_t &camera3Buffer,
|
camera3_stream_buffer_t &camera3Buffer,
|
||||||
const CameraMetadata &requestMetadata,
|
Camera3RequestDescriptor *request);
|
||||||
CameraMetadata *resultMetadata);
|
|
||||||
libcamera::FrameBuffer *getBuffer();
|
libcamera::FrameBuffer *getBuffer();
|
||||||
void putBuffer(libcamera::FrameBuffer *buffer);
|
void putBuffer(libcamera::FrameBuffer *buffer);
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "../camera_device.h"
|
#include "../camera_device.h"
|
||||||
#include "../camera_metadata.h"
|
#include "../camera_metadata.h"
|
||||||
|
#include "../camera_request.h"
|
||||||
#include "encoder_libjpeg.h"
|
#include "encoder_libjpeg.h"
|
||||||
#include "exif.h"
|
#include "exif.h"
|
||||||
|
|
||||||
|
@ -99,14 +100,15 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,
|
||||||
|
|
||||||
int PostProcessorJpeg::process(const FrameBuffer &source,
|
int PostProcessorJpeg::process(const FrameBuffer &source,
|
||||||
CameraBuffer *destination,
|
CameraBuffer *destination,
|
||||||
const CameraMetadata &requestMetadata,
|
Camera3RequestDescriptor *request)
|
||||||
CameraMetadata *resultMetadata)
|
|
||||||
{
|
{
|
||||||
if (!encoder_)
|
if (!encoder_)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ASSERT(destination->numPlanes() == 1);
|
ASSERT(destination->numPlanes() == 1);
|
||||||
|
|
||||||
|
const CameraMetadata &requestMetadata = request->settings_;
|
||||||
|
CameraMetadata *resultMetadata = request->resultMetadata_.get();
|
||||||
camera_metadata_ro_entry_t entry;
|
camera_metadata_ro_entry_t entry;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,7 @@ public:
|
||||||
const libcamera::StreamConfiguration &outcfg) override;
|
const libcamera::StreamConfiguration &outcfg) override;
|
||||||
int process(const libcamera::FrameBuffer &source,
|
int process(const libcamera::FrameBuffer &source,
|
||||||
CameraBuffer *destination,
|
CameraBuffer *destination,
|
||||||
const CameraMetadata &requestMetadata,
|
Camera3RequestDescriptor *request) override;
|
||||||
CameraMetadata *resultMetadata) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void generateThumbnail(const libcamera::FrameBuffer &source,
|
void generateThumbnail(const libcamera::FrameBuffer &source,
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#include "camera_buffer.h"
|
#include "camera_buffer.h"
|
||||||
|
|
||||||
class CameraMetadata;
|
class Camera3RequestDescriptor;
|
||||||
|
|
||||||
class PostProcessor
|
class PostProcessor
|
||||||
{
|
{
|
||||||
|
@ -23,8 +23,7 @@ public:
|
||||||
const libcamera::StreamConfiguration &outCfg) = 0;
|
const libcamera::StreamConfiguration &outCfg) = 0;
|
||||||
virtual int process(const libcamera::FrameBuffer &source,
|
virtual int process(const libcamera::FrameBuffer &source,
|
||||||
CameraBuffer *destination,
|
CameraBuffer *destination,
|
||||||
const CameraMetadata &requestMetadata,
|
Camera3RequestDescriptor *request) = 0;
|
||||||
CameraMetadata *resultMetadata) = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __ANDROID_POST_PROCESSOR_H__ */
|
#endif /* __ANDROID_POST_PROCESSOR_H__ */
|
||||||
|
|
|
@ -51,8 +51,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,
|
||||||
|
|
||||||
int PostProcessorYuv::process(const FrameBuffer &source,
|
int PostProcessorYuv::process(const FrameBuffer &source,
|
||||||
CameraBuffer *destination,
|
CameraBuffer *destination,
|
||||||
[[maybe_unused]] const CameraMetadata &requestMetadata,
|
[[maybe_unused]] Camera3RequestDescriptor *request)
|
||||||
[[maybe_unused]] CameraMetadata *metadata)
|
|
||||||
{
|
{
|
||||||
if (!isValidBuffers(source, *destination))
|
if (!isValidBuffers(source, *destination))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -20,8 +20,7 @@ public:
|
||||||
const libcamera::StreamConfiguration &outcfg) override;
|
const libcamera::StreamConfiguration &outcfg) override;
|
||||||
int process(const libcamera::FrameBuffer &source,
|
int process(const libcamera::FrameBuffer &source,
|
||||||
CameraBuffer *destination,
|
CameraBuffer *destination,
|
||||||
const CameraMetadata &requestMetadata,
|
Camera3RequestDescriptor *request) override;
|
||||||
CameraMetadata *metadata) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool isValidBuffers(const libcamera::FrameBuffer &source,
|
bool isValidBuffers(const libcamera::FrameBuffer &source,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue