#!/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>
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;
};
}
|