PDP - Pure Data Packet v0.8.3 a packet processing library for pure data Copyright (c) by Tom Schouten 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. The GNU Public Licence can be found in the file COPYING ------------------------------------------------------------------ This external pd library is a framework for image/video processing (and other raw data packets) that is fast, simple and flexible and as much as possible compatible with the pd messaging system. Unfortunately, since the main idea is to "have something for myself to play with", i haven't payed much attention to portability or even compilablility yet. So if some of the requirements are missing on your system, you'll have to tinker a bit to get it working until i move to automatic configuration and building... Features: * packet formats: greyscale and YV12 encoded images, binary cellular automata (CA) * sources: noise, video4linux and quicktime (with audio), CA * sink: xvideo display * filters: convolution, biquad time, biquad space, CA * warping: rotate, zoom, stretch * transforms: colour translation/scaling, grey->palette * add, mul, mix, random pixel mix * utility objs: packet register, snapshot, trigger * packet delay line * minimal forth system for defining CA rules (only for mmx) Implementation: * mmx/c 16bit internal integer processing * sort of cache optimized (locality + minimal memory usage) Requirements: * pd * linux * a video4linux device for video input. special support for philips webcam included. * libquicktime (not quicktime4linux!) for quicktime playback. * an X display with XVideo extension for video display * libsdl Documentation: Have a look in doc/ for documentation. The file doc/reference.txt contains a list of all objects. doc/introduction has some basic facts on using pdp. doc/objects is a reference doc for all the objects and doc/examples contains some more example patches. The directory abstractions/ has some abstractions using the pdp objects (some specific filters) that can serve as example. For developer docs see modules/README, scaf/README. Building: Edit Makefile.config to reflect your system settings. For now this should be the pd dir, the pdp dir, a toggle for philips web cam support and the compilation target (linux / linux_mmx). type "make" in the top directory. Remember to type "make clean all" after editing Makefile.config Using: launch pd with the options -lib $PDP_DIR/pdp -path $PDP_DIR/abstractions Bugs: see the TODO file Additional Remarks: * If some of the modules don't compile due to some missing libraries, you can try to comment out the offending code in modules/Makefile and system/pdp.c If compilation or linking fails due to other reasons, please let me know. If you have both libquicktime and quicktime4linux installed, make sure pdp.pd_linux loads the right library. * The reason i use YV12 and not RGB is simple: it's faster, and for linear operations it doesn't make much difference. Most camera's and codecs use a luma/chroma system, and most video cards support hardware accellerated display. Note that in YUV, the u (Cb) and v (Cr) components can be negative, so saturation after multiplication with a positive (or negative) value produces not only black and white, but also red, green, blue and their complements. In short, in YUV, nonlinear operations have a different effect than in RGB. Another thing: all the spatial operations are not implemented "correctly" because of the subsampling involved. * The image packets are 16bit/component planar. This is to simplify the mmx code and to have a little more headroom and precision for processing. * Packets can be processed in a low priority thread with a dropping mechanism to prevent overload or audio drops, or they can be processed in the main pd thread. This can be set/unset by sending a "thread x" message to pdp_control. Processing in pdp thread is off by default. Use the pd thread for rock solid video timing. Increase the audio latency to avoid dropouts. If you want low audio latency, and don't care about a dropped video frame here and there, switch on the pdp thread. Note that when using the pdp thread, the control flow is no longer depth first. Additinal delays will be introduced. * There have been some requests for an osx port, but i wil probably not do this myself (at least not right now). However, i've ported all the mmx code to c, so it should work on other architectures as well. This should ease porting a bit for anyone who wants to give it a try. Also i've moved all the image conversion routines to pdp_llconv.c This means porting is reduced to writing new objects for the os specific stuff like movie playback&record and live video input. Thanks to Martin Pi we now have sdl support for video output. * Have a look at Yves Degoyon's PiDiP library. It contains some extra effects (from EffecTV and FreeJ), a quicktime recording object, some streaming modules, ... (the list is growing rapidly ;) see http://ydegoyon.free.fr/ * Some quicktime remarks: pdp_qt~ is still a bit experimental, you might try pdp_yqt in yves' lib to see if it works better for you. Also, it seems that libquicktime does not work with compressed headers. The suggested codec is jpeg (photo) and uncompressed audio with the same samplerate as the one pd is using. (hint: compile libquicktime with mmx jpeg support) * The cellular automata object (pdp_ca) is now moved to a separate lib. It requires mmx to be compiled. see the scaf/ dir. * New versions of this package can be found at http://zwizwa.fartit.com/pd/pdp Experimental relases are in the subdirectory test/ Directory structure: abstractions/ some abstractions that use the pdp objects doc/introduction/ getting started with pdp doc/examples/ some example patches doc/objects/ pd style reference documentation debug/ debug scripts include/ header files modules/ pdp module code scaf/ CA extension lib (needs to be compiled separately) system/ core pdp system system/mmx/ mmx assembler files Please let me know if you discover a bug or think something doesn't work right. Code, documentation or example patches are more than welcome of course. Have Fun, Tom last modified: 2003/02/03