xref: /aosp_15_r20/external/libkmsxx/kms++util/src/cpuframebuffer.cpp (revision f0687c8a10b3e371dbe09214db6664e37c283cca)
1*f0687c8aSRaman Tenneti #include <map>
2*f0687c8aSRaman Tenneti 
3*f0687c8aSRaman Tenneti #include <kms++util/cpuframebuffer.h>
4*f0687c8aSRaman Tenneti 
5*f0687c8aSRaman Tenneti using namespace std;
6*f0687c8aSRaman Tenneti 
7*f0687c8aSRaman Tenneti namespace kms
8*f0687c8aSRaman Tenneti {
CPUFramebuffer(uint32_t width,uint32_t height,PixelFormat format)9*f0687c8aSRaman Tenneti CPUFramebuffer::CPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format)
10*f0687c8aSRaman Tenneti 	: m_width(width), m_height(height), m_format(format)
11*f0687c8aSRaman Tenneti {
12*f0687c8aSRaman Tenneti 	const PixelFormatInfo& format_info = get_pixel_format_info(m_format);
13*f0687c8aSRaman Tenneti 
14*f0687c8aSRaman Tenneti 	m_num_planes = format_info.num_planes;
15*f0687c8aSRaman Tenneti 
16*f0687c8aSRaman Tenneti 	for (unsigned i = 0; i < format_info.num_planes; ++i) {
17*f0687c8aSRaman Tenneti 		const PixelFormatPlaneInfo& pi = format_info.planes[i];
18*f0687c8aSRaman Tenneti 		FramebufferPlane& plane = m_planes[i];
19*f0687c8aSRaman Tenneti 
20*f0687c8aSRaman Tenneti 		plane.stride = width * pi.bitspp / 8;
21*f0687c8aSRaman Tenneti 		plane.size = plane.stride * height / pi.ysub;
22*f0687c8aSRaman Tenneti 		plane.offset = 0;
23*f0687c8aSRaman Tenneti 		plane.map = new uint8_t[plane.size];
24*f0687c8aSRaman Tenneti 	}
25*f0687c8aSRaman Tenneti }
26*f0687c8aSRaman Tenneti 
~CPUFramebuffer()27*f0687c8aSRaman Tenneti CPUFramebuffer::~CPUFramebuffer()
28*f0687c8aSRaman Tenneti {
29*f0687c8aSRaman Tenneti 	for (unsigned i = 0; i < m_num_planes; ++i) {
30*f0687c8aSRaman Tenneti 		FramebufferPlane& plane = m_planes[i];
31*f0687c8aSRaman Tenneti 
32*f0687c8aSRaman Tenneti 		delete[] plane.map;
33*f0687c8aSRaman Tenneti 	}
34*f0687c8aSRaman Tenneti }
35*f0687c8aSRaman Tenneti 
36*f0687c8aSRaman Tenneti } // namespace kms
37