mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-15 16:35:06 +03:00
android: Introduce PlatformFrameBufferAllocator
The existing FrameBufferAllocator is not allowed to allocate a new buffer while Camera is running. This introduces PlatformFrameBufferAllocator. It allocates FrameBuffer using cros::CameraBufferManager on ChromeOS and gralloc on non ChromeOS platform. The allocated FrameBuffer owns the underlying buffer but must be destroyed before PlatformFrameBufferAllocator is destroyed. Signed-off-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
99bb610fd1
commit
c58662c577
4 changed files with 290 additions and 2 deletions
55
src/android/frame_buffer_allocator.h
Normal file
55
src/android/frame_buffer_allocator.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2021, Google Inc.
|
||||
*
|
||||
* frame_buffer_allocator.h - Interface definition to allocate Frame buffer in
|
||||
* platform dependent way.
|
||||
*/
|
||||
#ifndef __ANDROID_FRAME_BUFFER_ALLOCATOR_H__
|
||||
#define __ANDROID_FRAME_BUFFER_ALLOCATOR_H__
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <libcamera/base/class.h>
|
||||
|
||||
#include <libcamera/camera.h>
|
||||
#include <libcamera/framebuffer.h>
|
||||
#include <libcamera/geometry.h>
|
||||
|
||||
class CameraDevice;
|
||||
|
||||
class PlatformFrameBufferAllocator : libcamera::Extensible
|
||||
{
|
||||
LIBCAMERA_DECLARE_PRIVATE()
|
||||
|
||||
public:
|
||||
explicit PlatformFrameBufferAllocator(CameraDevice *const cameraDevice);
|
||||
~PlatformFrameBufferAllocator();
|
||||
|
||||
/*
|
||||
* FrameBuffer owns the underlying buffer. Returns nullptr on failure.
|
||||
* Note: The returned FrameBuffer needs to be destroyed before
|
||||
* PlatformFrameBufferAllocator is destroyed.
|
||||
*/
|
||||
std::unique_ptr<libcamera::FrameBuffer> allocate(
|
||||
int halPixelFormat, const libcamera::Size &size, uint32_t usage);
|
||||
};
|
||||
|
||||
#define PUBLIC_FRAME_BUFFER_ALLOCATOR_IMPLEMENTATION \
|
||||
PlatformFrameBufferAllocator::PlatformFrameBufferAllocator( \
|
||||
CameraDevice *const cameraDevice) \
|
||||
: Extensible(std::make_unique<Private>(cameraDevice)) \
|
||||
{ \
|
||||
} \
|
||||
PlatformFrameBufferAllocator::~PlatformFrameBufferAllocator() \
|
||||
{ \
|
||||
} \
|
||||
std::unique_ptr<libcamera::FrameBuffer> \
|
||||
PlatformFrameBufferAllocator::allocate(int halPixelFormat, \
|
||||
const libcamera::Size &size, \
|
||||
uint32_t usage) \
|
||||
{ \
|
||||
return _d()->allocate(halPixelFormat, size, usage); \
|
||||
}
|
||||
|
||||
#endif /* __ANDROID_FRAME_BUFFER_ALLOCATOR_H__ */
|
Loading…
Add table
Add a link
Reference in a new issue