#!/bin/sh set -e source vsp-lib.sh genimage='./gen-image' mediactl='media-ctl' yavta='yavta' # ----------------------------------------------------------------------------- # Input frame generation # generate_input_frame() { local file=$1 local format=$2 local size=$3 local alpha= local options= case $format in ARGB555) alpha=255 ;; ABGR32 | ARGB32) alpha=200 ;; XRGB555 | XBGR32 | XRGB32) alpha=0 ;; *) alpha=255 ;; esac $(format_v4l2_is_yuv $format) && options="$options -y" $genimage -f $format -s $size -a $alpha $options -o $file \ frames/frame-reference-1024x768.pnm } # ------------------------------------------------------------------------------ # Parse the command line and retrieve the formats # syntax() { echo "Syntax: vsp-runner.sh dev cmd [...]" echo "" echo "Supported commands:" echo " hgo [options]" echo " input index infmt [options]" echo " output index outfmt [options]" } parse() { if [ $# -lt 2 ] ; then syntax return 1 fi mdev=$1 cmd=$2 case $cmd in hgo) options=$3 log=hgo ;; input) index=$3 infmt=$4 options=$5 log=input.$index ;; output) index=$3 outfmt=$4 options=$5 log=output.$index ;; *) echo "Invalid command $cmd" ;; esac } # ------------------------------------------------------------------------------ # Execute the command # execute() { dev=`$mediactl -d $mdev -p | grep 'bus info' | sed 's/.*platform://'` if [ -z $dev ] ; then echo "Error: Device $dev doesn't exist" syntax return 1 fi case $cmd in hgo) if [ "x$options" = xinfinite ] ; then $yavta -c -n 4 $(vsp1_entity_subdev "hgo histo") else $yavta -c10 -n 10 --file=histo-#.bin $options \ $(vsp1_entity_subdev "hgo histo") fi ;; input) rpf=rpf.$index size=$(vsp1_entity_get_size $rpf 0) file=${rpf}.bin generate_input_frame $file $infmt $size if [ "x$options" = xinfinite ] ; then $yavta -c -n 4 -f $infmt -s $size --file=$file $options \ $(vsp1_entity_subdev "$rpf input") else $yavta -c10 -n 4 -f $infmt -s $size --file=$file $options \ $(vsp1_entity_subdev "$rpf input") fi rm -f $file ;; output) wpf=wpf.$index size=$(vsp1_entity_get_size $wpf 1) if [ "x$options" = xinfinite ] ; then $yavta -c -n 4 -f $outfmt -s $size \ $(vsp1_entity_subdev "$wpf output") else $yavta -c10 -n 4 -f $outfmt -s $size --skip 7 -F $options \ $(vsp1_entity_subdev "$wpf output") fi ;; esac } parse $* || exit 1 execute | ./logger.sh $log >> $logfile tr>
path: root/libkms++/dumbframebuffer.h
blob: 6b3ee648c4987c3fc890dde8b35473d650da5880 (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
#pragma once

#include "framebuffer.h"
#include "pixelformats.h"

namespace kms
{
class DumbFramebuffer : public Framebuffer, public IMappedFramebuffer
{
public:
	DumbFramebuffer(Card& card, uint32_t width, uint32_t height, const std::string& fourcc);
	DumbFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format);
	virtual ~DumbFramebuffer();

	uint32_t width() const { return Framebuffer::width(); }
	uint32_t height() const { return Framebuffer::height(); }

	PixelFormat format() const { return m_format; }
	unsigned num_planes() const { return m_num_planes; }

	uint32_t handle(unsigned plane) const { return m_planes[plane].handle; }
	uint32_t stride(unsigned plane) const { return m_planes[plane].stride; }
	uint32_t size(unsigned plane) const { return m_planes[plane].size; }
	uint32_t offset(unsigned plane) const { return m_planes[plane].offset; }
	uint8_t* map(unsigned plane);
	int prime_fd(unsigned plane);

private:
	struct FramebufferPlane {
		uint32_t handle;
		int prime_fd;
		uint32_t size;
		uint32_t stride;
		uint32_t offset;
		uint8_t *map;
	};

	void Create();
	void Destroy();

	unsigned m_num_planes;
	struct FramebufferPlane m_planes[4];

	PixelFormat m_format;
};
}