Report the pipeline depth in the capture results if the pipeline reports it. Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
67 lines
1.3 KiB
C++
67 lines
1.3 KiB
C++
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2020, Google Inc.
|
|
*
|
|
* camera_worker.h - Process capture requests on behalf of the Camera HAL
|
|
*/
|
|
#ifndef __ANDROID_CAMERA_WORKER_H__
|
|
#define __ANDROID_CAMERA_WORKER_H__
|
|
|
|
#include <memory>
|
|
|
|
#include <libcamera/buffer.h>
|
|
#include <libcamera/camera.h>
|
|
#include <libcamera/object.h>
|
|
#include <libcamera/request.h>
|
|
#include <libcamera/stream.h>
|
|
|
|
#include "libcamera/internal/thread.h"
|
|
|
|
class CameraDevice;
|
|
|
|
class CaptureRequest
|
|
{
|
|
public:
|
|
CaptureRequest(libcamera::Camera *camera, uint64_t cookie);
|
|
|
|
const std::vector<int> &fences() const { return acquireFences_; }
|
|
const libcamera::ControlList &metadata() const
|
|
{
|
|
return request_->metadata();
|
|
}
|
|
|
|
void addBuffer(libcamera::Stream *stream,
|
|
libcamera::FrameBuffer *buffer, int fence);
|
|
void queue();
|
|
|
|
private:
|
|
libcamera::Camera *camera_;
|
|
std::vector<int> acquireFences_;
|
|
std::unique_ptr<libcamera::Request> request_;
|
|
};
|
|
|
|
class CameraWorker
|
|
{
|
|
public:
|
|
CameraWorker();
|
|
|
|
void start();
|
|
void stop();
|
|
|
|
void queueRequest(CaptureRequest *request);
|
|
|
|
private:
|
|
class Worker : public libcamera::Object
|
|
{
|
|
public:
|
|
void processRequest(CaptureRequest *request);
|
|
|
|
private:
|
|
int waitFence(int fence);
|
|
};
|
|
|
|
Worker worker_;
|
|
libcamera::Thread thread_;
|
|
};
|
|
|
|
#endif /* __ANDROID_CAMERA_WORKER_H__ */
|