diff options
-rw-r--r-- | CHANGES.LOG | 7 | ||||
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | acinclude.m4 | 2 | ||||
-rw-r--r-- | aclocal.m4 | 2 | ||||
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | doc/help-pdp_capture.pd | 10 | ||||
-rw-r--r-- | doc/help-pdp_fdiff.pd | 73 | ||||
-rw-r--r-- | doc/help-pdp_hue.pd | 74 | ||||
-rw-r--r-- | doc/help-pdp_pen.pd | 6 | ||||
-rw-r--r-- | doc/help-pdp_shape.pd | 94 | ||||
-rw-r--r-- | doc/help-pdp_text.pd | 16 | ||||
-rw-r--r-- | doc/rs_pdp_icedthe~.pd | 71 | ||||
-rw-r--r-- | include/pidip_config.h | 2 | ||||
-rw-r--r-- | include/xwindow-private.h | 562 | ||||
-rw-r--r-- | modules/Makefile | 3 | ||||
-rw-r--r-- | modules/Makefile.in | 1 | ||||
-rw-r--r-- | modules/pdp_capture.c | 6 | ||||
-rw-r--r-- | modules/pdp_fdiff.c | 232 | ||||
-rw-r--r-- | modules/pdp_hue.c | 184 | ||||
-rw-r--r-- | modules/pdp_icedthe~.c | 205 | ||||
-rw-r--r-- | modules/pdp_shape.c | 34 | ||||
-rw-r--r-- | patches/pdp_cabaret.pd | 35 | ||||
-rw-r--r-- | system/pidip.c | 4 |
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 ) @@ -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 @@ -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 @@ -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(); |