summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrunge <runge>2005-04-12 02:17:24 +0000
committerrunge <runge>2005-04-12 02:17:24 +0000
commitc46cdf9493565a8809ba130f4d0b420bc055f157 (patch)
tree0a0c29fee4fbbaf22b4bbcfe71fcda0fea792004
parent7ed9e5b1d03837fc3e28578ee1f8dfd928b5ee17 (diff)
downloadlibtdevnc-c46cdf94.tar.gz
libtdevnc-c46cdf94.zip
x11vnc: add rawfb setup example misc/ranfb.pl
-rw-r--r--x11vnc/ChangeLog2
-rw-r--r--x11vnc/misc/Makefile.am2
-rwxr-xr-xx11vnc/misc/ranfb.pl157
3 files changed, 159 insertions, 2 deletions
diff --git a/x11vnc/ChangeLog b/x11vnc/ChangeLog
index 2708c67..0224880 100644
--- a/x11vnc/ChangeLog
+++ b/x11vnc/ChangeLog
@@ -1,6 +1,6 @@
2005-04-11 Karl Runge <runge@karlrunge.com>
* fix -clip under -rawfb, fix offset bug under file lseeking.
- * add -rawfb setup:cmd mode to initialize fb.
+ * add -rawfb setup:cmd mode to initialize fb. ex: misc/ranfb.pl
2005-04-10 Karl Runge <runge@karlrunge.com>
* -rawfb non X-polling (i.e. shm, mmap, lseek).
diff --git a/x11vnc/misc/Makefile.am b/x11vnc/misc/Makefile.am
index 5cd4d0a..c61b67f 100644
--- a/x11vnc/misc/Makefile.am
+++ b/x11vnc/misc/Makefile.am
@@ -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
diff --git a/x11vnc/misc/ranfb.pl b/x11vnc/misc/ranfb.pl
new file mode 100755
index 0000000..d6aa49d
--- /dev/null
+++ b/x11vnc/misc/ranfb.pl
@@ -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;
+}