x11vnc: add rawfb setup example misc/ranfb.pl
parent
7ed9e5b1d0
commit
c46cdf9493
@ -1 +1 @@
|
||||
EXTRA_DIST=README blockdpy.c dtVncPopup rx11vnc rx11vnc.pl shm_clear slide.pl vcinject.pl x11vnc_loop
|
||||
EXTRA_DIST=README blockdpy.c dtVncPopup rx11vnc rx11vnc.pl shm_clear ranfb.pl slide.pl vcinject.pl x11vnc_loop
|
||||
|
@ -0,0 +1,157 @@
|
||||
#!/bin/sh -- # A comment mentioning perl
|
||||
eval 'exec perl -S $0 ${1+"$@"}'
|
||||
if 0;
|
||||
|
||||
# ranfb.pl: example -rawfb setup program.
|
||||
# E.g. x11vnc -rawfb setup:./ranfb.pl
|
||||
|
||||
# can supply WxH or W H on cmd line:
|
||||
if ($ARGV[0] =~ /^(\d+)x(\d+)$/) {
|
||||
$W = $1;
|
||||
$H = $2;
|
||||
} else {
|
||||
$W = shift;
|
||||
$H = shift;
|
||||
}
|
||||
|
||||
$W = 480 unless $W;
|
||||
$H = 360 unless $H;
|
||||
|
||||
$fb = "/tmp/ranfb.$$";
|
||||
open(FB, ">$fb") || die "$!";
|
||||
|
||||
$ones = "\377" x ($W * 4);
|
||||
for ($y = 0; $y < $H; $y++) {
|
||||
print FB $ones;
|
||||
}
|
||||
|
||||
if (fork) {
|
||||
print "map:$fb\@${W}x${H}x32\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
srand();
|
||||
while (1) {
|
||||
showpic();
|
||||
if (! kill 0, $ENV{X11VNC_PID}) {
|
||||
print STDERR "PID $ENV{X11VNC_PID} gone\n";
|
||||
unlink($fb);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
sub showpic {
|
||||
|
||||
# 0 < x,y < 1; R1, R2, ... B4 random & scaled so R,G,B < 255:
|
||||
# R(x,y) = R1 + R2 * x + R3 * y + R4 * x * y
|
||||
# G(x,y) = G1 + G2 * x + G3 * y + G4 * x * y
|
||||
# B(x,y) = B1 + B2 * x + B3 * y + B4 * x * y
|
||||
|
||||
$minfac = 0.25;
|
||||
foreach $c ('R', 'G', 'B') {
|
||||
$a1 = rand() * $minfac;
|
||||
$a2 = rand();
|
||||
$a3 = rand();
|
||||
$a4 = rand();
|
||||
$at = $a1 + $a2 + $a3 + $a4;
|
||||
$a1 = 255 * ($a1/$at);
|
||||
$a2 = 255 * ($a2/$at);
|
||||
$a3 = 255 * ($a3/$at);
|
||||
$a4 = 255 * ($a4/$at);
|
||||
# invert axes randomly
|
||||
$ax = 0; $ax = 1 if rand() < 0.5;
|
||||
$ay = 0; $ay = 1 if rand() < 0.5;
|
||||
eval "\$${c}1 = \$a1";
|
||||
eval "\$${c}2 = \$a2";
|
||||
eval "\$${c}3 = \$a3";
|
||||
eval "\$${c}4 = \$a4";
|
||||
eval "\$${c}x = \$ax";
|
||||
eval "\$${c}y = \$ay";
|
||||
}
|
||||
|
||||
for ($i = 0; $i < 256; $i++) {
|
||||
$p[$i] = pack("c", $i);
|
||||
}
|
||||
|
||||
$Winv = 1.0/$W;
|
||||
$Hinv = 1.0/$H;
|
||||
|
||||
$str = '';
|
||||
for ($y = 0; $y < $H; $y++) {
|
||||
$yr = $yg = $yb = $y;
|
||||
$yr = $H - $yr if $Ry;
|
||||
$yg = $H - $yg if $Gy;
|
||||
$yb = $H - $yb if $By;
|
||||
$yr = $yr * $Hinv;
|
||||
$yg = $yg * $Hinv;
|
||||
$yb = $yb * $Hinv;
|
||||
|
||||
$Y[3*$y+0] = $yr;
|
||||
$Y[3*$y+1] = $yg;
|
||||
$Y[3*$y+2] = $yb;
|
||||
}
|
||||
|
||||
for ($x = 0; $x < $W; $x++) {
|
||||
$xr = $xg = $xb = $x;
|
||||
$xr = $W - $xr if $Rx;
|
||||
$xg = $W - $xg if $Gx;
|
||||
$xb = $W - $xb if $Bx;
|
||||
$xr = $xr * $Winv;
|
||||
$xg = $xg * $Winv;
|
||||
$xb = $xb * $Winv;
|
||||
|
||||
$X[3*$x+0] = $xr;
|
||||
$X[3*$x+1] = $xg;
|
||||
$X[3*$x+2] = $xb;
|
||||
}
|
||||
|
||||
for ($y = 0; $y < $H; $y++) {
|
||||
#$yr = $yg = $yb = $y;
|
||||
#$yr = $H - $yr if $Ry;
|
||||
#$yg = $H - $yg if $Gy;
|
||||
#$yb = $H - $yb if $By;
|
||||
#$yr = $yr * $Hinv;
|
||||
#$yg = $yg * $Hinv;
|
||||
#$yb = $yb * $Hinv;
|
||||
|
||||
$yr = $Y[3*$y+0];
|
||||
$yg = $Y[3*$y+1];
|
||||
$yb = $Y[3*$y+2];
|
||||
|
||||
$RY1 = $R1 + $yr * $R3;
|
||||
$GY1 = $G1 + $yg * $G3;
|
||||
$BY1 = $B1 + $yb * $B3;
|
||||
|
||||
$RY2 = $R2 + $yr * $R4;
|
||||
$GY2 = $G2 + $yg * $G4;
|
||||
$BY2 = $B2 + $yb * $B4;
|
||||
|
||||
for ($x = 0; $x < $W; $x++) {
|
||||
#$xr = $xg = $xb = $x;
|
||||
#$xr = $W - $xr if $Rx;
|
||||
#$xg = $W - $xg if $Gx;
|
||||
#$xb = $W - $xb if $Bx;
|
||||
#$xr = $xr * $Winv;
|
||||
#$xg = $xg * $Winv;
|
||||
#$xb = $xb * $Winv;
|
||||
|
||||
$n = 3 * $x;
|
||||
|
||||
#$v = int($R1 + $xr*$R2 + $yr*$R3 + $xr*$yr*$R4);
|
||||
$v = int($RY1 + $X[$n]*$RY2);
|
||||
$str .= $p[$v];
|
||||
|
||||
#$v = int($G1 + $xg*$G2 + $yg*$G3 + $xg*$yg*$G4);
|
||||
$v = int($GY1 + $X[$n+1]*$GY2);
|
||||
$str .= $p[$v];
|
||||
|
||||
#$v = int($B1 + $xb*$B2 + $yb*$B3 + $xb*$yb*$B4);
|
||||
$v = int($BY1 + $X[$n+2]*$BY2);
|
||||
$str .= $p[$v];
|
||||
|
||||
$str .= "\0";
|
||||
}
|
||||
}
|
||||
seek(FB, 0, 0);
|
||||
print FB $str;
|
||||
}
|
Loading…
Reference in New Issue