aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorN.N. <sevyves@users.sourceforge.net>2005-07-09 19:38:22 +0000
committerN.N. <sevyves@users.sourceforge.net>2005-07-09 19:38:22 +0000
commit36b2d58cbaf75965e67e25ea45d72b5594d43467 (patch)
tree443b3d74290c4b5ed93b6bada26d92b2f3b34a65
parent304d25a2828076188afbd32757f5a67009ed866b (diff)
PiDiP 0.12.19
svn path=/trunk/externals/pidip/; revision=3312
-rw-r--r--CHANGES.LOG7
-rw-r--r--Makefile8
-rw-r--r--acinclude.m42
-rw-r--r--aclocal.m42
-rwxr-xr-xconfigure2
-rw-r--r--configure.ac2
-rw-r--r--configure.in2
-rw-r--r--doc/help-pdp_capture.pd10
-rw-r--r--doc/help-pdp_fdiff.pd73
-rw-r--r--doc/help-pdp_hue.pd74
-rw-r--r--doc/help-pdp_pen.pd6
-rw-r--r--doc/help-pdp_shape.pd94
-rw-r--r--doc/help-pdp_text.pd16
-rw-r--r--doc/rs_pdp_icedthe~.pd71
-rw-r--r--include/pidip_config.h2
-rw-r--r--include/xwindow-private.h562
-rw-r--r--modules/Makefile3
-rw-r--r--modules/Makefile.in1
-rw-r--r--modules/pdp_capture.c6
-rw-r--r--modules/pdp_fdiff.c232
-rw-r--r--modules/pdp_hue.c184
-rw-r--r--modules/pdp_icedthe~.c205
-rw-r--r--modules/pdp_shape.c34
-rw-r--r--patches/pdp_cabaret.pd35
-rw-r--r--system/pidip.c4
25 files changed, 1410 insertions, 227 deletions
diff --git a/CHANGES.LOG b/CHANGES.LOG
index 956f4ec..f37d741 100644
--- a/CHANGES.LOG
+++ b/CHANGES.LOG
@@ -1,3 +1,10 @@
+0.12.19 ( codename GISS action force )
+ addapted to newer Image Magick ( > 6.1.9 )
+ modified pdp_icedthe~ : added a framerate control
+ modified pdp_shape : added isolate option
+ added pdp_hue : a frame hue estimator
+ added pdp_fdiff : a frame difference estimator
+
0.12.18 ( codename Benisensi )
added pdp_icedthe~ : a threaded theora stream reader ( from flumotion or icecast )
added pdp_theonice~ : a theora a/v streamer ( to flumotion or icecast )
diff --git a/Makefile b/Makefile
index 0ea14fe..e673ebf 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,15 @@
PD_DIR = /usr/local/pd
PDP_DIR = /usr/local/pd/pdp
-FFMPEG_SOURCE_DIR = /SOURCES/ffmpeg-cvs-2003-03-04
+FFMPEG_SOURCE_DIR = /SOURCES/ffmpeg
-PDP_PIDIP_LIBS = -lbz2 -lz -ldl -lmp3lame -logg -lvorbis -lvorbisenc /SOURCES/ffmpeg-cvs-2003-03-04/libavformat/libavformat.a /SOURCES/ffmpeg-cvs-2003-03-04/libavcodec/libavcodec.a
+PDP_PIDIP_LIBS = -lbz2 -lz -ldl -lmp3lame -logg -lvorbis -lvorbisenc
IMLIB_CFLAGS = -I/usr/local/include -I/usr/X11R6/include
IMLIB_LIBS = -L/usr/local/lib -lImlib2 -lfreetype -lz -lm -ldl -lXext -lXext -lX11 -L/usr/X11R6/lib
MAGICK_CFLAGS = -I/usr/X11R6/include -O2 -g -pipe -m32 -march=i386 -mtune=pentium4 -Wall -pthread
MAGICK_LIBS = -L/usr/X11R6/lib -lMagick -lMagick -ltiff -lfreetype -ljpeg -lpng -ldpstk -ldps -lXext -lXt -lSM -lICE -lX11 -lbz2 -lxml2 -lz -lpthread -lm -lpthread -L/usr/lib -L/usr/X11R6/lib -lfreetype -lz -L/usr/lib
THEORA_LIBS = /usr/lib/libtheora.a /usr/local/lib/libtheora.a /usr/lib/libogg.a /usr/local/lib/libvorbis.a /usr/local/lib/libvorbisenc.a
-PDP_PIDIP_INCLUDES = -I/usr/local/pd/src -I. -I/usr/local/pd/pdp/include -I../include -I../charmaps -I/SOURCES/ffmpeg-cvs-2003-03-04/libavcodec -I/SOURCES/ffmpeg-cvs-2003-03-04/libavformat
-PDP_PIDIP_VERSION = 0.12.18
+PDP_PIDIP_INCLUDES = -I/usr/local/pd/src -I. -I/usr/local/pd/pdp/include -I../include -I../charmaps
+PDP_PIDIP_VERSION = 0.12.19
MPEG4IP_CFLAGS =
PDP_PIDIP_DISTRO = /mnt/c/ydegoyon.free.fr/pidip-$(PDP_PIDIP_VERSION)
diff --git a/acinclude.m4 b/acinclude.m4
index d8b255d..fa559ee 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -24,7 +24,7 @@ dnl At present there is no support for additional "MODULES" (see AM_PATH_GTK)
dnl (shamelessly stolen from gtk.m4 and then hacked around a fair amount)
dnl
dnl @author Angus Lees <gusl@cse.unsw.edu.au>
-dnl @version $Id: acinclude.m4,v 1.9 2005-01-02 06:02:47 sevyves Exp $
+dnl @version $Id: acinclude.m4,v 1.10 2005-07-09 19:35:39 sevyves Exp $
AC_DEFUN(AC_PATH_GENERIC,
[dnl
diff --git a/aclocal.m4 b/aclocal.m4
index 9abb6bb..75ef28f 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -36,7 +36,7 @@ dnl At present there is no support for additional "MODULES" (see AM_PATH_GTK)
dnl (shamelessly stolen from gtk.m4 and then hacked around a fair amount)
dnl
dnl @author Angus Lees <gusl@cse.unsw.edu.au>
-dnl @version $Id: aclocal.m4,v 1.9 2005-01-02 06:02:47 sevyves Exp $
+dnl @version $Id: aclocal.m4,v 1.10 2005-07-09 19:35:39 sevyves Exp $
AC_DEFUN(AC_PATH_GENERIC,
[dnl
diff --git a/configure b/configure
index ecc0918..a5cfd93 100755
--- a/configure
+++ b/configure
@@ -1267,7 +1267,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_config_headers="$ac_config_headers include/pidip_config.h"
-PDP_PIDIP_VERSION="0.12.18"
+PDP_PIDIP_VERSION="0.12.19"
PD_DIR=/usr/local/pd
PDP_DIR=/usr/local/pd/pdp
FFMPEG_SOURCE_DIR=/SOURCES/ffmpeg
diff --git a/configure.ac b/configure.ac
index d55d80c..73d9bca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ dnl Process this file with autoconf to produce a configure script.
AC_INIT
AC_CONFIG_HEADER(include/pidip_config.h)
-PDP_PIDIP_VERSION="0.12.18"
+PDP_PIDIP_VERSION="0.12.19"
PD_DIR=/usr/local/pd
PDP_DIR=/usr/local/pd/pdp
FFMPEG_SOURCE_DIR=/SOURCES/ffmpeg
diff --git a/configure.in b/configure.in
index d55d80c..73d9bca 100644
--- a/configure.in
+++ b/configure.in
@@ -3,7 +3,7 @@ dnl Process this file with autoconf to produce a configure script.
AC_INIT
AC_CONFIG_HEADER(include/pidip_config.h)
-PDP_PIDIP_VERSION="0.12.18"
+PDP_PIDIP_VERSION="0.12.19"
PD_DIR=/usr/local/pd
PDP_DIR=/usr/local/pd/pdp
FFMPEG_SOURCE_DIR=/SOURCES/ffmpeg
diff --git a/doc/help-pdp_capture.pd b/doc/help-pdp_capture.pd
index c8ed544..1369235 100644
--- a/doc/help-pdp_capture.pd
+++ b/doc/help-pdp_capture.pd
@@ -25,11 +25,7 @@
#X text 290 155 Upper left X position ( default : 0 );
#X text 332 226 Height ( default : 240 );
#X floatatom 174 109 5 0 0 0 - - -;
-#X msg 218 101 display 158.37.56.31:0;
-#X obj 287 377 pdp_ffmpeg~;
-#X msg 364 317 feed http://www.xicnet.com:8000/feed1.ffm;
-#X floatatom 300 423 5 0 0 0 - - -;
-#X floatatom 263 402 5 0 0 0 - - -;
+#X msg 218 101 display 192.168.0.225:0;
#X connect 1 0 3 0;
#X connect 2 0 5 0;
#X connect 3 0 2 0;
@@ -42,11 +38,7 @@
#X connect 13 0 18 0;
#X connect 14 0 19 0;
#X connect 17 0 0 0;
-#X connect 17 0 26 0;
#X connect 18 0 19 0;
#X connect 19 0 17 0;
#X connect 24 0 18 1;
#X connect 25 0 19 0;
-#X connect 26 0 29 0;
-#X connect 26 1 28 0;
-#X connect 27 0 26 0;
diff --git a/doc/help-pdp_fdiff.pd b/doc/help-pdp_fdiff.pd
new file mode 100644
index 0000000..bf76e84
--- /dev/null
+++ b/doc/help-pdp_fdiff.pd
@@ -0,0 +1,73 @@
+#N canvas 237 21 712 664 10;
+#X obj 218 413 pdp_xv;
+#X obj 268 64 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X msg 123 136 loop \$1;
+#X obj 124 114 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 1
+1;
+#X msg 130 73 open \$1;
+#X obj 129 49 openpanel;
+#X obj 114 32 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X floatatom 316 99 5 0 0 0 - - -;
+#X msg 225 65 stop;
+#X obj 257 135 metro 70;
+#X obj 252 167 pdp_yqt;
+#X obj 328 197 metro 70;
+#X obj 373 163 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X msg 330 164 stop;
+#X obj 413 465 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 413 517 pdp_control;
+#X msg 413 490 thread \$1;
+#X floatatom 413 578 5 0 0 0 - - -;
+#X obj 413 549 route pdp_drop;
+#X obj 328 231 pdp_background;
+#X floatatom 402 204 5 0 0 0 - - -;
+#X text 409 187 Red;
+#X floatatom 458 203 5 0 0 0 - - -;
+#X floatatom 510 203 5 0 0 0 - - -;
+#X text 458 186 Green;
+#X text 513 187 Blue;
+#X obj 423 108 pdp_colorgrid pdp_colorgrid1 256 0 256 50 0 50 0 1 1
+10 10 583 137;
+#X text 65 469 pdp_fdiff : a frame difference estimator;
+#X text 65 485 useful to detect the presence of a signal;
+#X text 65 498 or a still image;
+#X text 64 516 Made for the GISS force by ydegoyon@free.fr;
+#X floatatom 244 361 10 0 0 0 - - -;
+#X floatatom 267 384 10 0 0 0 - - -;
+#X floatatom 295 405 10 0 0 0 - - -;
+#X text 339 360 Y max variation;
+#X text 358 382 U max variation;
+#X text 383 405 V max variation;
+#X obj 218 330 pdp_fdiff;
+#X connect 1 0 9 0;
+#X connect 2 0 10 0;
+#X connect 3 0 2 0;
+#X connect 4 0 10 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 9 1;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 37 0;
+#X connect 11 0 19 0;
+#X connect 12 0 11 0;
+#X connect 13 0 11 0;
+#X connect 14 0 16 0;
+#X connect 15 0 18 0;
+#X connect 16 0 15 0;
+#X connect 18 0 17 0;
+#X connect 19 0 37 0;
+#X connect 20 0 19 1;
+#X connect 22 0 19 2;
+#X connect 23 0 19 3;
+#X connect 26 0 20 0;
+#X connect 26 1 22 0;
+#X connect 26 2 23 0;
+#X connect 37 0 0 0;
+#X connect 37 1 31 0;
+#X connect 37 2 32 0;
+#X connect 37 3 33 0;
diff --git a/doc/help-pdp_hue.pd b/doc/help-pdp_hue.pd
new file mode 100644
index 0000000..95c6616
--- /dev/null
+++ b/doc/help-pdp_hue.pd
@@ -0,0 +1,74 @@
+#N canvas 237 21 712 664 10;
+#X obj 326 307 pdp_xv;
+#X obj 268 64 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X msg 123 136 loop \$1;
+#X obj 124 114 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0
+1;
+#X msg 130 73 open \$1;
+#X obj 129 49 openpanel;
+#X obj 114 32 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X floatatom 316 99 5 0 0 0 - - -;
+#X msg 225 65 stop;
+#X obj 257 135 metro 70;
+#X obj 252 167 pdp_yqt;
+#X obj 328 197 metro 70;
+#X obj 373 163 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X msg 330 164 stop;
+#X obj 413 465 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 413 517 pdp_control;
+#X msg 413 490 thread \$1;
+#X floatatom 413 578 5 0 0 0 - - -;
+#X obj 413 549 route pdp_drop;
+#X obj 328 231 pdp_background;
+#X floatatom 402 204 5 0 0 0 - - -;
+#X text 409 187 Red;
+#X floatatom 458 203 5 0 0 0 - - -;
+#X floatatom 510 203 5 0 0 0 - - -;
+#X text 458 186 Green;
+#X text 513 187 Blue;
+#X obj 423 108 pdp_colorgrid pdp_colorgrid1 256 0 256 50 0 50 0 1 1
+10 10 494 141;
+#X floatatom 224 362 10 0 0 0 - - -;
+#X floatatom 247 383 10 0 0 0 - - -;
+#X floatatom 270 404 10 0 0 0 - - -;
+#X text 319 361 Mean R value;
+#X text 338 381 Mean G value;
+#X text 358 404 Mean B value;
+#X text 65 469 pdp_hue : a frame hue estimator;
+#X text 64 486 Written by ydegoyon@free.fr;
+#X obj 218 330 pdp_hue;
+#X obj 328 259 pdp_convert image/YCrCb/*;
+#X connect 1 0 9 0;
+#X connect 2 0 10 0;
+#X connect 3 0 2 0;
+#X connect 4 0 10 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 9 1;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 35 0;
+#X connect 10 0 0 0;
+#X connect 11 0 19 0;
+#X connect 12 0 11 0;
+#X connect 13 0 11 0;
+#X connect 14 0 16 0;
+#X connect 15 0 18 0;
+#X connect 16 0 15 0;
+#X connect 18 0 17 0;
+#X connect 19 0 36 0;
+#X connect 20 0 19 1;
+#X connect 22 0 19 2;
+#X connect 23 0 19 3;
+#X connect 26 0 20 0;
+#X connect 26 1 22 0;
+#X connect 26 2 23 0;
+#X connect 35 0 27 0;
+#X connect 35 1 28 0;
+#X connect 35 2 29 0;
+#X connect 36 0 35 0;
+#X connect 36 0 0 0;
diff --git a/doc/help-pdp_pen.pd b/doc/help-pdp_pen.pd
index 5b8436b..aa6919d 100644
--- a/doc/help-pdp_pen.pd
+++ b/doc/help-pdp_pen.pd
@@ -2,7 +2,7 @@
#X obj 268 64 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
-1;
#X msg 123 136 loop \$1;
-#X obj 124 114 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 1
+#X obj 124 114 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0
1;
#X msg 370 44 open \$1;
#X obj 369 20 openpanel;
@@ -66,9 +66,10 @@
#X text 273 197 X Offset;
#X text 329 197 Y Offset;
#X obj 406 213 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 8800 1;
+-1 -1 0 1;
#X text 543 213 alpha;
#X obj 239 387 pdp_xv;
+#X msg 150 387 cursor 1;
#X connect 0 0 9 0;
#X connect 1 0 10 0;
#X connect 2 0 1 0;
@@ -120,3 +121,4 @@
#X connect 56 0 21 2;
#X connect 59 0 21 3;
#X connect 61 0 54 0;
+#X connect 62 0 61 0;
diff --git a/doc/help-pdp_shape.pd b/doc/help-pdp_shape.pd
index 16a31fe..6afaff7 100644
--- a/doc/help-pdp_shape.pd
+++ b/doc/help-pdp_shape.pd
@@ -26,53 +26,57 @@
#X msg 567 501 thread \$1;
#X floatatom 567 589 5 0 0 0 - - -;
#X obj 567 560 route pdp_drop;
-#X text 85 514 written by Yves Degoyon ( ydegoyon@free.fr );
-#X obj 127 417 pdp_xv;
-#X msg 326 273 rgb \$1 \$2 \$3;
-#X obj 425 273 pack f f f;
-#X floatatom 607 272 5 0 0 0 - - -;
-#X text 618 291 R;
-#X floatatom 656 273 5 0 0 0 - - -;
-#X floatatom 700 273 5 0 0 0 - - -;
-#X text 711 290 B;
-#X obj 556 273 t b f;
-#X text 662 291 G;
-#X obj 508 273 t b f;
-#X obj 128 467 route press drag release;
-#X msg 271 171 pick \$1 \$2;
-#X text 362 170 Pick the color of the shape;
-#X msg 291 194 detect \$1 \$2;
-#X text 389 194 Detect a shape of that color;
-#X msg 304 218 tolerance \$1;
-#X floatatom 401 220 5 0 0 0 - - -;
-#X text 86 498 pdp_shape : shape recognition object;
-#X text 445 220 Set tolerance ( default = 20 );
-#X text 328 293 Set the color of the shape;
-#X msg 317 247 paint \$1;
-#X obj 387 248 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X text 75 574 written by Yves Degoyon ( ydegoyon@free.fr );
+#X obj 117 477 pdp_xv;
+#X msg 298 274 rgb \$1 \$2 \$3;
+#X obj 397 274 pack f f f;
+#X floatatom 579 273 5 0 0 0 - - -;
+#X text 590 292 R;
+#X floatatom 628 274 5 0 0 0 - - -;
+#X floatatom 672 274 5 0 0 0 - - -;
+#X text 683 291 B;
+#X obj 528 274 t b f;
+#X text 634 292 G;
+#X obj 480 274 t b f;
+#X obj 118 527 route press drag release;
+#X msg 262 172 pick \$1 \$2;
+#X text 353 171 Pick the color of the shape;
+#X msg 272 195 detect \$1 \$2;
+#X text 370 195 Detect a shape of that color;
+#X msg 282 219 tolerance \$1;
+#X floatatom 379 221 5 0 0 0 - - -;
+#X text 76 558 pdp_shape : shape recognition object;
+#X text 423 221 Set tolerance ( default = 20 );
+#X text 300 294 Set the color of the shape;
+#X msg 292 246 paint \$1;
+#X obj 362 247 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
-#X text 412 247 Paint option ( default = off );
-#X floatatom 325 399 5 0 0 0 - - -;
-#X floatatom 286 417 5 0 0 0 - - -;
-#X floatatom 375 399 5 0 0 0 - - -;
-#X floatatom 287 438 5 0 0 0 - - -;
-#X text 331 378 X1;
-#X text 379 378 X2;
-#X text 259 416 Y1;
-#X text 259 439 Y2;
-#X text 332 426 Coordinates of detected shape;
-#X obj 440 311 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X text 387 246 Paint option ( default = off );
+#X floatatom 315 459 5 0 0 0 - - -;
+#X floatatom 276 477 5 0 0 0 - - -;
+#X floatatom 365 459 5 0 0 0 - - -;
+#X floatatom 277 498 5 0 0 0 - - -;
+#X text 321 438 X1;
+#X text 369 438 X2;
+#X text 249 476 Y1;
+#X text 249 499 Y2;
+#X text 322 486 Coordinates of detected shape;
+#X obj 416 312 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
-#X msg 338 311 luminosity \$1;
-#X text 468 310 Use luminosity ( default = on );
-#X obj 127 361 pdp_shape;
-#X msg 45 401 cursor 1;
-#X obj 431 339 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X msg 314 312 luminosity \$1;
+#X text 444 311 Use luminosity ( default = on );
+#X obj 117 421 pdp_shape;
+#X msg 35 461 cursor 1;
+#X obj 405 354 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
-#X msg 352 337 shape \$1;
-#X text 459 338 Draw shape option ( default = on );
-#X obj 504 369 loadbang;
-#X msg 469 370 1;
+#X msg 326 352 shape \$1;
+#X text 433 354 Draw shape option ( default = on );
+#X obj 506 329 loadbang;
+#X msg 471 330 1;
+#X msg 333 381 isolate \$1;
+#X obj 421 382 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X text 442 382 Only show detected shape ( default = off );
#X connect 0 0 9 0;
#X connect 1 0 10 0;
#X connect 2 0 1 0;
@@ -124,3 +128,5 @@
#X connect 63 0 64 0;
#X connect 64 0 55 0;
#X connect 64 0 60 0;
+#X connect 65 0 58 0;
+#X connect 66 0 65 0;
diff --git a/doc/help-pdp_text.pd b/doc/help-pdp_text.pd
index 735afc0..0b51dda 100644
--- a/doc/help-pdp_text.pd
+++ b/doc/help-pdp_text.pd
@@ -3,7 +3,7 @@
#X obj 268 64 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
-1;
#X msg 123 136 loop \$1;
-#X obj 124 114 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0
+#X obj 124 114 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 1
1;
#X msg 370 44 open \$1;
#X obj 369 20 openpanel;
@@ -73,6 +73,14 @@
#X obj 380 594 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
-1 -1 0 1;
#X text 517 594 Alpha ( global );
+#X floatatom 73 91 5 0 0 0 - - -;
+#X floatatom 48 115 5 0 0 0 - - -;
+#X floatatom 21 150 5 0 0 0 - - -;
+#X obj 55 31 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 44 66 time;
+#X symbolatom 24 244 20 0 0 0 - - -;
+#X obj 24 213 makefilename %s:%s:%s;
#X connect 1 0 10 0;
#X connect 2 0 16 0;
#X connect 3 0 2 0;
@@ -120,3 +128,9 @@
#X connect 61 0 51 0;
#X connect 62 0 51 8;
#X connect 64 0 51 9;
+#X connect 68 0 72 0;
+#X connect 69 0 70 0;
+#X connect 70 0 68 0;
+#X connect 70 1 67 0;
+#X connect 70 2 66 0;
+#X connect 72 0 71 0;
diff --git a/doc/rs_pdp_icedthe~.pd b/doc/rs_pdp_icedthe~.pd
index f6fc439..447b2a1 100644
--- a/doc/rs_pdp_icedthe~.pd
+++ b/doc/rs_pdp_icedthe~.pd
@@ -2,60 +2,65 @@
#X text 452 600 written by Yves Degoyon (ydegoyon@free.fr);
#X floatatom 245 506 7 0 0 0 - - -;
#X text 301 507 Number of video frames decoded;
-#X msg 248 352 priority \$1;
-#X floatatom 337 353 5 0 0 0 - - -;
-#X text 383 376 ( optional \, if you know what you're doing );
-#X text 388 348 Set the priority of decoding thread;
-#X msg 248 322 audio \$1;
-#X obj 317 324 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X msg 275 304 priority \$1;
+#X floatatom 364 305 5 0 0 0 - - -;
+#X text 410 328 ( optional \, if you know what you're doing );
+#X text 415 300 Set the priority of decoding thread;
+#X msg 252 274 audio \$1;
+#X obj 321 276 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X floatatom 261 483 5 0 0 0 - - -;
#X floatatom 285 463 5 0 0 0 - - -;
#X obj 72 543 outlet~;
-#X text 385 361 ([0 \, 20 ] default : 1 );
-#X text 442 323 Activate decoding of audio ( default : on );
-#X obj 375 323 loadbang;
-#X msg 340 323 1;
+#X text 412 313 ([0 \, 20 ] default : 1 );
+#X text 446 275 Activate decoding of audio ( default : on );
+#X obj 379 275 loadbang;
+#X msg 344 275 1;
#X obj 67 60 block~ 512;
-#X obj 39 496 pdp_xv;
#X obj 691 39 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X obj 691 91 pdp_control;
#X msg 691 64 thread \$1;
#X floatatom 691 152 5 0 0 0 - - -;
#X obj 691 123 route pdp_drop;
-#X msg 248 291 disconnect;
-#X text 332 291 Disconnect from a stream;
-#X text 538 263 Connect to a stream;
+#X msg 242 245 disconnect;
+#X text 326 245 Disconnect from a stream;
+#X text 457 114 Connect to a stream;
#X text 332 463 End of stream reached;
#X text 308 485 Stream framerate;
#X floatatom 232 530 5 0 0 0 - - -;
#X text 281 531 Connection status;
#X text 452 586 pdp_icedthe~ : threaded theora stream decoder;
-#X msg 248 263 connect http://localhost:8000/theora.ogg;
+#X msg 223 217 connect http://localhost:8000/theora.ogg;
#X floatatom 306 443 20 0 0 0 - - -;
#X text 458 442 Video/Audio lag;
-#X msg 248 232 connect http://mirror.fluendo.com:8801/;
#X obj 134 543 outlet~;
#X obj 133 396 pdp_icedthe~;
-#X connect 3 0 36 0;
+#X msg 294 350 framerate \$1;
+#X floatatom 393 352 5 0 0 0 - - -;
+#X text 439 352 Set the desired receiving framerate;
+#X obj 39 496 pdp_xv;
+#X msg 199 191 connect http://hackitectura.net:8000/vlnc.ogg;
+#X connect 3 0 34 0;
#X connect 4 0 3 0;
-#X connect 7 0 36 0;
+#X connect 7 0 34 0;
#X connect 8 0 7 0;
#X connect 14 0 15 0;
#X connect 15 0 8 0;
-#X connect 18 0 20 0;
-#X connect 19 0 22 0;
-#X connect 20 0 19 0;
-#X connect 22 0 21 0;
-#X connect 23 0 36 0;
-#X connect 31 0 36 0;
-#X connect 34 0 36 0;
-#X connect 36 0 17 0;
-#X connect 36 1 11 0;
-#X connect 36 2 35 0;
-#X connect 36 3 28 0;
-#X connect 36 4 1 0;
-#X connect 36 5 9 0;
-#X connect 36 6 10 0;
-#X connect 36 7 32 0;
+#X connect 17 0 19 0;
+#X connect 18 0 21 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 22 0 34 0;
+#X connect 30 0 34 0;
+#X connect 34 0 38 0;
+#X connect 34 1 11 0;
+#X connect 34 2 33 0;
+#X connect 34 3 27 0;
+#X connect 34 4 1 0;
+#X connect 34 5 9 0;
+#X connect 34 6 10 0;
+#X connect 34 7 31 0;
+#X connect 35 0 34 0;
+#X connect 36 0 35 0;
+#X connect 39 0 34 0;
diff --git a/include/pidip_config.h b/include/pidip_config.h
index cc62f58..f4b864c 100644
--- a/include/pidip_config.h
+++ b/include/pidip_config.h
@@ -1,6 +1,6 @@
/* include/pidip_config.h. Generated by configure. */
/* Define to 1 if you have ffmpeg source tree */
-#define HAVE_PIDIP_FFMPEG 1
+/* #undef HAVE_PIDIP_FFMPEG */
/* Define to 1 if you have mpeg4ip source tree */
/* #undef HAVE_PIDIP_MPEG4IP */
diff --git a/include/xwindow-private.h b/include/xwindow-private.h
new file mode 100644
index 0000000..eef6b0b
--- /dev/null
+++ b/include/xwindow-private.h
@@ -0,0 +1,562 @@
+/*
+ Copyright 1999-2005 ImageMagick Studio LLC, a non-profit organization
+ dedicated to making software imaging solutions freely available.
+
+ You may not use this file except in compliance with the License.
+ obtain a copy of the License at
+
+ http://www.imagemagick.org/www/Copyright.html
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ ImageMagick X11 window methods.
+*/
+#ifndef _MAGICK_XWINDOW_PRIVATE_H
+#define _MAGICK_XWINDOW_PRIVATE_H
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#if defined(HasX11)
+
+#include <X11/Xos.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/cursorfont.h>
+#include <X11/keysym.h>
+#include <X11/Xresource.h>
+#include <X11/Xutil.h>
+#include "magick/quantize.h"
+
+/*
+ Invoke pre-X11R6 ICCCM routines if XlibSpecificationRelease is not 6.
+*/
+#if XlibSpecificationRelease < 6
+#if !defined(PRE_R6_ICCCM)
+#define PRE_R6_ICCCM
+#endif
+#endif
+/*
+ Invoke pre-X11R5 ICCCM routines if XlibSpecificationRelease is not defined.
+*/
+#if !defined(XlibSpecificationRelease)
+#define PRE_R5_ICCCM
+#endif
+/*
+ Invoke pre-X11R4 ICCCM routines if PWinGravity is not defined.
+*/
+#if !defined(PWinGravity)
+#define PRE_R4_ICCCM
+#endif
+
+#define MaxIconSize 96
+#define MaxNumberPens 11
+#define MaxNumberFonts 11
+#define MaxXWindows 12
+
+typedef enum
+{
+ ForegroundStencil,
+ BackgroundStencil,
+ OpaqueStencil,
+ TransparentStencil
+} AnnotationStencil;
+
+typedef enum
+{
+ UndefinedElement,
+ PointElement,
+ LineElement,
+ RectangleElement,
+ FillRectangleElement,
+ CircleElement,
+ FillCircleElement,
+ EllipseElement,
+ FillEllipseElement,
+ PolygonElement,
+ FillPolygonElement,
+ ColorElement,
+ MatteElement,
+ TextElement,
+ ImageElement
+} ElementType;
+
+typedef enum
+{
+ UndefinedColormap,
+ PrivateColormap,
+ SharedColormap
+} XColormapType;
+
+typedef struct _XDrawInfo
+{
+ int
+ x,
+ y;
+
+ unsigned int
+ width,
+ height;
+
+ double
+ degrees;
+
+ AnnotationStencil
+ stencil;
+
+ ElementType
+ element;
+
+ Pixmap
+ stipple;
+
+ unsigned int
+ line_width;
+
+ XSegment
+ line_info;
+
+ unsigned int
+ number_coordinates;
+
+ RectangleInfo
+ rectangle_info;
+
+ XPoint
+ *coordinate_info;
+
+ char
+ geometry[MaxTextExtent];
+} XDrawInfo;
+
+typedef enum
+{
+ DefaultState = 0x0000,
+ EscapeState = 0x0001,
+ ExitState = 0x0002,
+ FormerImageState = 0x0004,
+ ModifierState = 0x0008,
+ MontageImageState = 0x0010,
+ NextImageState = 0x0020,
+ RetainColorsState = 0x0040,
+ SuspendTime = 50,
+ UpdateConfigurationState = 0x0080,
+ UpdateRegionState = 0x0100
+} XState;
+
+typedef struct _XAnnotateInfo
+{
+ int
+ x,
+ y;
+
+ unsigned int
+ width,
+ height;
+
+ double
+ degrees;
+
+ XFontStruct
+ *font_info;
+
+ char
+ *text;
+
+ AnnotationStencil
+ stencil;
+
+ char
+ geometry[MaxTextExtent];
+
+ struct _XAnnotateInfo
+ *next,
+ *previous;
+} XAnnotateInfo;
+
+typedef struct _XPixelInfo
+{
+ unsigned long
+ colors,
+ *pixels;
+
+ XColor
+ foreground_color,
+ background_color,
+ border_color,
+ matte_color,
+ highlight_color,
+ shadow_color,
+ depth_color,
+ trough_color,
+ box_color,
+ pen_color,
+ pen_colors[MaxNumberPens];
+
+ GC
+ annotate_context,
+ highlight_context,
+ widget_context;
+
+ unsigned short
+ box_index,
+ pen_index;
+} XPixelInfo;
+
+typedef struct _XResourceInfo
+{
+ XrmDatabase
+ resource_database;
+
+ ImageInfo
+ *image_info;
+
+ QuantizeInfo
+ *quantize_info;
+
+ unsigned long
+ colors;
+
+ MagickBooleanType
+ close_server,
+ backdrop;
+
+ char
+ *background_color,
+ *border_color;
+
+ char
+ *client_name;
+
+ XColormapType
+ colormap;
+
+ unsigned int
+ border_width,
+ delay;
+
+ MagickBooleanType
+ color_recovery,
+ confirm_exit;
+
+ char
+ *display_gamma;
+
+ char
+ *font,
+ *font_name[MaxNumberFonts],
+ *foreground_color;
+
+ MagickBooleanType
+ display_warnings,
+ gamma_correct;
+
+ char
+ *icon_geometry;
+
+ MagickBooleanType
+ iconic,
+ immutable;
+
+ char
+ *image_geometry;
+
+ char
+ *map_type,
+ *matte_color,
+ *name;
+
+ unsigned int
+ magnify,
+ pause;
+
+ char
+ *pen_colors[MaxNumberPens];
+
+ char
+ *text_font,
+ *title;
+
+ int
+ quantum;
+
+ unsigned int
+ update;
+
+ MagickBooleanType
+ use_pixmap,
+ use_shared_memory;
+
+ unsigned long
+ undo_cache;
+
+ char
+ *visual_type,
+ *window_group,
+ *window_id,
+ *write_filename;
+
+ Image
+ *copy_image;
+
+ int
+ gravity;
+
+ char
+ home_directory[MaxTextExtent];
+} XResourceInfo;
+
+typedef struct _XWindowInfo
+{
+ Window
+ id;
+
+ Window
+ root;
+
+ Visual
+ *visual;
+
+ unsigned int
+ storage_class,
+ depth;
+
+ XVisualInfo
+ *visual_info;
+
+ XStandardColormap
+ *map_info;
+
+ XPixelInfo
+ *pixel_info;
+
+ XFontStruct
+ *font_info;
+
+ GC
+ annotate_context,
+ highlight_context,
+ widget_context;
+
+ Cursor
+ cursor,
+ busy_cursor;
+
+ char
+ *name,
+ *geometry,
+ *icon_name,
+ *icon_geometry,
+ *crop_geometry;
+
+ unsigned long
+ data,
+ flags;
+
+ int
+ x,
+ y;
+
+ unsigned int
+ width,
+ height,
+ min_width,
+ min_height,
+ width_inc,
+ height_inc,
+ border_width;
+
+ MagickBooleanType
+ use_pixmap,
+ immutable,
+ shape,
+ shared_memory;
+
+ int
+ screen;
+
+ XImage
+ *ximage,
+ *matte_image;
+
+ Pixmap
+ highlight_stipple,
+ shadow_stipple,
+ pixmap,
+ *pixmaps,
+ matte_pixmap,
+ *matte_pixmaps;
+
+ XSetWindowAttributes
+ attributes;
+
+ XWindowChanges
+ window_changes;
+
+ void
+ *segment_info;
+
+ unsigned long
+ mask;
+
+ MagickBooleanType
+ orphan,
+ mapped,
+ stasis;
+
+ Image
+ *image;
+
+ MagickBooleanType
+ destroy;
+} XWindowInfo;
+
+typedef struct _XWindows
+{
+ Display
+ *display;
+
+ XStandardColormap
+ *map_info,
+ *icon_map;
+
+ XVisualInfo
+ *visual_info,
+ *icon_visual;
+
+ XPixelInfo
+ *pixel_info,
+ *icon_pixel;
+
+ XFontStruct
+ *font_info;
+
+ XResourceInfo
+ *icon_resources;
+
+ XClassHint
+ *class_hints;
+
+ XWMHints
+ *manager_hints;
+
+ XWindowInfo
+ context,
+ group_leader,
+ backdrop,
+ icon,
+ image,
+ info,
+ magnify,
+ pan,
+ command,
+ widget,
+ popup;
+
+ Atom
+ wm_protocols,
+ wm_delete_window,
+ wm_take_focus,
+ im_protocols,
+ im_remote_command,
+ im_update_widget,
+ im_update_colormap,
+ im_former_image,
+ im_retain_colors,
+ im_next_image,
+ im_exit,
+ dnd_protocols;
+} XWindows;
+
+extern MagickExport char
+ *XGetResourceClass(XrmDatabase,const char *,const char *,char *),
+ *XGetResourceInstance(XrmDatabase,const char *,const char *,const char *),
+ *XGetScreenDensity(Display *);
+
+extern MagickExport Cursor
+ XMakeCursor(Display *,Window,Colormap,char *,char *);
+
+extern MagickExport int
+ XCheckDefineCursor(Display *,Window,Cursor),
+ XError(Display *,XErrorEvent *);
+
+extern MagickExport MagickBooleanType
+ IsTrue(const char *),
+ XAnnotateImage(Display *,const XPixelInfo *,XAnnotateInfo *,Image *),
+ XDrawImage(Display *,const XPixelInfo *,XDrawInfo *,Image *),
+ XGetWindowColor(Display *,XWindows *,char *),
+ XMagickProgressMonitor(const char *,const MagickOffsetType,
+ const MagickSizeType,void *),
+ XMakeImage(Display *,const XResourceInfo *,XWindowInfo *,Image *,unsigned int,
+ unsigned int),
+ XQueryColorDatabase(const char *,XColor *),
+ XRemoteCommand(Display *,const char *,const char *);
+
+extern MagickExport void
+ DestroyXResources(void),
+ XBestIconSize(Display *,XWindowInfo *,Image *),
+ XBestPixel(Display *,const Colormap,XColor *,unsigned int,XColor *),
+ XCheckRefreshWindows(Display *,XWindows *),
+ XClientMessage(Display *,const Window,const Atom,const Atom,const Time),
+ XConfigureImageColormap(Display *,XResourceInfo *,XWindows *,Image *),
+ XConstrainWindowPosition(Display *,XWindowInfo *),
+ XDelay(Display *,const unsigned long),
+ XDestroyResourceInfo(XResourceInfo *),
+ XDestroyWindowColors(Display *,Window),
+ XDisplayImageInfo(Display *,const XResourceInfo *,XWindows *,Image *,Image *),
+ XFreeResources(Display *,XVisualInfo *,XStandardColormap *,XPixelInfo *,
+ XFontStruct *,XResourceInfo *,XWindowInfo *),
+ XFreeStandardColormap(Display *,const XVisualInfo *,XStandardColormap *,
+ XPixelInfo *),
+ XHighlightEllipse(Display *,Window,GC,const RectangleInfo *),
+ XHighlightLine(Display *,Window,GC,const XSegment *),
+ XHighlightRectangle(Display *,Window,GC,const RectangleInfo *),
+ XGetAnnotateInfo(XAnnotateInfo *),
+ XGetPixelPacket(Display *,const XVisualInfo *,const XStandardColormap *,
+ const XResourceInfo *,Image *,XPixelInfo *),
+ XGetMapInfo(const XVisualInfo *,const Colormap,XStandardColormap *),
+ XGetResourceInfo(XrmDatabase,const char *,XResourceInfo *),
+ XGetWindowInfo(Display *,XVisualInfo *,XStandardColormap *,XPixelInfo *,
+ XFontStruct *,XResourceInfo *,XWindowInfo *),
+ XMakeMagnifyImage(Display *,XWindows *),
+ XMakeStandardColormap(Display *,XVisualInfo *,XResourceInfo *,Image *,
+ XStandardColormap *,XPixelInfo *),
+ XMakeWindow(Display *,Window,char **,int,XClassHint *,XWMHints *,
+ XWindowInfo *),
+ XQueryPosition(Display *,const Window,int *,int *),
+ XRefreshWindow(Display *,const XWindowInfo *,const XEvent *),
+ XRetainWindowColors(Display *,const Window),
+ XSetCursorState(Display *,XWindows *,const MagickStatusType),
+ XUserPreferences(XResourceInfo *),
+ XWarning(const ExceptionType,const char *,const char *);
+
+extern MagickExport Window
+ XWindowByID(Display *,const Window,const unsigned long),
+ XWindowByName(Display *,const Window,const char *),
+ XWindowByProperty(Display *,const Window,const Atom);
+
+extern MagickExport XFontStruct
+ *XBestFont(Display *,const XResourceInfo *,const MagickBooleanType);
+
+extern MagickExport XrmDatabase
+ XGetResourceDatabase(Display *,const char *);
+
+extern MagickExport XVisualInfo
+ *XBestVisualInfo(Display *,XStandardColormap *,XResourceInfo *);
+
+extern MagickExport XWindows
+ *XInitializeWindows(Display *,XResourceInfo *),
+ *XSetWindows(XWindows *);
+
+#endif
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+#endif
diff --git a/modules/Makefile b/modules/Makefile
index c9bd447..bc263e7 100644
--- a/modules/Makefile
+++ b/modules/Makefile
@@ -20,6 +20,7 @@ OBJECTS = pdp_intrusion.o pdp_yqt.o pdp_simura.o pdp_underwatch.o \
pdp_disintegration.o pdp_distance.o pdp_theorin~.o \
pdp_theorout~.o pdp_cropper.o pdp_background.o \
pdp_mapper.o pdp_theonice~.o pdp_icedthe~.o\
- pdp_live~.o pdp_ffmpeg~.o # pdp_xcanvas.o pdp_aa.o
+ pdp_fdiff.o pdp_hue.o \
+ # pdp_xcanvas.o pdp_aa.o
all_modules: $(OBJECTS)
diff --git a/modules/Makefile.in b/modules/Makefile.in
index 88c8bc0..128795c 100644
--- a/modules/Makefile.in
+++ b/modules/Makefile.in
@@ -20,6 +20,7 @@ OBJECTS = pdp_intrusion.o pdp_yqt.o pdp_simura.o pdp_underwatch.o \
pdp_disintegration.o pdp_distance.o pdp_theorin~.o \
pdp_theorout~.o pdp_cropper.o pdp_background.o \
pdp_mapper.o pdp_theonice~.o pdp_icedthe~.o\
+ pdp_fdiff.o pdp_hue.o \
@PDP_STREAMING_OBJECTS@ # pdp_xcanvas.o pdp_aa.o
all_modules: $(OBJECTS)
diff --git a/modules/pdp_capture.c b/modules/pdp_capture.c
index 3231f4d..ccdc5c1 100644
--- a/modules/pdp_capture.c
+++ b/modules/pdp_capture.c
@@ -29,12 +29,18 @@
#include <assert.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
+#include <magick/methods.h>
#include <magick/api.h>
#include <magick/magick.h>
#include <magick/xwindow.h>
#define PDP_DISPLAY_LENGTH 1024
+// trick to handle Image Magick compatibility
+#if MagickLibVersion >= 0x619
+#include "../include/xwindow-private.h"
+#endif
+
static char *pdp_capture_version = "pdp_capture: version 0.1, capture of screen written by Yves Degoyon (ydegoyon@free.fr)";
typedef struct pdp_capture_struct
diff --git a/modules/pdp_fdiff.c b/modules/pdp_fdiff.c
new file mode 100644
index 0000000..aefea1f
--- /dev/null
+++ b/modules/pdp_fdiff.c
@@ -0,0 +1,232 @@
+/*
+ * PiDiP module.
+ * Copyright (c) by Yves Degoyon (ydegoyon@free.fr)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "pdp.h"
+#include <math.h>
+
+static char *pdp_fdiff_version = "pdp_fdiff: version 0.1, frame difference estimator, written by Yves Degoyon (ydegoyon@free.fr)";
+
+typedef struct pdp_fdiff_struct
+{
+ t_object x_obj;
+ t_float x_f;
+
+ t_outlet *x_outlet0;
+ t_outlet *x_diffy;
+ t_outlet *x_diffu;
+ t_outlet *x_diffv;
+ t_int x_packet0;
+ t_int x_packet1;
+ t_int x_dropped;
+ t_int x_queue_id;
+
+ t_int x_vwidth;
+ t_int x_vheight;
+ t_int x_vsize;
+ unsigned int x_encoding;
+ short int *x_pframe;
+
+} t_pdp_fdiff;
+
+static void pdp_fdiff_allocate(t_pdp_fdiff *x, t_int newsize)
+{
+ int i;
+
+ if ( x->x_pframe != NULL ) freebytes( x->x_pframe, (x->x_vsize + (x->x_vsize>>1))<<1 );
+
+ x->x_vsize = newsize;
+ x->x_pframe = (short int*) getbytes((x->x_vsize + (x->x_vsize>>1))<<1);
+}
+
+static void pdp_fdiff_process_yv12(t_pdp_fdiff *x)
+{
+ t_pdp *header = pdp_packet_header(x->x_packet0);
+ short int *data = (short int *)pdp_packet_data(x->x_packet0);
+ t_pdp *newheader = pdp_packet_header(x->x_packet1);
+ short int *newdata = (short int *)pdp_packet_data(x->x_packet1);
+ int i;
+
+ t_int px, py;
+ short int *diff;
+ short int *sy, *su, *sv, t;
+ short int *sby, *sbu, *sbv;
+ t_int Y=0, U=0, V=0;
+ t_int maxdy=0, maxdu=0, maxdv=0, pdiff;
+
+ /* allocate all ressources */
+ if ( ((int)header->info.image.width != x->x_vwidth ) ||
+ ((int)header->info.image.height != x->x_vheight ) )
+ {
+ pdp_fdiff_allocate(x, header->info.image.width*header->info.image.height );
+ post( "pdp_fdiff : reallocating buffers" );
+ }
+
+ x->x_vwidth = header->info.image.width;
+ x->x_vheight = header->info.image.height;
+ x->x_vsize = x->x_vwidth*x->x_vheight;
+ x->x_encoding = header->info.image.encoding;
+
+ newheader->info.image.encoding = x->x_encoding;
+ newheader->info.image.width = x->x_vwidth;
+ newheader->info.image.height = x->x_vheight;
+
+ sy = data;
+ sv = (data+x->x_vsize);
+ su = (data+x->x_vsize+(x->x_vsize>>2));
+ sby = x->x_pframe;
+ sbv = (x->x_pframe+x->x_vsize);
+ sbu = (x->x_pframe+x->x_vsize+(x->x_vsize>>2));
+ maxdy = 0; maxdv = 0; maxdu =0;
+
+ for(py=0; py<x->x_vheight; py++)
+ {
+ for(px=0; px<x->x_vwidth; px++)
+ {
+ pdiff = abs( *(sy+py*x->x_vwidth+px) - *(sby+py*x->x_vwidth+px) );
+ if ( pdiff > maxdy ) maxdy = pdiff;
+ if ( px%2==0 && py%2==0 )
+ {
+ pdiff = abs( *(su+(py>>1)*(x->x_vwidth>>1)+(px>>1)) - *(sbu+(py>>1)*(x->x_vwidth>>1)+(px>>1)) );
+ if ( pdiff > maxdu ) maxdu = pdiff;
+ pdiff = abs( *(sv+(py>>1)*(x->x_vwidth>>1)+(px>>1)) - *(sbv+(py>>1)*(x->x_vwidth>>1)+(px>>1)) );
+ if ( pdiff > maxdv ) maxdv = pdiff;
+ }
+ }
+ }
+
+ outlet_float( x->x_diffy, (maxdy>>7) );
+ outlet_float( x->x_diffu, (maxdu>>8) );
+ outlet_float( x->x_diffv, (maxdv>>8) );
+
+ /* save previous frame */
+ memcpy( x->x_pframe, data, (( x->x_vsize + (x->x_vsize>>1))<<1));
+ memcpy( newdata, data, (( x->x_vsize + (x->x_vsize>>1))<<1));
+
+ return;
+}
+
+static void pdp_fdiff_sendpacket(t_pdp_fdiff *x)
+{
+ /* release the packet */
+ pdp_packet_mark_unused(x->x_packet0);
+ x->x_packet0 = -1;
+
+ /* unregister and propagate if valid dest packet */
+ pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet1);
+}
+
+static void pdp_fdiff_process(t_pdp_fdiff *x)
+{
+ int encoding;
+ t_pdp *header = 0;
+
+ /* check if image data packets are compatible */
+ if ( (header = pdp_packet_header(x->x_packet0))
+ && (PDP_IMAGE == header->type)){
+
+ /* pdp_fdiff_process inputs and write into active inlet */
+ switch(pdp_packet_header(x->x_packet0)->info.image.encoding){
+
+ case PDP_IMAGE_YV12:
+ x->x_packet1 = pdp_packet_clone_rw(x->x_packet0);
+ pdp_queue_add(x, pdp_fdiff_process_yv12, pdp_fdiff_sendpacket, &x->x_queue_id);
+ break;
+
+ case PDP_IMAGE_GREY:
+ // pdp_fdiff_process_packet(x);
+ break;
+
+ default:
+ /* don't know the type, so dont pdp_fdiff_process */
+ break;
+
+ }
+ }
+}
+
+static void pdp_fdiff_input_0(t_pdp_fdiff *x, t_symbol *s, t_floatarg f)
+{
+ /* if this is a register_ro message or register_rw message, register with packet factory */
+
+ if (s== gensym("register_rw"))
+ x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("image/YCrCb/*") );
+
+ if ((s == gensym("process")) && (-1 != x->x_packet0) && (!x->x_dropped)){
+
+ /* add the process method and callback to the process queue */
+ pdp_fdiff_process(x);
+
+ }
+}
+
+static void pdp_fdiff_free(t_pdp_fdiff *x)
+{
+ int i;
+
+ pdp_queue_finish(x->x_queue_id);
+ pdp_packet_mark_unused(x->x_packet0);
+
+ if ( x->x_pframe ) freebytes( x->x_pframe, (x->x_vsize + (x->x_vsize>>1))<<1 );
+
+}
+
+t_class *pdp_fdiff_class;
+
+void *pdp_fdiff_new(void)
+{
+ int i;
+
+ t_pdp_fdiff *x = (t_pdp_fdiff *)pd_new(pdp_fdiff_class);
+
+ x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
+ x->x_diffy = outlet_new(&x->x_obj, &s_float);
+ x->x_diffu = outlet_new(&x->x_obj, &s_float);
+ x->x_diffv = outlet_new(&x->x_obj, &s_float);
+
+ x->x_packet0 = -1;
+ x->x_packet1 = -1;
+ x->x_queue_id = -1;
+
+ x->x_pframe = NULL;
+
+ return (void *)x;
+}
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+void pdp_fdiff_setup(void)
+{
+// post( pdp_fdiff_version );
+ pdp_fdiff_class = class_new(gensym("pdp_fdiff"), (t_newmethod)pdp_fdiff_new,
+ (t_method)pdp_fdiff_free, sizeof(t_pdp_fdiff), 0, A_NULL);
+
+ class_addmethod(pdp_fdiff_class, (t_method)pdp_fdiff_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
+ class_sethelpsymbol( pdp_fdiff_class, gensym("pdp_fdiff.pd") );
+
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/pdp_hue.c b/modules/pdp_hue.c
new file mode 100644
index 0000000..28331ff
--- /dev/null
+++ b/modules/pdp_hue.c
@@ -0,0 +1,184 @@
+/*
+ * PiDiP module.
+ * Copyright (c) by Yves Degoyon (ydegoyon@free.fr)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "pdp.h"
+#include <math.h>
+
+static char *pdp_hue_version = "pdp_hue: version 0.1, frame hue estimator, written by Yves Degoyon (ydegoyon@free.fr)";
+
+typedef struct pdp_hue_struct
+{
+ t_object x_obj;
+ t_float x_f;
+
+ t_outlet *x_meanr;
+ t_outlet *x_meang;
+ t_outlet *x_meanb;
+
+ t_int x_packet0;
+ t_int x_dropped;
+ t_int x_queue_id;
+
+ t_int x_vwidth;
+ t_int x_vheight;
+ t_int x_vsize;
+ unsigned int x_encoding;
+
+} t_pdp_hue;
+
+static void pdp_hue_process_rgb(t_pdp_hue *x)
+{
+ t_pdp *header = pdp_packet_header(x->x_packet0);
+ unsigned char *data = (unsigned char*)pdp_packet_data(x->x_packet0);
+ int i;
+
+ t_int px, py;
+ unsigned char *sr, *sg, *sb;
+ double meanr=0, meang=0, meanb=0;
+ t_int nbpixs=0;
+
+ /* allocate all ressources */
+ x->x_vwidth = header->info.image.width;
+ x->x_vheight = header->info.image.height;
+ x->x_vsize = x->x_vwidth*x->x_vheight;
+ x->x_encoding = header->info.image.encoding;
+
+ sr = data;
+ meanr = 0.; meang = 0.; meanb =0.;
+
+ for(py=0; py<x->x_vheight; py++)
+ {
+ for(px=0; px<x->x_vwidth; px++)
+ {
+ meanr += (double)*(sr);
+ meang += (double)*(sr+1);
+ meanb += (double)*(sr+2);
+ sr+=3;
+ nbpixs++;
+ }
+ }
+ if ( nbpixs > 0 )
+ {
+ meanr = meanr / nbpixs;
+ meang = meang / nbpixs;
+ meanb = meanb / nbpixs;
+ }
+
+ outlet_float( x->x_meanr, (t_float)meanr );
+ outlet_float( x->x_meang, (t_float)meang );
+ outlet_float( x->x_meanb, (t_float)meanb );
+
+ return;
+}
+
+static void pdp_hue_killpacket(t_pdp_hue *x)
+{
+ /* release the packet */
+ pdp_packet_mark_unused(x->x_packet0);
+ x->x_packet0 = -1;
+}
+
+static void pdp_hue_process(t_pdp_hue *x)
+{
+ int encoding;
+ t_pdp *header = 0;
+
+ /* check if image data packets are compatible */
+ if ( (header = pdp_packet_header(x->x_packet0))
+ && (PDP_BITMAP == header->type))
+ {
+
+ /* pdp_hue_process inputs and write into active inlet */
+ switch(pdp_packet_header(x->x_packet0)->info.image.encoding){
+
+ case PDP_BITMAP_RGB:
+ pdp_queue_add(x, pdp_hue_process_rgb, pdp_hue_killpacket, &x->x_queue_id);
+ break;
+
+ default:
+ /* don't know the type, so dont pdp_hue_process */
+ break;
+
+ }
+ }
+}
+
+static void pdp_hue_input_0(t_pdp_hue *x, t_symbol *s, t_floatarg f)
+{
+ /* if this is a register_ro message or register_rw message, register with packet factory */
+
+ if (s== gensym("register_rw"))
+ x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("bitmap/rgb/*") );
+
+ if ((s == gensym("process")) && (-1 != x->x_packet0) && (!x->x_dropped)){
+
+ /* add the process method and callback to the process queue */
+ pdp_hue_process(x);
+
+ }
+}
+
+static void pdp_hue_free(t_pdp_hue *x)
+{
+ int i;
+
+ pdp_queue_finish(x->x_queue_id);
+ pdp_packet_mark_unused(x->x_packet0);
+}
+
+t_class *pdp_hue_class;
+
+void *pdp_hue_new(void)
+{
+ int i;
+
+ t_pdp_hue *x = (t_pdp_hue *)pd_new(pdp_hue_class);
+
+ x->x_meanr = outlet_new(&x->x_obj, &s_float);
+ x->x_meang = outlet_new(&x->x_obj, &s_float);
+ x->x_meanb = outlet_new(&x->x_obj, &s_float);
+
+ x->x_packet0 = -1;
+ x->x_queue_id = -1;
+
+ return (void *)x;
+}
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+void pdp_hue_setup(void)
+{
+// post( pdp_hue_version );
+ pdp_hue_class = class_new(gensym("pdp_hue"), (t_newmethod)pdp_hue_new,
+ (t_method)pdp_hue_free, sizeof(t_pdp_hue), 0, A_NULL);
+
+ class_addmethod(pdp_hue_class, (t_method)pdp_hue_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
+ class_sethelpsymbol( pdp_hue_class, gensym("pdp_hue.pd") );
+
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/pdp_icedthe~.c b/modules/pdp_icedthe~.c
index 2a07f96..ee3d959 100644
--- a/modules/pdp_icedthe~.c
+++ b/modules/pdp_icedthe~.c
@@ -112,6 +112,7 @@ typedef struct pdp_icedthe_struct
t_int x_endofstream; // end of the stream reached
t_int x_nbframes; // number of frames emitted
t_float x_framerate; // framerate
+ t_int x_forcedframerate;// the framerate we want to receive
t_int x_samplerate; // audio sample rate
t_int x_audiochannels; // audio channels
t_int x_blocksize; // audio block size
@@ -152,12 +153,20 @@ typedef struct pdp_icedthe_struct
static void pdp_icedthe_priority(t_pdp_icedthe *x, t_floatarg fpriority )
{
- if ( ( x->x_priority >= MIN_PRIORITY ) && ( x->x_priority <= MAX_PRIORITY ) )
+ if ( ( (t_int)fpriority >= MIN_PRIORITY ) && ( (t_int)fpriority <= MAX_PRIORITY ) )
{
x->x_priority = (int)fpriority;
}
}
+static void pdp_icedthe_framerate(t_pdp_icedthe *x, t_floatarg fframerate )
+{
+ if ( fframerate > 0. )
+ {
+ x->x_forcedframerate = (int)fframerate;
+ }
+}
+
static void pdp_icedthe_audio(t_pdp_icedthe *x, t_floatarg faudio )
{
if ( ( faudio == 0. ) || ( faudio == 1. ) )
@@ -392,43 +401,47 @@ static t_int pdp_icedthe_decode_stream(t_pdp_icedthe *x)
}
theora_decode_YUVout(&x->x_theora_state, &x->x_yuvbuffer);
- // create a new pdp packet from PIX_FMT_YUV420P image format
- x->x_vwidth = x->x_yuvbuffer.y_width;
- x->x_vheight = x->x_yuvbuffer.y_height;
- x->x_vsize = x->x_vwidth*x->x_vheight;
- x->x_packet0 = pdp_packet_new_bitmap_yv12( x->x_vwidth, x->x_vheight );
- // post( "pdp_icedthe~ : allocated packet %d", x->x_packet0 );
- x->x_header = pdp_packet_header(x->x_packet0);
- x->x_data = (unsigned char*) pdp_packet_data(x->x_packet0);
-
- x->x_header->info.image.encoding = PDP_BITMAP_YV12;
- x->x_header->info.image.width = x->x_vwidth;
- x->x_header->info.image.height = x->x_vheight;
-
- pY = x->x_data;
- pV = x->x_data+x->x_vsize;
- pU = x->x_data+x->x_vsize+(x->x_vsize>>2);
-
- psY = x->x_yuvbuffer.y;
- psU = x->x_yuvbuffer.u;
- psV = x->x_yuvbuffer.v;
-
- for ( py=0; py<x->x_vheight; py++)
- {
- memcpy( (void*)pY, (void*)psY, x->x_vwidth );
- pY += x->x_vwidth;
- psY += x->x_yuvbuffer.y_stride;
- if ( py%2==0 )
- {
- memcpy( (void*)pU, (void*)psU, (x->x_vwidth>>1) );
- memcpy( (void*)pV, (void*)psV, (x->x_vwidth>>1) );
- pU += (x->x_vwidth>>1);
- pV += (x->x_vwidth>>1);
- psU += x->x_yuvbuffer.uv_stride;
- psV += x->x_yuvbuffer.uv_stride;
- }
+ if ( x->x_secondcount < x->x_forcedframerate )
+ {
+ // create a new pdp packet from PIX_FMT_YUV420P image format
+ x->x_vwidth = x->x_yuvbuffer.y_width;
+ x->x_vheight = x->x_yuvbuffer.y_height;
+ x->x_vsize = x->x_vwidth*x->x_vheight;
+ x->x_packet0 = pdp_packet_new_bitmap_yv12( x->x_vwidth, x->x_vheight );
+ // post( "pdp_icedthe~ : allocated packet %d", x->x_packet0 );
+ x->x_header = pdp_packet_header(x->x_packet0);
+ x->x_data = (unsigned char*) pdp_packet_data(x->x_packet0);
+
+ x->x_header->info.image.encoding = PDP_BITMAP_YV12;
+ x->x_header->info.image.width = x->x_vwidth;
+ x->x_header->info.image.height = x->x_vheight;
+
+ pY = x->x_data;
+ pV = x->x_data+x->x_vsize;
+ pU = x->x_data+x->x_vsize+(x->x_vsize>>2);
+
+ psY = x->x_yuvbuffer.y;
+ psU = x->x_yuvbuffer.u;
+ psV = x->x_yuvbuffer.v;
+
+ for ( py=0; py<x->x_vheight; py++)
+ {
+ memcpy( (void*)pY, (void*)psY, x->x_vwidth );
+ pY += x->x_vwidth;
+ psY += x->x_yuvbuffer.y_stride;
+ if ( py%2==0 )
+ {
+ memcpy( (void*)pU, (void*)psU, (x->x_vwidth>>1) );
+ memcpy( (void*)pV, (void*)psV, (x->x_vwidth>>1) );
+ pU += (x->x_vwidth>>1);
+ pV += (x->x_vwidth>>1);
+ psU += x->x_yuvbuffer.uv_stride;
+ psV += x->x_yuvbuffer.uv_stride;
+ }
+ }
+ x->x_newpicture = 1;
}
- x->x_newpicture = 1;
+
// post( "pdp_icedthe~ : new picture decoded" );
if ( pthread_mutex_unlock( &x->x_videolock ) < 0 )
{
@@ -505,6 +518,58 @@ static void *pdp_icedthe_decode(void *tdata)
return NULL;
}
+static void pdp_icedthe_split_url(t_pdp_icedthe *x)
+{
+ char *hostptr = NULL, *p, *endhost = NULL, *pathptr = NULL;
+ t_int length;
+
+ /* strip http:// or ftp:// */
+ p = x->x_url;
+ if (strncmp(p, "http://", 7) == 0) p+=7;
+
+ hostptr = p;
+ while (*p && *p != '/' && *p != ':') /* look for end of hostname: */ p++;
+
+ endhost = p;
+ switch ( *p )
+ {
+ case ':' :
+ x->x_portnum = atoi( p+1 );
+ while (*p && *p != '/') p++;
+ pathptr = p+1;
+ break;
+ case '/' :
+ x->x_portnum = 8000;
+ pathptr = p+1;
+ break;
+ default :
+ if ( ( p - x->x_url ) != (int)strlen( x->x_url ) )
+ {
+ post( "pdp_icedthe~ : wrong url : %s", hostptr );
+ return;
+ }
+ pathptr = "";
+ break;
+ }
+
+ length = (t_int)(endhost - hostptr);
+ if ( x->x_hostname )
+ {
+ post ("pdp_icedthe~ : freeing hostname" );
+ free( x->x_hostname );
+ }
+ x->x_hostname=(char*)malloc( length + 1);
+ strncpy( x->x_hostname, hostptr, length );
+ x->x_hostname[ length ] = '\0';
+
+ if ( x->x_mountpoint ) free( x->x_mountpoint );
+ x->x_mountpoint=(char*)malloc( strlen( pathptr ) + 1);
+ strncpy( x->x_mountpoint, pathptr, strlen( pathptr ) );
+ x->x_mountpoint[ strlen( pathptr ) ] = '\0';
+
+ post ("pdp_icedthe~ : connecting to host=>%s< port=>%d< mountpoint=>%s<", x->x_hostname, x->x_portnum, x->x_mountpoint );
+}
+
static void pdp_icedthe_connect(t_pdp_icedthe *x, t_symbol *s);
static void *pdp_icedthe_do_connect(void *tdata)
@@ -522,7 +587,6 @@ static void *pdp_icedthe_do_connect(void *tdata)
char *cpoint = NULL;
t_int offset = 0, endofheaders = 0, wpackets = 0;
char *sptr = NULL;
- char *url; /* used for relocation */
if ( x->x_insock != -1 )
{
@@ -530,7 +594,6 @@ static void *pdp_icedthe_do_connect(void *tdata)
pdp_icedthe_disconnect(x);
}
- sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( ( sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) ) <= 0 )
{
error("pdp_icedthe~: couldn't obtain a socket");
@@ -624,7 +687,7 @@ static void *pdp_icedthe_do_connect(void *tdata)
}
}
- // post( "pdp_icedthe~ : read HTTP headers : %s", x->x_request );
+ post( "pdp_icedthe~ : read HTTP headers : %s", x->x_request );
post( "pdp_icedthe~ : got HTTP answer" );
strip_ice_header(x->x_request, STRBUF_SIZE);
@@ -639,11 +702,12 @@ static void *pdp_icedthe_do_connect(void *tdata)
x->x_connectchild = 0;
return NULL;
}
- url = strdup(cpoint + 10);
- post("pdp_icedthe~: relocating to %s", url);
- if ( close(sockfd) < 0 ) post("pdp_icedthe~: could not close socket" );
- x->x_connectchild = 0;
- pdp_icedthe_connect(x, gensym(url));
+ if ( x->x_url ) free( x->x_url );
+ x->x_url = strdup(cpoint + 10);
+ post("pdp_icedthe~: relocating to %s", x->x_url);
+ pdp_icedthe_split_url(x);
+ x->x_connected = 0;
+ pdp_icedthe_do_connect(x);
return NULL;
}
if ( !(sptr = strstr(x->x_request, "200")) )
@@ -1049,9 +1113,8 @@ static void *pdp_icedthe_do_connect(void *tdata)
static void pdp_icedthe_connect(t_pdp_icedthe *x, t_symbol *s)
{
- t_int ret, i, length;
+ t_int ret, i;
pthread_attr_t connect_child_attr;
- char *hostptr = NULL, *p, *endhost = NULL, *pathptr = NULL;
if ( x->x_connectchild != 0 )
{
@@ -1071,51 +1134,7 @@ static void pdp_icedthe_connect(t_pdp_icedthe *x, t_symbol *s)
post ("pdp_icedthe~ : connecting to url=%s", x->x_url );
- /* strip http:// or ftp:// */
- p = x->x_url;
- if (strncmp(p, "http://", 7) == 0) p+=7;
-
- hostptr = p;
- while (*p && *p != '/' && *p != ':') /* look for end of hostname: */ p++;
-
- endhost = p;
- switch ( *p )
- {
- case ':' :
- x->x_portnum = atoi( p+1 );
- while (*p && *p != '/') p++;
- pathptr = p+1;
- break;
- case '/' :
- x->x_portnum = 8000;
- pathptr = p+1;
- break;
- default :
- if ( ( p - x->x_url ) != (int)strlen( x->x_url ) )
- {
- post( "pdp_icedthe~ : wrong url : %s", hostptr );
- return;
- }
- pathptr = "";
- break;
- }
-
- length = (t_int)(endhost - hostptr);
- if ( x->x_hostname )
- {
- post ("pdp_icedthe~ : freeing hostname" );
- free( x->x_hostname );
- }
- x->x_hostname=(char*)malloc( length + 1);
- strncpy( x->x_hostname, hostptr, length );
- x->x_hostname[ length ] = '\0';
-
- if ( x->x_mountpoint ) free( x->x_mountpoint );
- x->x_mountpoint=(char*)malloc( strlen( pathptr ) + 1);
- strncpy( x->x_mountpoint, pathptr, strlen( pathptr ) );
- x->x_mountpoint[ strlen( pathptr ) ] = '\0';
-
- post ("pdp_icedthe~ : connecting to host=%s port=%d mountpoint=%s", x->x_hostname, x->x_portnum, x->x_mountpoint );
+ pdp_icedthe_split_url(x);
// launch connection thread
if ( pthread_attr_init( &connect_child_attr ) < 0 ) {
@@ -1313,6 +1332,7 @@ void *pdp_icedthe_new(void)
x->x_theorainit = 0;
x->x_priority = DEFAULT_PRIORITY;
x->x_framerate = DEFAULT_FRAME_RATE;
+ x->x_forcedframerate = 1024; // think it will not occur or maybe in 2156
x->x_nbframes = 0;
x->x_samplerate = 0;
x->x_audio = 1;
@@ -1359,6 +1379,7 @@ void pdp_icedthe_tilde_setup(void)
class_addmethod(pdp_icedthe_class, (t_method)pdp_icedthe_connect, gensym("connect"), A_SYMBOL, A_NULL);
class_addmethod(pdp_icedthe_class, (t_method)pdp_icedthe_disconnect, gensym("disconnect"), A_NULL);
class_addmethod(pdp_icedthe_class, (t_method)pdp_icedthe_priority, gensym("priority"), A_FLOAT, A_NULL);
+ class_addmethod(pdp_icedthe_class, (t_method)pdp_icedthe_framerate, gensym("framerate"), A_FLOAT, A_NULL);
class_addmethod(pdp_icedthe_class, (t_method)pdp_icedthe_audio, gensym("audio"), A_FLOAT, A_NULL);
class_sethelpsymbol( pdp_icedthe_class, gensym("pdp_icedthe~.pd") );
diff --git a/modules/pdp_shape.c b/modules/pdp_shape.c
index 5f21518..6a1ed13 100644
--- a/modules/pdp_shape.c
+++ b/modules/pdp_shape.c
@@ -54,9 +54,10 @@ typedef struct pdp_shape_struct
t_int x_colorU;
t_int x_colorV;
- t_int x_tolerance; // tolerance
- t_int x_paint; // paint option
- t_int x_shape; // drawing shape option
+ t_int x_tolerance; // tolerance
+ t_int x_paint; // paint option
+ t_int x_isolate; // isolate option
+ t_int x_shape; // drawing shape option
t_int x_luminosity; // use luminosity or not
short int *x_bdata;
@@ -106,6 +107,14 @@ static void pdp_shape_luminosity(t_pdp_shape *x, t_floatarg fluminosity )
}
}
+static void pdp_shape_isolate(t_pdp_shape *x, t_floatarg fisolate )
+{
+ if ( ( fisolate == 0 ) || ( fisolate == 1 ) )
+ {
+ x->x_isolate = (int)fisolate;
+ }
+}
+
static void pdp_shape_paint(t_pdp_shape *x, t_floatarg fpaint )
{
if ( ( (t_int)fpaint == 0 ) || ( (t_int)fpaint == 1 ) )
@@ -300,6 +309,12 @@ static void pdp_shape_do_detect(t_pdp_shape *x, t_floatarg X, t_floatarg Y)
}
else
{
+ if ( x->x_isolate )
+ {
+ *(pbbY+nY*x->x_vwidth+nX) = *(pbY+nY*x->x_vwidth+nX);
+ *(pbbU+(nY>>1)*(x->x_vwidth>>1)+(nX>>1)) = *(pbU+(nY>>1)*(x->x_vwidth>>1)+(nX>>1));
+ *(pbbV+(nY>>1)*(x->x_vwidth>>1)+(nX>>1)) = *(pbV+(nY>>1)*(x->x_vwidth>>1)+(nX>>1));
+ }
if ( x->x_paint )
{
*(pbbY+nY*x->x_vwidth+nX) =
@@ -446,12 +461,19 @@ static void pdp_shape_process_yv12(t_pdp_shape *x)
newheader->info.image.height = x->x_vheight;
memcpy( x->x_bdata, data, (x->x_vsize+(x->x_vsize>>1))<<1 );
- memcpy( x->x_bbdata, data, (x->x_vsize+(x->x_vsize>>1))<<1 );
+ if ( !x->x_isolate )
+ {
+ memcpy( x->x_bbdata, data, (x->x_vsize+(x->x_vsize>>1))<<1 );
+ }
+ else
+ {
+ memset( x->x_bbdata, 0x0, (x->x_vsize+(x->x_vsize>>1))<<1 );
+ }
if ( x->x_cursX != -1 ) pdp_shape_frame_detect( x, x->x_cursX, x->x_cursY );
// paint cursor in red for debug purpose
- if ( x->x_cursX != -1 )
+ if ( ( x->x_cursX != -1 ) && ( x->x_shape ) )
{
pbbY = x->x_bbdata;
pbbU = (x->x_bbdata+x->x_vsize);
@@ -557,6 +579,7 @@ void *pdp_shape_new(void)
x->x_tolerance = 20;
x->x_paint = 0;
+ x->x_isolate = 0;
x->x_shape = 1;
x->x_luminosity = 1;
@@ -589,6 +612,7 @@ void pdp_shape_setup(void)
class_addmethod(pdp_shape_class, (t_method)pdp_shape_detect, gensym("detect"), A_DEFFLOAT, A_DEFFLOAT, A_NULL);
class_addmethod(pdp_shape_class, (t_method)pdp_shape_rgb, gensym("rgb"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_NULL);
class_addmethod(pdp_shape_class, (t_method)pdp_shape_tolerance, gensym("tolerance"), A_FLOAT, A_NULL);
+ class_addmethod(pdp_shape_class, (t_method)pdp_shape_isolate, gensym("isolate"), A_FLOAT, A_NULL);
class_addmethod(pdp_shape_class, (t_method)pdp_shape_paint, gensym("paint"), A_FLOAT, A_NULL);
class_addmethod(pdp_shape_class, (t_method)pdp_shape_shape, gensym("shape"), A_FLOAT, A_NULL);
class_addmethod(pdp_shape_class, (t_method)pdp_shape_luminosity, gensym("luminosity"), A_FLOAT, A_NULL);
diff --git a/patches/pdp_cabaret.pd b/patches/pdp_cabaret.pd
index f515fd7..d8b830a 100644
--- a/patches/pdp_cabaret.pd
+++ b/patches/pdp_cabaret.pd
@@ -30,10 +30,10 @@
#X floatatom 547 636 5 0 0 0 - - -;
#X obj 547 607 route pdp_drop;
#X text 100 619 author : Yves Degoyon ( ydegoyon@free.fr );
-#X obj 416 394 pdp_colorgrid pdp_colorgrid1 256 0 256 50 0 50 0 1 1
-10 10 498 428;
-#X obj 680 393 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 1000 1;
+#X obj 409 297 pdp_colorgrid pdp_colorgrid1 256 0 256 50 0 50 0 1 1
+10 10 417 305;
+#X obj 673 299 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
#X obj 213 200 pdp_shape;
#X obj 258 243 -;
#X floatatom 265 266 5 0 0 0 - - -;
@@ -68,21 +68,6 @@
#X msg 512 194 luminosity \$1;
#X obj 511 168 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
-#X obj 634 237 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
-#X msg 489 309 loop \$1;
-#X obj 490 287 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0
-1;
-#X msg 518 270 open \$1;
-#X obj 517 246 openpanel;
-#X obj 502 229 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
-#X floatatom 682 272 5 0 0 0 - - -;
-#X msg 591 238 stop;
-#X obj 689 241 hsl 300 15 0 1000 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 623 308 metro 70;
-#X obj 618 340 pdp_yqt;
#X connect 0 0 9 0;
#X connect 1 0 13 0;
#X connect 2 0 1 0;
@@ -111,6 +96,7 @@
#X connect 25 2 50 6;
#X connect 26 0 50 7;
#X connect 27 0 48 0;
+#X connect 27 0 50 0;
#X connect 27 1 28 1;
#X connect 27 1 40 0;
#X connect 27 2 31 1;
@@ -150,14 +136,3 @@
#X connect 56 0 53 0;
#X connect 58 0 27 0;
#X connect 59 0 58 0;
-#X connect 60 0 69 0;
-#X connect 61 0 70 0;
-#X connect 62 0 61 0;
-#X connect 63 0 70 0;
-#X connect 64 0 63 0;
-#X connect 65 0 64 0;
-#X connect 66 0 69 1;
-#X connect 67 0 69 0;
-#X connect 68 0 66 0;
-#X connect 69 0 70 0;
-#X connect 70 0 50 0;
diff --git a/system/pidip.c b/system/pidip.c
index 31c7c55..1a75e5f 100644
--- a/system/pidip.c
+++ b/system/pidip.c
@@ -77,6 +77,8 @@ extern "C"
void pdp_mapper_setup(void);
void pdp_theonice_tilde_setup(void);
void pdp_icedthe_tilde_setup(void);
+ void pdp_fdiff_setup(void);
+ void pdp_hue_setup(void);
#ifdef HAVE_PIDIP_FFMPEG
void pdp_ffmpeg_tilde_setup(void);
@@ -161,6 +163,8 @@ void pidip_setup(void){
pdp_mapper_setup();
pdp_theonice_tilde_setup();
pdp_icedthe_tilde_setup();
+ pdp_fdiff_setup();
+ pdp_hue_setup();
#ifdef HAVE_PIDIP_FFMPEG
pdp_ffmpeg_tilde_setup();