aboutsummaryrefslogtreecommitdiff
path: root/doc/objects
diff options
context:
space:
mode:
Diffstat (limited to 'doc/objects')
-rw-r--r--doc/objects/pdp_abs.pd21
-rw-r--r--doc/objects/pdp_add.pd12
-rw-r--r--doc/objects/pdp_and.pd24
-rw-r--r--doc/objects/pdp_bitdepth.pd32
-rw-r--r--doc/objects/pdp_bitmask.pd22
-rw-r--r--doc/objects/pdp_bq.pd11
-rw-r--r--doc/objects/pdp_bqt.pd5
-rw-r--r--doc/objects/pdp_cheby.pd103
-rw-r--r--doc/objects/pdp_cog.pd32
-rw-r--r--doc/objects/pdp_control.pd54
-rw-r--r--doc/objects/pdp_convert.pd17
-rw-r--r--doc/objects/pdp_del.pd9
-rw-r--r--doc/objects/pdp_description.pd28
-rw-r--r--doc/objects/pdp_flip_lr.pd11
-rw-r--r--doc/objects/pdp_flip_tb.pd11
-rw-r--r--doc/objects/pdp_gain.pd39
-rw-r--r--doc/objects/pdp_help_input.pd58
-rw-r--r--doc/objects/pdp_help_output.pd9
-rw-r--r--doc/objects/pdp_histo.pd36
-rw-r--r--doc/objects/pdp_hthresh.pd26
-rw-r--r--doc/objects/pdp_loop.pd62
-rw-r--r--doc/objects/pdp_mul.pd28
-rw-r--r--doc/objects/pdp_not.pd21
-rw-r--r--doc/objects/pdp_or.pd24
-rw-r--r--doc/objects/pdp_plasma.pd29
-rw-r--r--doc/objects/pdp_pointcloud.pd32
-rw-r--r--doc/objects/pdp_positive.pd27
-rw-r--r--doc/objects/pdp_randmix.pd3
-rw-r--r--doc/objects/pdp_reg.pd38
-rw-r--r--doc/objects/pdp_sign.pd25
-rw-r--r--doc/objects/pdp_sthresh.pd26
-rw-r--r--doc/objects/pdp_trigger.pd79
-rw-r--r--doc/objects/pdp_xor.pd28
-rw-r--r--doc/objects/pdp_xv.pd66
-rw-r--r--doc/objects/pdp_zthresh.pd21
35 files changed, 903 insertions, 166 deletions
diff --git a/doc/objects/pdp_abs.pd b/doc/objects/pdp_abs.pd
new file mode 100644
index 0000000..eef5a94
--- /dev/null
+++ b/doc/objects/pdp_abs.pd
@@ -0,0 +1,21 @@
+#N canvas 504 211 500 438 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 340 pdp_help_output;
+#X obj 77 163 pdp_gain;
+#X floatatom 128 135 5 0 0;
+#X msg 128 109 0.5;
+#X obj 77 296 pdp_gain;
+#X msg 128 268 1;
+#X text 229 235 absolute value;
+#X obj 77 231 pdp_abs;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 10 0;
+#X connect 5 0 4 1;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X connect 8 0 7 1;
+#X connect 10 0 7 0;
diff --git a/doc/objects/pdp_add.pd b/doc/objects/pdp_add.pd
index 4105dcf..fa5cd1f 100644
--- a/doc/objects/pdp_add.pd
+++ b/doc/objects/pdp_add.pd
@@ -9,9 +9,15 @@
-1;
#X text 229 181 click here;
#X obj 77 163 pdp_gain;
-#X floatatom 128 135 5 0 0;
+#X floatatom 128 135 5 0 0 0 - - -;
#X msg 128 109 0.5;
#X text 229 283 adds (and saturates) 2 packets;
+#X msg 230 246 chanmask \$1;
+#X floatatom 230 221 5 0 0 0 - - -;
+#X msg 374 131 thread \$1;
+#X obj 373 107 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 377 164 pdp_control;
#X connect 0 0 2 0;
#X connect 1 0 2 0;
#X connect 2 0 8 0;
@@ -22,3 +28,7 @@
#X connect 8 0 5 1;
#X connect 9 0 8 1;
#X connect 10 0 9 0;
+#X connect 12 0 4 0;
+#X connect 13 0 12 0;
+#X connect 14 0 16 0;
+#X connect 15 0 14 0;
diff --git a/doc/objects/pdp_and.pd b/doc/objects/pdp_and.pd
new file mode 100644
index 0000000..e352b16
--- /dev/null
+++ b/doc/objects/pdp_and.pd
@@ -0,0 +1,24 @@
+#N canvas 552 356 511 383 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 322 pdp_help_output;
+#X obj 121 246 pdp_reg;
+#X obj 196 183 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 229 181 click here;
+#X obj 77 163 pdp_gain;
+#X floatatom 128 135 5 0 0;
+#X msg 128 109 0.5;
+#X obj 77 279 pdp_and;
+#X text 229 283 bitwise and;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 7 0;
+#X connect 4 0 10 1;
+#X connect 5 0 4 0;
+#X connect 7 0 10 0;
+#X connect 7 0 4 1;
+#X connect 8 0 7 1;
+#X connect 9 0 8 0;
+#X connect 10 0 3 0;
diff --git a/doc/objects/pdp_bitdepth.pd b/doc/objects/pdp_bitdepth.pd
new file mode 100644
index 0000000..4c5ae11
--- /dev/null
+++ b/doc/objects/pdp_bitdepth.pd
@@ -0,0 +1,32 @@
+#N canvas 504 211 500 438 10;
+#X msg 140 61 start;
+#X msg 187 61 stop;
+#X obj 140 93 pdp_help_input;
+#X obj 140 352 pdp_help_output;
+#X obj 140 308 pdp_gain;
+#X msg 191 280 1;
+#X floatatom 219 209 8 0 0;
+#X obj 222 185 hsl 128 15 0 8 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 2500 1;
+#X floatatom 238 278 5 0 0;
+#X obj 140 243 pdp_bitdepth;
+#X text 292 247 set bit depth (0->16);
+#X obj 140 158 pdp_gain;
+#X msg 191 130 1;
+#X floatatom 227 130 5 0 0;
+#X msg 32 192 chanmask \$1;
+#X floatatom 32 164 5 0 0;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 11 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 1;
+#X connect 6 0 9 1;
+#X connect 7 0 6 0;
+#X connect 8 0 4 1;
+#X connect 9 0 4 0;
+#X connect 11 0 9 0;
+#X connect 12 0 11 1;
+#X connect 13 0 11 1;
+#X connect 14 0 9 0;
+#X connect 15 0 14 0;
diff --git a/doc/objects/pdp_bitmask.pd b/doc/objects/pdp_bitmask.pd
new file mode 100644
index 0000000..c92ab9e
--- /dev/null
+++ b/doc/objects/pdp_bitmask.pd
@@ -0,0 +1,22 @@
+#N canvas 504 211 500 438 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 287 pdp_help_output;
+#X obj 77 243 pdp_gain;
+#X msg 128 215 1;
+#X text 229 182 apply a bitwise mask (16 bit);
+#X floatatom 149 144 8 0 0;
+#X obj 152 120 hsl 128 15 0 65535 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X floatatom 175 213 5 0 0;
+#X obj 77 178 pdp_bitmask;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 1;
+#X connect 7 0 10 1;
+#X connect 8 0 7 0;
+#X connect 9 0 4 1;
+#X connect 10 0 4 0;
diff --git a/doc/objects/pdp_bq.pd b/doc/objects/pdp_bq.pd
index 06c05da..3078c45 100644
--- a/doc/objects/pdp_bq.pd
+++ b/doc/objects/pdp_bq.pd
@@ -11,13 +11,13 @@
#X msg 28 495 onep \$1;
#X floatatom 89 526 5 0 0;
#X msg 28 530 twop \$1;
-#X obj 85 272 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X obj 85 272 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X obj 87 304 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X obj 79 209 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
-#X obj 82 244 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X obj 82 244 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X msg 28 209 lr \$1;
#X msg 28 244 rl \$1;
@@ -86,9 +86,12 @@
#X text 264 342 set the filter type:;
#X text 137 476 set the filter type:;
#X text 538 319 (between 0 and 1 \, 0.5 = nyquist);
-#X text 540 333;
+#X text 540 333 comment;
#X text 540 305 pole frequency;
#X msg 100 572 1;
+#X msg 457 611 chanmask \$1;
+#X floatatom 457 585 5 0 0;
+#X text 456 633 binary channel mask;
#X connect 0 0 5 1;
#X connect 1 0 5 0;
#X connect 2 0 5 0;
@@ -147,3 +150,5 @@
#X connect 72 0 71 1;
#X connect 73 0 72 0;
#X connect 82 0 0 0;
+#X connect 83 0 5 0;
+#X connect 84 0 83 0;
diff --git a/doc/objects/pdp_bqt.pd b/doc/objects/pdp_bqt.pd
index a2f483e..5076168 100644
--- a/doc/objects/pdp_bqt.pd
+++ b/doc/objects/pdp_bqt.pd
@@ -47,7 +47,7 @@
#X text 264 342 set the filter type:;
#X text 136 192 set the filter type:;
#X text 538 319 (between 0 and 1 \, 0.5 = nyquist);
-#X text 540 333;
+#X text 540 333 comment;
#X text 540 305 pole frequency;
#X text 37 16 pdp_bqt: a temporal biquad filter;
#X text 99 45 try one of the abstractions (pdp_motion_blur and;
@@ -55,6 +55,8 @@
#X obj 434 190 pdp_motion_blur;
#X obj 558 190 pdp_motion_phase;
#X obj 27 499 pdp_bqt;
+#X msg 48 312 reset;
+#X text 95 313 reset state;
#X connect 0 0 1 0;
#X connect 1 0 54 0;
#X connect 2 0 3 0;
@@ -93,3 +95,4 @@
#X connect 52 0 21 0;
#X connect 53 0 21 0;
#X connect 54 0 39 0;
+#X connect 55 0 54 0;
diff --git a/doc/objects/pdp_cheby.pd b/doc/objects/pdp_cheby.pd
index ada420b..68e24a4 100644
--- a/doc/objects/pdp_cheby.pd
+++ b/doc/objects/pdp_cheby.pd
@@ -1,47 +1,66 @@
-#N canvas 57 353 672 516 10;
-#X msg 81 108 coef 0 \$1;
-#X floatatom 113 78 5 0 0;
-#X floatatom 180 81 5 0 0;
-#X msg 160 109 coef 1 \$1;
-#X floatatom 276 78 5 0 0;
-#X msg 244 108 coef 2 \$1;
-#X floatatom 356 77 5 0 0;
-#X msg 324 107 coef 3 \$1;
-#X obj 51 372 pdp_cheby 3;
-#X floatatom 338 324 5 0 0;
-#X msg 340 194 chan 1;
-#X text 216 52 coefficients;
-#X msg 339 233 chan 0;
-#X msg 394 194 chan 2;
-#X msg 448 194 chan 3;
-#X text 152 363 creation arg: order (nb coefs = order + 1);
-#X text 153 379 (default = minimal order = 2);
-#X msg 338 274 reset;
-#X obj 51 41 pdp_help_input;
-#X msg 51 11 start;
-#X msg 100 11 stop;
-#X obj 51 414 pdp_help_output;
-#X text 392 234 all channels;
-#X text 391 324 right inlet: number of iterations;
-#X text 390 273 set all coefs to 0;
-#X msg 338 303 1;
-#X text 340 173 select colour channel to be processed;
-#X connect 0 0 8 0;
+#N canvas 117 219 672 516 10;
+#X msg 67 108 coef 0 \$1;
+#X floatatom 67 84 5 0 0;
+#X floatatom 137 84 5 0 0;
+#X msg 137 108 coef 1 \$1;
+#X floatatom 206 83 5 0 0;
+#X msg 206 108 coef 2 \$1;
+#X floatatom 275 84 5 0 0;
+#X msg 275 108 coef 3 \$1;
+#X floatatom 243 359 5 0 0;
+#X text 122 394 creation arg: order (nb coefs = order + 1);
+#X text 123 410 (default = minimal order = 2);
+#X msg 243 309 reset;
+#X obj 21 46 pdp_help_input;
+#X msg 21 16 start;
+#X msg 70 16 stop;
+#X obj 21 445 pdp_help_output;
+#X text 296 359 right inlet: number of iterations;
+#X text 295 308 set all coefs to 0;
+#X msg 243 338 1;
+#X msg 243 267 chanmask \$1;
+#X floatatom 243 244 5 0 0;
+#X text 157 63 set individual coefficients;
+#N canvas 0 0 450 300 graph1 0;
+#X array mapping 64 float 1;
+#A 0 -0.908307 -0.86545 -0.794021 -0.76545 -0.694021 -0.622593 -0.451164
+-0.0511646 0.234549 0.377406 0.427406 0.477406 0.520263 0.534549 0.548835
+0.534549 0.505978 0.477406 0.448835 0.420264 0.348835 0.298835 0.148835
+0.0845496 -0.0511645 -0.151164 -0.236879 -0.322593 -0.436878 -0.436878
+-0.436878 -0.436878 -0.422593 -0.394021 -0.36545 -0.308307 -0.26545
+-0.136879 0.120264 0.291692 0.434549 0.534549 0.591692 0.648835 0.677406
+0.677406 0.663121 0.648835 0.648835 0.634549 0.605978 0.605978 0.605978
+0.605978 0.605978 0.605978 0.634549 0.648835 0.677406 0.705978 0.76312
+0.848835 0.934549 0.977406;
+#X coords 0 1 63 -1 200 140 1;
+#X restore 427 20 graph;
+#X msg 242 217 approx mapping;
+#X obj 21 158 pdp_t;
+#X text 418 165 -1 ----------- 0 ----------- 1;
+#X obj 242 190 spigot;
+#X obj 279 167 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X text 361 216 approximate a mapping function;
+#X obj 21 403 pdp_cheby 10;
+#X connect 0 0 29 0;
#X connect 1 0 0 0;
#X connect 2 0 3 0;
-#X connect 3 0 8 0;
+#X connect 3 0 29 0;
#X connect 4 0 5 0;
-#X connect 5 0 8 0;
+#X connect 5 0 29 0;
#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 21 0;
-#X connect 9 0 8 1;
-#X connect 10 0 8 0;
-#X connect 12 0 8 0;
-#X connect 13 0 8 0;
-#X connect 14 0 8 0;
-#X connect 17 0 8 0;
+#X connect 7 0 29 0;
+#X connect 8 0 29 1;
+#X connect 11 0 29 0;
+#X connect 12 0 24 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 0;
#X connect 18 0 8 0;
-#X connect 19 0 18 0;
-#X connect 20 0 18 0;
-#X connect 25 0 9 0;
+#X connect 19 0 29 0;
+#X connect 20 0 19 0;
+#X connect 23 0 29 0;
+#X connect 24 0 29 0;
+#X connect 24 1 26 0;
+#X connect 26 0 23 0;
+#X connect 27 0 26 1;
+#X connect 29 0 15 0;
diff --git a/doc/objects/pdp_cog.pd b/doc/objects/pdp_cog.pd
new file mode 100644
index 0000000..70d8ef7
--- /dev/null
+++ b/doc/objects/pdp_cog.pd
@@ -0,0 +1,32 @@
+#N canvas 683 169 505 377 10;
+#X floatatom 146 142 5 0 0;
+#X floatatom 146 166 5 0 0;
+#X floatatom 146 190 5 0 0;
+#X floatatom 146 214 5 0 0;
+#X floatatom 146 239 5 0 0;
+#X text 32 12 pdp_cog: compute intensity \, center of gravity and standard
+deviation. (interpret an image as a gaussian blob).;
+#X text 201 215 standard deviation x;
+#X text 200 239 standard deviation y;
+#X obj 78 50 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 21 236 pdp_help_output;
+#X obj 78 73 pdp_help_input;
+#X text 200 141 average intensity;
+#X text 200 168 center of gravity x;
+#X text 200 190 center of gravity y;
+#X text 203 47 creation argument is threshold;
+#X obj 78 124 pdp_cog;
+#X floatatom 375 291 5 0 0;
+#X obj 226 317 pdp_cog_abs_thresh 0.1;
+#X text 87 342 the same \, but takes the absolute value and performs
+a thresholding operation;
+#X connect 8 0 10 0;
+#X connect 10 0 9 0;
+#X connect 10 0 15 0;
+#X connect 15 0 0 0;
+#X connect 15 1 1 0;
+#X connect 15 2 2 0;
+#X connect 15 3 3 0;
+#X connect 15 4 4 0;
+#X connect 16 0 17 1;
diff --git a/doc/objects/pdp_control.pd b/doc/objects/pdp_control.pd
index fccb5e9..cfe7704 100644
--- a/doc/objects/pdp_control.pd
+++ b/doc/objects/pdp_control.pd
@@ -1,28 +1,46 @@
-#N canvas 259 276 579 567 10;
-#X obj 237 316 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#N canvas 259 276 910 567 10;
+#X obj 143 325 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
-#X obj 237 406 pdp_control;
-#X msg 237 357 thread \$1;
+#X obj 143 415 pdp_control;
+#X msg 143 366 thread \$1;
#X obj 48 54 pdp_help_input;
#X msg 48 24 start;
#X msg 105 24 stop;
#X obj 48 205 pdp_help_output;
#X obj 48 154 pdp_conv;
#X floatatom 117 86 5 0 0;
-#X obj 79 350 osc~;
-#X floatatom 79 315 5 0 0;
-#X obj 79 419 osc~;
-#X floatatom 112 391 5 0 0;
-#X obj 79 449 dac~;
-#X obj 237 445 print;
-#X text 276 314 switch thread processing on or of;
-#X text 291 446 a pdp_drop message will be sent out;
-#X text 291 462 when a package is dropped;
+#X obj 46 361 osc~;
+#X floatatom 46 326 5 0 0;
+#X obj 46 430 osc~;
+#X floatatom 79 402 5 0 0;
+#X obj 46 460 dac~;
+#X obj 143 454 print;
+#X text 182 323 switch thread processing on or of;
+#X text 197 455 a pdp_drop message will be sent out;
+#X text 197 471 when a package is dropped;
+#X text 119 155 a convolution object to burn cycles;
+#X obj 666 254 pdp_control;
+#X msg 666 226 collectgarbage;
+#X obj 646 478 pdp_control;
#X text 175 82 increase this with thread processing enabled \, no audio
-should be dropped. if you do it with thread processing enabled \, increasing
-it too much can lock up the machine when real time scheduling is enabled.
+should be dropped. if you do it with thread processing disabled \,
+increasing it too much can lock up the machine when real time scheduling
+is enabled.;
+#X msg 646 452 memlimit \$1;
+#X msg 688 422 5e+07;
+#X msg 615 421 0;
+#X text 687 402 50M;
+#X text 613 401 off;
+#X text 472 178 free all unused packets. pdp's garbage collection is
+"lazy" meaning packets will only be freed when the maximum usage limit
+is reached.;
+#X text 179 25 pdp_control: fine tune the pdp system. (threads & memory).
;
-#X text 119 155 a convolution object to burn cycles;
+#X text 470 357 set the max memory usage limit for the packet pool.
+the default is off (value <= 0).;
+#X text 475 511 (this is a safety measure: in pdp it is easy to use
+too much memory \, i.e. with delay lines \, which will likely crash
+pd);
#X connect 0 0 2 0;
#X connect 1 0 14 0;
#X connect 2 0 1 0;
@@ -35,3 +53,7 @@ it too much can lock up the machine when real time scheduling is enabled.
#X connect 10 0 9 0;
#X connect 11 0 13 0;
#X connect 12 0 11 1;
+#X connect 20 0 19 0;
+#X connect 23 0 21 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 0;
diff --git a/doc/objects/pdp_convert.pd b/doc/objects/pdp_convert.pd
new file mode 100644
index 0000000..498aaa3
--- /dev/null
+++ b/doc/objects/pdp_convert.pd
@@ -0,0 +1,17 @@
+#N canvas 556 468 575 277 10;
+#X obj 46 40 pdp_help_input;
+#X msg 46 10 start;
+#X msg 95 10 stop;
+#X obj 46 225 pdp_help_output;
+#X obj 118 69 hdl 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -1 -1
+0;
+#X obj 46 90 pdp_route 2;
+#X obj 118 154 pdp_convert image/grey/*;
+#X text 307 153 convert a packet;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 4 0 5 1;
+#X connect 5 0 3 0;
+#X connect 5 1 6 0;
+#X connect 6 0 3 0;
diff --git a/doc/objects/pdp_del.pd b/doc/objects/pdp_del.pd
index af16651..607a632 100644
--- a/doc/objects/pdp_del.pd
+++ b/doc/objects/pdp_del.pd
@@ -1,6 +1,6 @@
#N canvas 414 20 609 368 10;
-#X floatatom 107 116 5 0 0;
-#X floatatom 64 207 5 0 0;
+#X floatatom 107 116 5 0 0 0 - - -;
+#X floatatom 64 207 5 0 0 0 - - -;
#X obj 20 60 pdp_help_input;
#X msg 20 31 start;
#X msg 72 30 stop;
@@ -15,6 +15,9 @@
#X text 164 165 first creation arg = max delay length;
#X text 165 213 second creation arg: initial delay (default = max)
;
+#X obj 176 259 pdp_description;
+#X obj 176 285 print;
+#X msg 339 259 _debug;
#X connect 0 0 11 1;
#X connect 1 0 5 2;
#X connect 2 0 5 0;
@@ -24,3 +27,5 @@
#X connect 5 0 6 0;
#X connect 7 0 1 0;
#X connect 11 0 5 1;
+#X connect 11 0 14 0;
+#X connect 16 0 11 0;
diff --git a/doc/objects/pdp_description.pd b/doc/objects/pdp_description.pd
new file mode 100644
index 0000000..f065d83
--- /dev/null
+++ b/doc/objects/pdp_description.pd
@@ -0,0 +1,28 @@
+#N canvas 338 375 593 300 10;
+#X symbolatom 78 197 40 0 0;
+#X obj 78 46 pdp_noise;
+#X obj 78 23 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1
+-1;
+#X obj 183 44 pdp_noise;
+#X obj 183 21 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1
+-1;
+#X obj 183 71 pdp_grey;
+#X text 263 139 output packet description as a symbol;
+#X obj 288 44 pdp_noise;
+#X obj 288 21 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1
+-1;
+#X obj 288 71 pdp_mchp;
+#X floatatom 178 171 5 0 0;
+#X obj 78 118 pdp_reg;
+#X obj 78 142 pdp_description;
+#X connect 1 0 11 0;
+#X connect 2 0 1 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 11 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 0 0;
+#X connect 12 1 10 0;
diff --git a/doc/objects/pdp_flip_lr.pd b/doc/objects/pdp_flip_lr.pd
new file mode 100644
index 0000000..b28c3bd
--- /dev/null
+++ b/doc/objects/pdp_flip_lr.pd
@@ -0,0 +1,11 @@
+#N canvas 504 211 449 178 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 136 pdp_help_output;
+#X obj 77 101 pdp_flip_lr;
+#X text 222 101 flip left <-> right;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
diff --git a/doc/objects/pdp_flip_tb.pd b/doc/objects/pdp_flip_tb.pd
new file mode 100644
index 0000000..7048a75
--- /dev/null
+++ b/doc/objects/pdp_flip_tb.pd
@@ -0,0 +1,11 @@
+#N canvas 504 211 449 178 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 136 pdp_help_output;
+#X obj 77 101 pdp_flip_tb;
+#X text 222 101 flip top <-> bottom;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
diff --git a/doc/objects/pdp_gain.pd b/doc/objects/pdp_gain.pd
index eec7e76..7e3f50b 100644
--- a/doc/objects/pdp_gain.pd
+++ b/doc/objects/pdp_gain.pd
@@ -1,32 +1,23 @@
-#N canvas 317 409 546 403 10;
+#N canvas 444 413 538 379 10;
#X msg 91 25 start;
#X msg 139 25 stop;
#X obj 91 56 pdp_help_input;
-#X obj 91 350 pdp_help_output;
-#X obj 91 274 pdp_gain;
-#X floatatom 142 245 5 0 0;
-#X text 201 243 right inlet sets overal gain;
-#X msg 127 159 y \$1;
-#X msg 176 159 v \$1;
-#X msg 224 158 u \$1;
-#X floatatom 127 122 5 0 0;
-#X floatatom 176 122 5 0 0;
-#X floatatom 224 122 5 0 0;
-#X text 281 121 set individual channel gains;
-#X text 301 144 y: luma;
-#X text 301 160 v: chroma red;
-#X text 301 175 u: chroma blue;
-#X text 201 290 creation argument sets initial gain;
-#X text 200 308 (default = 1);
-#X text 202 274 pdp_gain clips when overdriven;
+#X obj 91 312 pdp_help_output;
+#X obj 91 236 pdp_gain;
+#X floatatom 142 207 5 0 0;
+#X text 201 205 right inlet sets overal gain;
+#X text 201 252 creation argument sets initial gain;
+#X text 200 270 (default = 1);
+#X text 202 236 pdp_gain clips when overdriven;
+#X msg 109 124 chanmask \$1;
+#X floatatom 109 100 5 0 0;
+#X text 203 124 set which channels are processed;
+#X text 203 140 using a binary mask. LSB = chan 0;
+#X text 203 157 default (any negative number) = all;
#X connect 0 0 2 0;
#X connect 1 0 2 0;
#X connect 2 0 4 0;
#X connect 4 0 3 0;
#X connect 5 0 4 1;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 10 0 7 0;
-#X connect 11 0 8 0;
-#X connect 12 0 9 0;
+#X connect 10 0 4 0;
+#X connect 11 0 10 0;
diff --git a/doc/objects/pdp_help_input.pd b/doc/objects/pdp_help_input.pd
index a4bc76e..4283796 100644
--- a/doc/objects/pdp_help_input.pd
+++ b/doc/objects/pdp_help_input.pd
@@ -3,9 +3,8 @@
#X text 17 11 this abstraction is used as an input module in most of
the documentation patches. change it to reflect your preferred input
object.;
-#X obj 262 248 inlet;
-#X obj 262 276 route start stop;
-#X msg 315 309 stop;
+#X obj 262 234 inlet;
+#X msg 315 324 stop;
#X obj 258 672 outlet;
#X obj 262 385 metro;
#X obj 292 360 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
@@ -29,11 +28,10 @@ object.;
-1;
#X obj 262 426 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X msg 492 288 open /somedirectory/mydemo.mov;
#X text 520 308 change this to the movie;
#X text 519 323 you want to use;
#X msg 520 379 loop 1;
-#X msg 262 310 bang;
+#X msg 262 325 bang;
#X text 163 203 for video4linux;
#X text 294 201 for quicktime;
#X text 156 497 connect here;
@@ -41,23 +39,33 @@ object.;
#X text 302 497 connect here;
#X text 305 511 for quicktime;
#X text 308 377 set framerate here;
-#X connect 0 0 5 0;
-#X connect 2 0 3 0;
-#X connect 3 0 25 0;
-#X connect 3 1 4 0;
-#X connect 4 0 6 0;
-#X connect 6 0 20 0;
-#X connect 7 0 6 1;
-#X connect 8 0 0 0;
-#X connect 9 0 19 0;
-#X connect 10 0 8 0;
-#X connect 11 0 21 0;
-#X connect 14 0 0 0;
-#X connect 15 0 18 0;
-#X connect 18 0 5 0;
-#X connect 19 0 10 0;
-#X connect 20 0 14 0;
-#X connect 21 0 18 0;
-#X connect 21 0 24 0;
-#X connect 24 0 18 0;
-#X connect 25 0 6 0;
+#X msg 492 288 open /tmp/test.mov;
+#X obj 262 258 route start stop;
+#X obj 329 292 select 0;
+#X obj 262 292 select 1;
+#X msg 40 357 open /dev/video1;
+#X connect 0 0 4 0;
+#X connect 2 0 32 0;
+#X connect 3 0 5 0;
+#X connect 5 0 19 0;
+#X connect 6 0 5 1;
+#X connect 7 0 0 0;
+#X connect 8 0 18 0;
+#X connect 9 0 7 0;
+#X connect 10 0 31 0;
+#X connect 13 0 0 0;
+#X connect 14 0 17 0;
+#X connect 17 0 4 0;
+#X connect 18 0 9 0;
+#X connect 19 0 13 0;
+#X connect 22 0 17 0;
+#X connect 23 0 5 0;
+#X connect 31 0 17 0;
+#X connect 31 0 22 0;
+#X connect 32 0 23 0;
+#X connect 32 1 3 0;
+#X connect 32 2 34 0;
+#X connect 33 0 3 0;
+#X connect 34 0 23 0;
+#X connect 34 1 33 0;
+#X connect 35 0 0 0;
diff --git a/doc/objects/pdp_help_output.pd b/doc/objects/pdp_help_output.pd
index c216ae3..0ed52d5 100644
--- a/doc/objects/pdp_help_output.pd
+++ b/doc/objects/pdp_help_output.pd
@@ -1,7 +1,14 @@
-#N canvas 482 342 450 300 10;
+#N canvas 482 342 510 304 10;
#X obj 59 95 inlet;
#X obj 59 178 pdp_xv;
#X text 17 11 this abstraction is used as an output module in most
of the documentation patches. change it to reflect your preferred output
object.;
+#X obj 232 179 pdp_glx;
+#X text 31 201 X11 XVideo output;
+#X text 198 199 X11 openGL output;
+#X text 60 217 (linux);
+#X text 199 214 (linux \, mesa \, osx);
+#X msg 106 141 display acer:0;
#X connect 0 0 1 0;
+#X connect 8 0 1 0;
diff --git a/doc/objects/pdp_histo.pd b/doc/objects/pdp_histo.pd
new file mode 100644
index 0000000..f99a27e
--- /dev/null
+++ b/doc/objects/pdp_histo.pd
@@ -0,0 +1,36 @@
+#N canvas 594 324 616 432 10;
+#X msg 87 208 size \$1;
+#X floatatom 87 184 5 0 0;
+#N canvas 0 0 450 300 graph2 0;
+#X array array1 64 float 0;
+#X coords 0 1 63 -1 200 140 1;
+#X restore 390 32 graph;
+#X obj 127 47 pdp_help_input;
+#X obj 127 113 pdp_help_output;
+#X obj 127 77 pdp_gain;
+#X floatatom 251 50 5 0 0;
+#X obj 127 23 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X msg 86 271 array array1;
+#X floatatom 155 183 5 0 0;
+#X msg 155 207 scale \$1;
+#X text 37 355 the size is rounded to the next power of 2;
+#X text 36 373 first argument is size \, second is optional scaling
+factor.;
+#X text 37 338 create a histogram from an image and send to a table
+;
+#X floatatom 229 183 5 0 0;
+#X msg 229 207 samplesize \$1;
+#X obj 19 299 pdp_histo array1 64 10;
+#X connect 0 0 16 0;
+#X connect 1 0 0 0;
+#X connect 3 0 5 0;
+#X connect 5 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 5 1;
+#X connect 7 0 3 0;
+#X connect 8 0 16 0;
+#X connect 9 0 10 0;
+#X connect 10 0 16 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
diff --git a/doc/objects/pdp_hthresh.pd b/doc/objects/pdp_hthresh.pd
new file mode 100644
index 0000000..6d71925
--- /dev/null
+++ b/doc/objects/pdp_hthresh.pd
@@ -0,0 +1,26 @@
+#N canvas 504 211 500 438 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 340 pdp_help_output;
+#X obj 77 163 pdp_gain;
+#X floatatom 128 135 5 0 0;
+#X msg 128 109 0.5;
+#X obj 77 296 pdp_gain;
+#X msg 128 268 1;
+#X floatatom 160 199 5 0 0;
+#X text 234 283 (-t > x > t) -> 0;
+#X text 234 248 ( x > t) -> x;
+#X text 234 266 (-t > x) -> x;
+#X text 233 230 hard threshold;
+#X obj 77 231 pdp_hthresh;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 14 0;
+#X connect 5 0 4 1;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X connect 8 0 7 1;
+#X connect 9 0 14 1;
+#X connect 14 0 7 0;
diff --git a/doc/objects/pdp_loop.pd b/doc/objects/pdp_loop.pd
new file mode 100644
index 0000000..b097cd8
--- /dev/null
+++ b/doc/objects/pdp_loop.pd
@@ -0,0 +1,62 @@
+#N canvas 427 312 733 458 10;
+#X obj 32 85 metro 40;
+#X obj 17 59 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 152 393 pdp_loop 25;
+#X msg 275 109 record;
+#X floatatom 83 58 5 0 0;
+#X msg 39 58 stop;
+#X floatatom 274 363 5 0 0;
+#X floatatom 274 338 5 0 0;
+#X msg 275 82 store \$1;
+#X floatatom 275 57 5 0 0;
+#X msg 274 158 stop;
+#X obj 152 428 pdp_help_output;
+#X obj 152 87 pdp_help_input;
+#X msg 152 59 start;
+#X msg 199 59 stop;
+#X text 365 325 set playback position;
+#X text 372 345 hot;
+#X text 369 362 cold;
+#X text 365 159 stop recording;
+#X text 366 107 start recording at position 0;
+#X text 365 82 store a single packet at an arbitrary position;
+#X text 154 33 source playback;
+#X text 16 34 loop playback;
+#X text 272 393 creation arg: loop size;
+#X msg 275 132 record 10 2;
+#X text 365 133 start recording at position 10 \, recording 2 packets
+;
+#X msg 274 209 loop \$1;
+#X obj 274 188 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X text 365 210 looping on/off;
+#X msg 274 310 0;
+#X msg 274 273 size \$1;
+#X floatatom 274 249 5 0 0;
+#X text 366 270 set a new loop size. (don't make this too large);
+#X msg 561 356 collectgarbage;
+#X obj 561 387 pdp_control;
+#X msg 546 329 thread 1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 11 0;
+#X connect 3 0 2 0;
+#X connect 4 0 0 1;
+#X connect 5 0 0 0;
+#X connect 6 0 2 1;
+#X connect 7 0 2 0;
+#X connect 8 0 2 0;
+#X connect 9 0 8 0;
+#X connect 10 0 2 0;
+#X connect 12 0 2 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 0;
+#X connect 24 0 2 0;
+#X connect 26 0 2 0;
+#X connect 27 0 26 0;
+#X connect 29 0 7 0;
+#X connect 30 0 2 0;
+#X connect 31 0 30 0;
+#X connect 33 0 34 0;
+#X connect 35 0 34 0;
diff --git a/doc/objects/pdp_mul.pd b/doc/objects/pdp_mul.pd
index 596c1cb..24d6461 100644
--- a/doc/objects/pdp_mul.pd
+++ b/doc/objects/pdp_mul.pd
@@ -1,17 +1,19 @@
#N canvas 224 229 462 390 10;
-#X msg 77 38 start;
-#X msg 124 38 stop;
-#X obj 77 70 pdp_help_input;
-#X obj 77 330 pdp_help_output;
-#X obj 121 164 pdp_reg;
-#X obj 195 127 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X msg 130 53 start;
+#X msg 177 53 stop;
+#X obj 130 85 pdp_help_input;
+#X obj 130 345 pdp_help_output;
+#X obj 174 179 pdp_reg;
+#X obj 248 142 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X text 228 125 click here;
-#X obj 77 295 pdp_gain;
-#X floatatom 128 267 5 0 0;
-#X text 229 201 multiplies 2 packets;
-#X obj 77 197 pdp_mul;
-#X msg 128 241 2;
+#X text 281 140 click here;
+#X obj 130 310 pdp_gain;
+#X floatatom 181 282 5 0 0;
+#X text 282 216 multiplies 2 packets;
+#X obj 130 212 pdp_mul;
+#X msg 181 256 2;
+#X floatatom 40 150 5 0 0;
+#X msg 40 177 chanmask \$1;
#X connect 0 0 2 0;
#X connect 1 0 2 0;
#X connect 2 0 10 0;
@@ -22,3 +24,5 @@
#X connect 8 0 7 1;
#X connect 10 0 7 0;
#X connect 11 0 8 0;
+#X connect 12 0 13 0;
+#X connect 13 0 10 0;
diff --git a/doc/objects/pdp_not.pd b/doc/objects/pdp_not.pd
new file mode 100644
index 0000000..c213080
--- /dev/null
+++ b/doc/objects/pdp_not.pd
@@ -0,0 +1,21 @@
+#N canvas 504 211 500 438 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 340 pdp_help_output;
+#X obj 77 163 pdp_gain;
+#X floatatom 128 135 5 0 0;
+#X msg 128 109 0.5;
+#X obj 77 231 pdp_not;
+#X text 229 235 bitwise not;
+#X obj 77 296 pdp_gain;
+#X msg 128 268 1;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 4 1;
+#X connect 6 0 5 0;
+#X connect 7 0 9 0;
+#X connect 9 0 3 0;
+#X connect 10 0 9 1;
diff --git a/doc/objects/pdp_or.pd b/doc/objects/pdp_or.pd
new file mode 100644
index 0000000..22e91e6
--- /dev/null
+++ b/doc/objects/pdp_or.pd
@@ -0,0 +1,24 @@
+#N canvas 552 356 511 383 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 322 pdp_help_output;
+#X obj 114 246 pdp_reg;
+#X obj 196 183 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 229 181 click here;
+#X obj 77 163 pdp_gain;
+#X floatatom 128 135 5 0 0;
+#X msg 128 109 0.5;
+#X obj 77 279 pdp_or;
+#X text 229 283 bitwise or;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 7 0;
+#X connect 4 0 10 1;
+#X connect 5 0 4 0;
+#X connect 7 0 4 1;
+#X connect 7 0 10 0;
+#X connect 8 0 7 1;
+#X connect 9 0 8 0;
+#X connect 10 0 3 0;
diff --git a/doc/objects/pdp_plasma.pd b/doc/objects/pdp_plasma.pd
new file mode 100644
index 0000000..3a9a566
--- /dev/null
+++ b/doc/objects/pdp_plasma.pd
@@ -0,0 +1,29 @@
+#N canvas 655 0 575 333 10;
+#X obj 46 262 pdp_help_output;
+#X obj 46 149 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 174 71 dim 320 240;
+#X text 270 71 set packet dimensions;
+#X msg 174 98 type grey;
+#X msg 174 121 type yv12;
+#X text 270 100 generate greyscale;
+#X text 270 119 generate colour (default);
+#X msg 174 152 seed 123;
+#X text 270 152 set seed value;
+#X text 167 21 pdp_noise creates a random image (with uniform distribution
+between -1 and 1) when a bang is received;
+#X obj 46 198 pdp_plasma;
+#X floatatom 174 176 5 0 0 0 - - -;
+#X text 270 176 turbulence;
+#X obj 46 241 pdp_reg;
+#X obj 113 221 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X connect 1 0 11 0;
+#X connect 2 0 11 0;
+#X connect 4 0 11 0;
+#X connect 5 0 11 0;
+#X connect 8 0 11 0;
+#X connect 11 0 14 0;
+#X connect 12 0 11 1;
+#X connect 14 0 0 0;
+#X connect 15 0 14 0;
diff --git a/doc/objects/pdp_pointcloud.pd b/doc/objects/pdp_pointcloud.pd
new file mode 100644
index 0000000..c7c7f47
--- /dev/null
+++ b/doc/objects/pdp_pointcloud.pd
@@ -0,0 +1,32 @@
+#N canvas 462 571 450 371 10;
+#X obj 40 94 pdp_help_input;
+#X obj 40 36 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 40 174 pdp_help_output;
+#X text 111 11 convert an image to a point cloud;
+#X text 111 43 creation argument is number of points;
+#X text 111 26 (containing the points with highest intesity);
+#X floatatom 168 114 5 0 0;
+#X text 219 114 <- nb points;
+#X obj 40 140 pdp_pointcloud 10;
+#X floatatom 265 151 5 0 0;
+#X msg 267 174 nbclusters \$1;
+#X obj 180 216 pdp_description;
+#X obj 180 243 print;
+#X obj 35 296 pdp_xv;
+#X obj 39 221 pdp_m_mm A A^T;
+#X obj 34 273 pdp_scale 64 64;
+#X obj 34 252 pdp_convert image/*/*;
+#X connect 0 0 8 0;
+#X connect 1 0 0 0;
+#X connect 6 0 8 1;
+#X connect 8 0 2 0;
+#X connect 8 1 11 0;
+#X connect 8 1 14 1;
+#X connect 8 1 14 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 12 0;
+#X connect 14 0 16 0;
+#X connect 15 0 13 0;
+#X connect 16 0 15 0;
diff --git a/doc/objects/pdp_positive.pd b/doc/objects/pdp_positive.pd
new file mode 100644
index 0000000..5452d2d
--- /dev/null
+++ b/doc/objects/pdp_positive.pd
@@ -0,0 +1,27 @@
+#N canvas 479 219 500 438 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 340 pdp_help_output;
+#X floatatom 128 135 5 0 0;
+#X obj 77 296 pdp_gain;
+#X msg 145 271 1;
+#X obj 77 231 pdp_positive;
+#X text 224 230 test positive and return a bitmask;
+#X text 225 245 >= 0 -> all one / < 0 -> all zero;
+#X text 223 264 to use in conjunction with logic ops;
+#X obj 77 268 pdp_xor;
+#X obj 277 146 pdp_cheby;
+#X obj 77 163 pdp_offset;
+#X msg 128 109 -0.5;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 11 1;
+#X connect 2 0 13 0;
+#X connect 4 0 13 1;
+#X connect 5 0 3 0;
+#X connect 6 0 5 1;
+#X connect 7 0 11 0;
+#X connect 11 0 5 0;
+#X connect 13 0 7 0;
+#X connect 14 0 4 0;
diff --git a/doc/objects/pdp_randmix.pd b/doc/objects/pdp_randmix.pd
index 75f12fc..6614979 100644
--- a/doc/objects/pdp_randmix.pd
+++ b/doc/objects/pdp_randmix.pd
@@ -11,6 +11,8 @@
#X text 268 80 click here;
#X text 268 159 random crossfade between 2 packets;
#X text 268 175 0 = left \, 1 = right;
+#X obj 203 125 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 6100 1;
#X connect 0 0 7 0;
#X connect 1 0 0 1;
#X connect 2 0 1 0;
@@ -19,3 +21,4 @@
#X connect 4 0 1 1;
#X connect 5 0 4 0;
#X connect 6 0 4 0;
+#X connect 11 0 3 0;
diff --git a/doc/objects/pdp_reg.pd b/doc/objects/pdp_reg.pd
index 9a78e66..dca00ef 100644
--- a/doc/objects/pdp_reg.pd
+++ b/doc/objects/pdp_reg.pd
@@ -1,20 +1,38 @@
-#N canvas 623 480 596 300 10;
-#X obj 41 171 pdp_reg;
-#X obj 41 140 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#N canvas 327 276 676 444 10;
+#X obj 41 318 pdp_reg;
+#X obj 41 287 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
-1;
#X msg 85 15 start;
#X msg 135 15 stop;
#X obj 85 53 pdp_help_input;
-#X obj 41 240 pdp_help_output;
-#X text 113 144 pdp_reg works in the same way as the pd float or int
+#X obj 41 359 pdp_help_output;
+#X text 121 90 pdp_reg works in the same way as the pd float or int
objects;
-#X text 263 178 bang: sends stored packet to output;
-#X text 263 163 pdp: stores packet and sends to output;
-#X text 263 199 pdp: stores a new packet;
-#X text 112 164 left intlet (hot):;
-#X text 112 199 right intlet (cold):;
+#X text 271 124 bang: sends stored packet to output;
+#X text 271 109 pdp: stores packet and sends to output;
+#X text 271 145 pdp: stores a new packet;
+#X text 121 111 left intlet (hot):;
+#X text 120 145 right intlet (cold):;
+#X msg 122 236 load_png \$1;
+#X obj 122 212 openpanel;
+#X obj 122 190 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 219 189 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 219 235 save_png \$1;
+#X text 331 226 as a png image file.;
+#X text 332 211 you can save the contents of the register;
+#X obj 219 211 savepanel;
+#X msg 219 266 save_png /tmp/snap.png;
#X connect 0 0 5 0;
#X connect 1 0 0 0;
#X connect 2 0 4 0;
#X connect 3 0 4 0;
#X connect 4 0 0 1;
+#X connect 12 0 0 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 15 0 19 0;
+#X connect 16 0 0 0;
+#X connect 19 0 16 0;
+#X connect 20 0 0 0;
diff --git a/doc/objects/pdp_sign.pd b/doc/objects/pdp_sign.pd
new file mode 100644
index 0000000..2e3f775
--- /dev/null
+++ b/doc/objects/pdp_sign.pd
@@ -0,0 +1,25 @@
+#N canvas 479 219 500 438 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 340 pdp_help_output;
+#X floatatom 128 135 5 0 0;
+#X obj 77 296 pdp_gain;
+#X msg 145 271 1;
+#X msg 128 109 -0.5;
+#X obj 77 231 pdp_sign;
+#X text 239 231 get the sign (-1 \, 1);
+#X obj 77 268 pdp_mul;
+#X obj 77 163 pdp_gain;
+#X obj 173 207 pdp_abs;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 1;
+#X connect 2 0 11 0;
+#X connect 4 0 11 1;
+#X connect 5 0 3 0;
+#X connect 6 0 5 1;
+#X connect 7 0 4 0;
+#X connect 8 0 10 0;
+#X connect 10 0 5 0;
+#X connect 11 0 8 0;
diff --git a/doc/objects/pdp_sthresh.pd b/doc/objects/pdp_sthresh.pd
new file mode 100644
index 0000000..0267fc5
--- /dev/null
+++ b/doc/objects/pdp_sthresh.pd
@@ -0,0 +1,26 @@
+#N canvas 504 211 500 438 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 340 pdp_help_output;
+#X obj 77 163 pdp_gain;
+#X floatatom 128 135 5 0 0;
+#X msg 128 109 0.5;
+#X obj 77 296 pdp_gain;
+#X msg 128 268 1;
+#X obj 77 231 pdp_sthresh;
+#X floatatom 160 199 5 0 0;
+#X text 233 230 soft threshold;
+#X text 234 283 (-t > x > t) -> 0;
+#X text 234 266 (-t > x) -> (x + t);
+#X text 234 248 ( x > t) -> (x - t);
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 9 0;
+#X connect 5 0 4 1;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X connect 8 0 7 1;
+#X connect 9 0 7 0;
+#X connect 10 0 9 1;
diff --git a/doc/objects/pdp_trigger.pd b/doc/objects/pdp_trigger.pd
index f8b5461..2cabece 100644
--- a/doc/objects/pdp_trigger.pd
+++ b/doc/objects/pdp_trigger.pd
@@ -1,14 +1,79 @@
-#N canvas 526 379 575 277 10;
+#N canvas 218 0 631 489 10;
#X obj 46 40 pdp_help_input;
#X msg 46 10 start;
#X msg 95 10 stop;
-#X obj 46 225 pdp_help_output;
-#X obj 46 91 pdp_trigger;
-#X obj 118 145 print;
-#X text 154 90 outputs a bang on the right output before sending packet
-to the left output;
+#X obj 46 179 pdp_help_output;
+#X obj 46 102 pdp_trigger;
+#X text 163 98 default behaviour is to outputs bang on the right output
+before sending packet to the left output;
+#X obj 118 146 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 45 269 pdp_noise;
+#X obj 45 245 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 45 294 pdp_trigger bang pdp bang bang pdp;
+#X obj 45 460 print o1;
+#X obj 278 326 print o5;
+#X obj 161 388 print o3;
+#X obj 103 429 print o2;
+#X obj 219 354 print o4;
+#X text 163 57 pdp_trigger behaves very much like the pd trigger object
+;
+#X text 162 243 you can give it pdp (p) or bang (b) arguments to send
+out packets or bangs from right to left;
+#X obj 365 406 pdp_t b p b b p;
+#X text 325 386 there is also a short version:;
+#X text 142 565 confusing note:;
+#X obj 46 575 pdp_noise;
+#X obj 46 551 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 46 604 pdp_add;
+#X obj 61 746 pdp_noise;
+#X obj 61 722 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 61 806 pdp_add;
+#X obj 105 776 pdp_gain;
+#X text 142 584 you don't need a trigger object if you connect a pdp
+object's outlet to only one active inlet.;
+#X text 139 657 if an outlet is connected to more than one active inlet
+\, you need a trigger object like you would do with standard pd message
+objects;
+#X obj 285 725 pdp_noise;
+#X obj 285 701 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 285 806 pdp_add;
+#X obj 343 778 pdp_gain;
+#X obj 285 751 pdp_t p p;
+#X floatatom 156 750 5 0 0;
+#X floatatom 394 750 5 0 0;
+#X text 287 829 correct;
+#X text 139 852 (even more confusing note: this is because pdp uses
+a 3 phase communication protocol.);
+#X text 452 459 (scroll down for more);
+#X text 48 829 unpredictable;
#X connect 0 0 4 0;
#X connect 1 0 0 0;
#X connect 2 0 0 0;
#X connect 4 0 3 0;
-#X connect 4 1 5 0;
+#X connect 4 1 6 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 9 1 13 0;
+#X connect 9 2 12 0;
+#X connect 9 3 14 0;
+#X connect 9 4 11 0;
+#X connect 20 0 22 0;
+#X connect 20 0 22 1;
+#X connect 21 0 20 0;
+#X connect 23 0 25 0;
+#X connect 23 0 26 0;
+#X connect 24 0 23 0;
+#X connect 26 0 25 1;
+#X connect 29 0 33 0;
+#X connect 30 0 29 0;
+#X connect 32 0 31 1;
+#X connect 33 0 31 0;
+#X connect 33 1 32 0;
+#X connect 34 0 26 1;
+#X connect 35 0 32 1;
diff --git a/doc/objects/pdp_xor.pd b/doc/objects/pdp_xor.pd
new file mode 100644
index 0000000..40366e2
--- /dev/null
+++ b/doc/objects/pdp_xor.pd
@@ -0,0 +1,28 @@
+#N canvas 552 356 511 383 10;
+#X msg 100 45 start;
+#X msg 147 45 stop;
+#X obj 100 77 pdp_help_input;
+#X obj 100 329 pdp_help_output;
+#X obj 144 252 pdp_reg;
+#X obj 213 204 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 246 202 click here;
+#X obj 100 170 pdp_gain;
+#X floatatom 151 142 5 0 0;
+#X msg 151 116 0.5;
+#X obj 100 286 pdp_xor;
+#X text 252 290 bitwise xor;
+#X msg 11 205 chanmask \$1;
+#X floatatom 11 180 5 0 0;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 7 0;
+#X connect 4 0 10 1;
+#X connect 5 0 4 0;
+#X connect 7 0 4 1;
+#X connect 7 0 10 0;
+#X connect 8 0 7 1;
+#X connect 9 0 8 0;
+#X connect 10 0 3 0;
+#X connect 12 0 10 0;
+#X connect 13 0 12 0;
diff --git a/doc/objects/pdp_xv.pd b/doc/objects/pdp_xv.pd
index dd07488..a0f44a6 100644
--- a/doc/objects/pdp_xv.pd
+++ b/doc/objects/pdp_xv.pd
@@ -1,36 +1,58 @@
-#N canvas 150 382 708 497 10;
-#X obj 29 412 pdp_xv;
+#N canvas 238 142 708 744 10;
#X msg 132 223 dim 320 240;
#X msg 132 246 dim 640 480;
-#X text 271 226 dim sets the window dimensions;
+#X text 300 227 dim sets the window dimensions;
#X msg 132 177 create;
#X msg 132 198 destroy;
#X text 130 114 pdp_xv ouputs video in a window using the xVideo extension.
if your graphics card/driver supports it you can have multiple output
windows. if a pdp message is received and a window is not open \, one
is created automaticly.;
-#X text 271 180 use these messages to explicitly create/destroy the
+#X text 230 185 use these messages to explicitly create/destroy the
window;
-#X msg 134 294 cursor \$1;
-#X obj 134 274 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X msg 133 463 cursor \$1;
+#X obj 133 443 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
-#X text 270 294 enables/disables cursor in xv window;
+#X text 298 464 enables/disables cursor in xv window;
#X obj 29 61 pdp_help_input;
#X msg 29 25 start;
#X msg 78 24 stop;
-#X text 269 326 specify the x window display;
-#X msg 134 324 display :0;
-#X obj 29 448 print;
-#X text 133 445 the output channel sends mouse event messages (press/release/drag
+#X text 297 496 specify the x window display;
+#X msg 133 493 display :0;
+#X obj 29 587 print;
+#X text 133 584 the output channel sends mouse event messages (press/release/drag
and individual p/r/d for each button);
-#X connect 0 0 16 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 8 0;
-#X connect 11 0 0 0;
-#X connect 12 0 11 0;
-#X connect 13 0 11 0;
-#X connect 15 0 0 0;
+#X obj 29 551 pdp_xv;
+#X msg 132 273 pos 100 100;
+#X text 300 273 set window position;
+#X msg 132 336 fullscreen;
+#X text 298 340 resize to entire screen;
+#X text 299 305 set both at once;
+#X msg 132 303 posdim 100 300 320 240;
+#X msg 131 417 tile 5 5 \$1 \$2;
+#X text 297 418 take a part of the screen (for tiling multiple pdp_xv's)
+;
+#X obj 131 396 pack 0 0;
+#X obj 190 396 t b f;
+#X floatatom 131 377 5 0 0 0 - - -;
+#X floatatom 190 376 5 0 0 0 - - -;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#X connect 3 0 17 0;
+#X connect 4 0 17 0;
+#X connect 7 0 17 0;
+#X connect 8 0 7 0;
+#X connect 10 0 17 0;
+#X connect 11 0 10 0;
+#X connect 12 0 10 0;
+#X connect 14 0 17 0;
+#X connect 17 0 15 0;
+#X connect 18 0 17 0;
+#X connect 20 0 17 0;
+#X connect 23 0 17 0;
+#X connect 24 0 17 0;
+#X connect 26 0 24 0;
+#X connect 27 0 26 0;
+#X connect 27 1 26 1;
+#X connect 28 0 26 0;
+#X connect 29 0 27 0;
diff --git a/doc/objects/pdp_zthresh.pd b/doc/objects/pdp_zthresh.pd
new file mode 100644
index 0000000..df5209b
--- /dev/null
+++ b/doc/objects/pdp_zthresh.pd
@@ -0,0 +1,21 @@
+#N canvas 504 211 500 438 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 340 pdp_help_output;
+#X obj 77 163 pdp_gain;
+#X floatatom 128 135 5 0 0;
+#X msg 128 109 0.5;
+#X obj 77 296 pdp_gain;
+#X msg 128 268 1;
+#X text 233 230 zero threshold ( < 0 -> 0 );
+#X obj 77 231 pdp_zthresh;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 10 0;
+#X connect 5 0 4 1;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X connect 8 0 7 1;
+#X connect 10 0 7 0;