summaryrefslogtreecommitdiff
path: root/src/android/frame_buffer_allocator.h
blob: 5d2eeda17fc569afab69fd1f8a02e7c667885a41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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__ */