aboutsummaryrefslogtreecommitdiff
path: root/README
blob: eb53d0c864f80ff4f93d9698e6a85fdad86fe955 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
PDP - Pure Data Packet v0.7
a packet processing library for pure data

Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org>

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...

The goal (for now) is not to write a general purpose video processing 
tool for pd, the goal is to experiment with cache optimization, mmx 
integer processing, time and space feedback in video, nonlinear 
difference equations, cellular automata, computer vision, and other 
buzzwords...


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
* 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


Documentation:

Have a look in doc/ for documentation. It is not finished yet. More info 
in modules/README, scaf/README, the files in abstractions/ and test/ and 
the code. If you wan't to make your own pdp modules, you can take the 
simplest one (modules/pdp_add.c) as an example.
The file doc/reference.txt contains a list of all objects.


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 thread is on by default. If you
don't need audio, (i.e. if you are using 2 pd's, one for audio and one 
for video) having threads disabled can have advantages, since no pdp
frames are dropped and no extra delays are introduced. Even when you use 
audio and pdp in the same pd session, it is possible to run with threads 
disabled and without audio dropouts by tuning pd's fragsize and keeping
the frame rate low. 

* 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 video/movie input/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/		start of a decent set of document patches
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
test/		some test patches (pretty complete doc but cryptic)



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/01/19