Esempio n. 1
0
ExtCPUFramebuffer::ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
				     uint8_t* buffer, uint32_t size, uint32_t pitch, uint32_t offset)
	: m_width(width), m_height(height), m_format(format)
{
	const PixelFormatInfo& format_info = get_pixel_format_info(m_format);

	m_num_planes = format_info.num_planes;

	ASSERT(m_num_planes == 1);

	FramebufferPlane& plane = m_planes[0];

	plane.stride = pitch;
	plane.size = size;
	plane.offset = offset;
	plane.map = buffer;
}
Esempio n. 2
0
ExtCPUFramebuffer::ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
                                     uint8_t* buffer, uint32_t pitch)
    : m_width(width), m_height(height), m_format(format)
{
    const PixelFormatInfo& format_info = get_pixel_format_info(m_format);

    m_num_planes = format_info.num_planes;

    ASSERT(m_num_planes == 1);

    const PixelFormatPlaneInfo& pi = format_info.planes[0];
    FramebufferPlane& plane = m_planes[0];

    plane.stride = pitch;
    plane.size = plane.stride * height / pi.ysub;
    plane.map = buffer;
}
Esempio n. 3
0
ExtCPUFramebuffer::ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
				     uint8_t* buffers[4], uint32_t sizes[4], uint32_t pitches[4], uint32_t offsets[4])
	: m_width(width), m_height(height), m_format(format)
{
	const PixelFormatInfo& format_info = get_pixel_format_info(m_format);

	m_num_planes = format_info.num_planes;

	for (unsigned i = 0; i < format_info.num_planes; ++i) {
		FramebufferPlane& plane = m_planes[i];

		plane.stride = pitches[i];
		plane.size = sizes[i];
		plane.offset = offsets[i];
		plane.map = buffers[i];
	}
}
Esempio n. 4
0
void OmapFramebuffer::Create()
{
	const PixelFormatInfo& format_info = get_pixel_format_info(m_format);

	m_num_planes = format_info.num_planes;

	for (int i = 0; i < format_info.num_planes; ++i) {
		const PixelFormatPlaneInfo& pi = format_info.planes[i];
		FramebufferPlane& plane = m_planes[i];

		uint32_t flags = OMAP_BO_SCANOUT | OMAP_BO_WC;

		uint32_t size = width() * height() * pi.bitspp / 8;

		struct omap_bo* bo =  omap_bo_new(m_omap_card.dev(), size, flags);
		if (!bo)
			throw invalid_argument(string("omap_bo_new failed: ") + strerror(errno));

		uint32_t stride = width() * pi.bitspp / 8;

		plane.omap_bo = bo;
		plane.handle = omap_bo_handle(bo);
		plane.stride = stride;
		plane.size = omap_bo_size(bo);
		plane.offset = 0;
		plane.map = 0;
		plane.prime_fd = -1;
	}

	/* create framebuffer object for the dumb-buffer */
	uint32_t bo_handles[4] = { m_planes[0].handle, m_planes[1].handle };
	uint32_t pitches[4] = { m_planes[0].stride, m_planes[1].stride };
	uint32_t offsets[4] = { m_planes[0].offset, m_planes[1].offset };
	uint32_t id;
	int r = drmModeAddFB2(card().fd(), width(), height(), (uint32_t)format(),
			  bo_handles, pitches, offsets, &id, 0);
	if (r)
		throw invalid_argument(string("drmModeAddFB2 failed: ") + strerror(errno));

	set_id(id);
}
Esempio n. 5
0
ExtFramebuffer::ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
			       int fds[4], uint32_t pitches[4], uint32_t offsets[4])
	: Framebuffer(card, width, height)
{
	int r;

	const PixelFormatInfo& format_info = get_pixel_format_info(format);

	uint32_t handles[4] = { 0 };

	for (int i = 0; i < format_info.num_planes; ++i) {
		r = drmPrimeFDToHandle(card.fd(), fds[i], &handles[i]);
		if (r)
			throw invalid_argument(string("drmPrimeFDToHandle: ") + strerror(errno));
	}

	uint32_t id;
	r = drmModeAddFB2(card.fd(), width, height, (uint32_t)format,
			  handles, pitches, offsets, &id, 0);
	if (r)
		throw invalid_argument(string("drmModeAddFB2 failed: ") + strerror(errno));

	set_id(id);
}