#N canvas 438 30 545 591 12; #X text 21 21 Externals for video:; #N canvas 148 3 734 663 vframe 0; #X obj 34 275 fs.frame; #X obj 55 377 vimport; #X obj 221 427 fs.frame; #X msg 244 398 320x240; #X msg 253 178 bang; #X text 302 176 set vframe to import to; #X text 26 509 Connect vframe directly to fs.frame to display it with a bang.; #X msg 253 206 bang; #X text 302 198 import image \, and bang vframe again to display it ; #X obj 150 331 vframe 640 480; #X msg 34 245 320x240 \, noize \, colortv; #X text 17 14 vframe holds memory for a single image and is the basis of Pure Data-externals-based image handling in Framestein.; #X text 26 553 Here \, vframe is bigger (640x480) than the two fs.frames (320x240). This is okay - as long as the fs.frames you import from and to are of the same size \, the image will be right. If you import to fs.frame of a different size than the fs.frame you imported from -> garbage.; #X text 17 109 vframe has no image loading and display functionality. Images can be imported to and from fs.frame:; #X msg 349 423 dock vframe \, 330+260; #X text 16 59 Initialization arguments determine the width and height of the image \, as in below. Defaults are 176 and 144; #X obj 34 220 init; #X obj 244 373 init; #X connect 0 0 1 0; #X connect 3 0 2 0; #X connect 4 0 9 0; #X connect 7 0 0 0; #X connect 7 0 9 0; #X connect 9 0 1 1; #X connect 9 0 2 0; #X connect 10 0 0 0; #X connect 14 0 2 0; #X connect 16 0 10 0; #X connect 17 0 3 0; #X restore 64 216 pd vframe; #X obj 67 122 fs.main; #X msg 67 86 6001; #X text 160 215 basic image container; #N canvas 256 206 618 418 vplugin 0; #X obj 94 226 vframe; #X obj 143 156 vplugin; #X text 13 10 vframe can execute Framestein-plugins. vplugin has the path to these plugins - open it up \, correct the path \, and try it. ; #X msg 161 99 noize; #X msg 218 99 colortv; #X obj 94 286 fs.frame; #X msg 201 240 dock vplugin \, 200+235; #X connect 0 0 5 0; #X connect 1 0 0 0; #X connect 3 0 1 0; #X connect 4 0 1 0; #X connect 6 0 5 0; #X restore 64 262 pd vplugin; #X text 158 261 execute Framestein-plugins; #N canvas 187 -3 640 677 vcopy 0; #X obj 87 204 vcopy; #X msg 240 145 tile \$1; #X floatatom 240 116 5 0 0; #X floatatom 240 176 5 0 0; #X msg 240 201 xbend \$1; #X obj 87 341 fs.frame; #X obj 114 61 r vcopyexample; #X obj 87 129 vref; #X msg 87 98 bang; #X floatatom 97 159 5 0 0; #X msg 167 341 320x240; #X obj 87 294 vframe 320 240; #X msg 240 283 xbend \$1 \$2; #X obj 240 258 pack f f; #X floatatom 240 233 5 0 0; #X floatatom 299 233 5 0 0; #X msg 311 259 bang; #X obj 386 201 random 320; #X obj 386 227 random 320; #X floatatom 386 113 5 0 0; #X msg 118 379 dock vcopy \, 90+400; #X text 17 9 Some plugins operate on two images. This is done with vcopy:; #X obj 167 315 init; #X obj 386 139 fps 0.25; #X connect 0 0 11 0; #X connect 1 0 0 1; #X connect 1 0 8 0; #X connect 2 0 1 0; #X connect 3 0 4 0; #X connect 4 0 0 1; #X connect 4 0 8 0; #X connect 6 0 7 1; #X connect 7 0 0 0; #X connect 7 0 9 0; #X connect 8 0 7 0; #X connect 10 0 5 0; #X connect 11 0 5 0; #X connect 12 0 0 1; #X connect 12 0 8 0; #X connect 13 0 12 0; #X connect 14 0 13 0; #X connect 15 0 13 1; #X connect 15 0 16 0; #X connect 16 0 13 0; #X connect 17 0 14 0; #X connect 18 0 15 0; #X connect 19 0 23 0; #X connect 20 0 5 0; #X connect 22 0 10 0; #X connect 23 0 17 0; #X connect 23 0 18 0; #X restore 64 310 pd vcopy; #X text 159 309 execute plugins that use two images; #N canvas 148 7 833 572 vsig~ 0; #X text 14 9 vsig~: convert image to signal; #X obj 201 140 vframe; #X obj 209 182 vsig~; #X obj 209 446 vsnapshot~; #X obj 257 185 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 -1; #X obj 201 109 vplugin; #X obj 284 413 vframe; #X msg 201 75 noize \, colortv; #X msg 378 99 \; pd dsp 1; #X obj 209 485 fs.frame; #X msg 284 387 bang; #X text 402 204 - image signal; #X text 403 228 - sync signal; #X text 403 253 - bang when bottomright of image is reached; #X text 383 302 vsnapshot~ inlets:; #X text 382 180 vsig~ outlets:; #X text 402 330 - image signal; #X text 403 354 - sync signal; #X text 403 380 - vframe to write image to; #X obj 45 289 dac~; #X floatatom 89 255 5 0 0; #X text 83 289 sounds great!; #X obj 45 255 *~ 0; #X text 14 25 vsnapshot~: convert signal to image; #X msg 273 102 black; #X obj 44 370 osc~ 2; #X obj 44 397 *~ 0; #X floatatom 86 397 5 0 0; #X text 100 372 looks great!; #X floatatom 44 345 5 0 0; #X msg 44 485 dock vsig~ \, 12+87; #X obj 378 72 init; #X obj 284 361 init; #X connect 1 0 2 0; #X connect 2 0 22 0; #X connect 2 0 3 0; #X connect 2 1 3 1; #X connect 2 2 4 0; #X connect 3 0 9 0; #X connect 5 0 1 0; #X connect 6 0 3 2; #X connect 7 0 5 0; #X connect 10 0 6 0; #X connect 20 0 22 1; #X connect 22 0 19 0; #X connect 22 0 19 1; #X connect 24 0 5 0; #X connect 25 0 26 0; #X connect 26 0 3 0; #X connect 27 0 26 1; #X connect 29 0 25 0; #X connect 30 0 9 0; #X connect 31 0 8 0; #X connect 31 0 7 0; #X connect 32 0 10 0; #X restore 64 360 pd vsig~ and vsnapshot~; #X text 161 392 convert image to signal and back; #N canvas 239 28 735 584 vrgb~ 0; #X obj 389 140 vframe 320 240; #X obj 389 171 vsig~; #X text 9 7 vrgb~: separate red \, green and blue channels; #X obj 240 239 vimport; #X obj 181 188 fs.frame; #X obj 188 77 reset; #X obj 188 102 t b b b; #X msg 234 77 bang; #X msg 277 77 \; pd dsp 1; #X obj 435 174 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 -1; #X obj 389 221 vrgb~; #X obj 389 345 vsnapshot~; #X obj 482 327 vframe 320 240; #X obj 482 277 reset; #X msg 482 302 bang; #X obj 389 387 fs.frame; #X msg 482 379 320x240; #X obj 427 269 *~ 1; #X obj 571 88 phasor~ 1; #X obj 571 112 avg~; #X obj 571 141 < 0.5; #X obj 571 166 * -1; #X obj 616 141 >= 0.5; #X obj 616 166 * 1; #X obj 571 191 +; #X floatatom 571 216 5 0 0; #X floatatom 571 63 5 0 0; #X msg 367 429 dock vrgb~ \, 25+300; #X obj 567 360 s vcopyexample; #X obj 389 304 vcolor~; #X obj 389 269 *~ 1; #X text 8 26 vcolor~: merge red \, green and blue channels; #X msg 41 152 yska320x240.jpg \, bang; #X connect 0 0 1 0; #X connect 0 0 3 1; #X connect 1 0 10 0; #X connect 1 1 11 1; #X connect 1 2 9 0; #X connect 4 0 3 0; #X connect 5 0 6 0; #X connect 5 0 7 0; #X connect 6 0 0 0; #X connect 6 1 32 0; #X connect 6 2 0 0; #X connect 7 0 6 0; #X connect 7 0 8 0; #X connect 7 0 6 0; #X connect 10 0 30 0; #X connect 10 1 17 0; #X connect 11 0 15 0; #X connect 12 0 11 2; #X connect 12 0 28 0; #X connect 13 0 14 0; #X connect 14 0 12 0; #X connect 14 0 16 0; #X connect 16 0 15 0; #X connect 17 0 29 1; #X connect 18 0 19 0; #X connect 19 0 22 0; #X connect 19 0 20 0; #X connect 20 0 21 0; #X connect 21 0 24 0; #X connect 22 0 23 0; #X connect 23 0 24 1; #X connect 24 0 25 0; #X connect 25 0 17 1; #X connect 25 0 30 1; #X connect 26 0 18 0; #X connect 27 0 15 0; #X connect 29 0 11 0; #X connect 30 0 29 0; #X connect 32 0 4 0; #X restore 64 440 pd vrgb~; #X text 162 439 separate red \, green and blue channels; #X text 159 144 ... click on "dock" on subpatches.; #X msg 118 86 reset; #X msg 339 82 minimizeall; #X text 159 122 start by clicking reset... and minimizeall; #N canvas 233 -13 700 660 vframeread~ 0; #X text 11 7 vframeread~ uses a sync-signal to read the image:; #X obj 212 308 vframe; #X obj 161 337 vimport; #X obj 71 297 fs.frame; #X obj 71 326 fs.copy; #X obj 71 353 fs.frame; #X msg 212 280 bang; #X obj 212 251 reset; #X msg 71 116 dock vframeread~ \, 10+100; #X text 13 47 drop a movie (.avi) here...; #X text 82 96 click here; #X obj 361 92 vframeread~; #X obj 361 312 vsnapshot~; #X obj 14 307 fps 5; #X floatatom 53 427 5 0 0; #X msg 81 270 next \, bang; #X obj 361 372 fs.frame; #X msg 361 469 dock vframeread~ \, 330+440; #X text 380 445 click here; #X obj 436 287 vframe; #X obj 436 237 reset; #X msg 436 262 bang; #X obj 361 344 vref; #X floatatom 482 130 5 0 0; #X obj 482 159 phasor~ 1; #X obj 491 259 vplugin; #X msg 491 235 black; #X text 107 426 set framerate; #X msg 482 104 14.9; #X obj 482 79 reset; #X text 534 130 see how it's done; #X text 17 595 This gives a better frame-rate \, compromizing the image quality..; #X obj 361 204 *~ 1; #X floatatom 388 179 5 0 0; #X msg 87 398 25; #X msg 524 104 25.19; #X msg 388 152 1; #X msg 419 152 -1; #X msg 53 398 15; #X connect 1 0 2 1; #X connect 1 0 11 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 5 0 2 0; #X connect 6 0 1 0; #X connect 6 0 5 0; #X connect 7 0 6 0; #X connect 8 0 3 0; #X connect 11 0 32 0; #X connect 12 0 22 1; #X connect 13 0 15 0; #X connect 13 0 5 0; #X connect 13 0 22 0; #X connect 14 0 13 0; #X connect 15 0 3 0; #X connect 17 0 16 0; #X connect 19 0 12 2; #X connect 20 0 21 0; #X connect 21 0 19 0; #X connect 22 0 16 0; #X connect 23 0 24 0; #X connect 23 0 26 0; #X connect 24 0 12 1; #X connect 24 0 11 0; #X connect 25 0 19 0; #X connect 26 0 25 0; #X connect 28 0 23 0; #X connect 29 0 28 0; #X connect 32 0 12 0; #X connect 33 0 32 1; #X connect 34 0 14 0; #X connect 35 0 23 0; #X connect 36 0 33 0; #X connect 37 0 33 0; #X connect 38 0 14 0; #X restore 64 487 pd vframeread~; #X text 195 486 read image with a sync-signal; #X obj 339 57 init; #X text 65 530 vdrawarray is documented on example-vdrawarray.; #X connect 3 0 2 0; #X connect 3 0 14 0; #X connect 14 0 2 1; #X connect 15 0 2 1; #X connect 19 0 15 0;