xref: /aosp_15_r20/external/libkmsxx/kms++util/inc/kms++util/extcpuframebuffer.h (revision f0687c8a10b3e371dbe09214db6664e37c283cca)
1*f0687c8aSRaman Tenneti #pragma once
2*f0687c8aSRaman Tenneti 
3*f0687c8aSRaman Tenneti #include <kms++/kms++.h>
4*f0687c8aSRaman Tenneti 
5*f0687c8aSRaman Tenneti namespace kms
6*f0687c8aSRaman Tenneti {
7*f0687c8aSRaman Tenneti class ExtCPUFramebuffer : public IFramebuffer
8*f0687c8aSRaman Tenneti {
9*f0687c8aSRaman Tenneti public:
10*f0687c8aSRaman Tenneti 	ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
11*f0687c8aSRaman Tenneti 			  uint8_t* buffer, uint32_t size, uint32_t pitch, uint32_t offset);
12*f0687c8aSRaman Tenneti 	ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
13*f0687c8aSRaman Tenneti 			  uint8_t* buffers[4], uint32_t sizes[4], uint32_t pitches[4], uint32_t offsets[4]);
14*f0687c8aSRaman Tenneti 	virtual ~ExtCPUFramebuffer();
15*f0687c8aSRaman Tenneti 
width()16*f0687c8aSRaman Tenneti 	uint32_t width() const { return m_width; }
height()17*f0687c8aSRaman Tenneti 	uint32_t height() const { return m_height; }
18*f0687c8aSRaman Tenneti 
format()19*f0687c8aSRaman Tenneti 	PixelFormat format() const { return m_format; }
num_planes()20*f0687c8aSRaman Tenneti 	unsigned num_planes() const { return m_num_planes; }
21*f0687c8aSRaman Tenneti 
stride(unsigned plane)22*f0687c8aSRaman Tenneti 	uint32_t stride(unsigned plane) const { return m_planes[plane].stride; }
size(unsigned plane)23*f0687c8aSRaman Tenneti 	uint32_t size(unsigned plane) const { return m_planes[plane].size; }
offset(unsigned plane)24*f0687c8aSRaman Tenneti 	uint32_t offset(unsigned plane) const { return m_planes[plane].offset; }
map(unsigned plane)25*f0687c8aSRaman Tenneti 	uint8_t* map(unsigned plane) { return m_planes[plane].map; }
26*f0687c8aSRaman Tenneti 
27*f0687c8aSRaman Tenneti private:
28*f0687c8aSRaman Tenneti 	struct FramebufferPlane {
29*f0687c8aSRaman Tenneti 		uint32_t size;
30*f0687c8aSRaman Tenneti 		uint32_t stride;
31*f0687c8aSRaman Tenneti 		uint32_t offset;
32*f0687c8aSRaman Tenneti 		uint8_t* map;
33*f0687c8aSRaman Tenneti 	};
34*f0687c8aSRaman Tenneti 
35*f0687c8aSRaman Tenneti 	uint32_t m_width;
36*f0687c8aSRaman Tenneti 	uint32_t m_height;
37*f0687c8aSRaman Tenneti 	PixelFormat m_format;
38*f0687c8aSRaman Tenneti 
39*f0687c8aSRaman Tenneti 	unsigned m_num_planes;
40*f0687c8aSRaman Tenneti 	struct FramebufferPlane m_planes[4];
41*f0687c8aSRaman Tenneti };
42*f0687c8aSRaman Tenneti } // namespace kms
43