aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/Makefile20
-rw-r--r--modules/README30
-rw-r--r--modules/generic/Makefile15
-rw-r--r--modules/generic/README2
-rw-r--r--modules/generic/pdp_convert.c104
-rw-r--r--modules/generic/pdp_del.c193
-rw-r--r--modules/generic/pdp_description.c98
-rw-r--r--modules/generic/pdp_forthproc.c244
-rw-r--r--modules/generic/pdp_inspect.c124
-rw-r--r--modules/generic/pdp_loop.c296
-rw-r--r--modules/generic/pdp_rawin.c299
-rw-r--r--modules/generic/pdp_rawout.c320
-rw-r--r--modules/generic/pdp_reg.c168
-rw-r--r--modules/generic/pdp_route.c146
-rw-r--r--modules/generic/pdp_snap.c120
-rw-r--r--modules/generic/pdp_trigger.c192
-rw-r--r--modules/generic/pdp_udp_receive.c203
-rw-r--r--modules/generic/pdp_udp_send.c336
-rw-r--r--modules/image_basic/Makefile20
-rw-r--r--modules/image_basic/README5
-rw-r--r--modules/image_basic/pdp_add.c109
-rw-r--r--modules/image_basic/pdp_bq.c462
-rw-r--r--modules/image_basic/pdp_cheby.c189
-rw-r--r--modules/image_basic/pdp_constant.c162
-rw-r--r--modules/image_basic/pdp_conv.c212
-rw-r--r--modules/image_basic/pdp_gain.c111
-rw-r--r--modules/image_basic/pdp_logic.c252
-rw-r--r--modules/image_basic/pdp_mix.c165
-rw-r--r--modules/image_basic/pdp_mul.c85
-rw-r--r--modules/image_basic/pdp_noise.c160
-rw-r--r--modules/image_basic/pdp_plasma.c166
-rw-r--r--modules/image_basic/pdp_randmix.c113
-rw-r--r--modules/image_basic/pdp_stateless.c185
-rw-r--r--modules/image_basic/pdp_zoom.c221
-rw-r--r--modules/image_io/Makefile11
-rw-r--r--modules/image_io/README2
-rw-r--r--modules/image_io/pdp_glx.c558
-rw-r--r--modules/image_io/pdp_qt.c974
-rw-r--r--modules/image_io/pdp_sdl.c510
-rw-r--r--modules/image_io/pdp_v4l.c794
-rw-r--r--modules/image_io/pdp_xv.c300
-rw-r--r--modules/image_special/Makefile15
-rw-r--r--modules/image_special/README2
-rw-r--r--modules/image_special/pdp_array.c194
-rw-r--r--modules/image_special/pdp_chrot.c144
-rw-r--r--modules/image_special/pdp_cog.c243
-rw-r--r--modules/image_special/pdp_grey2mask.c195
-rw-r--r--modules/image_special/pdp_histo.c415
-rw-r--r--modules/image_special/pdp_scale.c277
-rw-r--r--modules/image_special/pdp_scan.c231
-rw-r--r--modules/image_special/pdp_scanxy.c207
-rw-r--r--modules/image_special/pdp_scope.c317
-rw-r--r--modules/image_special/pdp_slice_cut.c310
-rw-r--r--modules/image_special/pdp_slice_glue.c215
-rw-r--r--modules/matrix_basic/Makefile12
-rw-r--r--modules/matrix_basic/README5
-rw-r--r--modules/matrix_basic/clusterstuff.c540
-rw-r--r--modules/matrix_basic/pdp_mat_lu.c143
-rw-r--r--modules/matrix_basic/pdp_mat_mul.c308
-rw-r--r--modules/matrix_basic/pdp_mat_vec.c213
-rw-r--r--modules/test/Makefile13
-rw-r--r--modules/test/README1
-rw-r--r--modules/test/pdp_dpd_test.c104
63 files changed, 0 insertions, 12780 deletions
diff --git a/modules/Makefile b/modules/Makefile
deleted file mode 100644
index dfafb76..0000000
--- a/modules/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# build subdirs
-current:
- make -C generic
- make -C image_basic
- make -C image_io
- make -C image_special
- make -C matrix_basic
- make -C test
-
-
-clean:
- make -C generic clean
- make -C image_basic clean
- make -C image_io clean
- make -C image_special clean
- make -C matrix_basic clean
- make -C test clean
- rm -f *~
- rm -f *.o
-
diff --git a/modules/README b/modules/README
deleted file mode 100644
index 54f816c..0000000
--- a/modules/README
+++ /dev/null
@@ -1,30 +0,0 @@
-This file describes the protocol used for communicating packets.
-See include/pdp.h and the sources in this directory for more info.
-
-There are 3 kinds of pdp messages:
-
-[pdp register_ro <packet_id>]
-[pdp register_rw <packet_id>]
-[pdp process]
-
-Together they form the pdp protocol. An object can receive a packet
-by catching the 3 kinds of messages:
-
-When a register_ro message is received, the object can call
-pdp_packet_copy_ro(packet) to reserve a read only copy for itself.
-
-The same goes for handling the register_rw message. You can
-reserve a read/write copy by using pdp_packet_copy_rw(packet)
-
-When a process message is received, the object is allowed to start
-processing the packet data end send the resulting packet(s) out.
-
-To send out a packet, use the pdp_packet_pass_if_valid(outlet, &packet)
-method. It passes a packet, and sets the reference to -1 (the undefined
-packet id).
-
-
-If you want to write pdp externs, consider using the pdp_base object
-to derive your object from. Have a look at pdp_add, pdp_gain, pdp_noise
-to see how to do this.
-
diff --git a/modules/generic/Makefile b/modules/generic/Makefile
deleted file mode 100644
index d075b3e..0000000
--- a/modules/generic/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-current: all_modules
-
-include ../../Makefile.config
-
-PDP_MOD = pdp_reg.o pdp_del.o pdp_snap.o pdp_trigger.o \
- pdp_route.o pdp_inspect.o pdp_loop.o pdp_description.o pdp_convert.o \
- pdp_forthproc.o
-
-# build generic modules
-all_modules: $(PDP_MOD)
-
-clean:
- rm -f *~
- rm -f *.o
-
diff --git a/modules/generic/README b/modules/generic/README
deleted file mode 100644
index 2c8bff0..0000000
--- a/modules/generic/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains generic packet processors (i.e. containers).
-Should work with any packet type.
diff --git a/modules/generic/pdp_convert.c b/modules/generic/pdp_convert.c
deleted file mode 100644
index cc7dd8c..0000000
--- a/modules/generic/pdp_convert.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-
-
-typedef struct pdp_convert_struct
-{
- t_object x_obj;
- t_symbol *x_type_mask;
- t_outlet *x_outlet0;
- int x_packet0;
-
-} t_pdp_convert;
-
-
-
-static void pdp_convert_type_mask(t_pdp_convert *x, t_symbol *s)
-{
- x->x_type_mask = s;
-}
-
-static void pdp_convert_input_0(t_pdp_convert *x, t_symbol *s, t_floatarg f)
-{
- int p = (int)f;
- int passes, i;
-
- if (s== gensym("register_ro")){
- pdp_packet_mark_unused(x->x_packet0);
- if (x->x_type_mask->s_name[0])
- x->x_packet0 = pdp_packet_convert_ro(p, pdp_gensym(x->x_type_mask->s_name));
- else
- x->x_packet0 = pdp_packet_copy_ro(p);
- }
-
-
- if ((s == gensym("process")) && (-1 != x->x_packet0)){
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet0);
- }
-}
-
-
-t_class *pdp_convert_class;
-
-
-
-void pdp_convert_free(t_pdp_convert *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-void *pdp_convert_new(t_symbol *s)
-{
- t_pdp_convert *x = (t_pdp_convert *)pd_new(pdp_convert_class);
-
- x->x_type_mask = s;
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
- x->x_packet0 = -1;
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_convert_setup(void)
-{
-
-
- pdp_convert_class = class_new(gensym("pdp_convert"), (t_newmethod)pdp_convert_new,
- (t_method)pdp_convert_free, sizeof(t_pdp_convert), 0, A_DEFSYMBOL, A_NULL);
-
-
- class_addmethod(pdp_convert_class, (t_method)pdp_convert_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addsymbol(pdp_convert_class, (t_method)pdp_convert_type_mask);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_del.c b/modules/generic/pdp_del.c
deleted file mode 100644
index 4b51023..0000000
--- a/modules/generic/pdp_del.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-
-
-typedef struct pdp_del_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
- t_outlet **x_outlet;
-
- int *x_packet;
- int x_order;
- int x_head;
- int x_delay;
-} t_pdp_del;
-
-
-
-
-
-static void pdp_del_input_0(t_pdp_del *x, t_symbol *s, t_floatarg f)
-{
- int in;
- int out;
- int packet;
-
- /* if this is a register_ro message or register_rw message, register with packet factory */
- /* if this is a process message, start the processing + propagate stuff to outputs */
-
- if (s == gensym("register_ro")){
- in = (x->x_head % x->x_order);
- //post("pdp_del: marking unused packed id=%d on loc %d", x->x_packet[0], in);
- pdp_packet_mark_unused(x->x_packet[in]);
- packet = pdp_packet_copy_ro((int)f);
-
-
- // TODO TODO TODO !!!!
-
- //pdp_packet_print_debug((int)f);
-
-
-
-
- x->x_packet[in] = packet;
- //post("pdp_del: writing packed id=%d on loc %d", packet, in);
- }
- else if (s == gensym("process")){
- out = (((x->x_head + x->x_delay)) % x->x_order);
- packet = x->x_packet[out];
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet[out]);
-
-/*
- if (-1 != packet){
- //post("pdp_del: packet %d has id %d", out, packet);
- pdp_packet_mark_unused(packet);
- outlet_pdp(x->x_outlet0, packet);
- x->x_packet[out] = -1;
- }
-
-
- else {
- //post("pdp_del: packet %d is empty", out);
- }
-*/
-
- x->x_head = (x->x_head + x->x_order - 1) % x->x_order;
- }
-
-
-}
-
-
-
-
-
-static void pdp_del_delay(t_pdp_del *x, t_floatarg fdel)
-{
- int del = (int)fdel;
- if (del < 0) del = 0;
- if (del >= x->x_order) del = x->x_order - 1;
-
- x->x_delay = del;
-
-}
-
-static void pdp_del_reset(t_pdp_del *x)
-{
- int i;
- for (i=0; i<x->x_order; i++) {
- pdp_packet_mark_unused(x->x_packet[i]);
- x->x_packet[i] = -1;
- }
- x->x_head = 0;
-
-}
-
-static void pdp_del_debug(t_pdp_del *x)
-{
- int i;
- post ("order %d", x->x_order);
- post ("delay %d", x->x_delay);
- post ("head %d", x->x_head);
- for (i=0; i<x->x_order; i++) {
- post("%d ", x->x_packet[i]);
- }
-}
-
-static void pdp_del_free(t_pdp_del *x)
-{
- pdp_del_reset(x);
- pdp_dealloc (x->x_packet);
-}
-
-t_class *pdp_del_class;
-
-
-
-void *pdp_del_new(t_floatarg forder, t_floatarg fdel)
-{
- int order = (int)forder;
- int del;
- int logorder;
- int i;
- t_pdp_del *x = (t_pdp_del *)pd_new(pdp_del_class);
-
- del = order;
- order++;
-
- if (del < 0) del = 0;
- if (order <= 2) order = 2;
-
- //post("pdp_del: order = %d", order);
-
- x->x_order = order;
- x->x_packet = (int *)pdp_alloc(sizeof(int)*order);
- for(i=0; i<order; i++) x->x_packet[i] = -1;
- x->x_delay = del;
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("delay"));
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_del_setup(void)
-{
-
-
- pdp_del_class = class_new(gensym("pdp_del"), (t_newmethod)pdp_del_new,
- (t_method)pdp_del_free, sizeof(t_pdp_del), 0, A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_del_class, (t_method)pdp_del_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_del_class, (t_method)pdp_del_delay, gensym("delay"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_del_class, (t_method)pdp_del_reset, gensym("reset"), A_NULL);
-
- class_addmethod(pdp_del_class, (t_method)pdp_del_debug, gensym("_debug"), A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_description.c b/modules/generic/pdp_description.c
deleted file mode 100644
index 7da684b..0000000
--- a/modules/generic/pdp_description.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-
-
-
-typedef struct pdp_description_struct
-{
- t_object x_obj;
- t_outlet *x_outlet;
-
-} t_pdp_description;
-
-
-
-
-static void pdp_description_input_pdp(t_pdp_description *x, t_symbol *s, t_floatarg f)
-{
- int p = (int)f;
- t_symbol *rro = pdp_sym_rro();
-
- if (rro == s){
- outlet_symbol(x->x_outlet, gensym(pdp_packet_get_description(p)->s_name));
- }
-}
-
-static void pdp_description_input_dpd(t_pdp_description *x, t_symbol *s, t_floatarg f)
-{
- int p = (int)f;
- t_symbol *ins = pdp_sym_ins();
-
- if (ins == s){
- outlet_symbol(x->x_outlet, gensym(pdp_packet_get_description(p)->s_name));
- }
-}
-
-
-static void pdp_description_free(t_pdp_description *x)
-{
-
-}
-
-t_class *pdp_description_class;
-
-
-
-static void *pdp_description_new(t_symbol *s, int argc, t_atom *argv)
-{
- t_pdp_description *x = (t_pdp_description *)pd_new(pdp_description_class);
-
- x->x_outlet = outlet_new(&x->x_obj, &s_symbol);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_description_setup(void)
-{
-
-
- pdp_description_class = class_new(gensym("pdp_description"), (t_newmethod)pdp_description_new,
- (t_method)pdp_description_free, sizeof(t_pdp_description), 0, A_NULL);
-
- class_addmethod(pdp_description_class, (t_method)pdp_description_input_pdp, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_description_class, (t_method)pdp_description_input_dpd, gensym("dpd"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_forthproc.c b/modules/generic/pdp_forthproc.c
deleted file mode 100644
index 011396f..0000000
--- a/modules/generic/pdp_forthproc.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-/*
-
-example object definitions:
-
-; stack: (mix_float in_packet state_packet)
-
-(motion-blur
- ((in 1) (feedback 0))
- ((out 0))
- (ip ip 0.0)
- (dup down mix dup down down))
-
-
-; stack: (ouput_packet packet_type)
-
-(noise-gen
- ((bang -1) (type 1))
- ((out 0))
- (image/YCrCb/320x240 ip)
- (dup noise))
-
-; constraints:
-; if a processor accepts more than one atom message (float, list, pdp)
-; of the same type they MUST be remapped to other inlets
-
-(pd-mappings
- (motion-blur ((in 0) (feedback 1) (out 0)))
- (noise ((out 0))))
-
-
-*/
-
-
-#include "pdp.h"
-#include "pdp_forth.h"
-
-#define MAXINLETS 4
-
-/* this object instantiates a forth processor */
-
-typedef struct pdp_forthproc_struct
-{
- t_object x_obj;
- t_pdp_list *x_processor; // the processor definition
-
-
- t_pdp_list *x_passive_stack; // we're still into thread processing
- t_pdp_list *x_stack;
- t_pdp_list *x_program;
-
-} t_pdp_forthproc;
-
-
-
-static int _check_portlist(t_pdp_list *l)
-{
- t_pdp_atom *a;
- post ("number of ports = %d", l->elements);
- for (a = l->first; a; a=a->next){
- t_pdp_atom *b;
- if (a->t != a_list) goto error;
- if (a->w.w_list->elements != 2) goto error;
- b = a->w.w_list->first;
- if ((b->t != a_symbol) && (b->t != a_int)) goto error;
- b = b->next;
- if (b->t != a_int) goto error;
- }
- post ("port mappings:");
- for (a = l->first; a; a=a->next) pdp_list_print(a->w.w_list);
- return 1;
- error:
- return 0;
-}
-
-static int _check_processor(t_pdp_list *p)
-{
- t_pdp_atom *a;
- t_pdp_list *l;
-
- post ("list elements = %d", p->elements);
- if (p->elements != 4) goto error;
- for (a=p->first; a; a=a->next) if (a->t != a_list) goto error;
- post ("all elements are lists: OK");
-
- a = p->first;
- post ("checking inlets");
- if (!_check_portlist(a->w.w_list)) goto error;
-
- a = a->next;
- post ("checking outlets");
- if (!_check_portlist(a->w.w_list)) goto error;
-
- a = a->next; post ("init program:"); pdp_list_print(a->w.w_list);
- a = a->next; post ("loop program:"); pdp_list_print(a->w.w_list);
-
-
- return 1;
-
- error:
- post("not a valid processor");
- return 0;
-}
-
-/* this function maps an input symbol to a type (how to interpret the
- anything message) and a stack index */
-static inline void pdp_forthproc_map_symbol(t_pdp_forthproc *x, t_symbol *s,
- t_pdp_word_type *t, int *i)
-{
-}
-
-/* this function stores a new item in an index on the stack
- and executes the forth process if this is an active location */
-static inline void pdp_forthproc_write_stack(t_pdp_forthproc *x, int i, t_pdp_word w)
-{
-}
-
-static void pdp_forthproc_anything(t_pdp_forthproc *x, t_symbol *s, int argc, t_atom *argv)
-{
- /* if the symbol's length is one character, it's a remapped input.
- this instance contains a mapping from symbol->(type, stack entry) */
-
- t_pdp_word_type type = a_undef;
- t_pdp_word word = (t_pdp_word)0;
- int index = -1;
-
- /* determine what we got and where we need to put it */
- pdp_forthproc_map_symbol(x, s, &type, &index);
-
- /* interprete the anything message according to expected type.
- and put the result in w */
-
- /* TODO: put pd list <-> pdp list code in core (also in pdp_guile) */
- switch(type){
- case a_float:
- case a_int:
- case a_symbol:
- case a_list:
- case a_packet:
- default:
- post("got %s, and dunno what to do with it", s->s_name);
- return;
-
- }
-
- /* write the word to the stack
- and run the word if this was an active location */
- pdp_forthproc_write_stack(x, index, word);
-
-}
-
-static void pdp_forthproc_free(t_pdp_forthproc *x)
-{
- pdp_tree_strip_packets(x->x_stack);
- pdp_tree_free(x->x_stack);
-}
-
-t_class *pdp_forthproc_class;
-
-
-void *pdp_forthproc_new(t_symbol *s)
-{
- t_pdp_forthproc *x;
-
- /* get processor */
- t_pdp_symbol *procname = pdp_gensym(s->s_name);
- if (!procname->s_processor) return 0;
-
- /* allocate */
- x = (t_pdp_forthproc *)pd_new(pdp_forthproc_class);
- x->x_processor = procname->s_processor;
- post("pdp_forthproc %s", s->s_name);
- pdp_list_print(x->x_processor);
-
-
- if (_check_processor(x->x_processor)) post ("processor OK");
-
- /* create state stack */
- x->x_stack = pdp_stack_new();
- x->x_passive_stack = pdp_stack_new();
- pdp_forth_execute_def(x->x_stack, x->x_processor->first->next->next->w.w_list);
- pdp_forth_execute_def(x->x_passive_stack, x->x_processor->first->next->next->w.w_list);
- post("initial stack:");
- pdp_list_print(x->x_stack);
-
-
- /* create inlets from description */
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_bang, gensym("A"));
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_bang, gensym("B"));
-
-
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_forthproc_setup(void)
-{
- int i;
- char iname[] = "i1";
- char def[] = "(((0 1) (1 0)) ((0 0)) (ip ip 0.0) (dup down mix dup down down))";
-
- /* create a test processor */
- pdp_gensym("testproc")->s_processor = pdp_forth_compile_def(def);
-
- /* create a standard pd class */
- pdp_forthproc_class = class_new(gensym("pdp_forthproc"), (t_newmethod)pdp_forthproc_new,
- (t_method)pdp_forthproc_free, sizeof(t_pdp_forthproc), 0, A_SYMBOL, A_NULL);
-
- /* add global message handler */
- class_addanything(pdp_forthproc_class, (t_method)pdp_forthproc_anything);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_inspect.c b/modules/generic/pdp_inspect.c
deleted file mode 100644
index b669475..0000000
--- a/modules/generic/pdp_inspect.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-
-/* adapted from the pd trigger object */
-
-#define TR_BANG 0
-#define TR_FLOAT 1
-#define TR_SYMBOL 2
-#define TR_POINTER 3
-#define TR_LIST 4
-#define TR_ANYTHING 5
-#define TR_PDP 6
-
-/*
-
-$$$TODO: emplement so that it behaves like the standard trigger object
-
-i.e. [trigger bang pdp pdp bang pdp]
-
-register_ro and register_rw messages pass right trough,
-since they're not action events, only configure events.
-a bang is made equivalent to a process event.
-
-*/
-
-typedef struct pdp_inspect_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet;
-
-} t_pdp_inspect;
-
-
-
-
-static void pdp_inspect_input_0(t_pdp_inspect *x, t_symbol *s, t_floatarg f)
-{
- t_atom atom[2];
- t_symbol *pdp = gensym("pdp");
- t_symbol *prc = gensym("process");
- t_symbol *rro = gensym("register_ro");
- int i;
-
-
- /* if there is a reg_ro, shortcut the right outlet */
- if (s == rro){
- SETSYMBOL(atom+0, s);
- SETFLOAT(atom+1, f);
- outlet_anything(x->x_outlet, pdp, 2, atom);
- SETSYMBOL(atom+0, prc);
- outlet_anything(x->x_outlet, pdp, 1, atom);
- }
-
-
-}
-
-
-
-static void pdp_inspect_free(t_pdp_inspect *x)
-{
-
-}
-
-t_class *pdp_inspect_class;
-
-
-
-static void *pdp_inspect_new(void)
-{
- t_pdp_inspect *x = (t_pdp_inspect *)pd_new(pdp_inspect_class);
-
-
- x->x_outlet = outlet_new(&x->x_obj, &s_anything);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_inspect_setup(void)
-{
-
-
- pdp_inspect_class = class_new(gensym("pdp_inspect_ro"), (t_newmethod)pdp_inspect_new,
- (t_method)pdp_inspect_free, sizeof(t_pdp_inspect), 0, A_GIMME, A_NULL);
-
- class_addcreator((t_newmethod)pdp_inspect_new, gensym("pdp_t"), A_GIMME, 0);
-
- class_addmethod(pdp_inspect_class, (t_method)pdp_inspect_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_loop.c b/modules/generic/pdp_loop.c
deleted file mode 100644
index 259eb8f..0000000
--- a/modules/generic/pdp_loop.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-/*
-
- pdp_loop: a looping packet delay line
- messages:
- record x: start recording at position x (default = 0)
- stop: stop recording
- float: output packet at position
- bang: output next packet
- rewind: rewind
- loop: set looping mode
-
-*/
-
-
-#include "pdp.h"
-#include "pdp_internals.h"
-
-
-typedef struct pdp_loop_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
- t_outlet *x_outlet1;
-
- int *x_packet;
- int x_order; /* size of the packet loop */
- int x_play_head; /* next position to play back */
- int x_record_head; /* next position to record to */
-
- int x_loop;
- int x_recording_frames; /* nb frames left to record */
- //int x_recording_shot; /* single frame recording is on */
-} t_pdp_loop;
-
-
-
-
-
-static void pdp_loop_input_0(t_pdp_loop *x, t_symbol *s, t_floatarg f)
-{
- int in;
- int out;
- int packet;
-
-
- /* if recording is off, ignore packet */
- if ((!x->x_recording_frames)) return;
-
- /* store a packet on register ro */
- if (s == gensym("register_ro")){
-
- /* delete old & store new */
- in = x->x_record_head; //% x->x_order;
- pdp_packet_mark_unused(x->x_packet[in]);
- packet = pdp_packet_copy_ro((int)f);
- x->x_packet[in] = packet;
-
- /* advance head & decrease record counter */
- x->x_recording_frames--;
- x->x_record_head++;
-
- /* turn off recording if we are at the end */
- if (x->x_record_head == x->x_order) x->x_recording_frames = 0;
- }
-}
-
-
-static void pdp_loop_bang(t_pdp_loop *x){
- int out;
- int packet;
-
- out = x->x_play_head;
-
- /* don't play if we're at the end of the sequence and looping is disabled */
- if ((!x->x_loop) && (out >= x->x_order)) return;
-
- /* wrap index */
- out %= x->x_order;
-
- /* output the current packet */
- packet = x->x_packet[out];
- outlet_float(x->x_outlet1, (float)out); // output location
- if (-1 != packet) outlet_pdp(x->x_outlet0, packet); // output packet
-
- /* advance playback head */
- x->x_play_head++;
-
-}
-
-
-
-
-
-
-static void pdp_loop_reset(t_pdp_loop *x)
-{
- int i;
- for (i=0; i<x->x_order; i++) {
- pdp_packet_mark_unused(x->x_packet[i]);
- x->x_packet[i] = -1;
- }
- x->x_play_head = 0;
- x->x_record_head = 0;
-
-}
-
-static void pdp_loop_record(t_pdp_loop *x, t_floatarg fstart, t_floatarg fdur)
-{
- int istart = (int)fstart;
- int idur = (int)fdur;
- istart %= x->x_order;
- if (istart<0) istart+= x->x_order;
- if (idur <= 0) idur = x->x_order - istart;
-
- x->x_record_head = istart;
- x->x_recording_frames = idur;
-}
-
-static void pdp_loop_store(t_pdp_loop *x, t_floatarg f)
-{
- int i = (int)f;
- i %= x->x_order;
- if (i<0) i+= x->x_order;
-
- x->x_record_head = i;
- x->x_recording_frames = 1;
-}
-
-static void pdp_loop_seek(t_pdp_loop *x, t_floatarg f)
-{
- int i = (int)f;
- i %= x->x_order;
- if (i<0) i+= x->x_order;
-
- x->x_play_head = i;
-}
-
-static void pdp_loop_seek_hot(t_pdp_loop *x, t_floatarg f)
-{
- pdp_loop_seek(x, f);
- pdp_loop_bang(x);
-}
-
-
-static void pdp_loop_stop(t_pdp_loop *x)
-{
- x->x_recording_frames = 0;
-}
-
-static void pdp_loop_loop(t_pdp_loop *x, t_floatarg f)
-{
- if (f == 0.0f) x->x_loop = 0;
- if (f == 1.0f) x->x_loop = 1;
-
-}
-static void pdp_loop_free(t_pdp_loop *x)
-{
- pdp_loop_reset(x);
- pdp_dealloc (x->x_packet);
-}
-
-static int pdp_loop_realsize(float f)
-{
- int order = (int)f;
- if (order <= 2) order = 2;
- return order;
-}
-
-
-static void pdp_loop_resize(t_pdp_loop *x, t_floatarg f)
-{
- int i;
- int order = pdp_loop_realsize(f);
- int *newloop;
-
- /* if size didn't change, do nothing */
- if (x->x_order == order) return;
-
- /* create new array */
- newloop = (int *)pdp_alloc(sizeof(int) * order);
-
-
- /* extend it */
- if (x->x_order < order){
-
- /* copy old packets */
- for (i=0; i<x->x_order; i++) newloop[i] = x->x_packet[i];
-
- /* loop extend the rest */
- for (i=x->x_order; i<order; i++) newloop[i] = pdp_packet_copy_ro(x->x_packet[i % x->x_order]);
-
- }
-
- /* or shrink it */
- else {
- /* copy part of old packets */
- for (i=0; i<order; i++) newloop[i] = x->x_packet[i];
-
- /* delete the other part of old packets */
- for (i=order; i<x->x_order; i++) pdp_packet_mark_unused(x->x_packet[i]);
-
- /* adjust heads */
- x->x_play_head %= order;
- x->x_record_head %= order;
-
- }
-
- /* delete old line & store new */
- pdp_dealloc (x->x_packet);
- x->x_packet = newloop;
- x->x_order = order;
-
-
-}
-
-
-t_class *pdp_loop_class;
-
-
-
-void *pdp_loop_new(t_floatarg f)
-{
- int i;
- int order = pdp_loop_realsize(f);
- t_pdp_loop *x = (t_pdp_loop *)pd_new(pdp_loop_class);
-
- x->x_order = order;
- x->x_packet = (int *)pdp_alloc(sizeof(int)*order);
- for(i=0; i<order; i++) x->x_packet[i] = -1;
-
- x->x_play_head = 0;
- x->x_record_head = 0;
- x->x_recording_frames = 0;
-
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("seek"));
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
- x->x_outlet1 = outlet_new(&x->x_obj, &s_anything);
-
- x->x_loop = 1;
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_loop_setup(void)
-{
-
-
- pdp_loop_class = class_new(gensym("pdp_loop"), (t_newmethod)pdp_loop_new,
- (t_method)pdp_loop_free, sizeof(t_pdp_loop), 0, A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_record, gensym("record"), A_DEFFLOAT, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_store, gensym("store"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_reset, gensym("reset"), A_NULL);
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_bang, gensym("bang"), A_NULL);
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_stop, gensym("stop"), A_NULL);
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_seek, gensym("seek"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_resize, gensym("size"), A_FLOAT, A_NULL);
- class_addmethod(pdp_loop_class, (t_method)pdp_loop_loop, gensym("loop"), A_FLOAT, A_NULL);
- class_addfloat(pdp_loop_class, (t_method)pdp_loop_seek_hot);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_rawin.c b/modules/generic/pdp_rawin.c
deleted file mode 100644
index 28ef8fb..0000000
--- a/modules/generic/pdp_rawin.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Pure Data Packet module. packet forth console
- * 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.
- *
- */
-
-
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <time.h>
-#include <fcntl.h>
-#include "pdp_pd.h"
-#include "pdp_debug.h"
-#include "pdp_list.h"
-#include "pdp_comm.h"
-#include "pdp_post.h"
-#include "pdp_packet.h"
-
-
-#define PERIOD 1.0f
-#define D if (1)
-
-
-
-
-/* raw input from a unix pipe */
-
-typedef struct rawin_struct
-{
- /* pd */
- t_object x_obj;
- t_outlet *x_outlet;
- t_outlet *x_sync_outlet;
- t_clock *x_clock;
-
- /* comm */
- t_pdp_list *x_queue; // packet queue
-
- /* thread */
- pthread_mutex_t x_mut;
- pthread_attr_t x_attr;
- pthread_t x_thread;
-
- /* sync */
- int x_giveup; // 1-> terminate reader thread
- int x_active; // 1-> reader thread is launched
- int x_done; // 1-> reader thread has exited
-
- /* config */
- t_symbol *x_pipe;
- t_pdp_symbol *x_type;
-
-} t_rawin;
-
-
-static inline void lock(t_rawin *x){pthread_mutex_lock(&x->x_mut);}
-static inline void unlock(t_rawin *x){pthread_mutex_unlock(&x->x_mut);}
-
-static void rawin_close(t_rawin *x);
-static void tick(t_rawin *x)
-{
- /* send all packets in queue to outlet */
- lock(x);
- while (x->x_queue->elements){
- outlet_pdp_atom(x->x_outlet, x->x_queue->first);
- pdp_list_pop(x->x_queue); // pop stale reference
- }
- unlock(x);
- clock_delay(x->x_clock, PERIOD);
-
- /* check if thread is done */
- if (x->x_done) rawin_close(x);
-
-}
-
-static void move_current_to_queue(t_rawin *x, int packet)
-{
- lock(x);
- pdp_list_add_back(x->x_queue, a_packet, (t_pdp_word)packet);
- unlock(x);
-}
-
-static void *rawin_thread(void *y)
-{
- int pipe;
- int packet = -1;
- t_rawin *x = (t_rawin *)y;
- int period_sec;
- int period_usec;
-
-
- //D pdp_post("pipe: %s", x->x_pipe->s_name);
- //D pdp_post("type: %s", x->x_type->s_name);
-
- /* open pipe */
- if (-1 == (pipe = open(x->x_pipe->s_name, O_RDONLY|O_NONBLOCK))){
- perror(x->x_pipe->s_name);
- goto exit;
- }
-
- /* main loop (packets) */
- while(1){
- void *data = 0;
- int left = -1;
-
- /* create packet */
- if (-1 != packet){
- pdp_post("WARNING: deleting stale packet");
- pdp_packet_mark_unused(packet);
- }
- packet = pdp_factory_newpacket(x->x_type);
- if (-1 == packet){
- pdp_post("ERROR: can't create packet. type = %s", x->x_type->s_name);
- goto exit;
- }
-
- /* fill packet */
- data = pdp_packet_data(packet);
- left = pdp_packet_data_size(packet);
- // D pdp_post("packet %d, data %x, size %d", packet, data, left);
-
- /* inner loop: pipe reads */
- while(left){
-
- fd_set inset;
- struct timeval tv = {0,10000};
-
- /* check if we need to stop */
- if (x->x_giveup){
- pdp_packet_mark_unused(packet);
- goto close;
- }
- /* select, with timeout */
- FD_ZERO(&inset);
- FD_SET(pipe, &inset);
- if (-1 == select(pipe+1, &inset, NULL,NULL, &tv)){
- pdp_post("select error");
- goto close;
- }
-
- /* if ready, read, else retry */
- if (FD_ISSET(pipe, &inset)){
- int bytes = read(pipe, data, left);
- if (!bytes){
- /* if no bytes are read, pipe is closed */
- goto close;
- }
- data += bytes;
- left -= bytes;
- }
- }
-
- /* move to queue */
- move_current_to_queue(x, packet);
- packet = -1;
-
-
-
- }
-
- close:
- /* close pipe */
- close(pipe);
-
-
- exit:
- x->x_done = 1;
- return 0;
-}
-
-
-
-static void rawin_type(t_rawin *x, t_symbol *type)
-{
- x->x_type = pdp_gensym(type->s_name);
-}
-
-static void rawin_open(t_rawin *x, t_symbol *pipe)
-{
- /* save pipe name if not empty */
- if (pipe->s_name[0]) {x->x_pipe = pipe;}
-
- if (x->x_active) {
- pdp_post("already open");
- return;
- }
- /* start thread */
- x->x_giveup = 0;
- x->x_done = 0;
- pthread_create(&x->x_thread, &x->x_attr, rawin_thread , x);
- x->x_active = 1;
-}
-
-static void rawin_close(t_rawin *x)
-{
-
- if (!x->x_active) return;
-
- /* stop thread: set giveup + wait */
- x->x_giveup = 1;
- pthread_join(x->x_thread, NULL);
- x->x_active = 0;
-
- /* notify */
- outlet_bang(x->x_sync_outlet);
- pdp_post("connection to %s closed", x->x_pipe->s_name);
-
-
-
-
-
-}
-
-static void rawin_free(t_rawin *x)
-{
- rawin_close(x);
- clock_free(x->x_clock);
- pdp_tree_strip_packets(x->x_queue);
- pdp_tree_free(x->x_queue);
-}
-
-t_class *rawin_class;
-
-
-static void *rawin_new(t_symbol *pipe, t_symbol *type)
-{
- t_rawin *x;
-
- pdp_post("%s %s", pipe->s_name, type->s_name);
-
- /* allocate & init */
- x = (t_rawin *)pd_new(rawin_class);
- x->x_outlet = outlet_new(&x->x_obj, &s_anything);
- x->x_sync_outlet = outlet_new(&x->x_obj, &s_anything);
- x->x_clock = clock_new(x, (t_method)tick);
- x->x_queue = pdp_list_new(0);
- x->x_active = 0;
- x->x_giveup = 0;
- x->x_done = 0;
- x->x_type = pdp_gensym("image/YCrCb/320x240"); //default
- x->x_pipe = gensym("/tmp/pdpraw"); // default
- pthread_attr_init(&x->x_attr);
- pthread_mutex_init(&x->x_mut, NULL);
- clock_delay(x->x_clock, PERIOD);
-
- /* args */
- rawin_type(x, type);
- if (pipe->s_name[0]) x->x_pipe = pipe;
-
- return (void *)x;
-
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_rawin_setup(void)
-{
- int i;
-
- /* create a standard pd class: [pdp_rawin pipe type] */
- rawin_class = class_new(gensym("pdp_rawin"), (t_newmethod)rawin_new,
- (t_method)rawin_free, sizeof(t_rawin), 0, A_DEFSYMBOL, A_DEFSYMBOL, A_NULL);
-
- /* add global message handler */
- class_addmethod(rawin_class, (t_method)rawin_type, gensym("type"), A_SYMBOL, A_NULL);
- class_addmethod(rawin_class, (t_method)rawin_open, gensym("open"), A_DEFSYMBOL, A_NULL);
- class_addmethod(rawin_class, (t_method)rawin_close, gensym("close"), A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_rawout.c b/modules/generic/pdp_rawout.c
deleted file mode 100644
index e1e9edf..0000000
--- a/modules/generic/pdp_rawout.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Pure Data Packet module. packet forth console
- * 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.
- *
- */
-
-
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <time.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <signal.h>
-#include "pdp_pd.h"
-#include "pdp_debug.h"
-#include "pdp_list.h"
-#include "pdp_comm.h"
-#include "pdp_post.h"
-#include "pdp_packet.h"
-
-
-#define D if (1)
-#define MAX_QUEUESIZE 4
-#define PIPE_BLOCKSIZE 4096
-
-
-
-
-/* raw input from a unix pipe */
-
-typedef struct rawout_struct
-{
- /* pd */
- t_object x_obj;
- //t_outlet *x_outlet;
- t_outlet *x_sync_outlet;
-
- /* comm */
- t_pdp_list *x_queue; // packet queue
-
- /* thread */
- pthread_mutex_t x_mut;
- pthread_attr_t x_attr;
- pthread_t x_thread;
-
- /* sync */
- int x_giveup; // 1-> terminate writer thread
- int x_active; // 1-> writer thread is launched
- int x_done; // 1-> writer thread has exited
-
- /* config */
- t_symbol *x_pipe;
- t_pdp_symbol *x_type;
-
-} t_rawout;
-
-
-static inline void lock(t_rawout *x){pthread_mutex_lock(&x->x_mut);}
-static inline void unlock(t_rawout *x){pthread_mutex_unlock(&x->x_mut);}
-
-static void rawout_close(t_rawout *x);
-static void pdp_in(t_rawout *x, t_symbol *s, t_float f)
-{
- /* save packet to pdp queue, if size is smaller than maxsize */
- if (s == S_REGISTER_RO){
- if (x->x_queue->elements < MAX_QUEUESIZE){
- int p = (int)f;
- p = pdp_packet_copy_ro(p);
- if (p != -1){
- lock(x);
- pdp_list_add_back(x->x_queue, a_packet, (t_pdp_word)p);
- unlock(x);
- }
- }
- else {
- pdp_post("pdp_rawout: dropping packet: (queue full)", MAX_QUEUESIZE);
- }
-
- }
-
- /* check if thread is done */
- if (x->x_done) rawout_close(x);
-
-}
-
-
-
-static void *rawout_thread(void *y)
-{
- int pipe;
- int packet = -1;
- t_rawout *x = (t_rawout *)y;
- int period_sec;
- int period_usec;
- sigset_t sigvec; /* signal handling */
-
- /* ignore pipe signal */
- sigemptyset(&sigvec);
- sigaddset(&sigvec,SIGPIPE);
- pthread_sigmask(SIG_BLOCK, &sigvec, 0);
-
- //D pdp_post("pipe: %s", x->x_pipe->s_name);
- //D pdp_post("type: %s", x->x_type->s_name);
-
- /* open pipe */
- if (-1 == (pipe = open(x->x_pipe->s_name, O_WRONLY|O_NONBLOCK))){
- perror(x->x_pipe->s_name);
- goto exit;
- }
-
- /* main loop (packets) */
- while(1){
- void *data = 0;
- int left = -1;
-
- /* try again if queue is empty */
- if (!x->x_queue->elements){
- /* check if we need to stop */
- if (x->x_giveup){
- goto close;
- }
- else {
- usleep(1000.0f); // sleep before polling again
- continue;
- }
- }
- /* get packet from queue */
- lock(x);
- packet = pdp_list_pop(x->x_queue).w_packet;
- unlock(x);
-
- /* send packet */
- data = pdp_packet_data(packet);
- left = pdp_packet_data_size(packet);
-
- /* inner loop: pipe reads */
- while(left){
-
- fd_set outset;
- struct timeval tv = {0,10000};
-
- /* check if we need to stop */
- if (x->x_giveup){
- pdp_packet_mark_unused(packet);
- goto close;
- }
-
- /* select, with timeout */
- FD_ZERO(&outset);
- FD_SET(pipe, &outset);
- if (-1 == select(pipe+1, NULL, &outset, NULL, &tv)){
- pdp_post("select error");
- goto close;
- }
-
- /* if ready, read, else retry */
- if (FD_ISSET(pipe, &outset)){
- int bytes = write(pipe, data, left);
- /* handle errors */
- if (bytes <= 0){
- perror(x->x_pipe->s_name);
- if (bytes != EAGAIN) goto close;
- }
- /* or update pointers */
- else{
- data += bytes;
- left -= bytes;
- //pdp_post("left %d", left);
- }
- }
- else {
- //pdp_post("retrying write");
- }
- }
-
- /* discard packet */
- pdp_packet_mark_unused(packet);
-
-
- }
-
- close:
- /* close pipe */
- close(pipe);
-
-
- exit:
- x->x_done = 1;
- return 0;
-}
-
-
-
-static void rawout_type(t_rawout *x, t_symbol *type)
-{
- x->x_type = pdp_gensym(type->s_name);
-}
-
-static void rawout_open(t_rawout *x, t_symbol *pipe)
-{
- /* save pipe name if not empty */
- if (pipe->s_name[0]) {x->x_pipe = pipe;}
-
- if (x->x_active) {
- pdp_post("already open");
- return;
- }
- /* start thread */
- x->x_giveup = 0;
- x->x_done = 0;
- pthread_create(&x->x_thread, &x->x_attr, rawout_thread , x);
- x->x_active = 1;
-}
-
-static void rawout_close(t_rawout *x)
-{
-
- if (!x->x_active) return;
-
- /* stop thread: set giveup + wait */
- x->x_giveup = 1;
- pthread_join(x->x_thread, NULL);
- x->x_active = 0;
-
- /* notify */
- outlet_bang(x->x_sync_outlet);
- pdp_post("connection to %s closed", x->x_pipe->s_name);
-
-
-
-
-
-}
-
-static void rawout_free(t_rawout *x)
-{
- rawout_close(x);
- pdp_tree_strip_packets(x->x_queue);
- pdp_tree_free(x->x_queue);
-}
-
-t_class *rawout_class;
-
-
-static void *rawout_new(t_symbol *pipe, t_symbol *type)
-{
- t_rawout *x;
-
- pdp_post("%s %s", pipe->s_name, type->s_name);
-
- /* allocate & init */
- x = (t_rawout *)pd_new(rawout_class);
- //x->x_outlet = outlet_new(&x->x_obj, &s_anything);
- x->x_sync_outlet = outlet_new(&x->x_obj, &s_anything);
- x->x_queue = pdp_list_new(0);
- x->x_active = 0;
- x->x_giveup = 0;
- x->x_done = 0;
- x->x_type = pdp_gensym("image/YCrCb/320x240"); //default
- x->x_pipe = gensym("/tmp/pdpraw"); // default
- pthread_attr_init(&x->x_attr);
- pthread_mutex_init(&x->x_mut, NULL);
-
- /* args */
- rawout_type(x, type);
- if (pipe->s_name[0]) x->x_pipe = pipe;
-
- return (void *)x;
-
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_rawout_setup(void)
-{
- int i;
-
- /* create a standard pd class: [pdp_rawout pipe type] */
- rawout_class = class_new(gensym("pdp_rawout"), (t_newmethod)rawout_new,
- (t_method)rawout_free, sizeof(t_rawout), 0, A_DEFSYMBOL, A_DEFSYMBOL, A_NULL);
-
- /* add global message handler */
- class_addmethod(rawout_class, (t_method)pdp_in,
- gensym("pdp"), A_SYMBOL, A_FLOAT, A_NULL);
-
- class_addmethod(rawout_class, (t_method)rawout_type, gensym("type"), A_SYMBOL, A_NULL);
- class_addmethod(rawout_class, (t_method)rawout_open, gensym("open"), A_DEFSYMBOL, A_NULL);
- class_addmethod(rawout_class, (t_method)rawout_close, gensym("close"), A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_reg.c b/modules/generic/pdp_reg.c
deleted file mode 100644
index 8b07c14..0000000
--- a/modules/generic/pdp_reg.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_png.h"
-#include "pdp_internals.h"
-
-
-typedef struct pdp_reg_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
- int x_packet0;
-
-} t_pdp_reg;
-
-
-static void pdp_reg_load_png(t_pdp_reg *x, t_pdp_symbol *s)
-{
- int packet = pdp_packet_bitmap_from_png_file(s->s_name);
- if (-1 == packet){
- post("pdp_reg: error loading png file %s", s->s_name);
- }
- else{
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = packet;
- }
-
-}
-
-static void pdp_reg_save_png(t_pdp_reg *x, t_pdp_symbol *s)
-{
- int newpacket = pdp_packet_convert_ro(x->x_packet0, pdp_gensym("bitmap/*/*"));
-
- if (-1 == newpacket){
- post("pdp_reg: nothing to save");
- return;
- }
-
- if (!(pdp_packet_bitmap_save_png_file(newpacket, s->s_name))){
- post("pdp_reg: error saving png file %s", s->s_name);
- }
-
- pdp_packet_mark_unused(newpacket);
-
-}
-
-
-static void pdp_reg_bang(t_pdp_reg *x)
-{
-
- if (-1 != x->x_packet0) outlet_pdp(x->x_outlet0, x->x_packet0);
-
-}
-
-
-
-static void pdp_reg_input_0(t_pdp_reg *x, t_symbol *s, t_floatarg f)
-{
-
- /* if this is a register_ro message or register_rw message, register with packet factory */
-
- /* if this is a process message, start the processing + propagate stuff to outputs */
-
- if (s == gensym("register_ro")){
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_copy_ro((int)f);
- //post("in0ro: requested %d, got %d", (int)f, x->x_packet0);
- }
- else if (s == gensym("process")){
- pdp_reg_bang(x);
-
- }
-
-
-}
-
-
-static void pdp_reg_input_1(t_pdp_reg *x, t_symbol *s, t_floatarg f)
-{
-
- /* if this is a register_ro message or register_rw message, register with packet factory */
-
- /* if this is a process message, start the processing + propagate stuff to outputs */
-
- if (s == gensym("register_ro")){
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_copy_ro((int)f);
- //post("in0ro: requested %d, got %d", (int)f, x->x_packet0);
- }
-
-}
-
-
-
-static void pdp_reg_free(t_pdp_reg *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-
-}
-
-t_class *pdp_reg_class;
-
-
-
-void *pdp_reg_new(void)
-{
- t_pdp_reg *x = (t_pdp_reg *)pd_new(pdp_reg_class);
-
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("pdp"), gensym("pdp1"));
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
- x->x_packet0 = -1;
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_reg_setup(void)
-{
-
-
- pdp_reg_class = class_new(gensym("pdp_reg"), (t_newmethod)pdp_reg_new,
- (t_method)pdp_reg_free, sizeof(t_pdp_reg), 0, A_NULL);
-
-
- class_addmethod(pdp_reg_class, (t_method)pdp_reg_bang, gensym("bang"), A_NULL);
-
- class_addmethod(pdp_reg_class, (t_method)pdp_reg_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_reg_class, (t_method)pdp_reg_input_1, gensym("pdp1"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_reg_class, (t_method)pdp_reg_save_png, gensym("save_png"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_reg_class, (t_method)pdp_reg_load_png, gensym("load_png"), A_SYMBOL, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_route.c b/modules/generic/pdp_route.c
deleted file mode 100644
index c410d1f..0000000
--- a/modules/generic/pdp_route.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_internals.h"
-
-// dynamic ????
-#define PDP_ROUTE_MAX_NB_OUTLETS 100
-
-typedef struct pdp_route_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet[PDP_ROUTE_MAX_NB_OUTLETS];
-
- int x_nb_outlets;
- int x_route;
- int x_route_next;
-
-
-} t_pdp_route;
-
-
-static void pdp_route_input_0(t_pdp_route *x, t_symbol *s, t_floatarg f)
-{
- t_atom atom[2];
- t_symbol *pdp = gensym("pdp");
-
-
- /* trigger on register_ro */
- if (s == gensym("register_ro")){
- x->x_route = x->x_route_next;
- }
-
- /* propagate the pdp message */
- SETSYMBOL(atom+0, s);
- SETFLOAT(atom+1, f);
- outlet_anything(x->x_outlet[x->x_route], pdp, 2, atom);
-
-}
-
-static void pdp_route_input_0_dpd(t_pdp_route *x, t_symbol *s, t_floatarg f)
-{
-
- /* trigger on accumulate */
- if (s == gensym("accumulate")){
- x->x_route = x->x_route_next;
- }
-
- /* propagate the dpd message */
- outlet_dpd(x->x_outlet[x->x_route], (int)f);
-
-}
-
-
-
-static void pdp_route_route(t_pdp_route *x, t_floatarg f)
-{
- int route = (int)f;
-
- if (route < 0) route = 0;
- if (route >= x->x_nb_outlets) route = x->x_nb_outlets - 1;
-
- x->x_route_next = route;
-
-}
-
-
-
-static void pdp_route_free(t_pdp_route *x)
-{
-
-}
-
-t_class *pdp_route_class;
-
-
-
-void *pdp_route_new(t_floatarg f)
-{
- int nboutlets = (int)f;
- int i;
-
- t_pdp_route *x = (t_pdp_route *)pd_new(pdp_route_class);
-
-
- if (nboutlets < 2) nboutlets = 2;
- if (nboutlets >= PDP_ROUTE_MAX_NB_OUTLETS) nboutlets = PDP_ROUTE_MAX_NB_OUTLETS - 1;
-
-
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("route"));
-
- x->x_nb_outlets = nboutlets;
- x->x_route = 0;
- x->x_route_next = 0;
-
- for (i=0; i<nboutlets; i++)
- x->x_outlet[i] = outlet_new(&x->x_obj, &s_anything);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_route_setup(void)
-{
-
-
- pdp_route_class = class_new(gensym("pdp_route"), (t_newmethod)pdp_route_new,
- (t_method)pdp_route_free, sizeof(t_pdp_route), 0, A_DEFFLOAT, A_NULL);
-
-
- class_addmethod(pdp_route_class, (t_method)pdp_route_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_route_class, (t_method)pdp_route_input_0_dpd, gensym("dpd"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_route_class, (t_method)pdp_route_route, gensym("route"), A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_snap.c b/modules/generic/pdp_snap.c
deleted file mode 100644
index 73ec26c..0000000
--- a/modules/generic/pdp_snap.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_internals.h"
-
-typedef struct pdp_snap_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
- int x_packet0;
- bool x_snapnext;
-
-} t_pdp_snap;
-
-
-static void pdp_snap_bang(t_pdp_snap *x)
-{
-
- if (-1 != x->x_packet0)
- outlet_pdp(x->x_outlet0, x->x_packet0);
-
-}
-
-
-
-
-static void pdp_snap_input_1(t_pdp_snap *x, t_symbol *s, t_floatarg f)
-{
-
- /* if this is a register_ro message or register_rw message, register with packet factory */
-
- /* if this is a process message, start the processing + propagate stuff to outputs */
-
- if (s == gensym("register_ro")){
- if(x->x_snapnext) {
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_copy_ro((int)f);
- x->x_snapnext = false;
- }
- }
-
-}
-
-static void pdp_snap_snap(t_pdp_snap *x)
-{
- x->x_snapnext = true;
-}
-
-static void pdp_snap_free(t_pdp_snap *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-
-}
-
-t_class *pdp_snap_class;
-
-
-
-void *pdp_snap_new(void)
-{
- t_pdp_snap *x = (t_pdp_snap *)pd_new(pdp_snap_class);
-
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("pdp"), gensym("pdp1"));
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
- x->x_packet0 = -1;
- x->x_snapnext = false;
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_snap_setup(void)
-{
-
-
- pdp_snap_class = class_new(gensym("pdp_snap"), (t_newmethod)pdp_snap_new,
- (t_method)pdp_snap_free, sizeof(t_pdp_snap), 0, A_NULL);
-
-
- class_addmethod(pdp_snap_class, (t_method)pdp_snap_bang, gensym("bang"), A_NULL);
- class_addmethod(pdp_snap_class, (t_method)pdp_snap_snap, gensym("snap"), A_NULL);
-
- class_addmethod(pdp_snap_class, (t_method)pdp_snap_input_1, gensym("pdp1"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_trigger.c b/modules/generic/pdp_trigger.c
deleted file mode 100644
index 4bac9d1..0000000
--- a/modules/generic/pdp_trigger.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_internals.h"
-
-/* adapted from the pd trigger object */
-
-#define TR_BANG 0
-#define TR_FLOAT 1
-#define TR_SYMBOL 2
-#define TR_POINTER 3
-#define TR_LIST 4
-#define TR_ANYTHING 5
-#define TR_PDP 6
-
-/*
-
-$$$TODO: emplement so that it behaves like the standard trigger object
-
-i.e. [trigger bang pdp pdp bang pdp]
-
-register_ro and register_rw messages pass right trough,
-since they're not action events, only configure events.
-a bang is made equivalent to a process event.
-
-*/
-
-typedef struct triggerout
-{
- int u_type; /* outlet type from above */
- t_outlet *u_outlet;
-} t_triggerout;
-
-
-typedef struct pdp_trigger_struct
-{
- t_object x_obj;
- t_float x_f;
-
- int x_n;
- t_triggerout *x_vec;
-
-} t_pdp_trigger;
-
-
-
-
-static void pdp_trigger_input_pdp(t_pdp_trigger *x, t_symbol *s, t_floatarg f)
-{
- t_atom atom[2];
- t_symbol *pdp = pdp_sym_pdp();
- t_symbol *prc = pdp_sym_prc();
- t_triggerout *u;
- int i;
-
- for (i = x->x_n, u = x->x_vec + i; u--, i--;){
- /* trigger bang outlet only when a process event is recieved */
- if ((u->u_type == TR_BANG) && (s == prc)){
- outlet_bang(u->u_outlet);
- }
- /* just pass the message if it is a pdp outlet */
- if ((u->u_type) == TR_PDP){
- SETSYMBOL(atom+0, s);
- SETFLOAT(atom+1, f);
- if (s == prc) outlet_anything(u->u_outlet, pdp, 1, atom);
- else outlet_anything(u->u_outlet, pdp, 2, atom);
-
- }
- }
-
-}
-
-static void pdp_trigger_input_dpd(t_pdp_trigger *x, t_symbol *s, t_floatarg f)
-{
- t_atom atom[2];
- t_symbol *dpd = pdp_sym_dpd();
- t_symbol *acc = pdp_sym_acc();
- t_triggerout *u;
- int i;
- int p = (int)f;
-
- for (i = x->x_n, u = x->x_vec + i; u--, i--;){
- /* trigger outlet only when an accumulate event is recieved */
- if (s == acc){
-
- /* output bang */
- if (u->u_type == TR_BANG) outlet_bang(u->u_outlet);
-
- /* output a complete dpd message if it is a pdp outlet */
- if ((u->u_type) == TR_PDP){
- outlet_dpd(u->u_outlet, p);
- }
- }
- }
-
-}
-
-
-static void pdp_trigger_free(t_pdp_trigger *x)
-{
- pdp_dealloc(x->x_vec);
-}
-
-t_class *pdp_trigger_class;
-
-
-
-static void *pdp_trigger_new(t_symbol *s, int argc, t_atom *argv)
-{
- t_pdp_trigger *x = (t_pdp_trigger *)pd_new(pdp_trigger_class);
- t_atom defarg[2], *ap;
- t_triggerout *u;
- int i;
-
-
- if (!argc)
- {
- argv = defarg;
- argc = 2;
- SETSYMBOL(&defarg[0], gensym("pdp"));
- SETSYMBOL(&defarg[1], gensym("bang"));
- }
-
- x->x_n = argc;
- x->x_vec = pdp_alloc(argc * sizeof(*x->x_vec));
-
- for (i = 0, ap = argv, u = x->x_vec; i < argc; u++, ap++, i++)
- {
- t_atomtype thistype = ap->a_type;
- char c;
- if (thistype == TR_SYMBOL) c = ap->a_w.w_symbol->s_name[0];
- else c = 0;
- if (c == 'p')
- u->u_type = TR_PDP,
- u->u_outlet = outlet_new(&x->x_obj, &s_anything);
- else if (c == 'b')
- u->u_type = TR_BANG, u->u_outlet = outlet_new(&x->x_obj, &s_bang);
- else
- {
- pd_error(x, "pdp_trigger: %s: bad type", ap->a_w.w_symbol->s_name);
- u->u_type = TR_BANG, u->u_outlet = outlet_new(&x->x_obj, &s_bang);
- }
- }
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_trigger_setup(void)
-{
-
-
- pdp_trigger_class = class_new(gensym("pdp_trigger"), (t_newmethod)pdp_trigger_new,
- (t_method)pdp_trigger_free, sizeof(t_pdp_trigger), 0, A_GIMME, A_NULL);
-
- class_addcreator((t_newmethod)pdp_trigger_new, gensym("pdp_t"), A_GIMME, 0);
-
- class_addmethod(pdp_trigger_class, (t_method)pdp_trigger_input_pdp, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_trigger_class, (t_method)pdp_trigger_input_dpd, gensym("dpd"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_udp_receive.c b/modules/generic/pdp_udp_receive.c
deleted file mode 100644
index 3d42466..0000000
--- a/modules/generic/pdp_udp_receive.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-/* this module sends receives an udp packet stream and converts to pdp packet */
-
-#include "pdp_net.h"
-#include "pdp.h"
-#include "pdp_resample.h"
-
-#define D if(0)
-
-typedef struct pdp_udp_receive_struct
-{
-
- t_object x_obj;
- t_float x_f;
-
- /* receiver object */
- t_pdp_udp_receiver *x_receiver;
-
-
- /* thread vars */
- pthread_attr_t x_attr;
- pthread_t x_thread;
- int x_exit_thread;
-
- /* packet queue */
- int x_index;
- int x_packet[2];
-
- /* polling clock */
- t_clock *x_clock;
- /* outlet */
- t_outlet *x_outlet0;
-
-} t_pdp_udp_receive;
-
-
-static void clock_tick(t_pdp_udp_receive *x)
-{
- /* poll for new packet */
-
- pdp_pass_if_valid(x->x_outlet0, &x->x_packet[!x->x_index]);
- clock_delay(x->x_clock, 1.0f);
-}
-
-
-
-
-static void *receive_thread(void *threaddata)
-{
- t_pdp_udp_receive *x = (t_pdp_udp_receive *)threaddata;
- t_pdp *pdp_header = 0;
- void *pdp_data = 0;
- int tmp_packet = -1;
- char *type = 0;
- unsigned int size = 0;
-
- /* listen for packets */
- while (!x->x_exit_thread){
-
-
- switch(pdp_udp_receiver_receive(x->x_receiver, 100)){
- case -1:
- /* error */
- goto exit;
- case 0:
- /* timeout */
- continue;
- case 1:
- /* data ready */
- break;
- }
-
- /* create a new packet */
- type = pdp_udp_receiver_type(x->x_receiver);
- tmp_packet = pdp_factory_newpacket(pdp_gensym(type));
- pdp_header = pdp_packet_header(tmp_packet);
- pdp_data = pdp_packet_data(tmp_packet);
-
- /* check if we were able to create the pdp packet */
- if (!(pdp_header && pdp_data)){
- post("pdp_netreceive: can't create packet (type %s)", type);
- pdp_udp_receiver_reset(x->x_receiver);
- continue;
- }
-
- /* check size */
- size = pdp_udp_receiver_size(x->x_receiver);
- if ((pdp_header->size - PDP_HEADER_SIZE) != size){
- pdp_packet_mark_unused(tmp_packet);
- tmp_packet = -1;
- post("pdp_netreceive: invalid packet size %d (pdp packet size = %d)",
- size, pdp_header->size - PDP_HEADER_SIZE);
- continue;
- }
-
- /* copy the data */
- memcpy(pdp_data, pdp_udp_receiver_data(x->x_receiver), size);
-
- /* copy the packet into queue */
- x->x_index ^= 1;
- pdp_packet_mark_unused(x->x_packet[x->x_index]);
- x->x_packet[x->x_index] = tmp_packet;
-
-
- }
-
- exit:
- post("thread exiting");
- return 0;
-}
-
-
-static void pdp_udp_receive_free(t_pdp_udp_receive *x)
-{
- int i;
- void* retval;
- x->x_exit_thread = 1; // wait for thread to finish
- pthread_join(x->x_thread, &retval);
-
- pdp_udp_receiver_free(x->x_receiver);
-
- pdp_packet_mark_unused(x->x_packet[0]);
- pdp_packet_mark_unused(x->x_packet[1]);
-
-}
-
-t_class *pdp_udp_receive_class;
-
-
-
-void *pdp_udp_receive_new(t_floatarg fport)
-{
- int i;
- int port;
- struct hostent *hp;
-
- t_pdp_udp_receive *x = (t_pdp_udp_receive *)pd_new(pdp_udp_receive_class);
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
- x->x_packet[0] = -1;
- x->x_packet[1] = -1;
- x->x_index = 0;
-
- port = (fport == 0.0f) ? 7777 : fport;
- x->x_receiver = pdp_udp_receiver_new(port);
-
- /* setup thread stuff & create thread */
- x->x_exit_thread = 0;
- pthread_attr_init(&x->x_attr);
- pthread_attr_setschedpolicy(&x->x_attr, SCHED_OTHER);
- pthread_create(&x->x_thread, &x->x_attr, receive_thread, x);
-
-
- /* setup the clock */
- x->x_clock = clock_new(x, (t_method)clock_tick);
- clock_delay(x->x_clock, 0);
-
- post("pdp_netreceive: WARNING: experimental object");
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_udp_receive_setup(void)
-{
-
-
- pdp_udp_receive_class = class_new(gensym("pdp_netreceive"), (t_newmethod)pdp_udp_receive_new,
- (t_method)pdp_udp_receive_free, sizeof(t_pdp_udp_receive), 0, A_DEFFLOAT, A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/generic/pdp_udp_send.c b/modules/generic/pdp_udp_send.c
deleted file mode 100644
index cb55ad1..0000000
--- a/modules/generic/pdp_udp_send.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-/* this module sends a pure packet out as an udp packet stream */
-
-#include "pdp_net.h"
-#include "pdp.h"
-#include "pdp_resample.h"
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <netdb.h>
-
-#define DD if(0) // print DROP debug info
-#define D if(0) // print extra connection debug info
-#define V if(0) // be verbose (parameter setting feedback)
-
-typedef struct pdp_udp_send_struct
-{
-
- t_object x_obj;
- t_float x_f;
-
- /* sender object */
- t_pdp_udp_sender *x_sender;
-
- /* pthread vars */
- pthread_mutex_t x_mut;
- pthread_cond_t x_cond_data_ready;
- pthread_cond_t x_cond_send_done;
- pthread_t x_thread;
- int x_exit_thread;
-
- // drop info
- unsigned int x_drop;
-
- t_outlet *x_outlet0;
-
- // packet queue
- int x_nb_packets;
- int x_read_packet;
- int x_write_packet;
- int *x_packet;
-
-
-} t_pdp_udp_send;
-
-
-
-
-
-/* some synchro code */
-
-static int _wait_for_feeder(t_pdp_udp_send *x)
-{
-
- /* only use locking when there is no data */
- if (x->x_packet[x->x_read_packet] == -1){
-
- /* signal sending is done */
- pthread_mutex_lock(&x->x_mut);
- pthread_cond_signal(&x->x_cond_send_done);
-
- /* wait until there is an item in the queue */
- while((x->x_packet[x->x_read_packet] == -1) && (!x->x_exit_thread)){
- pthread_cond_wait(&x->x_cond_data_ready, &x->x_mut);
- }
- pthread_mutex_unlock(&x->x_mut);
-
- /* check if we need to stop the thread */
- if (x->x_exit_thread) return 0;
-
- }
-
- return !x->x_exit_thread;
-}
-
-static void _signal_sender(t_pdp_udp_send *x)
-{
-
- pthread_mutex_lock(&x->x_mut);
- pthread_cond_signal(&x->x_cond_data_ready);
- pthread_mutex_unlock(&x->x_mut);
-}
-
-static void _wait_until_done(t_pdp_udp_send *x)
-{
- pthread_mutex_lock(&x->x_mut);
- while (x->x_packet[x->x_read_packet] != -1){
- pthread_cond_wait(&x->x_cond_send_done, &x->x_mut);
- }
- pthread_mutex_unlock(&x->x_mut);
-}
-
-
-static void _remove_packet_from_queue(t_pdp_udp_send *x)
-{
-
-}
-
-
-
-
-
-static void *send_thread(void *threaddata)
-{
- t_pdp_udp_send *x = (t_pdp_udp_send *)threaddata;
-
- /* main thread loop */
-
- /* get a pdp packet from queue */
- /* send header packet and make sure it has arrived */
- /* send a chunk burst */
- /* send done packet and get the resend list */
- /* repeat until send list is empty */
-
- while (_wait_for_feeder(x)){
- t_pdp *header;
- void *data;
-
- /* check if we have a valid pdp packet */
- if ((!(header = pdp_packet_header(x->x_packet[x->x_read_packet])))
- ||(!(data = pdp_packet_data(x->x_packet[x->x_read_packet])))
- ||(0 == header->desc)) goto remove; /* nothing to transmit */
-
- /* send it */
- pdp_udp_sender_send(x->x_sender,
- header->desc->s_name,
- header->size - PDP_HEADER_SIZE, data);
-
-
- remove:
- /* remove packet from queue */
- pdp_packet_mark_unused(x->x_packet[x->x_read_packet]);
- x->x_packet[x->x_read_packet] = -1;
- x->x_read_packet++;
- x->x_read_packet %= x->x_nb_packets;
-
- }
- return 0;
-}
-
-
-static void pdp_udp_send_input_0(t_pdp_udp_send *x, t_symbol *s, t_floatarg f)
-{
-
- int p = (int)f;
- int my_p;
- int transferred = 0;
-
- if (s== gensym("register_ro")){
-
-
- // check if packet can be stored in the queue
- // this is possible if the current write location does not contain a packet
-
- if (x->x_packet[x->x_write_packet] == -1){
-
- // get the packet outside of the lock
- my_p = pdp_packet_copy_ro(p);
-
-
- // add to queue (do we really need to lock here?>
- //pthread_mutex_lock(&x->x_mut); // LOCK
- x->x_packet[x->x_write_packet] = my_p;
- x->x_write_packet++;
- x->x_write_packet %= x->x_nb_packets;
- transferred = 1;
- //pthread_mutex_unlock(&x->x_mut); // UNLOCK
- }
-
- // signal sender if transfer succeded
- if (transferred) _signal_sender(x);
-
- // else send a float indicating the number of drops so far
- else{
- x->x_drop++;
- //outlet_float(x->x_outlet0, (float)x->x_drop);
-
- DD post ("pdp_netsend: DROP: queue full");
- }
- }
-}
-
-
-
-/* some flow control hacks */
-
-static void pdp_udp_send_timeout(t_pdp_udp_send *x, float f)
-{
- if (f < 0.0f) f = 0.0f;
- pdp_udp_sender_timeout_us(x->x_sender, 1000.0f * f);
-}
-
-
-static void pdp_udp_send_sleepgrain(t_pdp_udp_send *x, float f)
-{
- if (f < 0.0f) f = 0.0f;
- pdp_udp_sender_sleepgrain_us(x->x_sender, 1000.0f * f);
-}
-
-static void pdp_udp_send_sleepperiod(t_pdp_udp_send *x, float f)
-{
- if (f < 0.0f) f = 0.0f;
- pdp_udp_sender_sleepperiod(x->x_sender, f);
-}
-
-
-static void pdp_udp_send_udpsize(t_pdp_udp_send *x, float f)
-{
- if (f < 0.0f) f = 0.0f;
- pdp_udp_sender_udp_packet_size(x->x_sender, f);
-}
-
-static void pdp_udp_send_connect(t_pdp_udp_send *x, t_symbol *shost, t_float fport)
-{
- unsigned int port;
- struct hostent *hp;
-
- /* suspend until sending thread is finished */
- _wait_until_done(x);
-
- /* set target address */
- port = (fport == 0.0f) ? 7777 : fport;
- if (shost == gensym("")) shost = gensym("127.0.0.1");
-
- /* connect */
- pdp_udp_sender_connect(x->x_sender, shost->s_name, port);
-
-}
-
-
-static void pdp_udp_send_free(t_pdp_udp_send *x)
-{
- int i;
- void* retval;
- _wait_until_done(x); // send all remaining packets
- x->x_exit_thread = 1; // .. and wait for thread to finish
- _signal_sender(x);
- pthread_join(x->x_thread, &retval);
-
- pdp_udp_sender_free(x->x_sender);
-
-
- for (i=0; i<x->x_nb_packets; i++) pdp_packet_mark_unused(x->x_packet[i]);
- pdp_dealloc(x->x_packet);
-
-}
-
-t_class *pdp_udp_send_class;
-
-
-
-void *pdp_udp_send_new(void)
-{
- int i;
- pthread_attr_t attr;
-
- t_pdp_udp_send *x = (t_pdp_udp_send *)pd_new(pdp_udp_send_class);
-
- x->x_sender = pdp_udp_sender_new();
-
- //x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
- x->x_nb_packets = 4;
- x->x_packet = malloc(sizeof(int)*x->x_nb_packets);
- for (i=0; i<x->x_nb_packets; i++) x->x_packet[i] = -1;
- x->x_read_packet = 0;
- x->x_write_packet = 0;
-
- x->x_drop = 0;
-
-
-
- /* setup thread stuff & create thread */
- x->x_exit_thread = 0;
- pthread_mutex_init(&x->x_mut, NULL);
- pthread_cond_init(&x->x_cond_data_ready, NULL);
- pthread_cond_init(&x->x_cond_send_done, NULL);
- pthread_attr_init(&attr);
- //pthread_attr_setschedpolicy(&attr, SCHED_OTHER);
- pthread_create(&x->x_thread, &attr, send_thread, x);
- post("pdp_netsend: WARNING: experimental object");
-
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_udp_send_setup(void)
-{
-
- pdp_udp_send_class = class_new(gensym("pdp_netsend"), (t_newmethod)pdp_udp_send_new,
- (t_method)pdp_udp_send_free, sizeof(t_pdp_udp_send), 0, A_NULL);
-
-
- class_addmethod(pdp_udp_send_class, (t_method)pdp_udp_send_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_udp_send_class, (t_method)pdp_udp_send_sleepgrain, gensym("sleepgrain"), A_FLOAT, A_NULL);
- class_addmethod(pdp_udp_send_class, (t_method)pdp_udp_send_sleepperiod, gensym("sleepperiod"), A_FLOAT, A_NULL);
- class_addmethod(pdp_udp_send_class, (t_method)pdp_udp_send_udpsize, gensym("udpsize"), A_FLOAT, A_NULL);
- class_addmethod(pdp_udp_send_class, (t_method)pdp_udp_send_timeout, gensym("timeout"), A_FLOAT, A_NULL);
- class_addmethod(pdp_udp_send_class, (t_method)pdp_udp_send_connect, gensym("connect"), A_SYMBOL, A_FLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/Makefile b/modules/image_basic/Makefile
deleted file mode 100644
index d82b2cb..0000000
--- a/modules/image_basic/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-current: all_modules
-
-include ../../Makefile.config
-
-PDP_MOD = pdp_add.o pdp_conv.o \
- pdp_mix.o pdp_mul.o pdp_randmix.o \
- pdp_bq.o pdp_noise.o \
- pdp_gain.o \
- pdp_zoom.o pdp_cheby.o \
- pdp_constant.o \
- pdp_logic.o pdp_stateless.o pdp_plasma.o
-
-
-# build basic image processing modules (derived from base class)
-all_modules: $(PDP_MOD)
-
-clean:
- rm -f *~
- rm -f *.o
-
diff --git a/modules/image_basic/README b/modules/image_basic/README
deleted file mode 100644
index 965d277..0000000
--- a/modules/image_basic/README
+++ /dev/null
@@ -1,5 +0,0 @@
-This directory contains "normal" planar 16 bit unsigned image packet processors,
-derived from the t_pdp_imagebase class defined in pdp_imagebase.h
-
-Most modules are wrappers around monochrome bitmap processors (pdp_imageproc_*)
-
diff --git a/modules/image_basic/pdp_add.c b/modules/image_basic/pdp_add.c
deleted file mode 100644
index 0366c16..0000000
--- a/modules/image_basic/pdp_add.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-typedef struct pdp_add_struct
-{
- /* a pdp derived class has the t_pdp_imagebase data member as first entry */
- /* it contains the pd object and the data members for the pdp_base class */
- t_pdp_imagebase x_base;
-
-} t_pdp_add;
-
-
-/* the process method */
-static void pdp_add_process(t_pdp_add *x)
-{
- /* get received packets */
- int p0, p1;
-
- /* get channel mask */
- int mask = pdp_imagebase_get_chanmask(x);
-
- /* this processes the packets using a pdp image processor */
- /* replace this with your own processing code */
- /* for raw packet acces: use pdp_pacjet_header() and pdp_packet_data() */
- p0 = pdp_base_get_packet(x,0);
- p1 = pdp_base_get_packet(x,1);
-
- pdp_imageproc_dispatch_2buf(&pdp_imageproc_add_process, 0, mask, p0, p1);
-
-
-}
-
-
-static void pdp_add_free(t_pdp_add *x)
-{
- /* free super: this is mandatory
- (it stops the thread if there is one running and frees all packets) */
- pdp_imagebase_free(x);
-
- /* if you have allocated more packets
- this is the place to free them with pdp_mark_unused */
-}
-
-t_class *pdp_add_class;
-
-
-void *pdp_add_new(void)
-{
- /* allocate */
- t_pdp_add *x = (t_pdp_add *)pd_new(pdp_add_class);
-
- /* init super: this is mandatory */
- pdp_imagebase_init(x);
-
- /* set the pdp processing method */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_add_process);
-
- /* create additional cold (readonly) pdp inlets (there is already one pdp inlet) */
- pdp_base_add_pdp_inlet(x);
-
- /* create a pdp_outlet */
- pdp_base_add_pdp_outlet(x);
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_add_setup(void)
-{
- /* create a standard pd class */
- pdp_add_class = class_new(gensym("pdp_add"), (t_newmethod)pdp_add_new,
- (t_method)pdp_add_free, sizeof(t_pdp_add), 0, A_NULL);
-
- /* inherit pdp base class methods */
- pdp_imagebase_setup(pdp_add_class);
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_bq.c b/modules/image_basic/pdp_bq.c
deleted file mode 100644
index 088e50b..0000000
--- a/modules/image_basic/pdp_bq.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-#include <math.h>
-
-/* computes a transfer function:
- *
- * b0 + b1 z^(-1) + b2 z^(-2)
- * T(z) = --------------------------
- * 1 + a1 z^(-1) + a2 z^(-2)
- *
- */
-
-
-typedef struct pdp_bq_struct
-{
-
- t_pdp_imagebase x_base; //pdp_bq derives from pdp_base
-
-
- /* state packets for bqt */
- int x_packet1;
- int x_packet2;
-
-
- unsigned int x_nbpasses;
-
- /* single direction */
- unsigned int x_direction;
-
- bool x_reset_on_formatchange;
-
- void *x_biquad;
-
- float x_coefs_a[3]; // a0, -a1, -a2
- float x_coefs_b[3]; // b0, b1, b2
- float x_state_u[2]; // u0, u1
- float x_state_u_save[2]; // u0, u1 (for reset)
-
-} t_pdp_bq;
-
-
-/************************* COEFFICIENT METHODS ****************************/
-
-static void pdp_bq_a0(t_pdp_bq *x, t_floatarg f){x->x_coefs_a[0] = f;}
-static void pdp_bq_a1(t_pdp_bq *x, t_floatarg f){x->x_coefs_a[1] = -f;}
-static void pdp_bq_a2(t_pdp_bq *x, t_floatarg f){x->x_coefs_a[2] = -f;}
-
-static void pdp_bq_b0(t_pdp_bq *x, t_floatarg f){x->x_coefs_b[0] = f;}
-static void pdp_bq_b1(t_pdp_bq *x, t_floatarg f){x->x_coefs_b[1] = f;}
-static void pdp_bq_b2(t_pdp_bq *x, t_floatarg f){x->x_coefs_b[2] = f;}
-
-static void pdp_bq_u0(t_pdp_bq *x, t_floatarg f){x->x_state_u_save[0] = f;}
-static void pdp_bq_u1(t_pdp_bq *x, t_floatarg f){x->x_state_u_save[1] = f;}
-
-
-static void pdp_bq_setcoefs(t_pdp_bq *x,
- float a0, float a1, float a2,
- float b0, float b1, float b2)
-{
- pdp_bq_a0(x,a0);
- pdp_bq_a1(x,a1);
- pdp_bq_a2(x,a2);
- pdp_bq_b0(x,b0);
- pdp_bq_b1(x,b1);
- pdp_bq_b2(x,b2);
- pdp_imageproc_bq_setcoef(x->x_biquad, x->x_coefs_a);
-}
-
-static void pdp_bq_setstate(t_pdp_bq *x, float u0, float u1)
-{
- pdp_bq_u0(x,u0);
- pdp_bq_u1(x,u1);
- pdp_imageproc_bq_setcoef(x->x_biquad, x->x_coefs_a);
-}
-
-
-
-/* reso lowpass */
-static void pdp_bq_lpf(t_pdp_bq *x, t_floatarg f, t_floatarg Q)
-{
- float a0, a1, a2, b0, b1, b2, cs, sn, w, alpha;
- w = 2.0 * M_PI * f;
- cs = cos(w);
- sn = sin(w);
-
- alpha = sn*sinh(1.0f/(2.0f*Q));
- b0 = (1.0 - cs)/2.0;
- b1 = 1.0 - cs;
- b2 = (1.0 - cs)/2.0;
- a0 = (1.0 + alpha);
- a1 = -2.0*cs;
- a2 = 1.0 - alpha;
-
- pdp_bq_setcoefs(x, a0, a1, a2, b0, b1, b2);
-
-}
-
-/* reso highpass */
-static void pdp_bq_hpf(t_pdp_bq *x, t_floatarg f, t_floatarg Q)
-{
- float a0, a1, a2, b0, b1, b2, cs, sn, w, alpha;
- w = 2.0 * M_PI * f;
- cs = cos(w);
- sn = sin(w);
-
- alpha = sn*sinh(1.0f/(2.0f*Q));
-
- b0 = (1.0 + cs)/2.0;
- b1 = -1.0 - cs;
- b2 = (1.0 + cs)/2.0;
- a0 = (1.0 + alpha);
- a1 = -2.0*cs;
- a2 = 1.0 - alpha;
-
- pdp_bq_setcoefs(x, a0, a1, a2, b0, b1, b2);
-
-}
-
-
-/* reso allpass */
-static void pdp_bq_apf(t_pdp_bq *x, t_floatarg f, t_floatarg Q)
-{
- float a0, a1, a2, b0, b1, b2, cs, sn, w, alpha;
- w = 2.0 * M_PI * f;
- cs = cos(w);
- sn = sin(w);
-
- alpha = sn*sinh(1.0f/(2.0f*Q));
-
- b0 = (1.0 - alpha);
- b1 = -2.0 * cs;
- b2 = (1.0 + alpha);
- a0 = (1.0 + alpha);
- a1 = -2.0*cs;
- a2 = 1.0 - alpha;
-
- pdp_bq_setcoefs(x, a0, a1, a2, b0, b1, b2);
-}
-
-/* reso band stop (notch) */
-static void pdp_bq_bsf(t_pdp_bq *x, t_floatarg f, t_floatarg Q)
-{
- float a0, a1, a2, b0, b1, b2, cs, sn, w, alpha;
- w = 2.0 * M_PI * f;
- cs = cos(w);
- sn = sin(w);
-
- alpha = sn*sinh(1.0f/(2.0f*Q));
-
- b0 = 1.0;
- b1 = -2.0 * cs;
- b2 = 1.0;
- a0 = (1.0 + alpha);
- a1 = -2.0*cs;
- a2 = 1.0 - alpha;
-
- pdp_bq_setcoefs(x, a0, a1, a2, b0, b1, b2);
-
-}
-
-static void pdp_bq_onep(t_pdp_bq *x, t_floatarg f)
-{
- float a0,a1,a2,b0,b1,b2;
-
- if (f>1.0f) f = 1.0f;
- if (f<0.0f) f = 0.0f;
-
- a0 = 1.0f;
- a1 = -(1.0f - f);
- a2 = 0.0f;
- b0 = f;
- b1 = 0.0f;
- b2 = 0.0f;
- pdp_bq_setcoefs(x, a0, a1, a2, b0, b1, b2);
-}
-
-static void pdp_bq_twop(t_pdp_bq *x, t_floatarg f)
-{
- float f1;
- float a0,a1,a2,b0,b1,b2;
-
- if (f>1.0) f = 1.0;
- if (f<0.0) f = 0.0;
-
- f1 = 1.0 - f;
-
- a0 = 1.0f;
- a1 = -2.0f*f1;
- a2 = f1*f1;
- b0 = f*f;
- b1 = 0.0f;
- b2 = 0.0f;
-
- pdp_bq_setcoefs(x, a0, a1, a2, b0, b1, b2);
-}
-
-
-
-
-
-/************************* PROCESS METHODS ****************************/
-
-static void pdp_bqt_process(t_pdp_bq *x)
-{
- /* get received packets */
- int p0 = pdp_base_get_packet(x, 0);
-
- /* get channel mask */
- u32 mask = pdp_imagebase_get_chanmask(x);
-
- pdp_imageproc_dispatch_3buf(&pdp_imageproc_bqt_process, x->x_biquad,
- mask, p0, x->x_packet1, x->x_packet2);
-}
-
-static void pdp_bq_process(t_pdp_bq *x)
-{
- /* get received packets */
- int p0 = pdp_base_get_packet(x, 0);
-
- /* get channel mask */
- u32 mask = pdp_imagebase_get_chanmask(x);
-
- pdp_imageproc_bq_setnbpasses(x->x_biquad, x->x_nbpasses);
- pdp_imageproc_bq_setdirection(x->x_biquad, x->x_direction);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_bq_process, x->x_biquad, mask, p0);
-}
-
-static void pdp_bqt_reset(t_pdp_bq *x)
-{
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_zero_process, 0, -1, x->x_packet1);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_zero_process, 0, -1, x->x_packet2);
-}
-
-
-
-static void pdp_bqt_preproc(t_pdp_bq *x)
-{
- /* get received packets */
- int p0 = pdp_base_get_packet(x, 0);
-
- /* check if state packets are compatible */
- if (!(pdp_packet_image_compat(p0, x->x_packet1)
- && pdp_packet_image_compat(p0, x->x_packet1))){
-
- /* if not, create new state packets by copying the input packets */
- post("pdp_bqt: created new state packets");
- pdp_packet_mark_unused(x->x_packet1);
- pdp_packet_mark_unused(x->x_packet2);
- x->x_packet1 = pdp_packet_clone_rw(p0);
- x->x_packet2 = pdp_packet_clone_rw(p0);
-
- /* reset */
- if (x->x_reset_on_formatchange) pdp_bqt_reset(x);
-
- }
-}
-
-/************************* CONFIG METHODS ****************************/
-
-
-static void pdp_bq_passes(t_pdp_bq *x, t_floatarg f)
-{
- int passes = (int)f;
- passes = passes < 0 ? 0 : passes;
- x->x_nbpasses = passes;
-
-}
-
-static void pdp_bq_lr(t_pdp_bq *x, t_floatarg f)
-{
- if (f == 1.0f) x->x_direction |= PDP_IMAGEPROC_BIQUAD_LEFT2RIGHT;
- if (f == 0.0f) x->x_direction &= ~PDP_IMAGEPROC_BIQUAD_LEFT2RIGHT;
-}
-
-static void pdp_bq_rl(t_pdp_bq *x, t_floatarg f)
-{
- if (f == 1.0f) x->x_direction |= PDP_IMAGEPROC_BIQUAD_RIGHT2LEFT;
- if (f == 0.0f) x->x_direction &= ~PDP_IMAGEPROC_BIQUAD_RIGHT2LEFT;
-}
-static void pdp_bq_tb(t_pdp_bq *x, t_floatarg f)
-{
- if (f == 1.0f) x->x_direction |= PDP_IMAGEPROC_BIQUAD_TOP2BOTTOM;
- if (f == 0.0f) x->x_direction &= ~PDP_IMAGEPROC_BIQUAD_TOP2BOTTOM;
-}
-
-static void pdp_bq_bt(t_pdp_bq *x, t_floatarg f)
-{
- if (f == 1.0f) x->x_direction |= PDP_IMAGEPROC_BIQUAD_BOTTOM2TOP;
- if (f == 0.0f) x->x_direction &= ~PDP_IMAGEPROC_BIQUAD_BOTTOM2TOP;
-}
-
-
-static void pdp_bq_hor(t_pdp_bq *x, t_floatarg f)
-{
- pdp_bq_lr(x, f);
- pdp_bq_rl(x, f);
-}
-static void pdp_bq_ver(t_pdp_bq *x, t_floatarg f)
-{
- pdp_bq_tb(x, f);
- pdp_bq_bt(x, f);
-}
-
-
-/************************* DES/CONSTRUCTORS ****************************/
-
-static void pdp_bq_free(t_pdp_bq *x)
-{
- pdp_imagebase_free(x);
- pdp_imageproc_bq_delete(x->x_biquad);
- pdp_packet_mark_unused(x->x_packet1);
- pdp_packet_mark_unused(x->x_packet2);
-
-}
-
-
-void pdp_bq_init(t_pdp_bq *x)
-{
- x->x_packet1 = -1;
- x->x_packet2 = -1;
-
- x->x_nbpasses = 1;
- x->x_reset_on_formatchange = true;
-
- x->x_biquad = pdp_imageproc_bq_new();
-
- pdp_bq_setstate(x, 0.0f, 0.0f);
- pdp_bq_onep(x, 0.1f);
-
-}
-
-
-
-/* class pointers */
-
-t_class *pdp_bq_class; /* biquad spacial processing */
-t_class *pdp_bqt_class; /* biquad time processing */
-
-void *pdp_bq_new(void)
-{
- t_pdp_bq *x = (t_pdp_bq *)pd_new(pdp_bq_class);
-
- pdp_imagebase_init(x);
- pdp_base_add_pdp_outlet(x);
-
- pdp_base_set_process_method(x, (t_pdp_method)pdp_bq_process);
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("passes"));
-
- pdp_bq_init(x);
- return (void *)x;
-}
-
-void *pdp_bqt_new(void)
-{
- t_pdp_bq *x = (t_pdp_bq *)pd_new(pdp_bqt_class);
-
- pdp_imagebase_init(x);
- pdp_base_add_pdp_outlet(x);
-
- pdp_base_set_preproc_method(x, (t_pdp_method)pdp_bqt_preproc);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_bqt_process);
-
- pdp_bq_init(x);
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-
-
-
-
-/************************* CLASS CONSTRUCTORS ****************************/
-
-
-void pdp_bq_coefmethods_setup(t_class *c)
-{
-
- /* raw coefficient methods */
- class_addmethod(c, (t_method)pdp_bq_a1, gensym("a1"), A_FLOAT, A_NULL);
- class_addmethod(c, (t_method)pdp_bq_a2, gensym("a2"), A_FLOAT, A_NULL);
- class_addmethod(c, (t_method)pdp_bq_b0, gensym("b0"), A_FLOAT, A_NULL);
- class_addmethod(c, (t_method)pdp_bq_b1, gensym("b1"), A_FLOAT, A_NULL);
- class_addmethod(c, (t_method)pdp_bq_b2, gensym("b2"), A_FLOAT, A_NULL);
- //class_addmethod(c, (t_method)pdp_bq_u1, gensym("u1"), A_FLOAT, A_NULL);
- //class_addmethod(c, (t_method)pdp_bq_u2, gensym("u2"), A_FLOAT, A_NULL);
-
- /* real pole filters */
- class_addmethod(c, (t_method)pdp_bq_onep, gensym("onep"), A_FLOAT, A_NULL);
- class_addmethod(c, (t_method)pdp_bq_twop, gensym("twop"), A_FLOAT, A_NULL);
-
- /* resonnant pole filters */
- class_addmethod(c, (t_method)pdp_bq_lpf, gensym("lpf"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(c, (t_method)pdp_bq_hpf, gensym("hpf"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(c, (t_method)pdp_bq_apf, gensym("apf"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(c, (t_method)pdp_bq_bsf, gensym("bsf"), A_FLOAT, A_FLOAT, A_NULL);
-}
-
-void pdp_bq_setup(void)
-{
-
- /* setup spatial processing class */
-
- pdp_bq_class = class_new(gensym("pdp_bq"), (t_newmethod)pdp_bq_new,
- (t_method)pdp_bq_free, sizeof(t_pdp_bq), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_bq_class);
- pdp_bq_coefmethods_setup(pdp_bq_class);
-
- class_addmethod(pdp_bq_class, (t_method)pdp_bq_passes, gensym("passes"), A_FLOAT, A_NULL);
- class_addmethod(pdp_bq_class, (t_method)pdp_bq_hor, gensym("hor"), A_FLOAT, A_NULL);
- class_addmethod(pdp_bq_class, (t_method)pdp_bq_ver, gensym("ver"), A_FLOAT, A_NULL);
- class_addmethod(pdp_bq_class, (t_method)pdp_bq_tb, gensym("tb"), A_FLOAT, A_NULL);
- class_addmethod(pdp_bq_class, (t_method)pdp_bq_bt, gensym("bt"), A_FLOAT, A_NULL);
- class_addmethod(pdp_bq_class, (t_method)pdp_bq_lr, gensym("lr"), A_FLOAT, A_NULL);
- class_addmethod(pdp_bq_class, (t_method)pdp_bq_rl, gensym("rl"), A_FLOAT, A_NULL);
-
-
-
- /* setup time processing class */
- pdp_bqt_class = class_new(gensym("pdp_bqt"), (t_newmethod)pdp_bqt_new,
- (t_method)pdp_bq_free, sizeof(t_pdp_bq), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_bqt_class);
- pdp_bq_coefmethods_setup(pdp_bqt_class);
-
-
- /* control */
- class_addmethod(pdp_bqt_class, (t_method)pdp_bqt_reset, gensym("reset"), A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_cheby.c b/modules/image_basic/pdp_cheby.c
deleted file mode 100644
index 1bd1a16..0000000
--- a/modules/image_basic/pdp_cheby.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-#include <stdio.h>
-#include <gsl/gsl_math.h>
-#include <gsl/gsl_chebyshev.h>
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-
-typedef struct pdp_cheby_struct
-{
- t_pdp_imagebase x_base;
- void *x_cheby;
- int x_iterations;
- int x_order;
- gsl_cheb_series *x_cs;
- gsl_function x_F;
- float *x_vec;
- int x_nbpoints;
-
-} t_pdp_cheby;
-
-
-
-static double pdp_cheby_mappingfunction(double f, void *params)
-{
- t_pdp_cheby *x = (t_pdp_cheby *)params;
- int index;
-
- /* if there's no array, return the identity function */
- if (!x->x_vec) return f;
-
- /* else interpolate the array */
- index = ((f + 1) * 0.5) * (x->x_nbpoints - 1);
- return x->x_vec[index];
-
-}
-
-static void pdp_cheby_coef(t_pdp_cheby *x, t_floatarg c, t_floatarg f)
-{
- pdp_imageproc_cheby_setcoef(x->x_cheby, (int)c, f);
-}
-
-static void pdp_cheby_approx(t_pdp_cheby *x, t_symbol *s)
-{
- int i;
- t_garray *a;
-
- /* check if array is valid */
- if (!(a = (t_garray *)pd_findbyclass(s, garray_class))){
- post("pdp_cheby: %s: no such array", s->s_name);
- }
- /* get data */
- else if (!garray_getfloatarray(a, &x->x_nbpoints, &x->x_vec)){
- post("pdp_cheby: %s: bad template", s->s_name);
-
- }
-
- else{
-
- /* calculate approximation */
- gsl_cheb_init (x->x_cs, &x->x_F, -1.0, 1.0);
-
- /* propagate coefficients */
- for (i=0; i<=x->x_order; i++){
- pdp_cheby_coef(x, i, x->x_cs->c[i]);
- }
- }
-
- x->x_vec = 0;
- return;
-
-
-}
-
-
-static void pdp_cheby_process(t_pdp_cheby *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_cheby_setnbpasses(x->x_cheby, x->x_iterations);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_cheby_process, x->x_cheby, mask, p0);
-}
-
-
-
-static void pdp_cheby_reset(t_pdp_cheby *x)
-{
- int i;
- for (i = 0; i <= x->x_order; i++)
- pdp_imageproc_cheby_setcoef(x->x_cheby, i, 0);
-}
-
-
-static void pdp_cheby_iterations(t_pdp_cheby *x, t_floatarg f)
-{
- int i = (int)f;
- if (i<0) i = 0;
- x->x_iterations = i;
-
-}
-static void pdp_cheby_free(t_pdp_cheby *x)
-{
- pdp_imagebase_free(x);
- pdp_imageproc_cheby_delete(x->x_cheby);
- gsl_cheb_free(x->x_cs);
-
-}
-
-t_class *pdp_cheby_class;
-
-
-
-void *pdp_cheby_new(t_floatarg f)
-{
- t_pdp_cheby *x = (t_pdp_cheby *)pd_new(pdp_cheby_class);
- int order = (int)(f);
-
- /* super init */
- pdp_imagebase_init(x);
-
- /* create i/o */
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("iterations"));
- pdp_base_add_pdp_outlet(x);
-
- /* setup callback */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_cheby_process);
-
- /* data init */
- x->x_cheby = pdp_imageproc_cheby_new(order);
- x->x_iterations = 1;
-
- if (order < 2) order = 2;
- x->x_order = order;
-
- /* init gls chebychev series object */
- x->x_cs = gsl_cheb_alloc(order);
- x->x_F.function = pdp_cheby_mappingfunction;
- x->x_F.params = x;
- x->x_vec = 0;
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_cheby_setup(void)
-{
-
-
- pdp_cheby_class = class_new(gensym("pdp_cheby"), (t_newmethod)pdp_cheby_new,
- (t_method)pdp_cheby_free, sizeof(t_pdp_cheby), 0, A_DEFFLOAT, A_NULL);
-
- pdp_imagebase_setup(pdp_cheby_class);
-
- class_addmethod(pdp_cheby_class, (t_method)pdp_cheby_coef, gensym("coef"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_cheby_class, (t_method)pdp_cheby_iterations, gensym("iterations"), A_FLOAT, A_NULL);
- class_addmethod(pdp_cheby_class, (t_method)pdp_cheby_reset, gensym("reset"), A_NULL);
- class_addmethod(pdp_cheby_class, (t_method)pdp_cheby_approx, gensym("approx"), A_SYMBOL, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_constant.c b/modules/image_basic/pdp_constant.c
deleted file mode 100644
index e5b088e..0000000
--- a/modules/image_basic/pdp_constant.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-
-typedef struct pdp_constant_struct
-{
- t_pdp_imagebase x_base;
-
- t_outlet *x_outlet0;
-
- int x_packet0;
-
- t_symbol *x_type;
-
- unsigned int x_width;
- unsigned int x_height;
-
- void *x_constant;
-
-} t_pdp_constant;
-
-
-
-void pdp_constant_type(t_pdp_constant *x, t_symbol *s)
-{
- x->x_type = s;
-}
-
-
-void pdp_constant_value(t_pdp_constant *x, t_floatarg f)
-{
- if (f>1.0f) f = 1.0f;
- if (f<-1.0f) f = -1.0f;
-
- x->x_constant = (void *)((s32)(0x7fff * f));
-}
-
-
-
-static void pdp_constant_process(t_pdp_constant *x)
-{
- /* get channel mask */
- u32 mask = pdp_imagebase_get_chanmask(x);
-
- /* create new packet */
- if (x->x_type == gensym("yv12")){x->x_packet0 = pdp_packet_new_image_YCrCb(x->x_width, x->x_height);}
- else if (x->x_type == gensym("grey")){x->x_packet0 = pdp_packet_new_image_grey(x->x_width, x->x_height);}
- else return;
-
- /* this processes the packets using a pdp image processor */
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_constant_process, x->x_constant, mask, x->x_packet0);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_constant_process, 0, ~mask, x->x_packet0);
-
- return;
-}
-
-static void pdp_constant_postproc(t_pdp_constant *x)
-{
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet0);
-}
-
-static void pdp_constant_bang(t_pdp_constant *x)
-{
- pdp_base_bang(x);
-}
-
-static void pdp_constant_dim(t_pdp_constant *x, t_floatarg w, t_floatarg h)
-{
- x->x_width = pdp_imageproc_legalwidth((int)w);
- x->x_height = pdp_imageproc_legalheight((int)h);
- //post("dims %d %d", x->x_width, x->x_height);
-}
-
-
-static void pdp_constant_free(t_pdp_constant *x)
-{
- pdp_imagebase_free(x);
- pdp_packet_mark_unused(x->x_packet0);
-
-}
-
-t_class *pdp_constant_class;
-
-
-
-void *pdp_constant_new(void)
-{
- int i;
- t_pdp_constant *x = (t_pdp_constant *)pd_new(pdp_constant_class);
-
- /* super init */
- pdp_imagebase_init(x);
-
- /* in/out*/
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("value"));
- x->x_outlet0 = pdp_base_add_pdp_outlet(x);
-
- /* base callbacks */
- pdp_base_disable_active_inlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_constant_process);
- pdp_base_set_postproc_method(x, (t_pdp_method)pdp_constant_postproc);
-
- /* data init */
- x->x_packet0 = -1;
- pdp_constant_dim(x, 320, 240);
- pdp_constant_value(x, 0.0f);
- pdp_constant_type(x, gensym("yv12"));
-
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-
-void pdp_constant_setup(void)
-{
-
-
- pdp_constant_class = class_new(gensym("pdp_constant"), (t_newmethod)pdp_constant_new,
- (t_method)pdp_constant_free, sizeof(t_pdp_constant), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_constant_class);
-
- class_addmethod(pdp_constant_class, (t_method)pdp_constant_value, gensym("value"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_constant_class, (t_method)pdp_constant_type, gensym("type"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_constant_class, (t_method)pdp_constant_dim, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_constant_class, (t_method)pdp_constant_bang, gensym("bang"), A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_conv.c b/modules/image_basic/pdp_conv.c
deleted file mode 100644
index dfce381..0000000
--- a/modules/image_basic/pdp_conv.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-
-typedef struct pdp_conv_struct
-{
- t_pdp_imagebase x_base;
-
-
- unsigned int x_nbpasses;
- bool x_horizontal;
- bool x_vertical;
-
- void *x_convolver_hor;
- void *x_convolver_ver;
-
-} t_pdp_conv;
-
-
-
-static void pdp_conv_process(t_pdp_conv *x)
-{
- int p = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
-
- if (x->x_vertical){
- pdp_imageproc_conv_setnbpasses(x->x_convolver_ver, x->x_nbpasses);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_conv_process, x->x_convolver_ver, mask, p);
- }
-
- if (x->x_horizontal){
- pdp_imageproc_conv_setnbpasses(x->x_convolver_hor, x->x_nbpasses);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_conv_process, x->x_convolver_hor, mask, p);
- }
-
-}
-
-
-
-static void pdp_conv_passes(t_pdp_conv *x, t_floatarg f)
-{
- int passes = (int)f;
- passes = passes < 0 ? 0 : passes;
- x->x_nbpasses = passes;
-
-}
-static void pdp_conv_hor(t_pdp_conv *x, t_floatarg f)
-{
- int hor = (int)f;
- x->x_horizontal = (hor != 0);
-
-}
-static void pdp_conv_ver(t_pdp_conv *x, t_floatarg f)
-{
- int ver = (int)f;
- x->x_vertical = (ver != 0);
-}
-static void pdp_conv_free(t_pdp_conv *x)
-{
- pdp_imagebase_free(x);
- pdp_imageproc_conv_delete(x->x_convolver_hor);
- pdp_imageproc_conv_delete(x->x_convolver_ver);
-}
-
-/* setup hmask */
-
-static void pdp_conv_hleft(t_pdp_conv *x, t_floatarg f)
-{
- pdp_imageproc_conv_setmin1(x->x_convolver_hor, f);
-
-}
-static void pdp_conv_hmiddle(t_pdp_conv *x, t_floatarg f)
-{
- pdp_imageproc_conv_setzero(x->x_convolver_hor, f);
-}
-static void pdp_conv_hright(t_pdp_conv *x, t_floatarg f)
-{
- pdp_imageproc_conv_setplus1(x->x_convolver_hor, f);
-}
-
-static void pdp_conv_hmask(t_pdp_conv *x, t_floatarg l, t_floatarg m, t_floatarg r)
-{
- pdp_conv_hleft(x, l);
- pdp_conv_hmiddle(x, m);
- pdp_conv_hright(x, r);
-}
-
-static void pdp_conv_vtop(t_pdp_conv *x, t_floatarg f)
-{
- pdp_imageproc_conv_setmin1(x->x_convolver_ver, f);
-}
-static void pdp_conv_vmiddle(t_pdp_conv *x, t_floatarg f)
-{
- pdp_imageproc_conv_setzero(x->x_convolver_ver, f);
-
-}
-static void pdp_conv_vbottom(t_pdp_conv *x, t_floatarg f)
-{
- pdp_imageproc_conv_setplus1(x->x_convolver_ver, f);
-}
-
-static void pdp_conv_vmask(t_pdp_conv *x, t_floatarg l, t_floatarg m, t_floatarg r)
-{
- pdp_conv_vtop(x, l);
- pdp_conv_vmiddle(x, m);
- pdp_conv_vbottom(x, r);
-}
-
-
-static void pdp_conv_mask(t_pdp_conv *x, t_floatarg l, t_floatarg m, t_floatarg r)
-{
- pdp_conv_hmask(x, l, m, r);
- pdp_conv_vmask(x, l, m, r);
-}
-
-t_class *pdp_conv_class;
-
-
-
-void *pdp_conv_new(void)
-{
- t_pdp_conv *x = (t_pdp_conv *)pd_new(pdp_conv_class);
-
- /* super init */
- pdp_imagebase_init(x);
-
- /* inlets & outlets */
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("passes"));
- pdp_base_add_pdp_outlet(x);
-
- /* register */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_conv_process);
-
- x->x_nbpasses = 1;
- x->x_horizontal = true;
- x->x_vertical = true;
-
- x->x_convolver_hor = pdp_imageproc_conv_new();
- x->x_convolver_ver = pdp_imageproc_conv_new();
-
- pdp_imageproc_conv_setbordercolor(x->x_convolver_hor, 0);
- pdp_imageproc_conv_setbordercolor(x->x_convolver_ver, 0);
-
- pdp_imageproc_conv_setorientation(x->x_convolver_hor, PDP_IMAGEPROC_CONV_HORIZONTAL);
- pdp_imageproc_conv_setorientation(x->x_convolver_ver, PDP_IMAGEPROC_CONV_VERTICAL);
-
- pdp_conv_mask(x, .25,.5,.25);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_conv_setup(void)
-{
-
-
- pdp_conv_class = class_new(gensym("pdp_conv"), (t_newmethod)pdp_conv_new,
- (t_method)pdp_conv_free, sizeof(t_pdp_conv), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_conv_class);
-
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_passes, gensym("passes"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_hor, gensym("hor"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_ver, gensym("ver"), A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_hleft, gensym("hleft"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_hmiddle, gensym("hmiddle"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_hright, gensym("hright"), A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_vtop, gensym("vtop"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_vmiddle, gensym("vmiddle"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_vbottom, gensym("vbottom"), A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_vmask, gensym("vmask"), A_FLOAT, A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_hmask, gensym("hmask"), A_FLOAT, A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_conv_class, (t_method)pdp_conv_mask, gensym("mask"), A_FLOAT, A_FLOAT, A_FLOAT, A_NULL);
-
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_gain.c b/modules/image_basic/pdp_gain.c
deleted file mode 100644
index c36f758..0000000
--- a/modules/image_basic/pdp_gain.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-
-typedef struct pdp_gain_struct
-{
- t_pdp_imagebase x_base;
- void *x_gain;
-
-} t_pdp_gain;
-
-
-
-
-static void pdp_gain_process(t_pdp_gain *x)
-{
- int p = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
-
- pdp_packet_image_set_chanmask(p, mask);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_gain_process, x->x_gain, 0, p);
-
-}
-
-
-static void pdp_gain_gain(t_pdp_gain *x, t_floatarg f)
-{
- pdp_imageproc_gain_setgain(x->x_gain, f);
-}
-
-
-
-t_class *pdp_gain_class;
-
-
-
-void pdp_gain_free(t_pdp_gain *x)
-{
- pdp_imagebase_free(x);
- pdp_imageproc_gain_delete(x->x_gain);
-}
-
-void *pdp_gain_new(t_floatarg f)
-{
- t_pdp_gain *x = (t_pdp_gain *)pd_new(pdp_gain_class);
-
- /* super init */
- pdp_imagebase_init(x);
-
- /* no arg, or zero -> gain = 1 */
- if (f==0.0f) f = 1.0f;
-
-
- /* io */
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("gain"));
- pdp_base_add_pdp_outlet(x);
-
- /* callbacks */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_gain_process);
-
- x->x_gain = pdp_imageproc_gain_new();
- pdp_gain_gain(x, f);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_gain_setup(void)
-{
-
-
- pdp_gain_class = class_new(gensym("pdp_gain"), (t_newmethod)pdp_gain_new,
- (t_method)pdp_gain_free, sizeof(t_pdp_gain), 0, A_DEFFLOAT, A_NULL);
-
- pdp_imagebase_setup(pdp_gain_class);
-
- class_addmethod(pdp_gain_class, (t_method)pdp_gain_gain, gensym("gain"), A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_logic.c b/modules/image_basic/pdp_logic.c
deleted file mode 100644
index 002557c..0000000
--- a/modules/image_basic/pdp_logic.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-typedef struct pdp_logic_struct
-{
- t_pdp_imagebase x_base;
-
- void *x_mask;
-
-} t_pdp_logic;
-
-
-static void pdp_logic_process_and(t_pdp_logic *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- int p1 = pdp_base_get_packet(x, 1);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_2buf(&pdp_imageproc_and_process, 0, mask, p0, p1);
-}
-
-static void pdp_logic_process_or(t_pdp_logic *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- int p1 = pdp_base_get_packet(x, 1);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_2buf(&pdp_imageproc_or_process, 0, mask, p0, p1);
-}
-
-static void pdp_logic_process_xor(t_pdp_logic *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- int p1 = pdp_base_get_packet(x, 1);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_2buf(&pdp_imageproc_xor_process, 0, mask, p0, p1);
-}
-
-static void pdp_logic_process_not(t_pdp_logic *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_not_process, 0, mask, p0);
-}
-
-static void pdp_logic_process_mask(t_pdp_logic *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_mask_process, x->x_mask, mask, p0);
-}
-
-static void pdp_logic_process_softthresh(t_pdp_logic *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_softthresh_process, x->x_mask, mask, p0);
-}
-
-
-static void pdp_logic_process_hardthresh(t_pdp_logic *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_hardthresh_process, x->x_mask, mask, p0);
-}
-
-
-static void pdp_logic_set_mask(t_pdp_logic *x, t_floatarg f)
-{
- /* using a pointer as a variable hmm? */
- u32 mask = ((u32)f) & 0xffff;
- x->x_mask = ((void * )mask);
-}
-
-static void pdp_logic_set_threshold(t_pdp_logic *x, t_floatarg f)
-{
- /* using a pointer as a variable hmm? */
- if (f<0.0f) f = 0.0f;
- if (f>1.0f) f = 1.0f;
- x->x_mask = (void *)((u32)(((float)0x7fff) * f));
-}
-
-static void pdp_logic_set_depth(t_pdp_logic *x, t_floatarg f)
-{
- u32 mask;
- int shift = (16 - ((int)f));
- if (shift < 0) shift = 0;
- if (shift > 16) shift = 16;
- mask = ((0xffff)<<shift) & 0xffff;
- x->x_mask = (void *)mask;
-
-}
-
-
-static void pdp_logic_free(t_pdp_logic *x)
-{
- /* remove process method from queue before deleting data */
- pdp_imagebase_free(x);
-}
-
-t_class *pdp_logic_class;
-
-
-/* common new method */
-void *pdp_logic_new(void)
-{
- t_pdp_logic *x = (t_pdp_logic *)pd_new(pdp_logic_class);
-
- /* super init */
- pdp_imagebase_init(x);
-
- /* outlet */
- pdp_base_add_pdp_outlet(x);
- x->x_mask = 0;
-
- return (void *)x;
-}
-
-void *pdp_logic_new_and(void)
-{
- t_pdp_logic *x = pdp_logic_new();
- /* init in/out */
- pdp_base_add_pdp_inlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_logic_process_and);
-
- return (void *)x;
-}
-
-void *pdp_logic_new_or(void)
-{
- t_pdp_logic *x = pdp_logic_new();
- /* init in/out */
- pdp_base_add_pdp_inlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_logic_process_or);
- return (void *)x;
-}
-
-void *pdp_logic_new_xor(void)
-{
- t_pdp_logic *x = pdp_logic_new();
- /* init in/out */
- pdp_base_add_pdp_inlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_logic_process_xor);
- return (void *)x;
-}
-
-void *pdp_logic_new_not(void)
-{
- t_pdp_logic *x = pdp_logic_new();
- /* init in/out */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_logic_process_not);
- return (void *)x;
-}
-
-void *pdp_logic_new_mask(void)
-{
- t_pdp_logic *x = pdp_logic_new();
- /* init in/out */
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("mask"));
- pdp_base_set_process_method(x, (t_pdp_method)pdp_logic_process_mask);
-
- x->x_mask = (void *)0xffff;
- return (void *)x;
-}
-
-void *pdp_logic_new_depth(void)
-{
- t_pdp_logic *x = pdp_logic_new();
- /* init in/out */
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("depth"));
- pdp_base_set_process_method(x, (t_pdp_method)pdp_logic_process_mask);
-
- x->x_mask = (void *)0xffff;
- return (void *)x;
-}
-
-void *pdp_logic_new_softthresh(t_floatarg f)
-{
- t_pdp_logic *x = pdp_logic_new();
- /* init in/out */
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("threshold"));
- pdp_base_set_process_method(x, (t_pdp_method)pdp_logic_process_softthresh);
- pdp_logic_set_threshold(x,f);
-
- return (void *)x;
-}
-
-
-void *pdp_logic_new_hardthresh(t_floatarg f)
-{
- t_pdp_logic *x = pdp_logic_new();
- /* init in/out */
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("threshold"));
- pdp_base_set_process_method(x, (t_pdp_method)pdp_logic_process_hardthresh);
- pdp_logic_set_threshold(x,f);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_logic_setup(void)
-{
-
-
- pdp_logic_class = class_new(gensym("pdp_and"), (t_newmethod)pdp_logic_new_and,
- (t_method)pdp_logic_free, sizeof(t_pdp_logic), 0, A_DEFFLOAT, A_NULL);
-
- pdp_imagebase_setup(pdp_logic_class);
-
- class_addcreator((t_newmethod)pdp_logic_new_or, gensym("pdp_or"), A_NULL);
- class_addcreator((t_newmethod)pdp_logic_new_xor, gensym("pdp_xor"), A_NULL);
- class_addcreator((t_newmethod)pdp_logic_new_not, gensym("pdp_not"), A_NULL);
- class_addcreator((t_newmethod)pdp_logic_new_mask, gensym("pdp_bitmask"), A_NULL);
- class_addcreator((t_newmethod)pdp_logic_new_depth, gensym("pdp_bitdepth"), A_NULL);
- class_addcreator((t_newmethod)pdp_logic_new_softthresh, gensym("pdp_sthresh"), A_NULL);
- class_addcreator((t_newmethod)pdp_logic_new_hardthresh, gensym("pdp_hthresh"), A_NULL);
-
- class_addmethod(pdp_logic_class, (t_method)pdp_logic_set_mask, gensym("mask"), A_FLOAT, A_NULL);
- class_addmethod(pdp_logic_class, (t_method)pdp_logic_set_depth, gensym("depth"), A_FLOAT, A_NULL);
- class_addmethod(pdp_logic_class, (t_method)pdp_logic_set_threshold, gensym("threshold"), A_FLOAT, A_NULL);
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_mix.c b/modules/image_basic/pdp_mix.c
deleted file mode 100644
index 2d01d38..0000000
--- a/modules/image_basic/pdp_mix.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-typedef struct pdp_mix_struct
-{
- t_pdp_imagebase x_base;
-
- t_outlet *x_outlet0;
- t_outlet *x_outlet1;
-
- void *x_mixer;
-
- int x_extrapolate;
-
-} t_pdp_mix;
-
-
-static void pdp_mix_process(t_pdp_mix *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- int p1 = pdp_base_get_packet(x, 1);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_2buf(&pdp_imageproc_mix_process, x->x_mixer, mask, p0, p1);
-}
-
-
-static void pdp_mix_mix(t_pdp_mix *x, t_floatarg f)
-{
- float f2;
- if (!x->x_extrapolate){
- if (f < 0.0f) f = 0.0f;
- if (f > 1.0f) f = 1.0f;
- }
-
- f2 = (1.0f - f);
- pdp_imageproc_mix_setleftgain(x->x_mixer, f2);
- pdp_imageproc_mix_setrightgain(x->x_mixer, f);
-
-}
-
-static void pdp_mix_mix1(t_pdp_mix *x, t_floatarg f)
-{
- pdp_imageproc_mix_setleftgain(x->x_mixer, f);
-
-}
-static void pdp_mix_mix2(t_pdp_mix *x, t_floatarg f2)
-{
- pdp_imageproc_mix_setrightgain(x->x_mixer, f2);
-}
-
-static void pdp_mix_extrapolate(t_pdp_mix *x, t_floatarg f)
-{
- if (f == 0.0f) x->x_extrapolate = 0;
- if (f == 1.0f) x->x_extrapolate = 1;
-}
-
-
-static void pdp_mix_free(t_pdp_mix *x)
-{
- pdp_imagebase_free(x);
- pdp_imageproc_mix_delete(x->x_mixer);
-}
-
-t_class *pdp_mix_class;
-t_class *pdp_mix2_class;
-
-
-void *pdp_mix_common_init(t_pdp_mix *x)
-{
- int i;
-
- pdp_imagebase_init(x);
- pdp_base_add_pdp_inlet(x);
- pdp_base_add_pdp_outlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_mix_process);
-
- x->x_extrapolate = 0;
- x->x_mixer = pdp_imageproc_mix_new();
- pdp_mix_mix(x, 0.0f);
-
- return (void *)x;
-}
-
-
-void *pdp_mix_new(t_floatarg mix)
-{
- t_pdp_mix *x = (t_pdp_mix *)pd_new(pdp_mix_class);
- pdp_mix_common_init(x);
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("mix"));
-
- if (mix == 0.0f) mix = 0.5f;
- pdp_mix_mix(x, mix);
- return (void *)x;
-}
-
-void *pdp_mix2_new(t_floatarg mix1, t_floatarg mix2)
-{
- t_pdp_mix *x = (t_pdp_mix *)pd_new(pdp_mix2_class);
- pdp_mix_common_init(x);
-
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("mix1"));
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("mix2"));
-
- if ((mix1 == 0.0f) && (mix2 == 0.0f)) mix1 = mix2 = 0.5f;
- pdp_mix_mix1(x, mix1);
- pdp_mix_mix2(x, mix2);
- return (void *)x;
-}
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-
-void pdp_mix_setup(void)
-{
-
-
- pdp_mix_class = class_new(gensym("pdp_mix"), (t_newmethod)pdp_mix_new,
- (t_method)pdp_mix_free, sizeof(t_pdp_mix), 0, A_DEFFLOAT, A_NULL);
-
- pdp_imagebase_setup(pdp_mix_class);
- class_addmethod(pdp_mix_class, (t_method)pdp_mix_mix, gensym("mix"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_mix_class, (t_method)pdp_mix_extrapolate, gensym("extrapolate"), A_DEFFLOAT, A_NULL);
-
-
-
-
- pdp_mix2_class = class_new(gensym("pdp_mix2"), (t_newmethod)pdp_mix2_new,
- (t_method)pdp_mix_free, sizeof(t_pdp_mix), 0, A_DEFFLOAT, A_DEFFLOAT, A_NULL);
-
- pdp_imagebase_setup(pdp_mix2_class);
- class_addmethod(pdp_mix2_class, (t_method)pdp_mix_mix1, gensym("mix1"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_mix2_class, (t_method)pdp_mix_mix2, gensym("mix2"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_mix2_class, (t_method)pdp_mix_extrapolate, gensym("extrapolate"), A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_mul.c b/modules/image_basic/pdp_mul.c
deleted file mode 100644
index c7321d7..0000000
--- a/modules/image_basic/pdp_mul.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-typedef struct pdp_mul_struct
-{
- t_pdp_imagebase x_base;
-
-} t_pdp_mul;
-
-
-
-static void pdp_mul_process(t_pdp_mul *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- int p1 = pdp_base_get_packet(x, 1);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_2buf(&pdp_imageproc_mul_process, 0, mask, p0, p1);
-}
-
-
-
-static void pdp_mul_free(t_pdp_mul *x)
-{
- pdp_imagebase_free(x);
-}
-
-t_class *pdp_mul_class;
-
-
-
-void *pdp_mul_new(void)
-{
- t_pdp_mul *x = (t_pdp_mul *)pd_new(pdp_mul_class);
-
- /* super init */
- pdp_imagebase_init(x);
- pdp_base_add_pdp_inlet(x);
- pdp_base_add_pdp_outlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_mul_process);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_mul_setup(void)
-{
-
-
- pdp_mul_class = class_new(gensym("pdp_mul"), (t_newmethod)pdp_mul_new,
- (t_method)pdp_mul_free, sizeof(t_pdp_mul), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_mul_class);
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_noise.c b/modules/image_basic/pdp_noise.c
deleted file mode 100644
index cb8f772..0000000
--- a/modules/image_basic/pdp_noise.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-
-typedef struct pdp_noise_struct
-{
- t_pdp_imagebase x_base;
-
- int x_packet0;
- t_outlet *x_outlet0;
- void *x_noisegen;
-
- t_symbol *x_type;
-
- unsigned int x_width;
- unsigned int x_height;
-
-} t_pdp_noise;
-
-
-
-void pdp_noise_type(t_pdp_noise *x, t_symbol *s)
-{
- x->x_type = s;
-}
-
-
-void pdp_noise_random(t_pdp_noise *x, t_floatarg seed)
-{
- if (seed == 0.0f) seed = (float)random();
- pdp_imageproc_random_setseed(x->x_noisegen, seed);
-
-}
-
-/* called inside pdp thread */
-static void pdp_noise_process(t_pdp_noise *x)
-{
- /* seed the 16 bit rng with a new random number from the clib */
- pdp_noise_random(x, 0.0f);
-
- /* create new packet */
- if (x->x_type == gensym("grey")) {
- x->x_packet0 = pdp_packet_new_image_grey(x->x_width, x->x_height);
- }
- else if (x->x_type == gensym("yv12")) {
- x->x_packet0 = pdp_packet_new_image_YCrCb(x->x_width, x->x_height);
- }
- else return;
-
- /* call the image processor */
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_random_process, x->x_noisegen,
- -1, x->x_packet0);
-}
-
-/* called inside pd thread: involves an outlet */
-static void pdp_noise_postproc(t_pdp_noise *x)
-{
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet0);
-}
-
-static void pdp_noise_bang(t_pdp_noise *x)
-{
- pdp_base_bang(x);
-}
-
-static void pdp_noise_dim(t_pdp_noise *x, t_floatarg w, t_floatarg h)
-{
- x->x_width = pdp_imageproc_legalwidth((int)w);
- x->x_height = pdp_imageproc_legalheight((int)h);
- //post("dims %d %d", x->x_width, x->x_height);
-}
-
-
-static void pdp_noise_free(t_pdp_noise *x)
-{
- pdp_imagebase_free(x);
-
- /* tidy up */
- pdp_packet_mark_unused(x->x_packet0);
- pdp_imageproc_random_delete(x->x_noisegen);
-}
-
-t_class *pdp_noise_class;
-
-
-void *pdp_noise_new(void)
-{
- int i;
-
- t_pdp_noise *x = (t_pdp_noise *)pd_new(pdp_noise_class);
-
- pdp_imagebase_init(x);
- pdp_base_disable_active_inlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_noise_process);
- pdp_base_set_postproc_method(x, (t_pdp_method)pdp_noise_postproc);
-
- x->x_outlet0 = pdp_base_add_pdp_outlet(x);
- x->x_packet0 = -1;
-
- x->x_width = 320;
- x->x_height = 240;
-
- x->x_noisegen = pdp_imageproc_random_new();
-
- pdp_noise_random(x, 0.0f);
- pdp_noise_type(x, gensym("yv12"));
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-
-void pdp_noise_setup(void)
-{
-
-
- pdp_noise_class = class_new(gensym("pdp_noise"), (t_newmethod)pdp_noise_new,
- (t_method)pdp_noise_free, sizeof(t_pdp_noise), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_noise_class);
-
- class_addmethod(pdp_noise_class, (t_method)pdp_noise_random, gensym("seed"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_noise_class, (t_method)pdp_noise_type, gensym("type"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_noise_class, (t_method)pdp_noise_dim, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_noise_class, (t_method)pdp_noise_bang, gensym("bang"), A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_plasma.c b/modules/image_basic/pdp_plasma.c
deleted file mode 100644
index 78d886c..0000000
--- a/modules/image_basic/pdp_plasma.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-
-typedef struct pdp_plasma_struct
-{
- t_pdp_imagebase x_base;
-
- int x_packet0;
- t_outlet *x_outlet0;
- void *x_plasmagen;
-
- t_symbol *x_type;
-
- unsigned int x_width;
- unsigned int x_height;
-
-} t_pdp_plasma;
-
-
-
-void pdp_plasma_type(t_pdp_plasma *x, t_symbol *s)
-{
- x->x_type = s;
-}
-
-
-void pdp_plasma_random(t_pdp_plasma *x, t_floatarg seed)
-{
- if (seed == 0.0f) seed = (float)random();
- pdp_imageproc_plasma_setseed(x->x_plasmagen, seed);
-
-}
-
-void pdp_plasma_turbulence(t_pdp_plasma *x, t_floatarg f)
-{
- pdp_imageproc_plasma_setturbulence(x->x_plasmagen, f);
-
-}
-
-/* called inside pdp thread */
-static void pdp_plasma_process(t_pdp_plasma *x)
-{
- /* seed the 16 bit rng with a new random number from the clib */
- pdp_plasma_random(x, 0.0f);
-
- /* create new packet */
- if (x->x_type == gensym("grey")) {x->x_packet0 = pdp_packet_new_image_grey(x->x_width, x->x_height);}
- else if (x->x_type == gensym("yv12")) {x->x_packet0 = pdp_packet_new_image_YCrCb(x->x_width, x->x_height);}
- else return;
-
- /* call the image processor */
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_plasma_process, x->x_plasmagen,
- -1, x->x_packet0);
-}
-
-/* called inside pd thread: involves an outlet */
-static void pdp_plasma_postproc(t_pdp_plasma *x)
-{
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet0);
-}
-
-static void pdp_plasma_bang(t_pdp_plasma *x)
-{
- pdp_base_bang(x);
-}
-
-static void pdp_plasma_dim(t_pdp_plasma *x, t_floatarg w, t_floatarg h)
-{
- x->x_width = pdp_imageproc_legalwidth((int)w);
- x->x_height = pdp_imageproc_legalheight((int)h);
- //post("dims %d %d", x->x_width, x->x_height);
-}
-
-
-static void pdp_plasma_free(t_pdp_plasma *x)
-{
- pdp_imagebase_free(x);
-
- /* tidy up */
- pdp_packet_mark_unused(x->x_packet0);
- pdp_imageproc_plasma_delete(x->x_plasmagen);
-}
-
-t_class *pdp_plasma_class;
-
-
-void *pdp_plasma_new(void)
-{
- int i;
-
- t_pdp_plasma *x = (t_pdp_plasma *)pd_new(pdp_plasma_class);
-
- pdp_imagebase_init(x);
- pdp_base_disable_active_inlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_plasma_process);
- pdp_base_set_postproc_method(x, (t_pdp_method)pdp_plasma_postproc);
-
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("turbulence"));
- x->x_outlet0 = pdp_base_add_pdp_outlet(x);
- x->x_packet0 = -1;
-
- x->x_width = 320;
- x->x_height = 240;
-
- x->x_plasmagen = pdp_imageproc_plasma_new();
-
- pdp_plasma_random(x, 0.0f);
- pdp_plasma_type(x, gensym("yv12"));
- pdp_plasma_turbulence(x, 0.1);
-
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-
-void pdp_plasma_setup(void)
-{
-
-
- pdp_plasma_class = class_new(gensym("pdp_plasma"), (t_newmethod)pdp_plasma_new,
- (t_method)pdp_plasma_free, sizeof(t_pdp_plasma), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_plasma_class);
-
- class_addmethod(pdp_plasma_class, (t_method)pdp_plasma_random, gensym("seed"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_plasma_class, (t_method)pdp_plasma_turbulence, gensym("turbulence"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_plasma_class, (t_method)pdp_plasma_type, gensym("type"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_plasma_class, (t_method)pdp_plasma_dim, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_plasma_class, (t_method)pdp_plasma_bang, gensym("bang"), A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_randmix.c b/modules/image_basic/pdp_randmix.c
deleted file mode 100644
index 2fd6adf..0000000
--- a/modules/image_basic/pdp_randmix.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-typedef struct pdp_randmix_struct
-{
- t_pdp_imagebase x_base;
- void *x_randmixer;
-
-} t_pdp_randmix;
-
-
-void pdp_randmix_random(t_pdp_randmix *x, t_floatarg seed)
-{
- pdp_imageproc_randmix_setseed(x->x_randmixer, seed);
-}
-
-
-static void pdp_randmix_process(t_pdp_randmix *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- int p1 = pdp_base_get_packet(x, 1);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_2buf(&pdp_imageproc_randmix_process, x->x_randmixer, mask, p0, p1);
-
-}
-
-
-static void pdp_randmix_threshold(t_pdp_randmix *x, t_floatarg f)
-{
- pdp_imageproc_randmix_setthreshold(x->x_randmixer, f);
-
-}
-
-
-
-static void pdp_randmix_free(t_pdp_randmix *x)
-{
- pdp_imagebase_free(x);
- pdp_imageproc_randmix_delete(x->x_randmixer);
-}
-
-t_class *pdp_randmix_class;
-
-
-void *pdp_randmix_new(void)
-{
- int i;
-
- t_pdp_randmix *x = (t_pdp_randmix *)pd_new(pdp_randmix_class);
-
- pdp_imagebase_init(x);
- pdp_base_add_pdp_inlet(x);
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("threshold"));
-
- pdp_base_set_process_method(x, (t_pdp_method)pdp_randmix_process);
-
- pdp_base_add_pdp_outlet(x);
- x->x_randmixer = pdp_imageproc_randmix_new();
-
- pdp_randmix_threshold(x, 0.5f);
- pdp_randmix_random(x, 0.0f);
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-
-void pdp_randmix_setup(void)
-{
-
-
- pdp_randmix_class = class_new(gensym("pdp_randmix"), (t_newmethod)pdp_randmix_new,
- (t_method)pdp_randmix_free, sizeof(t_pdp_randmix), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_randmix_class);
-
- class_addmethod(pdp_randmix_class, (t_method)pdp_randmix_threshold, gensym("threshold"), A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_randmix_class, (t_method)pdp_randmix_random, gensym("seed"), A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_stateless.c b/modules/image_basic/pdp_stateless.c
deleted file mode 100644
index cdcf313..0000000
--- a/modules/image_basic/pdp_stateless.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Pure Data Packet module. Some stateless image operations.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-typedef struct pdp_stateless_struct
-{
- t_pdp_imagebase x_base;
-
-} t_pdp_stateless;
-
-
-
-static void pdp_stateless_process_abs(t_pdp_stateless *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_abs_process, 0, mask, p0);
-}
-
-static void pdp_stateless_process_hardthresh(t_pdp_stateless *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_hardthresh_process, 0, mask, p0);
-}
-
-static void pdp_stateless_process_zthresh(t_pdp_stateless *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_zthresh_process, 0, mask, p0);
-}
-
-static void pdp_stateless_process_positive(t_pdp_stateless *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_ispositive_process, 0, mask, p0);
-}
-
-static void pdp_stateless_process_sign(t_pdp_stateless *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_sign_process, 0, mask, p0);
-}
-
-static void pdp_stateless_process_flip_tb(t_pdp_stateless *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_flip_tb_process, 0, mask, p0);
-}
-
-static void pdp_stateless_process_flip_lr(t_pdp_stateless *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_1buf(&pdp_imageproc_flip_lr_process, 0, mask, p0);
-}
-
-static void pdp_stateless_free(t_pdp_stateless *x)
-{
- /* remove process method from queue before deleting data */
- pdp_imagebase_free(x);
-}
-
-t_class *pdp_stateless_class;
-
-
-/* common new method */
-void *pdp_stateless_new(void)
-{
- t_pdp_stateless *x = (t_pdp_stateless *)pd_new(pdp_stateless_class);
-
- /* super init */
- pdp_imagebase_init(x);
-
- /* outlet */
- pdp_base_add_pdp_outlet(x);
-
- return (void *)x;
-}
-
-void *pdp_stateless_new_abs(void)
-{
- t_pdp_stateless *x = pdp_stateless_new();
- /* init in/out */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_stateless_process_abs);
- return (void *)x;
-}
-
-void *pdp_stateless_new_zthresh(void)
-{
- t_pdp_stateless *x = pdp_stateless_new();
- /* init in/out */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_stateless_process_zthresh);
- return (void *)x;
-}
-
-void *pdp_stateless_new_positive(void)
-{
- t_pdp_stateless *x = pdp_stateless_new();
- /* init in/out */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_stateless_process_positive);
- return (void *)x;
-}
-
-void *pdp_stateless_new_sign(void)
-{
- t_pdp_stateless *x = pdp_stateless_new();
- /* init in/out */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_stateless_process_sign);
- return (void *)x;
-}
-
-void *pdp_stateless_new_flip_tb(void)
-{
- t_pdp_stateless *x = pdp_stateless_new();
- /* init in/out */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_stateless_process_flip_tb);
- return (void *)x;
-}
-
-
-void *pdp_stateless_new_flip_lr(void)
-{
- t_pdp_stateless *x = pdp_stateless_new();
- /* init in/out */
- pdp_base_set_process_method(x, (t_pdp_method)pdp_stateless_process_flip_lr);
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_stateless_setup(void)
-{
-
-
- pdp_stateless_class = class_new(gensym("pdp_abs"), (t_newmethod)pdp_stateless_new_abs,
- (t_method)pdp_stateless_free, sizeof(t_pdp_stateless), 0, A_NULL);
-
- pdp_imagebase_setup(pdp_stateless_class);
-
- class_addcreator((t_newmethod)pdp_stateless_new_zthresh, gensym("pdp_zthresh"), A_NULL);
- class_addcreator((t_newmethod)pdp_stateless_new_positive, gensym("pdp_positive"), A_NULL);
- class_addcreator((t_newmethod)pdp_stateless_new_sign, gensym("pdp_sign"), A_NULL);
- class_addcreator((t_newmethod)pdp_stateless_new_flip_tb, gensym("pdp_flip_tb"), A_NULL);
- class_addcreator((t_newmethod)pdp_stateless_new_flip_lr, gensym("pdp_flip_lr"), A_NULL);
-
- /* future extensions */
- //class_addcreator((t_newmethod)pdp_stateless_new_garble, gensym("pdp_garble"), A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_basic/pdp_zoom.c b/modules/image_basic/pdp_zoom.c
deleted file mode 100644
index 48ba167..0000000
--- a/modules/image_basic/pdp_zoom.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_imagebase.h"
-
-
-
-typedef struct pdp_zoom_struct
-{
- t_pdp_imagebase x_base;
-
- int x_packet1;
- t_outlet *x_outlet0;
- void *x_zoom;
-
- int x_quality; //not used
-
-
-} t_pdp_zoom;
-
-
-static void pdp_zoom_process(t_pdp_zoom *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- u32 mask = pdp_imagebase_get_chanmask(x);
- pdp_imageproc_dispatch_2buf(&pdp_imageproc_resample_affinemap_process, x->x_zoom, mask, p0, x->x_packet1);
-}
-
-static void pdp_zoom_postproc(t_pdp_zoom *x)
-{
- /* delete source packet */
- pdp_packet_mark_unused(pdp_base_move_packet(x, 0));
-
- /* unregister and propagate if valid dest packet */
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet1);
-}
-
-static void pdp_zoom_preproc(t_pdp_zoom *x)
-{
- int p = pdp_base_get_packet(x, 0);
- t_pdp *header0 = pdp_packet_header(p);
- if ((header0) && (PDP_IMAGE == header0->type)){
- x->x_packet1 = pdp_packet_clone_rw(p);
- }
-
-}
-
-
-
-static void pdp_zoom_zoom_x(t_pdp_zoom *x, t_floatarg f)
-{
- pdp_imageproc_resample_affinemap_setzoomx(x->x_zoom, f);
-}
-
-static void pdp_zoom_angle(t_pdp_zoom *x, t_floatarg f)
-{
- pdp_imageproc_resample_affinemap_setangle(x->x_zoom, f);
-}
-
-static void pdp_zoom_zoom_y(t_pdp_zoom *x, t_floatarg f)
-{
- pdp_imageproc_resample_affinemap_setzoomy(x->x_zoom, f);
-}
-
-static void pdp_zoom_zoom(t_pdp_zoom *x, t_floatarg f)
-{
- pdp_zoom_zoom_x(x, f);
- pdp_zoom_zoom_y(x, f);
-}
-
-static void pdp_zoom_center_x(t_pdp_zoom *x, t_floatarg f)
-{
- pdp_imageproc_resample_affinemap_setcenterx(x->x_zoom, f);
-}
-
-static void pdp_zoom_center_y(t_pdp_zoom *x, t_floatarg f)
-{
- pdp_imageproc_resample_affinemap_setcentery(x->x_zoom, f);
-}
-static void pdp_zoom_center(t_pdp_zoom *x, t_floatarg fx, t_floatarg fy)
-{
- pdp_zoom_center_x(x, fx);
- pdp_zoom_center_y(x, fy);
-}
-
-// not used
-static void pdp_zoom_quality(t_pdp_zoom *x, t_floatarg f)
-{
- if (f==0) x->x_quality = 0;
- if (f==1) x->x_quality = 1;
-}
-
-
-t_class *pdp_zoom_class;
-
-
-
-void pdp_zoom_free(t_pdp_zoom *x)
-{
- pdp_imagebase_free(x);
- pdp_imageproc_resample_affinemap_delete(x->x_zoom);
- pdp_packet_mark_unused(x->x_packet1);
-}
-
-
-void pdp_zoom_init_common(t_pdp_zoom *x)
-{
- pdp_imagebase_init(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_zoom_process);
- pdp_base_set_postproc_method(x, (t_pdp_method)pdp_zoom_postproc);
- pdp_base_set_preproc_method(x, (t_pdp_method)pdp_zoom_preproc);
-
- x->x_outlet0 = pdp_base_add_pdp_outlet(x);
- x->x_packet1 = -1;
- x->x_zoom = pdp_imageproc_resample_affinemap_new();
-
- //quality is not used: all routines are "high quality" bilinear
- //pdp_zoom_quality(x, 1);
- pdp_zoom_center_x(x, 0.5f);
- pdp_zoom_center_y(x, 0.5f);
-
-}
-
-
-void *pdp_zoom_new(t_floatarg zoom)
-{
- t_pdp_zoom *x = (t_pdp_zoom *)pd_new(pdp_zoom_class);
-
- pdp_zoom_init_common(x);
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("zoom"));
-
- if (zoom == 0.0f) zoom = 1.0f;
- pdp_zoom_zoom(x, zoom);
- pdp_zoom_angle(x, 0.0f);
-
- return (void *)x;
-}
-
-void *pdp_zrot_new(t_floatarg zoom, t_floatarg angle)
-{
- t_pdp_zoom *x = (t_pdp_zoom *)pd_new(pdp_zoom_class);
-
- pdp_zoom_init_common(x);
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("zoom"));
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("angle"));
-
-
- if (zoom == 0.0f) zoom = 1.0f;
- pdp_zoom_zoom(x, zoom);
- pdp_zoom_angle(x, angle);
-
- return (void *)x;
-}
-
-void *pdp_rotate_new(t_floatarg angle)
-{
- t_pdp_zoom *x = (t_pdp_zoom *)pd_new(pdp_zoom_class);
-
- pdp_zoom_init_common(x);
-
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("angle"));
-
- pdp_zoom_zoom(x, 1.0f);
- pdp_zoom_angle(x, angle);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_zoom_setup(void)
-{
-
- pdp_zoom_class = class_new(gensym("pdp_zoom"), (t_newmethod)pdp_zoom_new,
- (t_method)pdp_zoom_free, sizeof(t_pdp_zoom), 0, A_DEFFLOAT, A_NULL);
-
- class_addcreator((t_newmethod)pdp_zrot_new, gensym("pdp_zrot"), A_DEFFLOAT, A_DEFFLOAT, A_NULL);
- class_addcreator((t_newmethod)pdp_rotate_new, gensym("pdp_rotate"), A_DEFFLOAT, A_NULL);
-
- pdp_imagebase_setup(pdp_zoom_class);
-
- class_addmethod(pdp_zoom_class, (t_method)pdp_zoom_quality, gensym("quality"), A_FLOAT, A_NULL);
- class_addmethod(pdp_zoom_class, (t_method)pdp_zoom_center_x, gensym("centerx"), A_FLOAT, A_NULL);
- class_addmethod(pdp_zoom_class, (t_method)pdp_zoom_center_y, gensym("centery"), A_FLOAT, A_NULL);
- class_addmethod(pdp_zoom_class, (t_method)pdp_zoom_center, gensym("center"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_zoom_class, (t_method)pdp_zoom_zoom_x, gensym("zoomx"), A_FLOAT, A_NULL);
- class_addmethod(pdp_zoom_class, (t_method)pdp_zoom_zoom_y, gensym("zoomy"), A_FLOAT, A_NULL);
- class_addmethod(pdp_zoom_class, (t_method)pdp_zoom_zoom, gensym("zoom"), A_FLOAT, A_NULL);
- class_addmethod(pdp_zoom_class, (t_method)pdp_zoom_angle, gensym("angle"), A_FLOAT, A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_io/Makefile b/modules/image_io/Makefile
deleted file mode 100644
index b306ad8..0000000
--- a/modules/image_io/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-current: all_modules
-
-include ../../Makefile.config
-
-# build optional modules
-all_modules: $(PDP_OPTMOD)
-
-clean:
- rm -f *~
- rm -f *.o
-
diff --git a/modules/image_io/README b/modules/image_io/README
deleted file mode 100644
index 9493047..0000000
--- a/modules/image_io/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains input/output modules for image packets.
-Most of this is platform dependent stuff, and will be conditionally compiled.
diff --git a/modules/image_io/pdp_glx.c b/modules/image_io/pdp_glx.c
deleted file mode 100644
index 810912e..0000000
--- a/modules/image_io/pdp_glx.c
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-// gl stuff
-#include <GL/gl.h>
-#include <GL/glx.h>
-#include <GL/glu.h>
-//#include <GL/glut.h>
-
-// pdp stuff
-#include "pdp.h"
-#include "pdp_base.h"
-
-// some x window glue code
-#include "pdp_xwindow.h"
-
-// pdp stuff
-#include "pdp.h"
-#include "pdp_llconv.h"
-//#include "pdp_opengl.h"
-
-
-/* initial image dimensions */
-#define PDP_OGL_W 320
-#define PDP_OGL_H 240
-
-#define PDP_OGL_AUTOCREATE_RETRY 10
-
-
-typedef struct pdp_glx_struct
-{
- t_object x_obj;
-
- t_pdp_xwindow x_xwin;
-
- t_outlet *x_outlet;
-
- int x_packet0;
- int x_queue_id;
- t_symbol *x_display;
-
- Display *x_dpy;
-
- XVisualInfo *x_vis_info;
- GLXContext x_glx_context;
-
- GLuint x_texture;
- u32 x_tex_width;
- u32 x_tex_height;
-
- unsigned char *x_data;
- unsigned int x_width;
- unsigned int x_height;
- int x_last_encoding;
-
- int x_initialized;
- int x_autocreate;
-
-} t_pdp_glx;
-
-
-
-static void pdp_glx_cursor(t_pdp_glx *x, t_floatarg f)
-{
- pdp_xwindow_cursor(&x->x_xwin, f);
-}
-
-static void pdp_glx_destroy(t_pdp_glx* x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- XEvent e;
-
- if (x->x_initialized){
- pdp_procqueue_finish(q, x->x_queue_id);
- x->x_queue_id = -1;
- glXDestroyContext(x->x_dpy, x->x_glx_context);
- pdp_xwindow_close(&x->x_xwin);
- XCloseDisplay(x->x_dpy);
- x->x_initialized = false;
- }
-
-}
-
-
-static void pdp_glx_fullscreen(t_pdp_glx *x)
-{
- pdp_xwindow_fullscreen(&x->x_xwin);
-}
-
-static void pdp_glx_resize(t_pdp_glx* x, t_floatarg width, t_floatarg height)
-{
- pdp_xwindow_resize(&x->x_xwin, width, height);
-}
-
-static void pdp_glx_move(t_pdp_glx* x, t_floatarg width, t_floatarg height)
-{
- pdp_xwindow_move(&x->x_xwin, width, height);
-}
-
-static void pdp_glx_moveresize(t_pdp_glx* x, t_floatarg xoff, t_floatarg yoff, t_floatarg width, t_floatarg height)
-{
- pdp_xwindow_moveresize(&x->x_xwin, xoff, yoff, width, height);
-}
-
-static void pdp_glx_tile(t_pdp_glx* x, t_floatarg xtiles, t_floatarg ytiles, t_floatarg i, t_floatarg j)
-{
- pdp_xwindow_tile(&x->x_xwin, xtiles, ytiles, i, j);
-}
-
-
-
-
-void pdp_glx_generate_texture(t_pdp_glx *x)
-{
- u32 width = x->x_tex_width;
- u32 height = x->x_tex_height;
- u32 depth = 4;
- u32 i;
-
- u8 *dummydata = 0;
-
- while (x->x_width > width) width <<= 1;
- while (x->x_height > height) height <<= 1;
-
- dummydata = (u8 *)pdp_alloc(width*height*depth);
-
- for (i=0; i<width*height*depth; i++){dummydata[i] = random(); }
-
- /* set window context current */
- glXMakeCurrent(x->x_dpy, x->x_xwin.win, x->x_glx_context);
-
- /* generate texture if necessary */
- if (!glIsTexture(x->x_texture)) glGenTextures(1, &(x->x_texture));
-
- glBindTexture(GL_TEXTURE_2D, x->x_texture);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, dummydata);
-
- pdp_dealloc(dummydata);
-
- x->x_tex_width = width;
- x->x_tex_height = height;
-}
-
-void pdp_glx_regenerate_texture(t_pdp_glx *x)
-{
- if ((x->x_width > x->x_tex_width) || (x->x_height > x->x_tex_height)) pdp_glx_generate_texture(x);
-
-}
-
-
-static void pdp_glx_create(t_pdp_glx* x)
-{
- unsigned int *uintdata = (unsigned int *)(x->x_data);
- XEvent e;
- unsigned int i;
- static int vis_attr[] = {GLX_RGBA, GLX_RED_SIZE, 4, GLX_GREEN_SIZE, 4, GLX_BLUE_SIZE, 4,
- GLX_DEPTH_SIZE, 16, GLX_DOUBLEBUFFER, None};
-
-
- if (x->x_initialized) return;
-
- /* manually open a display */
- if (NULL == (x->x_dpy = XOpenDisplay(x->x_display->s_name))){
- post("pdp_glx: cant open display %s\n",x->x_display->s_name);
- x->x_initialized = false;
- return;
- }
-
- /* create a window on the display */
- if (!(x->x_initialized = pdp_xwindow_create_on_display(&x->x_xwin, x->x_dpy)))
- goto exit_close_dpy;
-
-
- /* create a glx visual */
- if (!(x->x_vis_info = glXChooseVisual(x->x_dpy, x->x_xwin.screen, vis_attr))){
- post("pdp_glx: can't create visual");
- goto exit_close_win;
- }
- //post("visual: %x", x->x_vis_info);
-
- /* create the rendering context */
- if (!(x->x_glx_context = glXCreateContext(x->x_dpy, x->x_vis_info, 0 /*share list*/, GL_TRUE))){
- post("pdp_glx: can't create render context");
- goto exit_close_win;
- }
- //post("context: %x", x->x_glx_context);
-
-
- /* create texture */
- pdp_glx_generate_texture(x);
-
-
- /* we're done initializing */
- x->x_initialized = true;
-
- /* disable/enable cursor */
- //pdp_glx_cursor(x, x->x_cursor);
- return;
-
-
- exit_close_win:
- pdp_xwindow_close(&x->x_xwin);
- exit_close_dpy:
- XCloseDisplay(x->x_dpy);
- x->x_initialized = false;
- return;
-}
-
-static int pdp_glx_try_autocreate(t_pdp_glx *x)
-{
-
- if (x->x_autocreate){
- post("pdp_glx: autocreate window");
- pdp_glx_create(x);
- if (!(x->x_initialized)){
- x->x_autocreate--;
- if (!x->x_autocreate){
- post ("pdp_glx: autocreate failed %d times: disabled", PDP_OGL_AUTOCREATE_RETRY);
- post ("pdp_glx: send [autocreate 1] message to re-enable");
- return 0;
- }
- }
- else return 1;
-
- }
- return 0;
-}
-
-static void pdp_glx_bang(t_pdp_glx *x);
-
-static void pdp_glx_fill_texture(t_pdp_glx *x)
-{
- t_pdp *header = pdp_packet_header(x->x_packet0);
- void *data = pdp_packet_data (x->x_packet0);
-
- int i = header->info.image.width;
-
-
- /* ensure image buffer is correct dim */
- if ((header->info.image.width != x->x_width)
- || (header->info.image.height != x->x_height)) {
- if (x->x_data) pdp_dealloc (x->x_data);
- x->x_width = header->info.image.width;
- x->x_height = header->info.image.height;
- x->x_data = pdp_alloc(4*x->x_width*x->x_height);
- }
-
- /* ensure texture is correct dim */
- pdp_glx_regenerate_texture(x);
-
-
- /* set window context current */
- glXMakeCurrent(x->x_dpy, x->x_xwin.win, x->x_glx_context);
- glBindTexture(GL_TEXTURE_2D, x->x_texture);
-
- switch (header->info.image.encoding){
- case PDP_IMAGE_GREY:
- /* convert image to greyscale 8 bit */
- pdp_llconv(data,RIF_GREY______S16, x->x_data, RIF_GREY______U8, x->x_width, x->x_height);
-
- /* upload grey subtexture */
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, x->x_width, x->x_height, GL_LUMINANCE, GL_UNSIGNED_BYTE, x->x_data);
-
- break;
- case PDP_IMAGE_YV12:
-
- /* convert image to rgb 8 bit */
- pdp_llconv(data,RIF_YVU__P411_S16, x->x_data, RIF_RGB__P____U8, x->x_width, x->x_height);
-
- /* upload subtexture */
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, x->x_width, x->x_height, GL_RGB, GL_UNSIGNED_BYTE, x->x_data);
-
- break;
- default:
- break;
- }
-
-
-}
-
-static void pdp_glx_process(t_pdp_glx *x)
-{
- t_pdp *header = pdp_packet_header(x->x_packet0);
- void *data = pdp_packet_data (x->x_packet0);
-
-
- if (-1 != x->x_queue_id) return;
-
- /* check if window is initialized */
- if (!(x->x_initialized)){
- if (!pdp_glx_try_autocreate(x)) return;
- }
-
- /* check data packet */
- if (!(header)) {
- post("pdp_glx: invalid packet header");
- return;
- }
- if (PDP_IMAGE != header->type) {
- post("pdp_glx: packet is not a PDP_IMAGE");
- return;
- }
- if ((PDP_IMAGE_YV12 != header->info.image.encoding)
- && (PDP_IMAGE_GREY != header->info.image.encoding)) {
- post("pdp_glx: packet is not a PDP_IMAGE_YV12/GREY");
- return;
- }
-
-
- /* fill the texture with the data in the packet */
- pdp_glx_fill_texture(x);
-
- /* display the new image */
- pdp_glx_bang(x);
-
-
-}
-
-
-
-static void pdp_glx_display_texture(t_pdp_glx *x)
-{
- float fx = (float)x->x_width / x->x_tex_width;
- float fy = (float)x->x_height / x->x_tex_height;
-
- if (!x->x_initialized) return;
-
- /* set window context current */
- glXMakeCurrent(x->x_dpy, x->x_xwin.win, x->x_glx_context);
-
- /* setup viewport, projection and modelview */
- glViewport(0, 0, x->x_xwin.winwidth, x->x_xwin.winheight);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(0.0, x->x_xwin.winwidth, 0.0, x->x_xwin.winheight);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
-
- /* enable default texture */
- glEnable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, x->x_texture);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-
- /* display texture */
- glBegin(GL_QUADS);
- glTexCoord2f(fx, fy);
- glVertex2i(x->x_xwin.winwidth,0);
- glTexCoord2f(fx, 0);
- glVertex2i(x->x_xwin.winwidth, x->x_xwin.winheight);
- glTexCoord2f(0.0, 0.0);
- glVertex2i(0, x->x_xwin.winheight);
- glTexCoord2f(0, fy);
- glVertex2i(0,0);
- glEnd();
-
-
- glFlush();
- glXSwapBuffers(x->x_dpy,x->x_xwin.win);
-
-}
-
-
-
-/* redisplays image */
-static void pdp_glx_bang_thread(t_pdp_glx *x)
-{
-
-
- pdp_glx_display_texture(x);
- XFlush(x->x_dpy);
-
-}
-
-static void pdp_glx_bang_callback(t_pdp_glx *x)
-{
- /* receive events & output them */
- pdp_xwindow_send_events(&x->x_xwin, x->x_outlet);
-
- /* release the packet if there is one */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = -1;}
-
-static void pdp_glx_bang(t_pdp_glx *x)
-{
-
- /* check if window is initialized */
- if (!(x->x_initialized)){
- if (!pdp_glx_try_autocreate(x)) return;
- }
-
-
- /* if previous queued method returned
- schedule a new one, else ignore */
-
-/*
- if (-1 == x->x_queue_id) {
- pdp_queue_add(x, pdp_glx_bang_thread, pdp_glx_bang_callback, &x->x_queue_id);
- }
-*/
- /* don't process in thread */
- pdp_glx_bang_thread(x);
- pdp_glx_bang_callback(x);
-
-}
-
-
-
-static void pdp_glx_input_0(t_pdp_glx *x, t_symbol *s, t_floatarg f)
-{
-
- if (s == gensym("register_ro")) pdp_packet_copy_ro_or_drop(&x->x_packet0, (int)f);
- if (s == gensym("process")) pdp_glx_process(x);
-}
-
-
-
-static void pdp_glx_vga(t_pdp_glx *x)
-{
- pdp_glx_resize(x, 640, 480);
-}
-
-static void pdp_glx_autocreate(t_pdp_glx *x, t_floatarg f)
-{
- if (f != 0.0f) x->x_autocreate = PDP_OGL_AUTOCREATE_RETRY;
- else x->x_autocreate = 0;
-}
-
-static void pdp_glx_display(t_pdp_glx *x, t_symbol *s)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- pdp_procqueue_finish(q, x->x_queue_id);
- x->x_queue_id = -1;
- x->x_display = s;
- if (x->x_initialized){
- pdp_glx_destroy(x);
- pdp_glx_create(x);
- }
-}
-
-
-
-static void pdp_glx_free(t_pdp_glx *x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- pdp_procqueue_finish(q, x->x_queue_id);
- pdp_glx_destroy(x);
- pdp_xwindow_free(&x->x_xwin);
- if (x->x_data) pdp_dealloc (x->x_data);
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-t_class *pdp_glx_class;
-
-
-
-void *pdp_glx_new(void)
-{
- t_pdp_glx *x = (t_pdp_glx *)pd_new(pdp_glx_class);
-
- pdp_xwindow_init(&x->x_xwin);
-
- x->x_outlet = outlet_new(&x->x_obj, &s_anything);
-
- x->x_packet0 = -1;
- x->x_queue_id = -1;
- x->x_display = gensym(":0");
-
- x->x_dpy = 0;
-
- x->x_width = PDP_OGL_W;
- x->x_height = PDP_OGL_H;
-
- x->x_data = pdp_alloc(4*PDP_OGL_W*PDP_OGL_H);
-
- x->x_initialized = 0;
- pdp_glx_autocreate(x,1);
- x->x_last_encoding = -1;
-
- x->x_tex_width = 64;
- x->x_tex_height = 64;
-
- //pdp_glx_create(x);
-
- return (void *)x;
-}
-
-
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_glx_setup(void)
-{
-
-
- pdp_glx_class = class_new(gensym("pdp_glx"), (t_newmethod)pdp_glx_new,
- (t_method)pdp_glx_free, sizeof(t_pdp_glx), 0, A_NULL);
-
- /* add creator for pdp_tex_win */
-
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_bang, gensym("bang"), A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_create, gensym("open"), A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_create, gensym("create"), A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_autocreate, gensym("autocreate"), A_FLOAT, A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_destroy, gensym("destroy"), A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_destroy, gensym("close"), A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_move, gensym("move"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_move, gensym("pos"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_resize, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_resize, gensym("size"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_display, gensym("display"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_cursor, gensym("cursor"), A_FLOAT, A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_fullscreen, gensym("fullscreen"), A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_moveresize, gensym("posdim"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_tile, gensym("tile"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_NULL);
-
-
- /* accept both pdp and pdp_tex packets */
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-
- /* some shortcuts for the lazy */
- class_addmethod(pdp_glx_class, (t_method)pdp_glx_vga, gensym("vga"), A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
diff --git a/modules/image_io/pdp_qt.c b/modules/image_io/pdp_qt.c
deleted file mode 100644
index 5e1111c..0000000
--- a/modules/image_io/pdp_qt.c
+++ /dev/null
@@ -1,974 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-#include <quicktime/lqt.h>
-#include <quicktime/colormodels.h>
-
-#include "pdp.h"
-#include "pdp_llconv.h"
-
-
-#define min(x,y) ((x<y)?(x):(y))
-
-
-
-#define FREE(x) {if (x) {pdp_dealloc(x); x=0;} else post("free null pointer");}
-
-
-/* debug macro */
-//#define DEBUG_MSG_ENABLED
-
-#ifdef DEBUG_MSG_ENABLED
-
-#define DEBUG_MSG(EXP)\
-fprintf (stderr, "mark start: [" #EXP "], on line %d\n", __LINE__);\
- EXP \
-fprintf (stderr, "mark end: [" #EXP "], on line %d\n", __LINE__);
-
-#else
-#define DEBUG_MSG(EXP) EXP
-#endif
-
-typedef struct pdp_qt_struct
-{
- t_object x_obj;
- t_float x_f;
-
- float x_gain;
-
-
- t_symbol *x_name; // this is our name
- int x_istilde; // 0==pdp_qt / 1==pdp_qt~
- int x_syncaudio;
-
-
- /* clock object */
- t_clock *x_clock;
- int x_counter;
- int x_queue_id;
-
- /* audio outlets */
- t_outlet *x_outleft;
- t_outlet *x_outright;
-
- /* message outlets */
- t_outlet *x_outlet0;
- t_outlet *x_outlet1;
- t_outlet *x_outlet2;
-
- /* pdp data */
- int x_packet0;
-
- /* toggles */
- int x_loop;
- int x_autoplay;
-
- /* qt data */
- unsigned char ** x_qt_rows; // pointer array to rows / colour planes
- float ** x_qt_audiochans; // pointer array to audio channel buffers
- unsigned char * x_qt_frame;
- quicktime_t *x_qt;
- int x_qt_cmodel;
-
- //t_pdp_qt_data *x_state_data;
-
- /* audio data */
- int x_chunk_current;
- float *x_chunk_buf;
- float *x_chunk[2][2];
- int x_chunk_used[2]; // marks if chunk is used or not
- int x_chunk_size;
- int x_chunk_pos;
-
- /* global state */
- int x_initialized;
- int x_frame;
- int x_frame_thread;
- int x_process_in_thread;
-
-
- /* audio info */
- int x_audio_tracks; // ==0 means audio not available
- int x_audio_channels;
- long x_audio_samplerate;
- long x_audio_length;
-
- /* video info */
- int x_video_tracks; // ==0 means video not available
- float x_video_framerate;
- long x_video_length;
- unsigned int x_video_width;
- unsigned int x_video_height;
-
-
-} t_pdp_qt;
-
-
-static void pdp_qt_bang(t_pdp_qt *x);
-
-static void pdp_qt_close(t_pdp_qt *x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
-
- /* disable clock */
- clock_unset(x->x_clock);
- pdp_procqueue_finish(q, x->x_queue_id);
-
- if (x->x_initialized){
- /* close file */
- quicktime_close(x->x_qt);
- x->x_initialized = 0;
-
-
- /* free video data */
- if (x->x_video_tracks){
- FREE(x->x_qt_frame);
- FREE(x->x_qt_rows);
- x->x_video_tracks = 0;
- //x->x_qt_rows = 0;
- //x->x_qt_frame = 0;
- }
-
- /* free audio data */
- if (x->x_audio_tracks){
- x->x_chunk_used[0] = 0;
- x->x_chunk_used[1] = 0;
- FREE(x->x_chunk_buf);
- FREE(x->x_qt_audiochans);
- x->x_audio_tracks = 0;
- //x->x_qt_audiochans = 0;
- //x->x_chunk_buf = 0;
- x->x_chunk[0][0] = 0;
- x->x_chunk[0][1] = 0;
- x->x_chunk[1][0] = 0;
- x->x_chunk[1][1] = 0;
- }
-
-
- }
-
-
-}
-
-void pdp_qt_create_pdp_packet(t_pdp_qt *x)
-{
- t_pdp *header;
- t_image *image;
-
-
- /* round to next legal size */
- /* if size is illegal, image distortion will occur */
- u32 w = pdp_imageproc_legalwidth(x->x_video_width);
- u32 h = pdp_imageproc_legalheight(x->x_video_height);
-
-
- int nbpixels = w * h;
- int packet_size = (nbpixels + (nbpixels >> 1)) << 1;
-
-
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_new_image_YCrCb(w, h);
- header = pdp_packet_header(x->x_packet0);
- image = pdp_packet_image_info(x->x_packet0);
-
- if (!header){
- post("%s: ERROR: can't create new packet", x->x_name->s_name);
- return;
- }
-
-
- //header->info.image.encoding = (x->x_qt_cmodel == BC_RGB888) ? PDP_IMAGE_GREY : PDP_IMAGE_YV12;
- //image->encoding = PDP_IMAGE_YV12;
- //image->width = w;
- //image->height = h;
-}
-
-
-
-
-static void pdp_qt_open(t_pdp_qt *x, t_symbol *name)
-{
- unsigned int size;
- unsigned int i;
- unsigned int chunk_bytesize;
-
- post("%s: opening %s", x->x_name->s_name, name->s_name);
-
-
- /* close previous one */
- pdp_qt_close(x);
-
-
- /* check if qt file */
- if(0 == quicktime_check_sig(name->s_name)){
- post("%s: ERROR: not a quicktime file", x->x_name->s_name);
- goto exit;
- }
-
- /* open */
- DEBUG_MSG(x->x_qt = quicktime_open(name->s_name, 1, 0);)
- if (!(x->x_qt)){
- post("%s: ERROR: can't open file", x->x_name->s_name);
- goto exit;
- }
-
- /* check video */
- x->x_video_tracks = 0;
- if (quicktime_has_video(x->x_qt)) {
- x->x_video_framerate = quicktime_frame_rate (x->x_qt, 0);
- x->x_video_length = quicktime_video_length (x->x_qt, 0);
- x->x_video_width = quicktime_video_width (x->x_qt, 0);
- x->x_video_height = quicktime_video_height (x->x_qt, 0);
- post("%s: video stream found (%dx%d pixels, %0.00f fps, %d frames, %s codec)",
- x->x_name->s_name, x->x_video_width, x->x_video_height, x->x_video_framerate,
- x->x_video_length, quicktime_video_compressor(x->x_qt, 0));
- x->x_video_tracks = quicktime_video_tracks(x->x_qt);
-
- }
-
-
- /* check audior */
- x->x_audio_tracks = 0;
- if (quicktime_has_audio(x->x_qt)) {
- x->x_audio_tracks = quicktime_audio_tracks (x->x_qt);
- //x->x_audio_channels = quicktime_track_channels (x->x_qt, 0);
- x->x_audio_channels = lqt_total_channels (x->x_qt);
- x->x_audio_samplerate = quicktime_sample_rate (x->x_qt, 0);
- x->x_audio_length = quicktime_audio_length (x->x_qt, 0);
- x->x_chunk_size = (int)((float)x->x_audio_samplerate / x->x_video_framerate);
- post("%s: audio stream found (%d channels, %d Hz, %d samples, chunksize %d)",
- x->x_name->s_name, x->x_audio_channels, x->x_audio_samplerate, x->x_audio_length, x->x_chunk_size);
- }
-
- /* check if video codec is supported */
- if (x->x_video_tracks){
- if (!quicktime_supported_video(x->x_qt,0)) {
- post("%s: WARNING: unsupported video codec",x->x_name->s_name);
- x->x_video_tracks = 0;
- }
- }
-
- /* check if audio codec is supported */
- if (x->x_audio_tracks){
- if (!quicktime_supported_audio(x->x_qt,0)) {
- post("%s: WARNING: unsupported audio codec", x->x_name->s_name);
- x->x_audio_tracks = 0;
- }
- }
-
-
-
- /* check which colormodel to use */
- if (x->x_video_tracks){
-
- if (quicktime_reads_cmodel(x->x_qt,BC_YUV420P,0)){
- post("%s: using colormodel YUV420P", x->x_name->s_name);
- x->x_qt_cmodel = BC_YUV420P;
- }
- else if (quicktime_reads_cmodel(x->x_qt,BC_YUV422,0)){
- post("%s: using colormodel YUV422", x->x_name->s_name);
- x->x_qt_cmodel = BC_YUV422;
- }
- else if (quicktime_reads_cmodel(x->x_qt,BC_RGB888,0)){
- post("%s: using colormodel RGB888", x->x_name->s_name);
- x->x_qt_cmodel = BC_RGB888;
- }
- else {
- post("%s: WARNING: can't find a usable colour model", x->x_name->s_name);
- x->x_video_tracks = 0;
- }
-
- }
-
-
-
- /* no video == errors */
- if (!x->x_video_tracks) {
- post("%s: ERROR: no usable video stream found.", x->x_name->s_name);
- goto exit_close;
- }
-
-
- /* initialize video data structures */
- if (x->x_video_tracks){
-
- /* allocate enough space for all supported colormodels (24bpp)*/
- x->x_frame = 0;
- x->x_qt_frame = (unsigned char*)pdp_alloc(x->x_video_width * x->x_video_height * 3);
- x->x_qt_rows = (unsigned char **)pdp_alloc(sizeof(unsigned char *) * x->x_video_height);
- size = x->x_video_width * x->x_video_height;
-
- switch(x->x_qt_cmodel){
- case BC_YUV420P:
- /* planar with u&v 2x2 subsampled */
- x->x_qt_rows[0] = &x->x_qt_frame[0];
- x->x_qt_rows[2] = &x->x_qt_frame[size];
- x->x_qt_rows[1] = &x->x_qt_frame[size + (size>>2)];
- break;
-
- case BC_YUV422:
- /* packed with u&v 2x subsampled (lines) */
- /* later on we will convert this to planar */
- for(i=0; i< x->x_video_height; i++) x->x_qt_rows[i] = &x->x_qt_frame[i * x->x_video_width * 2];
- break;
-
- case BC_RGB888:
- /* packed rgb */
- /* later on we will convert this to planar */
- for(i=0; i< x->x_video_height; i++) x->x_qt_rows[i] = &x->x_qt_frame[i * x->x_video_width * 3];
- break;
-
- default:
- post("%s: error on init: unkown colour model",x->x_name->s_name);
- break;
- }
-
- DEBUG_MSG(quicktime_set_cmodel(x->x_qt, x->x_qt_cmodel);)
- outlet_float(x->x_outlet2, (float)quicktime_video_length(x->x_qt,0));
-
- }
-
- /* initialize audio data structures */
- if (x->x_audio_tracks){
- x->x_chunk_pos = 0;
- x->x_chunk_current = 0;
-
- chunk_bytesize = sizeof(float)*x->x_chunk_size;
- x->x_chunk_buf = (float *)pdp_alloc(chunk_bytesize * 4);
- memset(x->x_chunk_buf, 0, chunk_bytesize * 4);
- x->x_chunk[0][0] = x->x_chunk_buf;
- x->x_chunk[0][1] = x->x_chunk_buf + x->x_chunk_size ;
- x->x_chunk[1][0] = x->x_chunk_buf + x->x_chunk_size * 2;
- x->x_chunk[1][1] = x->x_chunk_buf + x->x_chunk_size * 3;
- x->x_chunk_used[0] = 0;
- x->x_chunk_used[1] = 0;
- x->x_syncaudio = x->x_istilde; //sync on audio if this is a tilde object
-
- DEBUG_MSG(if (x->x_audio_channels == 0) exit(1);)
- x->x_qt_audiochans = (float **)pdp_alloc(x->x_audio_channels * sizeof(float **));
- memset(x->x_qt_audiochans, 0, x->x_audio_channels * sizeof(float **));
- }
- else {
- x->x_syncaudio = 0;
- }
-
-
- /* everything went well */
- x->x_initialized = 1;
-
- /* start playback if outplay is on */
- if(x->x_autoplay) clock_delay(x->x_clock, 1000.0L / (double)x->x_video_framerate);
-
- /* brag about success */
- post("%s: %s opened", x->x_name->s_name, name->s_name);
-
- return;
-
- /* error exits */
-
- exit_close:
- DEBUG_MSG(quicktime_close(x->x_qt);)
-
- exit:
- x->x_initialized = 0;
- x->x_audio_tracks = 0;
- x->x_video_tracks = 0;
- return;
-
-}
-
-
-//static void pdp_qt_setposition(t_pdp_qt *x, int pos)
-//{
-// x->x_frame = pos;
-// DEBUG_MSG(if(x->x_video_tracks) quicktime_set_video_position(x->x_qt, pos, 0);)
-// DEBUG_MSG(if(x->x_audio_tracks) quicktime_set_audio_position(x->x_qt, pos * x->x_chunk_size, 0);)
-//
-//}
-
-
-static void pdp_qt_bangaudio(t_pdp_qt *x)
-{
- int lefterr=0;
- int righterr=0;
- int err=0;
- int sample = 0;
- int remaining = 0;
- int readamount = 0;
-
-
-
- if (!x->x_initialized){
- //post("pdp_qt: no qt file opened");
- return;
- }
-
-
- if (!x->x_audio_tracks){
- //post("pdp_qt: no audio stream present");
- return;
- }
-
-
-
- //DEBUG_MSG(sample = quicktime_audio_position(x->x_qt,0);)
-
-
- // if the active chunk is unused, clear it and mark it used
- if (!x->x_chunk_used[x->x_chunk_current]){
- //post("%s: clearing unused active chunk",x->x_name->s_name);
-
-
-
- //probably this is the !@#%&*(*)&!$() bug
- //memset(x->x_chunk[0][x->x_chunk_current], 0, sizeof(float)*2*x->x_chunk_size);
- //memset(x->x_chunk[1][x->x_chunk_current], 0, sizeof(float)*2*x->x_chunk_size);
-
- memset(x->x_chunk[0][x->x_chunk_current], 0, sizeof(float) * x->x_chunk_size);
- memset(x->x_chunk[1][x->x_chunk_current], 0, sizeof(float) * x->x_chunk_size);
-
-
-
-
- x->x_chunk_used[x->x_chunk_current] = 1;
- }
-
- // compute the remaining time
- DEBUG_MSG(remaining = (int ) ( quicktime_audio_length(x->x_qt, 0) - quicktime_audio_position(x->x_qt, 0) );)
- readamount = min(remaining, x->x_chunk_size);
- if (!readamount) return;
-
-
- // if the inactive chunk is unused, fill it with the current frame's audio data and mark it used
- if (!x->x_chunk_used[!x->x_chunk_current]){
- switch(x->x_audio_channels){
- case 1:
- x->x_qt_audiochans[0] = x->x_chunk[0][!x->x_chunk_current];
- x->x_qt_audiochans[1] = 0;
- DEBUG_MSG(err = lqt_decode_audio(x->x_qt, NULL, x->x_qt_audiochans, readamount);)
- break;
- default:
- x->x_qt_audiochans[0] = x->x_chunk[0][!x->x_chunk_current];
- x->x_qt_audiochans[1] = x->x_chunk[1][!x->x_chunk_current];
- DEBUG_MSG(err = lqt_decode_audio(x->x_qt, NULL, x->x_qt_audiochans, readamount);)
- break;
- }
- x->x_chunk_used[!x->x_chunk_current] = 1;
- }
- // if it is used, something went wrong with sync
- else{
- //post("%s: dropping audio chunk %d.",x->x_name->s_name, x->x_frame_thread);
- }
-
-
- if (err) post("%s: error decoding audio",x->x_name->s_name, x->x_frame_thread);
-
- // ensure audio pointer points to next frame's data
- //DEBUG_MSG(quicktime_set_audio_position(x->x_qt, sample + readamount, 0);)
-
-}
-
-
-
-
-static void pdp_qt_bangvideo(t_pdp_qt *x)
-{
- unsigned int w, h, nbpixels, packet_size, i,j;
- unsigned int *source, *dest;
- unsigned int uoffset, voffset;
- short int* data;
- t_pdp* header;
-
- // check if we want greyscale output or not
- //int grey = (x->x_qt_cmodel == BC_RGB888);
-
- static short int gain[4] = {0x7fff, 0x7fff, 0x7fff, 0x7fff};
-
- if ((!x->x_initialized) || (!x->x_video_tracks)){
- //post("pdp_qt: no qt file opened");
- return;
- }
-
- w = x->x_video_width;
- h = x->x_video_height;
- nbpixels = x->x_video_width * x->x_video_height;
-
- // create a new packet
- pdp_qt_create_pdp_packet(x);
-
- header = pdp_packet_header(x->x_packet0);
-
- if (!header) {
- post("%s: ERROR: no packet available", x->x_name->s_name);
- return;
- }
-
- data = (short int *) pdp_packet_data(x->x_packet0);
-
-
- DEBUG_MSG(lqt_decode_video(x->x_qt, x->x_qt_rows, 0);)
-
-
- switch(x->x_qt_cmodel){
- case BC_YUV420P:
- pdp_llconv(x->x_qt_frame, RIF_YVU__P411_U8, data, RIF_YVU__P411_S16, x->x_video_width, x->x_video_height);
- break;
-
- case BC_YUV422:
- pdp_llconv(x->x_qt_frame, RIF_YUYV_P____U8, data, RIF_YVU__P411_S16, x->x_video_width, x->x_video_height);
- break;
-
- case BC_RGB888:
- pdp_llconv(x->x_qt_frame, RIF_RGB__P____U8, data, RIF_YVU__P411_S16, x->x_video_width, x->x_video_height);
- break;
-
- default:
- post("%s: error on decode: unkown colour model",x->x_name->s_name);
- break;
- }
-
-
-
-}
-
-static void pdp_qt_sendpacket(t_pdp_qt *x)
-{
-
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet0);
-
- //if (x->x_packet0 != -1){
- //pdp_packet_mark_unused(x->x_packet0);
- //outlet_pdp(x->x_outlet0, x->x_packet0);
- //x->x_packet0 = -1;
- //}
-}
-
-
-static void pdp_qt_thread_bang(t_pdp_qt *x)
-{
- // set audio position
- if(x->x_video_tracks) quicktime_set_video_position(x->x_qt, x->x_frame_thread, 0);
-
- // bang video
- pdp_qt_bangvideo(x);
-
- // if it's a tilde object, bang audio
- if (x->x_istilde && x->x_audio_tracks){
- quicktime_set_audio_position(x->x_qt, x->x_frame_thread * x->x_chunk_size, 0);
- pdp_qt_bangaudio(x);
- }
-
-}
-
-
-static void pdp_qt_bang(t_pdp_qt *x)
-{
- int length, pos;
-
- t_pdp_procqueue *q = pdp_queue_get_queue();
-
- /* return if not initialized */
- if (!x->x_initialized) return;
-
- //length = quicktime_video_length(x->x_qt,0);
- //pos = quicktime_video_position(x->x_qt,0);
- length = x->x_video_length;
- pos = x->x_frame;
-
-
- /* check bounds */
- if (x->x_loop){
- pos = x->x_frame % length;
- if (pos < 0) pos += length;
- }
- else{
- if (pos < 0) pos = 0;
- if (pos >= length) pos = length - 1;
- }
-
- /* store next frame for access in thread */
- x->x_frame_thread = pos;
-
-
- // if autoplay is on and we do not have audio synchro
- // set clock to play next frame
- if (x->x_autoplay && !x->x_syncaudio) clock_delay(x->x_clock, 1000.0L / (double)x->x_video_framerate);
-
-
- // make sure prev decode is finished don't drop frames in this one
- pdp_procqueue_finish(q, x->x_queue_id);
- x->x_queue_id = -1;
-
- /* only decode new stuff if previous is done */
- if (-1 == x->x_queue_id){
- // send the current frame number to outlet
- outlet_float(x->x_outlet1, (float)pos);
-
- //pdp_qt_setposition(x, pos);
-
- // start process method
- if (x->x_process_in_thread) pdp_procqueue_add(q, x, pdp_qt_thread_bang, pdp_qt_sendpacket, &x->x_queue_id);
- else {
- pdp_qt_thread_bang(x);
- pdp_qt_sendpacket(x);
- }
- }
- // advance frame
- x->x_frame = pos + 1;
-
-
- // send the packet
- //pdp_qt_sendpacket(x);
-}
-
-
-
-//static void pdp_qt_getaudiochunk(t_pdp_qt *x, int channel)
-//{
-// if (!x->x_audio_tracks) return;
-// quicktime_decode_audio(x->x_qt, NULL, x->x_chunk[channel][x->x_chunk_current], x->x_chunk_size<<1, channel);
-//
-//}
-
-static void pdp_qt_loop(t_pdp_qt *x, t_floatarg loop)
-{
- int loopi = (int)loop;
- x->x_loop = !(loopi == 0);
-}
-
-static void pdp_qt_autoplay(t_pdp_qt *x, t_floatarg play)
-{
- int playi = (int)play;
- x->x_autoplay = !(playi == 0);
-
-
- // reset clock if autoplay is off
- if (!x->x_autoplay) clock_unset(x->x_clock);
-
-
-}
-
-
-
-static void pdp_qt_frame_cold(t_pdp_qt *x, t_floatarg frameindex)
-{
- int frame = (int)frameindex;
- //int length;
-
-
- x->x_frame = frame;
-
- //if (!(x->x_initialized)) return;
-
- //length = quicktime_video_length(x->x_qt,0);
-
- //frame = (frame >= length) ? length-1 : frame;
- //frame = (frame < 0) ? 0 : frame;
-
- //pdp_qt_setposition(x, frame);
-}
-
-static void pdp_qt_frame(t_pdp_qt *x, t_floatarg frameindex)
-{
- pdp_qt_frame_cold(x, frameindex);
- pdp_qt_bang(x);
-}
-
-static void pdp_qt_stop(t_pdp_qt *x)
-{
- pdp_qt_autoplay(x, 0);
-}
-
-static void pdp_qt_continue(t_pdp_qt *x)
-{
- pdp_qt_autoplay(x, 1);
- pdp_qt_bang(x);
-}
-
-
-static void pdp_qt_play(t_pdp_qt *x){
- pdp_qt_frame_cold(x, 0);
- pdp_qt_continue(x);
-}
-
-
-
-
-static void pdp_qt_importaudio(t_pdp_qt *x, t_symbol *array, t_floatarg channel)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- int c = (int)channel;
- t_garray *g;
- int vecsize;
- int sample;
- float *f;
- int i;
-
- /* if there's no audio, there's nothing to export */
- if (!x->x_audio_tracks) return;
-
- /* check audio channel */
- if ((c < 0) || (c >= x->x_audio_channels)) return;
-
- /* check if array exists */
- if (!(g = (t_garray *)pd_findbyclass(array, garray_class))){
- pd_error(x, "%s: no such table", array->s_name);
- return;
- }
-
- post("%s: importing audio channel %d into array %s", x->x_name->s_name, c, array->s_name);
-
-
- // make sure decode is finished
- pdp_procqueue_finish(q, x->x_queue_id);
- x->x_queue_id = -1;
-
-
- /* resize array */
- garray_resize(g, x->x_audio_length);
-
- /* for sanity's sake let's clear the save-in-patch flag here */
- garray_setsaveit(g, 0);
- garray_getfloatarray(g, &vecsize, &f);
-
- /* if the resize failed, garray_resize reported the error */
- if (vecsize != x->x_audio_length){
- pd_error(x, "array resize failed");
- return;
- }
-
- /* save pointer in file */
- DEBUG_MSG(sample = quicktime_audio_position(x->x_qt, 0);)
- DEBUG_MSG(quicktime_set_audio_position(x->x_qt, 0, 0);)
-
- /* transfer the audio file to the end of the array */
- DEBUG_MSG(quicktime_decode_audio(x->x_qt, NULL, f, vecsize, c);)
-
- /* restore pointer in file */
- DEBUG_MSG(quicktime_set_audio_position(x->x_qt, sample, 0);)
-
-
-}
-
-
-
-static t_int *pdp_qt_perform(t_int *w)
-{
- t_pdp_qt *x = (t_pdp_qt *)w[1];
- t_float *out0 = (t_float *)w[2];
- t_float *out1 = (t_float *)w[3];
- t_int n = (t_int)w[4];
-
- t_int xfer_samples;
- if (!x->x_initialized || !x->x_audio_tracks) goto zero;
-
- while(1){
- // check current chunk
- if (!x->x_chunk_used[x->x_chunk_current]) goto zero;
-
-
- // transfer from chunk to output
- xfer_samples = min(n, x->x_chunk_size - x->x_chunk_pos);
-
- //x->x_audio_channels = 1;
-
- if (x->x_audio_channels == 1){
- memcpy(out0, x->x_chunk[0][x->x_chunk_current] + x->x_chunk_pos, sizeof(float)*xfer_samples);
- memcpy(out1, x->x_chunk[0][x->x_chunk_current] + x->x_chunk_pos, sizeof(float)*xfer_samples);
- }
- else {
- memcpy(out0, x->x_chunk[0][x->x_chunk_current] + x->x_chunk_pos, sizeof(float)*xfer_samples);
- memcpy(out1, x->x_chunk[1][x->x_chunk_current] + x->x_chunk_pos, sizeof(float)*xfer_samples);
- }
- out0 += xfer_samples;
- out1 += xfer_samples;
- n -= xfer_samples;
- x->x_chunk_pos += xfer_samples;
-
-
- // check if chunk is finished, if so mark unused, swap buffers and set clock
- if (x->x_chunk_size == x->x_chunk_pos){
- x->x_chunk_used[x->x_chunk_current] = 0;
- x->x_chunk_pos = 0;
- x->x_chunk_current ^= 1;
- if (x->x_autoplay) clock_delay(x->x_clock, 0L);
- }
-
- // if chunk is not finished, the output buffer is full
- else{
- goto exit;
- }
-
- }
-
-
- zero:
- // fill the rest of the output with zeros
- memset(out0, 0, sizeof(float)*n);
- memset(out1, 0, sizeof(float)*n);
-
- exit:
- return(w+5);
-}
-
-static void pdp_qt_dsp(t_pdp_qt *x, t_signal **sp)
-{
- dsp_add(pdp_qt_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
-
-}
-
-static void pdp_qt_process_in_thread(t_pdp_qt *x, t_float f)
-{
-
- int t = (f != 0.0f);
-
- x->x_process_in_thread = t;
-
- post("pdp_qt: thread processing switched %d", t ? "on" : "off");
-
-}
-
-static void pdp_qt_tick(t_pdp_qt *x)
-{
-
- // bang audio/video
- pdp_qt_bang(x);
-}
-
-static void pdp_qt_free(t_pdp_qt *x)
-{
- clock_unset(x->x_clock);
- pdp_qt_close(x);
- clock_free(x->x_clock);
- //free (x->x_state_data);
-
-}
-
-
-
-t_class *pdp_qt_class;
-t_class *pdp_qt_tilde_class;
-
-
-void pdp_qt_init_common(t_pdp_qt *x)
-{
-
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("frame_cold"));
-
- /* add common outlets */
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
- x->x_outlet1 = outlet_new(&x->x_obj, &s_float);
- x->x_outlet2 = outlet_new(&x->x_obj, &s_float);
-
- /* init */
- x->x_gain = 1.0f;
- x->x_process_in_thread = 0;
- x->x_packet0 = -1;
- x->x_queue_id = -1;
- x->x_initialized = 0;
- x->x_audio_tracks = 0;
- x->x_video_tracks = 0;
- x->x_loop = 0;
- x->x_autoplay = 0;
- x->x_chunk[0][0] = 0;
- x->x_chunk[0][1] = 0;
- x->x_chunk[1][0] = 0;
- x->x_chunk[1][1] = 0;
-
- /* initialize clock object */
- x->x_clock = clock_new(x, (t_method)pdp_qt_tick);
-
-
-
-
-}
-
-void *pdp_qt_new(void)
-{
- t_pdp_qt *x = (t_pdp_qt *)pd_new(pdp_qt_class);
- x->x_name = gensym("pdp_qt");
- x->x_istilde = 0;
- pdp_qt_init_common(x);
- return (void *)x;
-}
-
-void *pdp_qt_tilde_new(void)
-{
- t_pdp_qt *x = (t_pdp_qt *)pd_new(pdp_qt_tilde_class);
- x->x_name = gensym("pdp_qt");
- x->x_istilde = 1;
-
- pdp_qt_init_common(x);
-
- /* add outlets to the right so pdp_qt~ can replace pdp_qt without breaking a patch */
- x->x_outleft = outlet_new(&x->x_obj, &s_signal);
- x->x_outright = outlet_new(&x->x_obj, &s_signal);
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_qt_setup_common(t_class *class)
-{
- class_addmethod(class, (t_method)pdp_qt_bang, gensym("bang"), A_NULL);
- class_addmethod(class, (t_method)pdp_qt_close, gensym("close"), A_NULL);
- class_addmethod(class, (t_method)pdp_qt_open, gensym("open"), A_SYMBOL, A_NULL);
- class_addmethod(class, (t_method)pdp_qt_autoplay, gensym("autoplay"), A_DEFFLOAT, A_NULL);
- class_addmethod(class, (t_method)pdp_qt_stop, gensym("stop"), A_NULL);
- class_addmethod(class, (t_method)pdp_qt_play, gensym("play"), A_NULL);
- class_addmethod(class, (t_method)pdp_qt_continue, gensym("cont"), A_NULL);
- class_addmethod(class, (t_method)pdp_qt_loop, gensym("loop"), A_DEFFLOAT, A_NULL);
- class_addfloat (class, (t_method)pdp_qt_frame);
- class_addmethod(class, (t_method)pdp_qt_frame_cold, gensym("frame_cold"), A_FLOAT, A_NULL);
- class_addmethod(class, (t_method)pdp_qt_process_in_thread, gensym("thread"), A_FLOAT, A_NULL);
- class_addmethod(class, (t_method)pdp_qt_importaudio, gensym("importaudio"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(class, (t_method)pdp_qt_importaudio, gensym("dump"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-}
-
-void pdp_qt_setup(void)
-{
-
- /* plain class */
- pdp_qt_class = class_new(gensym("pdp_qt"), (t_newmethod)pdp_qt_new,
- (t_method)pdp_qt_free, sizeof(t_pdp_qt), 0, A_NULL);
- pdp_qt_setup_common(pdp_qt_class);
-
-
- /* tilde class */
- pdp_qt_tilde_class = class_new(gensym("pdp_qt~"), (t_newmethod)pdp_qt_tilde_new,
- (t_method)pdp_qt_free, sizeof(t_pdp_qt), 0, A_NULL);
- pdp_qt_setup_common(pdp_qt_tilde_class);
-
- class_addmethod(pdp_qt_tilde_class, (t_method)pdp_qt_dsp, gensym("dsp"), 0);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
diff --git a/modules/image_io/pdp_sdl.c b/modules/image_io/pdp_sdl.c
deleted file mode 100644
index d30ef84..0000000
--- a/modules/image_io/pdp_sdl.c
+++ /dev/null
@@ -1,510 +0,0 @@
-/*
- * Pure Data Packet module.
- * Copyright (c) 2003 by martin pi <pi@attacksyour.net>
- * 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.
- *
- */
-
-/*
-
-pdp sdl output
-
-DONE:
-
-TODO:
- * close window (event)
- * fullscreen chose resolution
- * event handling in different object (and look at mplayer for that!)
-
-*/
-
-
-#include <stdio.h>
-//#include <unistd.h>
-//#include <sys/ipc.h>
-//#include <sys/shm.h>
-
-#include <SDL/SDL.h>
-
-//#include <quicktime/lqt.h>
-//#include <quicktime/colormodels.h>
-
-#include "pdp.h"
-#include "pdp_llconv.h"
-
-
-/* initial image dimensions */
-#define PDP_SDL_W 320
-#define PDP_SDL_H 240
-
-
-typedef struct pdp_sdl_struct {
- t_object x_obj;
- t_float x_f;
-
- int x_packet0;
- int x_queue_id;
-
- SDL_Surface *x_sdl_surface;
- SDL_Overlay *x_sdl_overlay;
- SDL_Rect x_sdl_rect;
-
- int x_xid;
-
- Uint32 x_sdl_format;
-
- int x_winwidth;
- int x_winheight;
-
- unsigned int x_width;
- unsigned int x_height;
- int x_last_encoding;
- int x_cursor;
-
- int x_initialized;
- int x_backfromthread;
-
- int x_fullscreen;
-
-} t_pdp_sdl;
-
-static SDL_Surface *pdp_sdl_getSurface(int xid, char* title, int width, int height, int bits, int fullscreenflag, int cursorflag) {
- Uint32 flags;
- int size,i;
- SDL_Surface *screen;
- char SDL_hack[32];
-
- /* next lines from gstreamer plugin sdlvideosink */
- if (xid < 0) unsetenv("SDL_WINDOWID");
- else {
- sprintf(SDL_hack, "%d", xid);
- setenv("SDL_WINDOWID", SDL_hack, 1);
- }
-
- /* Initialize SDL */
- if (!SDL_WasInit(SDL_INIT_VIDEO)) {
- if (SDL_Init (SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE)) {
- post("SDL: Initializing of SDL failed: %s.\n", SDL_GetError());
- return NULL;
- }
- /* ignore events :: only keys and wm_quit */
- for ( i=SDL_NOEVENT; i<SDL_NUMEVENTS; ++i )
- if( !(i & (SDL_KEYDOWN|SDL_VIDEORESIZE)) )
- SDL_EventState(i, SDL_IGNORE);
-
-
- }
-
-/*
-gem : SDL_OPENGL|SDL_DOUBLEBUF|SDL_HWSURFACE|SDL_ANYFORMAT|SDL_OPENGLBLIT;
-working: SDL_ANYFORMAT|SDL_RESIZABLE|SDL_RLEACCEL;
-*/
- flags = SDL_SWSURFACE | SDL_RESIZABLE;
-// flags = SDL_HWSURFACE|SDL_RESIZABLE|SDL_ASYNCBLIT|SDL_HWACCEL|SDL_ANYFORMAT|SDL_RLEACCEL;
- if ( fullscreenflag>0 ) {
- flags |= SDL_FULLSCREEN|SDL_DOUBLEBUF;
- }
-
- screen = SDL_SetVideoMode(width, height, bits, flags);
- if ( screen == NULL ) {
- post("Couldn't set video mode: %s\n", SDL_GetError());
- return NULL;
- }
-
- SDL_WM_SetCaption (title, title);
-
- SDL_ShowCursor(cursorflag);
-
- return screen;
-}
-
-static SDL_Surface *pdp_sdl_recreateSurface(SDL_Surface *old, int xid, char* title, int width, int height, int bits, int fullscreenflag, int cursorflag) {
- SDL_Surface *new = pdp_sdl_getSurface(xid, title, width, height, bits, fullscreenflag, cursorflag);
- if (new != NULL) SDL_FreeSurface(old);
- return new;
-}
-
-static inline void pdp_sdl_getOverlay(t_pdp_sdl* x) {
- x->x_sdl_overlay = SDL_CreateYUVOverlay(x->x_width, x->x_height, x->x_sdl_format, x->x_sdl_surface);
-}
-
-static inline void pdp_sdl_freeOverlay(t_pdp_sdl* x) {
- SDL_FreeYUVOverlay(x->x_sdl_overlay);
-}
-
-static int pdp_sdl_drawImage(t_pdp_sdl* x, t_image *image, short int *pixels) {
-
- unsigned int width = image->width;
- unsigned int height = image->height;
- int encoding = image->encoding;
- unsigned int* uintdata;
- int i;
-
-
- /* 8bit y fulscale and 8bit u,v 2x2 subsampled */
- //static short int gain[4] = {0x0100, 0x0100, 0x0100, 0x0100};
- int nbpixels = width * height;
- long size = (width * height + (((width>>1)*(height>>1))<<1));
-
- /* check if xvimage needs to be recreated */
- if ((width != x->x_width) || (height != x->x_height)){
- post("pdp_xv: replace image");
- x->x_width = width;
- x->x_height = height;
- pdp_sdl_freeOverlay(x);
- pdp_sdl_getOverlay(x);
- }
-
- SDL_LockYUVOverlay(x->x_sdl_overlay);
- if (pixels) {
- pdp_llconv(pixels,RIF_YVU__P411_S16, (Uint8 *)(* x->x_sdl_overlay->pixels), RIF_YVU__P411_U8, x->x_width, x->x_height);
- } else bzero((Uint8 *)(* x->x_sdl_overlay->pixels), size);
- SDL_UnlockYUVOverlay(x->x_sdl_overlay);
-
- return 1;
-}
-
-static void pdp_sdl_fullscreen(t_pdp_sdl *x, t_floatarg f);
-
-static inline void pdp_sdl_recreate(t_pdp_sdl *x) {
- x->x_sdl_surface = pdp_sdl_recreateSurface(x->x_sdl_surface, x->x_xid,"pdp-sdl", x->x_winwidth, x->x_winheight, 16, x->x_fullscreen,x->x_cursor);
-}
-
-static int pdp_sdl_create(t_pdp_sdl *x) {
- if (x->x_initialized){
- return 0;
- }
- x->x_initialized = 0;
-
- x->x_sdl_surface = pdp_sdl_getSurface(x->x_xid, "pdp-sdl", x->x_winwidth, x->x_winheight, 16, x->x_fullscreen,x->x_cursor);
- if (x->x_sdl_surface != NULL) {
- pdp_sdl_getOverlay(x);
- if (x->x_sdl_overlay != NULL) {
- x->x_sdl_rect.x = 0;
- x->x_sdl_rect.y = 0;
- x->x_sdl_rect.w = x->x_winwidth;
- x->x_sdl_rect.h = x->x_winheight;
- x->x_initialized = 1;
- post("created successfully");
- }
- }
- x->x_backfromthread = 1;
-
- return x->x_initialized;
-}
-
-static void pdp_sdl_destroy(t_pdp_sdl *x);
-static void pdp_sdl_resize(t_pdp_sdl *x,t_floatarg,t_floatarg);
-
-static void pdp_sdl_checkEvents(t_pdp_sdl *x) {
- Uint8 *keys;
- SDL_Event event;
-
- if (SDL_PollEvent(&event)!=1) return;
-
- switch( event.type ){
- case SDL_KEYDOWN:
- case SDL_KEYUP:
- keys = SDL_GetKeyState(NULL);
-
- if(keys[SDLK_UP]) { post("up"); }
- if(keys[SDLK_DOWN]) { post("down"); }
-
- if(keys[SDLK_ESCAPE]) pdp_sdl_fullscreen(x,0);
- break;
-
- case SDL_QUIT:
- pdp_sdl_destroy(x);
- break;
- case SDL_VIDEORESIZE:
- pdp_sdl_resize(x,(t_floatarg)event.resize.w,(t_floatarg)event.resize.h);
- break;
- default:
- break;
- }
-
-
-}
-
-static void pdp_sdl_bang(t_pdp_sdl *x);
-
-static void pdp_sdl_process(t_pdp_sdl *x)
-{
- t_pdp *header = pdp_packet_header(x->x_packet0);
- void *data = pdp_packet_data (x->x_packet0);
-
-
- if (!x->x_backfromthread) return;
-
- /* check if window is initialized */
- if (!(x->x_initialized)){
- if (!pdp_sdl_create(x)) return;
- }
-
- /* check for pending sdl events */
- pdp_sdl_checkEvents(x);
-
- /* check data packet */
- if (!(header)) {
- post("pdp_sdl: invalid packet header");
- return;
- }
- if (PDP_IMAGE != header->type) {
- post("pdp_sdl: packet is not a PDP_IMAGE");
- return;
- }
- if (header->info.image.encoding != PDP_IMAGE_YV12) {
- post("pdp_sdl: packet is not a PDP_IMAGE_YV12");
- return;
- }
-
- /* copy the packet to the sdlimage */
- pdp_sdl_drawImage(x, &header->info.image, (short int *)data);
-
- /* display the new image */
- pdp_sdl_bang(x);
-}
-
-static void pdp_sdl_destroy(t_pdp_sdl *x) {
- if (x->x_initialized){
- pdp_sdl_freeOverlay(x);
- SDL_FreeSurface(x->x_sdl_surface);
- x->x_initialized = 0;
- SDL_Quit();
- }
-}
-
-static void pdp_sdl_random(t_pdp_sdl *x) {
- unsigned int i;
- long *intdata = (long *)(* x->x_sdl_overlay->pixels);
- SDL_LockYUVOverlay(x->x_sdl_overlay);
- for(i=0; i<x->x_width*x->x_height/4; i++) intdata[i]=random();
- SDL_UnlockYUVOverlay(x->x_sdl_overlay);
-}
-
-/* redisplays image */
-static void pdp_sdl_bang_thread(t_pdp_sdl *x) {
- if (SDL_DisplayYUVOverlay(x->x_sdl_overlay, &(* x).x_sdl_rect) <0)
- post("pdp_sdl: __LINE__ cannot display");
-}
-
-static void pdp_sdl_bang_callback(t_pdp_sdl *x)
-{
- x->x_backfromthread = 1;
-
- /* release the packet if there is one */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = -1;}
-
-static void pdp_sdl_bang(t_pdp_sdl *x) {
-
- /* if previous queued method returned
- schedule a new one, else ignore */
- if (x->x_backfromthread) {
- x->x_backfromthread = 0;
- pdp_queue_add(x, pdp_sdl_bang_thread, pdp_sdl_bang_callback, &x->x_queue_id);
- }
-}
-
-static void pdp_sdl_input_0(t_pdp_sdl *x, t_symbol *s, t_floatarg f) {
-
- if (s == gensym("register_ro")) pdp_packet_copy_ro_or_drop(&x->x_packet0, (int)f);
- if (s == gensym("process")) pdp_sdl_process(x);
-
-}
-
-static void pdp_sdl_resize(t_pdp_sdl* x, t_floatarg width, t_floatarg height) {
-
- if (x->x_initialized && (!x->x_fullscreen) && (width>0) && (height>0)) {
- post("should get %d/%d",(int)width,(int) height);
- x->x_winwidth=(int)width;
- x->x_winheight=(int)height;
- pdp_sdl_recreate(x);
- }
-}
-
-
-static void pdp_sdl_fullscreen(t_pdp_sdl *x, t_floatarg f) {
- if (f == x->x_fullscreen) return;
-
- x->x_fullscreen = (f != 0.0f);
- x->x_cursor=0;
-
- pdp_sdl_recreate(x);
-}
-
-static void pdp_sdl_cursor(t_pdp_sdl *x, t_floatarg f) {
- if (f == x->x_cursor) return;
-
- x->x_cursor = (f != 0.0f);
- SDL_ShowCursor(x->x_cursor);
-}
-
-
-/* sets new target window */
-
-static void pdp_sdl_win(t_pdp_sdl *x, t_floatarg *f) {
- pdp_queue_finish(x->x_queue_id);
- x->x_queue_id = -1;
- x->x_xid = (int)f;
- pdp_sdl_recreate(x);
-}
-
-/* be very carefule not to set DGA fro here! */
-/* use export SDL_VIDEODRIVER=dga (or equivalent for your shell) instead */
-
-static void pdp_sdl_renderer(t_pdp_sdl *x, t_symbol *s) {
- char SDL_hack[32];
-
- pdp_sdl_destroy(x);
-
- /* next lines from gstreamer plugin sdlvideosink */
- unsetenv("SDL_VIDEODRIVER");
-
- sprintf(SDL_hack, "%s", s->s_name);
- setenv("SDL_VIDEODRIVER", SDL_hack, 1);
-
- pdp_sdl_create(x);
-}
-
-static void pdp_sdl_free(t_pdp_sdl *x)
-{
- pdp_queue_finish(x->x_queue_id);
- pdp_sdl_destroy(x);
- pdp_packet_mark_unused(x->x_packet0);
-// SDL_Quit();
-}
-
-static void pdp_sdl_listmodes(const char* title, Uint32 flags) {
- SDL_Rect ** modes;
- int i;
-
- /* Get available modes */
- modes = SDL_ListModes(NULL, flags);
-
- /* Check is there are any modes available */
- if(modes == (SDL_Rect **)0){
- printf("%s : No modes available!", title);
- return;
- }
-
- /* Check if our resolution is restricted */
- if(modes == (SDL_Rect **)-1){
- post("%s : All resolutions available.", title);
- } else {
- /* Print valid modes */
- for(i=0;modes[i];++i)
- post("%s : %d x %d", title, modes[i]->w, modes[i]->h);
- }
-
-}
-
-static void pdp_sdl_modes(t_pdp_sdl *x) {
- pdp_sdl_listmodes("FULL|HWSURF|||||||||||||||||||||||||", SDL_FULLSCREEN|SDL_HWSURFACE);
- pdp_sdl_listmodes("HWSURF|RESIZ|ASYNC|HWACCEL||||||||||", SDL_HWSURFACE|SDL_RESIZABLE|SDL_ASYNCBLIT|SDL_HWACCEL);
- pdp_sdl_listmodes("HWSURF|RESIZ|ASYNC|HWACCEL|FULL|DBUF", SDL_HWSURFACE|SDL_RESIZABLE|SDL_ASYNCBLIT|SDL_HWACCEL|SDL_FULLSCREEN|SDL_DOUBLEBUF);
- pdp_sdl_listmodes("OPENGL|DBUF|HWSURF|ANYF|GLBLIT||||||", SDL_OPENGL|SDL_DOUBLEBUF|SDL_HWSURFACE|SDL_ANYFORMAT|SDL_OPENGLBLIT);
- pdp_sdl_listmodes("ANYF|RESIZ|RLEA|||||||||||||||||||||", SDL_ANYFORMAT|SDL_RESIZABLE|SDL_RLEACCEL);
-}
-
-static void pdp_sdl_info(t_pdp_sdl *x) {
- const SDL_VideoInfo *narf;
- post("\nSDL video info: note that this only works under dga mode\n");
- narf = SDL_GetVideoInfo();
- post("Is it possible to create hardware surfaces?\t\thw_available=%d",narf->hw_available);
- post("Is there a window manager available?\t\t\twm_available=%d",narf->wm_available);
- post("Are hardware to hardware blits accelerated?\t\tblit_hw=%d",narf->blit_hw);
- post("Are hardware to hardware colorkey blits accelerated?\tblit_hw_CC=%d",narf->blit_hw_CC);
- post("Are hardware to hardware alpha bits accelerated?\tblit_hw_A=%d",narf->blit_hw_A);
- post("Are software to hardware blits accelerated?\t\tblit_sw=%d",narf->blit_sw);
- post("Are software to hardware colorkey blits accelerated?\tblit_sw_CC=%d",narf->blit_sw_CC);
- post("Are software to hardware alpha blits accelerated?\tblit_sw_A=%d",narf->blit_sw_A);
- post("Are color fills accelerated?\t\t\t\tblit_fill=%d",narf->blit_fill);
- post("Total amount of video_mem: %d",narf->video_mem);
-
-}
-
-t_class *pdp_sdl_class;
-
-void *pdp_sdl_new(void) {
-
-
- t_pdp_sdl *x = (t_pdp_sdl *)pd_new(pdp_sdl_class);
-
- x->x_packet0 = -1;
- x->x_queue_id = -1;
-
- x->x_sdl_surface = NULL;
- x->x_sdl_overlay = NULL;
- x->x_sdl_format = SDL_YV12_OVERLAY;
-
- x->x_winwidth = PDP_SDL_W;
- x->x_winheight = PDP_SDL_H;
-
- x->x_width = PDP_SDL_W;
- x->x_height = PDP_SDL_H;
-
- x->x_backfromthread = 1;
- x->x_initialized = 0;
-
- x->x_fullscreen = 0;
- x->x_cursor=1;
-
- x->x_xid = -1;
-
- pdp_sdl_create(x);
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_sdl_setup(void)
-{
-
-
- pdp_sdl_class = class_new(gensym("pdp_sdl"), (t_newmethod)pdp_sdl_new,
- (t_method)pdp_sdl_free, sizeof(t_pdp_sdl), 0, A_NULL);
-
-
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_bang, gensym("bang"), A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_random, gensym("random"), A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_create, gensym("create"), A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_info, gensym("info"), A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_modes, gensym("modes"), A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_destroy, gensym("destroy"), A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_destroy, gensym("close"), A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_resize, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_resize, gensym("size"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_fullscreen, gensym("fullscreen"), A_FLOAT, A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_cursor, gensym("cursor"), A_FLOAT, A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_win, gensym("window"), A_FLOAT, A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_renderer, gensym("renderer"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_sdl_class, (t_method)pdp_sdl_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/modules/image_io/pdp_v4l.c b/modules/image_io/pdp_v4l.c
deleted file mode 100644
index 2fdf12d..0000000
--- a/modules/image_io/pdp_v4l.c
+++ /dev/null
@@ -1,794 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-#include "pdp_config.h"
-#include "pdp.h"
-#include "pdp_llconv.h"
-#include "pdp_imageproc.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <string.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <linux/types.h>
-#include <linux/videodev.h>
-#include <sys/mman.h>
-#include <sched.h>
-#include <pthread.h>
-
-// dont open any more after a set number
-// of failed attempts
-// this is to prevent locks on auto-open
-// is reset when manually opened or closed
-#define PDP_XV_RETRIES 10
-
-//include it anyway
-//#ifdef HAVE_PWCV4L
-#include "pwc-ioctl.h"
-//#endif
-
-
-#define DEVICENO 0
-#define NBUF 2
-#define COMPOSITEIN 1
-
-
-
-
-typedef struct pdp_v4l_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
- bool x_initialized;
- bool x_auto_open;
-
- unsigned int x_width;
- unsigned int x_height;
- int x_channel;
- unsigned int x_norm;
- int x_freq;
-
- unsigned int x_framerate;
-
- struct video_tuner x_vtuner;
- struct video_picture x_vpicture;
- struct video_buffer x_vbuffer;
- struct video_capability x_vcap;
- struct video_channel x_vchannel;
- struct video_audio x_vaudio;
- struct video_mbuf x_vmbuf;
- struct video_mmap x_vmmap[NBUF];
- struct video_window x_vwin;
- int x_tvfd;
- int x_frame;
- unsigned char *x_videobuf;
- int x_skipnext;
- int x_mytopmargin, x_mybottommargin;
- int x_myleftmargin, x_myrightmargin;
-
- t_symbol *x_device;
- t_symbol *x_image_type;
- //int x_pdp_image_type;
- int x_v4l_palette;
-
- pthread_t x_thread_id;
- int x_continue_thread;
- int x_frame_ready;
- int x_only_new_frames;
- int x_last_frame;
-
-
- int x_open_retry;
-
- u32 x_minwidth;
- u32 x_maxwidth;
- u32 x_minheight;
- u32 x_maxheight;
-
-
-} t_pdp_v4l;
-
-
-
-
-
-static void pdp_v4l_audio(t_pdp_v4l *x, t_floatarg f)
-{
- int i = 0;
- if (x->x_initialized){
- fprintf(stderr," audios : %d\n",x->x_vcap.audios);
- x->x_vaudio.audio = 0;
- ioctl(x->x_tvfd,VIDIOCGAUDIO, &x->x_vaudio);
-
- fprintf(stderr," %d (%s): ",i,x->x_vaudio.name);
- if (x->x_vaudio.flags & VIDEO_AUDIO_MUTABLE)
- fprintf(stderr,"muted=%s ",
- (x->x_vaudio.flags & VIDEO_AUDIO_MUTE) ? "yes":"no");
- if (x->x_vaudio.flags & VIDEO_AUDIO_VOLUME)
- fprintf(stderr,"volume=%d ",x->x_vaudio.volume);
- if (x->x_vaudio.flags & VIDEO_AUDIO_BASS)
- fprintf(stderr,"bass=%d ",x->x_vaudio.bass);
- if (x->x_vaudio.flags & VIDEO_AUDIO_TREBLE)
- fprintf(stderr,"treble=%d ",x->x_vaudio.treble);
- fprintf(stderr,"\n");
-
- }
-}
-
-
-static void pdp_v4l_close(t_pdp_v4l *x)
-{
- /* close the v4l device and dealloc buffer */
-
- void *dummy;
-
- /* terminate thread if there is one */
- if(x->x_continue_thread){
- x->x_continue_thread = 0;
- pthread_join (x->x_thread_id, &dummy);
- }
-
-
- if (x->x_tvfd >= 0)
- {
- close(x->x_tvfd);
- x->x_tvfd = -1;
- }
-
- if (x->x_initialized){
- munmap(x->x_videobuf, x->x_vmbuf.size);
- x->x_initialized = false;
- }
-
-}
-
-static void pdp_v4l_close_manual(t_pdp_v4l *x)
-{
- x->x_open_retry = PDP_XV_RETRIES;
- pdp_v4l_close(x);
-
-}
-
-static void pdp_v4l_close_error(t_pdp_v4l *x)
-{
- pdp_v4l_close(x);
- if(x->x_open_retry) x->x_open_retry--;
-}
-
-
-static void pdp_v4l_pwc_init(t_pdp_v4l *x)
-{
- struct pwc_probe probe;
- int isPhilips = 0;
-
-#ifdef HAVE_PWCV4L
- /* skip test */
- isPhilips = 1;
-#else
- /* test for pwc */
- if (ioctl(x->x_tvfd, VIDIOCPWCPROBE, &probe) == 0)
- if (!strcmp(x->x_vcap.name, probe.name))
- isPhilips = 1;
-
-#endif
-
- /* don't do pwc specific stuff */
- if (!isPhilips) return;
-
- post("pdp_v4l: detected pwc");
-
- if(ioctl(x->x_tvfd, VIDIOCPWCRUSER)){
- perror("pdp_v4l: pwc: VIDIOCPWCRUSER");
- goto closit;
- }
-
- if (ioctl(x->x_tvfd, VIDIOCGWIN, &x->x_vwin)){
- perror("pdp_v4l: pwc: VIDIOCGWIN");
- goto closit;
- }
-
-
-
- if (x->x_vwin.flags & PWC_FPS_MASK){
- //post("pdp_v4l: pwc: camera framerate: %d", (x->x_vwin.flags & PWC_FPS_MASK) >> PWC_FPS_SHIFT);
- //post("pdp_v4l: pwc: setting camera framerate to %d", x->x_framerate);
- x->x_vwin.flags &= PWC_FPS_MASK;
- x->x_vwin.flags |= (x->x_framerate << PWC_FPS_SHIFT);
- if (ioctl(x->x_tvfd, VIDIOCSWIN, &x->x_vwin)){
- perror("pdp_v4l: pwc: VIDIOCSWIN");
- goto closit;
- }
- if (ioctl(x->x_tvfd, VIDIOCGWIN, &x->x_vwin)){
- perror("pdp_v4l: pwc: VIDIOCGWIN");
- goto closit;
- }
- post("pdp_v4l: camera framerate set to %d fps", (x->x_vwin.flags & PWC_FPS_MASK) >> PWC_FPS_SHIFT);
-
- }
-
-
- return;
-
-
-
- closit:
- pdp_v4l_close_error(x);
- return;
-
-}
-
-static void pdp_v4l_sync_frame(t_pdp_v4l* x){
- /* grab frame */
- if (ioctl(x->x_tvfd, VIDIOCSYNC, &x->x_vmmap[x->x_frame].frame) < 0){
- perror("pdp_v4l: VIDIOCSYNC");
- pdp_v4l_close(x);
- return;
- }
-}
-
-static void pdp_v4l_capture_frame(t_pdp_v4l* x){
- if (ioctl(x->x_tvfd, VIDIOCMCAPTURE, &x->x_vmmap[x->x_frame]) < 0){
- if (errno == EAGAIN)
- post("pdp_v4l: can't sync (no video source?)\n");
- else
- perror("pdp_v4l: VIDIOCMCAPTURE");
- if (ioctl(x->x_tvfd, VIDIOCMCAPTURE, &x->x_vmmap[x->x_frame]) < 0)
- perror("pdp_v4l: VIDIOCMCAPTURE2");
-
- post("pdp_v4l: frame %d %d, format %d, width %d, height %d",
- x->x_frame, x->x_vmmap[x->x_frame].frame, x->x_vmmap[x->x_frame].format,
- x->x_vmmap[x->x_frame].width, x->x_vmmap[x->x_frame].height);
-
- pdp_v4l_close(x);
- return;
- }
-}
-
-
-static void *pdp_v4l_thread(void *voidx)
-{
- t_pdp_v4l *x = ((t_pdp_v4l *)voidx);
-
-
- /* flip buffers */
- x->x_frame ^= 0x1;
-
- /* capture with a double buffering scheme */
- while (x->x_continue_thread){
-
- /* schedule capture command for next frame */
- pdp_v4l_capture_frame(x);
-
- /* wait until previous capture is ready */
- x->x_frame ^= 0x1;
- pdp_v4l_sync_frame(x);
-
- /* setup pointers for main thread */
- x->x_frame_ready = 1;
- x->x_last_frame = x->x_frame;
-
- }
-
- return 0;
-}
-
-static void pdp_v4l_setlegaldim(t_pdp_v4l *x, int xx, int yy);
-
-static void pdp_v4l_open(t_pdp_v4l *x, t_symbol *name)
-{
- /* open a v4l device and allocate a buffer */
-
- unsigned int size;
- int i;
-
- unsigned int width, height;
-
-
- /* if already opened -> close */
- if (x->x_initialized) pdp_v4l_close(x);
-
-
- /* exit if retried too much */
- if (!x->x_open_retry){
- post("pdp_v4l: retry count reached zero for %s", name->s_name);
- post("pdp_v4l: try to open manually");
- return;
- }
-
- post("pdp_v4l: opening %s", name->s_name);
-
- x->x_device = name;
-
- if ((x->x_tvfd = open(name->s_name, O_RDWR)) < 0)
- {
- post("pdp_v4l: error:");
- perror(name->s_name);
- goto closit;
- }
-
-
- if (ioctl(x->x_tvfd, VIDIOCGCAP, &x->x_vcap) < 0)
- {
- perror("get capabilities");
- goto closit;
- }
-
- post("pdp_v4l: cap: name %s type %d channels %d maxw %d maxh %d minw %d minh %d",
- x->x_vcap.name, x->x_vcap.type, x->x_vcap.channels, x->x_vcap.maxwidth, x->x_vcap.maxheight,
- x->x_vcap.minwidth, x->x_vcap.minheight);
-
- x->x_minwidth = pdp_imageproc_legalwidth(x->x_vcap.minwidth);
- x->x_maxwidth = pdp_imageproc_legalwidth_round_down(x->x_vcap.maxwidth);
- x->x_minheight = pdp_imageproc_legalheight(x->x_vcap.minheight);
- x->x_maxheight = pdp_imageproc_legalheight_round_down(x->x_vcap.maxheight);
-
-
- if (ioctl(x->x_tvfd, VIDIOCGPICT, &x->x_vpicture) < 0)
- {
- perror("VIDIOCGCAP");
- goto closit;
- }
-
- post("pdp_v4l: picture: brightness %d depth %d palette %d",
- x->x_vpicture.brightness, x->x_vpicture.depth, x->x_vpicture.palette);
-
- /* get channel info */
- for (i = 0; i < x->x_vcap.channels; i++)
- {
- x->x_vchannel.channel = i;
- if (ioctl(x->x_tvfd, VIDIOCGCHAN, &x->x_vchannel) < 0)
- {
- perror("VDIOCGCHAN");
- goto closit;
- }
- post("pdp_v4l: channel %d name %s type %d flags %d",
- x->x_vchannel.channel, x->x_vchannel.name,
- x->x_vchannel.type, x->x_vchannel.flags);
- }
-
- /* switch to the desired channel */
- if (x->x_channel < 0) x->x_channel = 0;
- if (x->x_channel >= x->x_vcap.channels) x->x_channel = x->x_vcap.channels - 1;
-
- x->x_vchannel.channel = x->x_channel;
- if (ioctl(x->x_tvfd, VIDIOCGCHAN, &x->x_vchannel) < 0)
- {
- perror("pdp_v4l: warning: VDIOCGCHAN");
- post("pdp_v4l: cant change to channel %d",x->x_channel);
-
- // ignore error
- // goto closit;
- }
- else{
- post("pdp_v4l: switched to channel %d", x->x_channel);
- }
-
- x->x_vchannel.norm = x->x_norm;
- if (ioctl(x->x_tvfd, VIDIOCSCHAN, &x->x_vchannel) < 0)
- {
- perror("pdp_v4l: warning: VDIOCSCHAN");
- post("pdp_v4l: cant change to norm %d",x->x_norm);
-
- // ignore error
- // goto closit;
- }
-
- if (x->x_freq > 0){
- if (ioctl(x->x_tvfd, VIDIOCSFREQ, &x->x_freq) < 0)
- perror ("couldn't set frequency :");
- }
-
-
-
-
- /* get mmap numbers */
- if (ioctl(x->x_tvfd, VIDIOCGMBUF, &x->x_vmbuf) < 0)
- {
- perror("pdp_v4l: VIDIOCGMBUF");
- goto closit;
- }
- post("pdp_v4l: buffer size %d, frames %d, offset %d %d", x->x_vmbuf.size,
- x->x_vmbuf.frames, x->x_vmbuf.offsets[0], x->x_vmbuf.offsets[1]);
- if (!(x->x_videobuf = (unsigned char *)
- mmap(0, x->x_vmbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, x->x_tvfd, 0)))
- {
- perror("pdp_v4l: mmap");
- goto closit;
- }
-
- pdp_v4l_setlegaldim(x, x->x_width, x->x_height);
- width = x->x_width;
- height = x->x_height;
-
- for (i = 0; i < NBUF; i++)
- {
- //x->x_vmmap[i].format = VIDEO_PALETTE_YUV420P;
- //x->x_vmmap[i].format = VIDEO_PALETTE_UYVY;
- x->x_vmmap[i].width = width;
- x->x_vmmap[i].height = height;
- x->x_vmmap[i].frame = i;
- }
-
-
- //goto test;
-
- //try yuv planar format
- x->x_v4l_palette = VIDEO_PALETTE_YUV420P;
- for (i = 0; i < NBUF; i++) x->x_vmmap[i].format = x->x_v4l_palette;
- if (ioctl(x->x_tvfd, VIDIOCMCAPTURE, &x->x_vmmap[x->x_frame]) < 0)
- {
- if (errno == EAGAIN)
- post("pdp_v4l: can't sync (no video source?)");
- }
- else{
- post("pdp_v4l: using VIDEO_PALETTE_YUV420P");
- goto capture_ok;
- }
-
-
- //try VIDEO_PALETTE_YUV422 format
- x->x_v4l_palette = VIDEO_PALETTE_YUV422;
- for (i = 0; i < NBUF; i++) x->x_vmmap[i].format = x->x_v4l_palette;
- if (ioctl(x->x_tvfd, VIDIOCMCAPTURE, &x->x_vmmap[x->x_frame]) < 0)
- {
- if (errno == EAGAIN)
- post("pdp_v4l: can't sync (no video source?)");
- }
- else{
- post("pdp_v4l: using VIDEO_PALETTE_YUV422");
- goto capture_ok;
- }
-
-
- test:
-
- //try rgb packed format
- x->x_v4l_palette = VIDEO_PALETTE_RGB24;
- for (i = 0; i < NBUF; i++) x->x_vmmap[i].format = x->x_v4l_palette;
- if (ioctl(x->x_tvfd, VIDIOCMCAPTURE, &x->x_vmmap[x->x_frame]) < 0)
- {
- if (errno == EAGAIN)
- post("pdp_v4l: can't sync (no video source?)");
- }
- else{
- post("pdp_v4l: using VIDEO_PALETTE_RGB24");
- goto capture_ok;
- }
-
-
- // none of the formats are supported
- perror("pdp_v4l: VIDIOCMCAPTURE: format not supported");
- goto closit;
-
-
- capture_ok:
-
- post("pdp_v4l: frame %d %d, format %d, width %d, height %d",
- x->x_frame, x->x_vmmap[x->x_frame].frame, x->x_vmmap[x->x_frame].format,
- x->x_vmmap[x->x_frame].width, x->x_vmmap[x->x_frame].height);
-
- x->x_width = width;
- x->x_height = height;
-
- post("pdp_v4l: Opened video connection (%dx%d)",x->x_width,x->x_height);
-
-
- /* do some pwc specific inits */
- pdp_v4l_pwc_init(x);
-
-
- x->x_initialized = true;
-
- /* create thread */
- x->x_continue_thread = 1;
- x->x_frame_ready = 0;
- pthread_create(&x->x_thread_id, 0, pdp_v4l_thread, x);
-
- return;
- closit:
- pdp_v4l_close_error(x);
-
-}
-
-static void pdp_v4l_open_manual(t_pdp_v4l *x, t_symbol *name)
-{
- x->x_open_retry = PDP_XV_RETRIES;
- pdp_v4l_open(x, name);
-}
-
-
-static void pdp_v4l_channel(t_pdp_v4l *x, t_float f)
-{
- int channel = (float)f;
-
- if (x->x_initialized){
- pdp_v4l_close(x);
- x->x_channel = channel;
- pdp_v4l_open(x, x->x_device);
- }
- else
- x->x_channel = channel;
-}
-
-
-static void pdp_v4l_freq(t_pdp_v4l *x, t_float f)
-{
- int freq = (int)f;
-
- x->x_freq = freq;
- if (x->x_freq > 0){
- if (ioctl(x->x_tvfd, VIDIOCSFREQ, &x->x_freq) < 0)
- perror ("couldn't set frequency :");
- //else {post("pdp_v4l: tuner frequency: %f MHz", f / 16.0f);}
- }
-
-}
-
-static void pdp_v4l_freqMHz(t_pdp_v4l *x, t_float f)
-{
- pdp_v4l_freq(x, f*16.0f);
-}
-
-
-static void pdp_v4l_bang(t_pdp_v4l *x)
-{
-
- /* if initialized, grab a frame and output it */
-
- unsigned int w,h,nbpixels,packet_size,plane1,plane2;
- unsigned char *newimage;
- int object,length,pos,i,encoding;
- t_pdp* header;
- t_image* image;
- short int * data;
-
-
- static short int gain[4] = {0x7fff, 0x7fff, 0x7fff, 0x7fff};
-
- if (!(x->x_initialized)){
- post("pdp_v4l: no device opened");
-
- if (x->x_auto_open){
- post("pdp_v4l: attempting auto open");
- pdp_v4l_open(x, x->x_device);
- if (!(x->x_initialized)){
- post("pdp_v4l: auto open failed");
- return;
- }
- }
-
- else return;
- }
-
-
- /* do nothing if there is no frame ready */
- if((!x->x_frame_ready) && (x->x_only_new_frames)) return;
- x->x_frame_ready = 0;
-
- /* get the address of the "other" frame */
- newimage = x->x_videobuf + x->x_vmbuf.offsets[x->x_last_frame];
-
- /* create new packet */
- w = x->x_width;
- h = x->x_height;
-
- //nbpixels = w * h;
-
-/*
- switch(x->x_pdp_image_type){
- case PDP_IMAGE_GREY:
- packet_size = nbpixels << 1;
- break;
- case PDP_IMAGE_YV12:
- packet_size = (nbpixels + (nbpixels >> 1)) << 1;
- break;
- default:
- packet_size = 0;
- post("pdp_v4l: internal error");
- }
-*/
-
- //packet_size = (nbpixels + (nbpixels >> 1)) << 1;
-
-
- //plane1 = nbpixels;
- //plane2 = nbpixels + (nbpixels>>2);
-
- object = pdp_packet_new_image(PDP_IMAGE_YV12, w, h);
- header = pdp_packet_header(object);
- image = pdp_packet_image_info(object);
-
- if (!header){
- post("pdp_v4l: ERROR: can't allocate packet");
- return;
- }
-
- data = (short int *) pdp_packet_data(object);
- newimage = x->x_videobuf + x->x_vmbuf.offsets[x->x_frame ^ 0x1];
-
-
- /* convert data to pdp packet */
-
- switch(x->x_v4l_palette){
- case VIDEO_PALETTE_YUV420P:
- pdp_llconv(newimage, RIF_YUV__P411_U8, data, RIF_YVU__P411_S16, w, h);
- break;
-
- /* long live standards. v4l's rgb is in fact ogl's bgr */
- case VIDEO_PALETTE_RGB24:
- pdp_llconv(newimage, RIF_BGR__P____U8, data, RIF_YVU__P411_S16, w, h);
- break;
-
- case VIDEO_PALETTE_YUV422:
- pdp_llconv(newimage, RIF_YUYV_P____U8, data, RIF_YVU__P411_S16, w, h);
- break;
-
-
- default:
- post("pdp_v4l: unsupported palette");
- break;
- }
-
-/*
- if (PDP_IMAGE_YV12 == x->x_pdp_image_type){
- pixel_unpack_u8s16_y(&newimage[0], data, nbpixels>>3, x->x_state_data->gain);
- pixel_unpack_u8s16_uv(&newimage[plane1], &data[plane2], nbpixels>>5, x->x_state_data->gain);
- pixel_unpack_u8s16_uv(&newimage[plane2], &data[plane1], nbpixels>>5, x->x_state_data->gain);
- }
-*/
- //x->x_v4l_palette = VIDEO_PALETTE_YUV420P;
- //x->x_v4l_palette = VIDEO_PALETTE_RGB24;
-
-/*
-
- else if(PDP_IMAGE_GREY == x->x_pdp_image_type){
- pixel_unpack_u8s16_y(&newimage[0], data, nbpixels>>3, x->x_state_data->gain);
- }
-*/
- //post("pdp_v4l: mark unused %d", object);
-
- pdp_packet_pass_if_valid(x->x_outlet0, &object);
-
-}
-
-
-static void pdp_v4l_setlegaldim(t_pdp_v4l *x, int xx, int yy)
-{
-
- unsigned int w,h;
-
- w = pdp_imageproc_legalwidth((int)xx);
- h = pdp_imageproc_legalheight((int)yy);
-
- w = (w < x->x_maxwidth) ? w : x->x_maxwidth;
- w = (w > x->x_minwidth) ? w : x->x_minwidth;
-
- h = (h < x->x_maxheight) ? h : x->x_maxheight;
- h = (h > x->x_minheight) ? h : x->x_minheight;
-
- x->x_width = w;
- x->x_height = h;
-}
-
-static void pdp_v4l_dim(t_pdp_v4l *x, t_floatarg xx, t_floatarg yy)
-{
- if (x->x_initialized){
- pdp_v4l_close(x);
- pdp_v4l_setlegaldim(x, (int)xx, (int)yy);
- pdp_v4l_open(x, x->x_device);
-
- }
- else{
- pdp_v4l_setlegaldim(x, (int)xx, (int)yy);
- }
-}
-
-
-static void pdp_v4l_free(t_pdp_v4l *x)
-{
- pdp_v4l_close(x);
-}
-
-t_class *pdp_v4l_class;
-
-
-
-void *pdp_v4l_new(void)
-{
- t_pdp_v4l *x = (t_pdp_v4l *)pd_new(pdp_v4l_class);
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
- x->x_initialized = false;
-
-
- x->x_tvfd = -1;
- x->x_frame = 0;
- x->x_last_frame = 0;
-
- x->x_framerate = 27;
-
- x->x_auto_open = true;
- x->x_device = gensym("/dev/video0");
-
- x->x_continue_thread = 0;
- x->x_only_new_frames = 1;
-
- x->x_width = 320;
- x->x_height = 240;
-
-// pdp_v4l_type(x, gensym("yv12"));
-
-
- x->x_open_retry = PDP_XV_RETRIES;
-
- x->x_channel = 0;
- x->x_freq = -1; //don't set freq by default
-
- x->x_minwidth = pdp_imageproc_legalwidth(0);
- x->x_maxwidth = pdp_imageproc_legalwidth_round_down(0x7fffffff);
- x->x_minheight = pdp_imageproc_legalheight(0);
- x->x_maxheight = pdp_imageproc_legalheight_round_down(0x7fffffff);
-
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_v4l_setup(void)
-{
-
-
- pdp_v4l_class = class_new(gensym("pdp_v4l"), (t_newmethod)pdp_v4l_new,
- (t_method)pdp_v4l_free, sizeof(t_pdp_v4l), 0, A_NULL);
-
-
- class_addmethod(pdp_v4l_class, (t_method)pdp_v4l_bang, gensym("bang"), A_NULL);
- class_addmethod(pdp_v4l_class, (t_method)pdp_v4l_audio, gensym("audio"), A_NULL);
- class_addmethod(pdp_v4l_class, (t_method)pdp_v4l_close_manual, gensym("close"), A_NULL);
- class_addmethod(pdp_v4l_class, (t_method)pdp_v4l_open_manual, gensym("open"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_v4l_class, (t_method)pdp_v4l_channel, gensym("channel"), A_FLOAT, A_NULL);
- class_addmethod(pdp_v4l_class, (t_method)pdp_v4l_dim, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_v4l_class, (t_method)pdp_v4l_freq, gensym("freq"), A_FLOAT, A_NULL);
- class_addmethod(pdp_v4l_class, (t_method)pdp_v4l_freqMHz, gensym("freqMHz"), A_FLOAT, A_NULL);
-
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_io/pdp_xv.c b/modules/image_io/pdp_xv.c
deleted file mode 100644
index e2d864b..0000000
--- a/modules/image_io/pdp_xv.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Pure Data Packet module. Xvideo image packet output
- * 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.
- *
- */
-
-// pdp stuff
-#include "pdp.h"
-#include "pdp_base.h"
-
-// some x window glue code
-#include "pdp_xwindow.h"
-
-
-#define PDP_XV_AUTOCREATE_RETRY 10
-
-
-typedef struct pdp_xv_struct
-{
- t_object x_obj;
-
- t_pdp_xwindow x_xwin;
- t_pdp_xvideo x_xvid;
-
- t_outlet *x_outlet;
-
- int x_packet0;
- int x_queue_id;
- t_symbol *x_display;
-
- Display *x_dpy;
-
- int x_initialized;
- int x_autocreate;
-
-
-} t_pdp_xv;
-
-
-static void pdp_xv_cursor(t_pdp_xv *x, t_floatarg f)
-{
- pdp_xwindow_cursor(&x->x_xwin, f);
-}
-
-
-static void pdp_xv_destroy(t_pdp_xv* x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- if (x->x_initialized){
-
- pdp_procqueue_finish(q, x->x_queue_id); // wait for thread to finish
- x->x_queue_id = -1;
- pdp_xvideo_close(&x->x_xvid); // close xvideo connection
- pdp_xwindow_close(&x->x_xwin); // close the window
- XCloseDisplay(x->x_dpy); // close the display connection
- x->x_dpy = 0;
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = -1;
- x->x_initialized = 0;
-
- }
-}
-
-
-
-static void pdp_xv_create(t_pdp_xv* x)
-{
- int i;
- if(x->x_initialized) return;
-
- /* manually open a display */
- if (NULL == (x->x_dpy = XOpenDisplay(x->x_display->s_name))){
- post("pdp_xv: cant open display %s\n",x->x_display->s_name);
- x->x_initialized = false;
- return;
- }
-
- /* open an xv port on the display */
- if (!(x->x_initialized = pdp_xvideo_open_on_display(&x->x_xvid, x->x_dpy))) goto exit_close_dpy;
-
- /* create a window on the display */
- if (!(x->x_initialized = pdp_xwindow_create_on_display(&x->x_xwin, x->x_dpy))) goto exit_close_win;
-
- /* done */
- return;
-
- /* cleanup exits */
- exit_close_win:
- pdp_xwindow_close(&x->x_xwin); // cose window
- exit_close_dpy:
- XCloseDisplay(x->x_dpy); // close display
- x->x_dpy = 0;
-}
-
-static int pdp_xv_try_autocreate(t_pdp_xv *x)
-{
-
- if (x->x_autocreate){
- post("pdp_xv: autocreate window");
- pdp_xv_create(x);
- if (!(x->x_initialized)){
- x->x_autocreate--;
- if (!x->x_autocreate){
- post ("pdp_xv: autocreate failed %d times: disabled", PDP_XV_AUTOCREATE_RETRY);
- post ("pdp_xv: send [autocreate 1] message to re-enable");
- return 0;
- }
- }
- else return 1;
-
- }
- return 0;
-}
-
-static void pdp_xv_bang(t_pdp_xv *x);
-
-static void pdp_xv_bang_thread(t_pdp_xv *x)
-{
- pdp_xvideo_display_packet(&x->x_xvid, &x->x_xwin, x->x_packet0);
-}
-
-
-static void pdp_xv_bang_callback(t_pdp_xv *x)
-{
- /* receive events & output them */
- pdp_xwindow_send_events(&x->x_xwin, x->x_outlet);
-
-
- /* release the packet if there is one */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = -1;
-
-}
-
-static void pdp_xv_bang(t_pdp_xv *x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
-
- /* check if window is initialized */
- if (!(x->x_initialized)){
- if (!pdp_xv_try_autocreate(x)) return;
- }
-
- /* check if we can proceed */
- if (-1 != x->x_queue_id) return;
- if (-1 == x->x_packet0) return;
-
- /* if previous queued method returned
- schedule a new one, else ignore */
- if (-1 == x->x_queue_id) {
- pdp_procqueue_add(q, x, pdp_xv_bang_thread, pdp_xv_bang_callback, &x->x_queue_id);
- }
-
-}
-
-static void pdp_xv_input_0(t_pdp_xv *x, t_symbol *s, t_floatarg f)
-{
-
- if (s == gensym("register_ro")) pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("bitmap/yv12/*"));
- if (s == gensym("process")) pdp_xv_bang(x);
-
-}
-
-
-
-static void pdp_xv_autocreate(t_pdp_xv *x, t_floatarg f)
-{
- if (f != 0.0f) x->x_autocreate = PDP_XV_AUTOCREATE_RETRY;
- else x->x_autocreate = 0;
-}
-
-static void pdp_xv_display(t_pdp_xv *x, t_symbol *s)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- pdp_procqueue_finish(q, x->x_queue_id);
- x->x_queue_id = -1;
- x->x_display = s;
- if (x->x_initialized){
- pdp_xv_destroy(x);
- pdp_xv_create(x);
- }
-}
-
-static void pdp_xv_fullscreen(t_pdp_xv *x)
-{
- pdp_xwindow_fullscreen(&x->x_xwin);
-}
-
-static void pdp_xv_resize(t_pdp_xv* x, t_floatarg width, t_floatarg height)
-{
- pdp_xwindow_resize(&x->x_xwin, width, height);
-}
-
-static void pdp_xv_move(t_pdp_xv* x, t_floatarg width, t_floatarg height)
-{
- pdp_xwindow_move(&x->x_xwin, width, height);
-}
-
-static void pdp_xv_moveresize(t_pdp_xv* x, t_floatarg xoff, t_floatarg yoff, t_floatarg width, t_floatarg height)
-{
- pdp_xwindow_moveresize(&x->x_xwin, xoff, yoff, width, height);
-}
-
-static void pdp_xv_tile(t_pdp_xv* x, t_floatarg xtiles, t_floatarg ytiles, t_floatarg i, t_floatarg j)
-{
- pdp_xwindow_tile(&x->x_xwin, xtiles, ytiles, i, j);
-}
-
-static void pdp_xv_vga(t_pdp_xv *x)
-{
- pdp_xv_resize(x, 640, 480);
-}
-
-static void pdp_xv_free(t_pdp_xv *x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- pdp_procqueue_finish(q, x->x_queue_id);
- pdp_xv_destroy(x);
- pdp_xvideo_free(&x->x_xvid);
- pdp_xwindow_free(&x->x_xwin);
-}
-
-t_class *pdp_xv_class;
-
-
-
-void *pdp_xv_new(void)
-{
- t_pdp_xv *x = (t_pdp_xv *)pd_new(pdp_xv_class);
- x->x_outlet = outlet_new(&x->x_obj, &s_anything);
-
- pdp_xwindow_init(&x->x_xwin);
- pdp_xvideo_init(&x->x_xvid);
-
- x->x_packet0 = -1;
- x->x_queue_id = -1;
- x->x_display = gensym(":0");
- x->x_dpy = 0;
- pdp_xv_autocreate(x,1);
-
- return (void *)x;
-}
-
-
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_xv_setup(void)
-{
- pdp_xv_class = class_new(gensym("pdp_xv"), (t_newmethod)pdp_xv_new,
- (t_method)pdp_xv_free, sizeof(t_pdp_xv), 0, A_NULL);
-
-
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_bang, gensym("bang"), A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_create, gensym("open"), A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_create, gensym("create"), A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_autocreate, gensym("autocreate"), A_FLOAT, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_destroy, gensym("destroy"), A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_destroy, gensym("close"), A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_resize, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_move, gensym("move"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_move, gensym("pos"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_resize, gensym("size"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_display, gensym("display"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_cursor, gensym("cursor"), A_FLOAT, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_fullscreen, gensym("fullscreen"), A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_moveresize, gensym("posdim"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_tile, gensym("tile"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_NULL);
-
- /* some shortcuts for the lazy */
- class_addmethod(pdp_xv_class, (t_method)pdp_xv_vga, gensym("vga"), A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
diff --git a/modules/image_special/Makefile b/modules/image_special/Makefile
deleted file mode 100644
index 7c0f59d..0000000
--- a/modules/image_special/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-current: all_modules
-
-include ../../Makefile.config
-
-PDP_MOD = pdp_chrot.o pdp_grey2mask.o pdp_scale.o pdp_scan.o \
- pdp_scanxy.o pdp_scope.o pdp_slice_cut.o pdp_slice_glue.o \
- pdp_cog.o pdp_histo.o pdp_array.o
-
-# build special case image (and sound) processing modules
-all_modules: $(PDP_MOD)
-
-clean:
- rm -f *~
- rm -f *.o
-
diff --git a/modules/image_special/README b/modules/image_special/README
deleted file mode 100644
index 208710f..0000000
--- a/modules/image_special/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains image processors that don't fit into the basic and io categories.
-
diff --git a/modules/image_special/pdp_array.c b/modules/image_special/pdp_array.c
deleted file mode 100644
index 41ea0d5..0000000
--- a/modules/image_special/pdp_array.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Pure Data Packet module.
- * Copyright (c) 2003 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.
- *
- */
-
-
-#include <math.h>
-
-#include "pdp.h"
-#include "pdp_base.h"
-
-
-typedef struct _pdp_array
-{
- t_object x_obj;
- t_symbol *x_array_sym;
- t_outlet *x_outlet; // for array->pdp
- t_int x_rows;
-
- /* the packet */
- int x_packet0;
-
-} t_pdp_array;
-
-
-static void pdp_array_bang(t_pdp_array *x)
-{
- post("not implemented");
-}
-
-
-static void pdp_array_input_0(t_pdp_array *x, t_symbol *s, t_floatarg f)
-{
- int packet = (int)f;
-
-
- /* register */
- if (s == gensym("register_ro")){
- /* replace if not compatible or we are not interpolating */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_convert_ro(packet, pdp_gensym("image/grey/*"));
- }
-
- /* process */
- if (s == gensym("process")){
- float *vec;
- int nbpoints;
- t_garray *a;
- t_pdp *header = pdp_packet_header(x->x_packet0);
- short int *data = pdp_packet_data(x->x_packet0);
- if (!header || !data) return;
-
- /* dump to array if possible */
- if (!x->x_array_sym){
- }
-
- /* check if array is valid */
- else if (!(a = (t_garray *)pd_findbyclass(x->x_array_sym, garray_class))){
- post("pdp_array: %s: no such array", x->x_array_sym->s_name);
- }
- /* get data */
- else if (!garray_getfloatarray(a, &nbpoints, &vec)){
- post("pdp_array: %s: bad template", x->x_array_sym->s_name);
- }
- /* scale and dump in array */
- else{
- int i;
- int w = header->info.image.width;
- int h = header->info.image.height;
- int N = w*h;
- N = (nbpoints < N) ? nbpoints : N;
-
- /* scan rows */
- if (x->x_rows){
- for (i=0; i<N; i++)
- vec[i] = (float)data[i] * (1.0f / (float)0x8000);
- }
- /* scan columns */
- else{
- for (i=0; i<N; i++) {
- int x = i / h;
- int y = i % h;
- vec[i] = (float)data[x+(h-y-1)*w] * (1.0f / (float)0x8000);
- }
- }
- //garray_redraw(a);
- }
-
- }
-}
-
-static void pdp_array_array(t_pdp_array *x, t_symbol *s)
-{
- //post("setting symbol %x", s);
- x->x_array_sym = s;
- x->x_packet0 = -1;
-}
-
-
-static void pdp_array_free(t_pdp_array *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-
-t_class *pdp_array2grey_class;
-t_class *pdp_grey2array_class;
-
-
-
-void *pdp_array2grey_new(t_symbol *s, t_symbol *r)
-{
- t_pdp_array *x = (t_pdp_array *)pd_new(pdp_array2grey_class);
- pdp_array_array(x, s);
- return (void *)x;
-}
-
-void *pdp_grey2array_new(t_symbol *s, t_symbol *r)
-{
- t_pdp_array *x = (t_pdp_array *)pd_new(pdp_grey2array_class);
- pdp_array_array(x, s);
- if (r == gensym("rows")){
- x->x_rows = 1;
- post("pdp_grey2array: scanning rows");
- }
- else {
- x->x_rows = 0;
- post("pdp_grey2array: scanning columns");
- }
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_array_setup(void)
-{
-
- pdp_array2grey_class = class_new(gensym("pdp_array2grey"),
- (t_newmethod)pdp_array2grey_new,
- (t_method)pdp_array_free,
- sizeof(t_pdp_array),
- 0, A_DEFSYMBOL, A_DEFSYMBOL, A_NULL);
-
- pdp_grey2array_class = class_new(gensym("pdp_grey2array"),
- (t_newmethod)pdp_grey2array_new,
- (t_method)pdp_array_free,
- sizeof(t_pdp_array),
- 0, A_DEFSYMBOL, A_DEFSYMBOL, A_NULL);
-
-
- /* packet input */
- class_addmethod(pdp_grey2array_class,
- (t_method)pdp_array_input_0,
- gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
- /* bang method */
- class_addmethod(pdp_array2grey_class,
- (t_method)pdp_array_bang, gensym("bang"), A_NULL);
-
-
- /* bookkeeping */
- class_addmethod(pdp_array2grey_class, (t_method)pdp_array_array,
- gensym("array"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_grey2array_class, (t_method)pdp_array_array,
- gensym("array"), A_SYMBOL, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/modules/image_special/pdp_chrot.c b/modules/image_special/pdp_chrot.c
deleted file mode 100644
index 27993c6..0000000
--- a/modules/image_special/pdp_chrot.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_base.h"
-#include <math.h>
-
-
-typedef struct pdp_chrot_struct
-{
- t_pdp_base x_base;
-
- float x_matrix[4];
- void *x_crot2d;
-
-} t_pdp_chrot;
-
-
-
-static void pdp_chrot_process(t_pdp_chrot *x)
-{
- int packet;
- t_pdp *header;
- void *data;
- unsigned int w,h,size,v_offset;
- short int *idata;
-
-
- /* get packet & info */
- packet = pdp_base_get_packet(x, 0);
- header = pdp_packet_header(packet);
- data = pdp_packet_data (packet);
-
- /* only process if we have a vlid yv12 image */
- if ((header) && (PDP_IMAGE == header->type) && (PDP_IMAGE_YV12 == header->info.image.encoding)){
-
- w = header->info.image.width;
- h = header->info.image.height;
-
- size = w*h;
- v_offset = size;
-
- idata = (short int *)data;
-
-
- /* color rotation for 2 colour planes */
- pdp_imageproc_crot2d_process(x->x_crot2d, idata + v_offset, w>>1, h>>1);
-
- }
- return;
-}
-
-
-static void pdp_chrot_setelement(t_pdp_chrot *x, int element, float f)
-{
- x->x_matrix[element] = f;
-
-}
-
-static void pdp_chrot_angle_radians(t_pdp_chrot *x, t_floatarg angle)
-{
- float c = cos(angle);
- float s = sin(angle);
-
- pdp_chrot_setelement(x, 0, c);
- pdp_chrot_setelement(x, 1, s);
- pdp_chrot_setelement(x, 2, -s);
- pdp_chrot_setelement(x, 3, c);
-
- pdp_imageproc_crot2d_setmatrix(x->x_crot2d, x->x_matrix);
-}
-
-static void pdp_chrot_angle_degrees(t_pdp_chrot *x, t_floatarg angle)
-{
- pdp_chrot_angle_radians(x, (angle * (M_PI / 180.f)));
-
-}
-
-static void pdp_chrot_free(t_pdp_chrot *x)
-{
- pdp_base_free(x);
- pdp_imageproc_crot2d_delete(x->x_crot2d);
-}
-
-t_class *pdp_chrot_class;
-
-
-
-void *pdp_chrot_new(t_floatarg f)
-{
- t_pdp_chrot *x = (t_pdp_chrot *)pd_new(pdp_chrot_class);
-
- pdp_base_init(x);
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("angle"));
- pdp_base_add_pdp_outlet(x);
- pdp_base_set_process_method(x, (t_pdp_method)pdp_chrot_process);
-
- x->x_crot2d = pdp_imageproc_crot2d_new();
- pdp_chrot_angle_radians(x, 0.0f);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_chrot_setup(void)
-{
-
-
- pdp_chrot_class = class_new(gensym("pdp_chrot"), (t_newmethod)pdp_chrot_new,
- (t_method)pdp_chrot_free, sizeof(t_pdp_chrot), 0, A_DEFFLOAT, A_NULL);
-
- pdp_base_setup(pdp_chrot_class);
- class_addmethod(pdp_chrot_class, (t_method)pdp_chrot_angle_degrees, gensym("angle"), A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_special/pdp_cog.c b/modules/image_special/pdp_cog.c
deleted file mode 100644
index c1ea1bf..0000000
--- a/modules/image_special/pdp_cog.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Pure Data Packet module.
- * Copyright (c) 2003 by Johannes Taelman <johannes.taelman@rug.ac.be>
- * API updates 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_base.h"
-#include <math.h>
-
-typedef struct pdp_cog_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
- t_outlet *x_outlet1;
- t_outlet *x_outlet2;
- t_outlet *x_outlet3;
- t_outlet *x_outlet4;
-
- int x_packet0;
- int x_threshold;
- int x_do_thresholding;
-} t_pdp_cog;
-
-
-static void _pdp_cog_perform(t_pdp_cog *x, int width, int height, short int *data0)
-{
- short int *pp;
- int nbpixels;
-
- int y;
- int h,v;
-
- int rowsums[width];
- int columnsums[height];
-
- float vsum,vvar,vcog,vstd;
- float hsum,hvar,hcog,hstd;
-
-
- pp=data0;
-
- nbpixels=width*height;
-
- for (h=0;h<width;h++)
- columnsums[h]=0;
-
- /* create column & row sums from thresholded data */
- if (x->x_do_thresholding){
- for (v=0;v<height;v++){
- int rs=0;
- for (h=0;h<width;h++){
- int d=*pp++;
-
- d=(d>x->x_threshold) ? d : ((d<-x->x_threshold)?(-d):0);
- columnsums[h]+= d;
- rs+=d;
- }
- rowsums[v]=rs;
- }
- }
-
- /* don't perform thresholding */
- else{
- for (v=0;v<height;v++){
- int rs=0;
- for (h=0;h<width;h++){
- int d=*pp++;
- columnsums[h]+= d;
- rs+=d;
- }
- rowsums[v]=rs;
- }
- }
-
-
- /* compute vertical mean and standard dev */
- vsum=1;
- vvar=height*height/4;
- vcog=height/2;
- for (v=0;v<height;v++){
- float d=rowsums[v];
- vsum+=d;
- vcog+=d*v;
- }
- vcog/=vsum;
- for (v=0;v<height;v++){
- float d=rowsums[v];
- float f=v-vcog;
- vvar+=d*f*f;
- }
- vstd=sqrt(vvar/vsum)/height;
-
- /* compute horizontal meaan and standard dev */
- hsum=1;
- hvar=width*width/4;
- hcog=width/2;
- for (h=0;h<width;h++){
- float d=columnsums[h];
- hsum+=d;
- hcog+=d*h;
- }
- hcog/=hsum;
- for (h=0;h<width;h++){
- float d=columnsums[h];
- float f=h-hcog;
- hvar+=d*f*f;
- }
- hstd=sqrt(hvar/hsum)/width;
-
- /* pass it on */
- outlet_float(x->x_outlet4,vstd);
- outlet_float(x->x_outlet3,hstd);
- outlet_float(x->x_outlet2,vcog/height);
- outlet_float(x->x_outlet1,hcog/width);
- outlet_float(x->x_outlet0,(1.0f / (float)(0x7fff)) * hsum/(height*width));
-}
-
-
-// packet is an image/*/* packet or invalid */
-static void pdp_cog_perform(t_pdp_cog *x)
-{
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- void *data0 = pdp_packet_data(x->x_packet0);
- if (!header0 || !data0) return;
-
- _pdp_cog_perform(x,
- header0->info.image.width,
- header0->info.image.height,
- data0);
-}
-
-
-
-static void pdp_cog_input_0(t_pdp_cog *x, t_symbol *s, t_floatarg f)
-{
- int packet = (int)f;
-
- /* register */
- if (s == gensym("register_ro")){
- /* replace if not compatible or we are not interpolating */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_convert_ro(packet, pdp_gensym("image/*/*"));
-
- }
-
- if (s == gensym("process")){
- pdp_cog_perform(x);
- }
-
-}
-
-
-static void pdp_cog_threshold(t_pdp_cog *x, t_floatarg f)
-{
- x->x_threshold=(int) (f * ((float) 0x7fff));
-}
-
-
-
-static void pdp_cog_free(t_pdp_cog *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-
-t_class *pdp_cog_class;
-
-
-
-void *pdp_cog_new(void)
-{
-
- t_pdp_cog *x = (t_pdp_cog *)pd_new(pdp_cog_class);
-
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_float);
- x->x_outlet1 = outlet_new(&x->x_obj, &s_float);
- x->x_outlet2 = outlet_new(&x->x_obj, &s_float);
- x->x_outlet3 = outlet_new(&x->x_obj, &s_float);
- x->x_outlet4 = outlet_new(&x->x_obj, &s_float);
-
- x->x_packet0 = -1;
- x->x_do_thresholding = 0;
-
- return (void *)x;
-}
-
-void *pdp_cog_abs_thresh_new(t_floatarg f)
-{
- t_pdp_cog *x = (t_pdp_cog *)pdp_cog_new();
- inlet_new((void *)x, &x->x_obj.ob_pd, gensym("float"),gensym("threshold"));
- pdp_cog_threshold(x, f);
- x->x_do_thresholding = 1;
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_cog_setup(void)
-{
-
- pdp_cog_class = class_new(gensym("pdp_cog"), (t_newmethod)pdp_cog_new,
- (t_method)pdp_cog_free, sizeof(t_pdp_cog), 0,A_NULL);
-
- class_addcreator((t_newmethod)pdp_cog_abs_thresh_new, gensym("pdp_cog_abs_thresh"), A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_cog_class, (t_method)pdp_cog_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_cog_class, (t_method)pdp_cog_threshold, gensym("threshold"),A_DEFFLOAT, A_NULL);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/modules/image_special/pdp_grey2mask.c b/modules/image_special/pdp_grey2mask.c
deleted file mode 100644
index 4f10772..0000000
--- a/modules/image_special/pdp_grey2mask.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-/* this module converts a greyscale image or the luma channel of a colour image
- to a colour image intensity mask, usable for multiplication */
-
-#include "pdp.h"
-#include "pdp_resample.h"
-
-typedef struct pdp_grey2mask_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
- int x_packet0;
- int x_dropped;
- int x_queue_id;
-
-
-} t_pdp_grey2mask;
-
-
-
-static void pdp_grey2mask_process_grey(t_pdp_grey2mask *x)
-{
- t_pdp *header = pdp_packet_header(x->x_packet0);
- short int *data = (short int *)pdp_packet_data (x->x_packet0);
- t_pdp *newheader = 0;
- short int *newdata = 0;
- int newpacket = -1;
-
- unsigned int w = header->info.image.width;
- unsigned int h = header->info.image.height;
-
- unsigned int size = w*h;
- unsigned int totalnbpixels = size;
- unsigned int u_offset = size;
- unsigned int v_offset = size + (size>>2);
-
- unsigned int row, col;
-
- newpacket = pdp_packet_new_image_YCrCb(w, h);
- newheader = pdp_packet_header(newpacket);
- newdata = (short int *)pdp_packet_data(newpacket);
-
- /* copy luma channel */
- memcpy(newdata, data, size * sizeof(s16));
-
- /* subsample luma -> chroma channel */
- pdp_resample_halve(data, newdata+u_offset, w, h);
-
- /* copy this to the other chroma channel */
- memcpy(newdata+v_offset, newdata+u_offset, (size>>2)*sizeof(s16));
-
- /* delete source packet and replace with new packet */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = newpacket;
- return;
-}
-
-static void pdp_grey2mask_process_yv12(t_pdp_grey2mask *x)
-{
- /* process only the luminance channel */
- pdp_grey2mask_process_grey(x);
-}
-
-
-
-static void pdp_grey2mask_process(t_pdp_grey2mask *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_grey2mask_process inputs and write into active inlet */
- switch(pdp_packet_header(x->x_packet0)->info.image.encoding){
-
- case PDP_IMAGE_YV12:
- pdp_grey2mask_process_yv12(x);
- break;
-
- case PDP_IMAGE_GREY:
- pdp_grey2mask_process_grey(x);
- break;
-
- default:
- /* don't know the type, so dont pdp_grey2mask_process */
-
- break;
- }
- }
-}
-
-static void pdp_grey2mask_sendpacket(t_pdp_grey2mask *x)
-{
- /* unregister and propagate if valid packet */
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet0);
-}
-
-static void pdp_grey2mask_input_0(t_pdp_grey2mask *x, t_symbol *s, t_floatarg f)
-{
-
- int p = (int)f;
-
- if (s== gensym("register_ro")) x->x_dropped = pdp_packet_copy_ro_or_drop(&x->x_packet0, p);
-
-
- if ((s == gensym("process")) && (-1 != x->x_packet0) && (!x->x_dropped)){
-
-
- /* add the process method and callback to the process queue */
-
- //pdp_queue_add(x, pdp_grey2mask_process, pdp_grey2mask_sendpacket, &x->x_queue_id);
- // since the process method creates a packet, this is not processed in the thread
- // $$$TODO: fix this
- pdp_grey2mask_process(x);
- pdp_grey2mask_sendpacket(x);
- }
-
-}
-
-
-
-static void pdp_grey2mask_free(t_pdp_grey2mask *x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- pdp_procqueue_finish(q, x->x_queue_id);
- pdp_packet_mark_unused(x->x_packet0);
-
-}
-
-t_class *pdp_grey2mask_class;
-
-
-
-void *pdp_grey2mask_new(void)
-{
- int i;
-
- t_pdp_grey2mask *x = (t_pdp_grey2mask *)pd_new(pdp_grey2mask_class);
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
- x->x_packet0 = -1;
- x->x_queue_id = -1;
-
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_grey2mask_setup(void)
-{
-
-
- pdp_grey2mask_class = class_new(gensym("pdp_grey2mask"), (t_newmethod)pdp_grey2mask_new,
- (t_method)pdp_grey2mask_free, sizeof(t_pdp_grey2mask), 0, A_NULL);
-
-
- class_addmethod(pdp_grey2mask_class, (t_method)pdp_grey2mask_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_special/pdp_histo.c b/modules/image_special/pdp_histo.c
deleted file mode 100644
index 43cdb8c..0000000
--- a/modules/image_special/pdp_histo.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * Pure Data Packet module.
- * Copyright (c) 2003 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_base.h"
-#include <math.h>
-
-struct _pdp_histo;
-typedef void (*t_histo_proc)(struct _pdp_histo *);
-
-
-typedef struct _pdp_histo
-{
- t_object x_obj;
- t_int x_logN;
- t_symbol *x_array_sym;
- t_float x_scale;
- t_int x_debug;
- t_int x_sample_size; /* pointcloud size */
- t_histo_proc x_process_method; /* what to do with the histogram */
- t_outlet *x_outlet0;
- int x_matrix_output;
-
- /* the packet */
- int x_packet0;
-
- /* packet data */
- short int *x_data;
- int x_width;
- int x_height;
- int x_nb_pixels;
-
- /* histo data for processor: these are stored on the stack */
- int *x_histo;
-
-} t_pdp_histo;
-
-
-static int round_up_2log(int i)
-{
- int l = 0;
- i--;
- while (i) {
- i >>= 1;
- l++;
- }
- //post("log is %d, 2^n is %d", l, 1 << l);
-
- l = (l < 16) ? l : 15;
- return l;
-}
-
-
-static void dump_to_array(t_pdp_histo *x)
-{
- float *vec;
- int nbpoints;
- t_garray *a;
- int i;
- int *histo = x->x_histo;
- int N = 1 << (x->x_logN);
- float scale = 1.0f / (float)(x->x_nb_pixels);
-
-
- /* dump to array if possible */
- if (!x->x_array_sym){
- }
-
- /* check if array is valid */
- else if (!(a = (t_garray *)pd_findbyclass(x->x_array_sym, garray_class))){
- post("pdp_histo: %s: no such array", x->x_array_sym->s_name);
- }
- /* get data */
- else if (!garray_getfloatarray(a, &nbpoints, &vec)){
- post("pdp_histo: %s: bad template", x->x_array_sym->s_name);
- }
- /* scale and dump in array */
- else{
-
- N = (nbpoints < N) ? nbpoints : N;
- for (i=0; i<N; i++) vec[i] = (float)(histo[i]) * scale * x->x_scale;
- //garray_redraw(a);
- }
-
-}
-
-static void get_sampleset(t_pdp_histo *x, int log_tmp_size, int threshold)
-{
- int N = 1 << log_tmp_size;
- int mask = N-1;
- int index, nbpoints, i;
- t_atom a[2];
- double scalex = 1.0f / (double)(x->x_width);
- double scaley = 1.0f / (double)(x->x_height);
- t_symbol *s = gensym("list");
- int matrix_packet;
- double *mat_data;
-
- /* store the offsets of the points in a in an oversized array
- the oversizing is to eliminate a division and to limit the
- searching for a free location after a random index is generated */
-
- int offset[N];
-
- /* reset the array */
- memset(offset, -1, N * sizeof(int));
-
- /* get the coordinates of the tempsize brightest points
- and store them in a random location in the hash */
- for (i=0; i<x->x_nb_pixels; i++){
- if (x->x_data[i] >= threshold){
- /* get a random index */
- int ri = random();
- //int ri = 0;
- /* find an empty spot to store it */
- while (-1 != offset[ri & mask]) ri++;
- offset[ri & mask] = i;
- }
- }
-
-
- /* repack the array to get the requested
- sample size at the start */
- index = 0;
- nbpoints = 0;
- while (nbpoints < x->x_sample_size){
- while (-1 == offset[index]) index++; // ffwd to next nonepty slot
- offset[nbpoints++] = offset[index++]; // move slot
- }
-
-
- /* MATRIX OUTPUT */
- if (x->x_matrix_output){
-
- matrix_packet = pdp_packet_new_matrix(x->x_sample_size, 2, PDP_MATRIX_TYPE_RDOUBLE);
- mat_data = pdp_packet_data(matrix_packet);
- if (mat_data){
-
- /* build the cluster data struct */
- for (i=0; i<x->x_sample_size; i++){
- mat_data[2*i] = ((double)(offset[i] % x->x_width)) * scalex;
- mat_data[2*i+1] = ((double)(offset[i] / x->x_width)) * scaley;
- }
-
- pdp_pass_if_valid(x->x_outlet0, &matrix_packet);
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = -1;
- }
-
- }
-
- /* IMAGE OUTPUT */
- else {
-
- /* get rw copy */
- pdp_packet_replace_with_writable(&x->x_packet0);
- x->x_data = pdp_packet_data(x->x_packet0);
-
- /* mark output packet samples */
- if (x->x_data){
- memset(x->x_data, 0, 2*x->x_nb_pixels);
- for (i=0; i<x->x_sample_size; i++){
- x->x_data[offset[i]] = 0x7fff;
- }
- }
-
- /* send packet to left outlet */
- pdp_pass_if_valid(x->x_outlet0, &x->x_packet0);
- }
-
-
-}
-
-static void get_brightest(t_pdp_histo *x)
-{
- int i;
- int *histo = x->x_histo;
- int N = 1 << (x->x_logN);
-
- int index, nsamps;
-
- /* check requested size */
- if (x->x_sample_size > x->x_nb_pixels){
- post("WARNING: more samples requested than pixels in image");
- x->x_sample_size = x->x_nb_pixels;
- }
-
-
- /* find limiting index */
- index = N;
- nsamps = 0;
- while (nsamps < x->x_sample_size){
- index--;
- nsamps += histo[index];
- }
-
- /* status report */
- if (x->x_debug){
- post("found %d samples between h[%d] and h[%d]", nsamps, index, N-1);
- }
-
- /* get a representative set from the candidates
- the tempbuf is the rounded log of the nb of samples + 1
- so it is at least 50% sparse */
- get_sampleset(x, round_up_2log(nsamps) + 1, index << (15-x->x_logN));
-
-}
-
-
-static void _pdp_histo_perform(t_pdp_histo *x)
-{
- short int *pp;
- int N = 1 << x->x_logN;
- int nbpixels = x->x_width * x->x_height, i;
-
- int histo[N];
-
- /* init */
- for (i=0; i<N; i++) histo[i] = 0;
-
- /* build histo */
- for (i=0; i<nbpixels; i++){
- int index = x->x_data[i] >> (15 - x->x_logN);
- if (index < 0) index = 0; /* negative -> zero */
- histo[index]++;
- }
-
- /* save the histo stack location */
- x->x_histo = histo;
-
- /* print it */
- if (x->x_debug){
- post("histogram:");
- for (i=0; i<N; i++){
- fprintf(stderr, "%d\t", histo[i]);
- if (!(i % 10)) post("");
- }
- post("");
- }
-
- /* call the processor */
- x->x_process_method(x);
-
-
-}
-
-
-// packet is an image/*/* packet or invalid */
-static void pdp_histo_perform(t_pdp_histo *x)
-{
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- void *data0 = pdp_packet_data(x->x_packet0);
- if (!header0 || !data0) return;
-
- x->x_width = header0->info.image.width;
- x->x_height = header0->info.image.height;
- x->x_nb_pixels = x->x_width * x->x_height;
- x->x_data = data0;
-
- _pdp_histo_perform(x);
-}
-
-
-
-static void pdp_histo_input_0(t_pdp_histo *x, t_symbol *s, t_floatarg f)
-{
- int packet = (int)f;
-
- /* register */
- if (s == gensym("register_rw")){
- /* replace if not compatible or we are not interpolating */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_convert_ro(packet, pdp_gensym("image/grey/*"));
-
- }
-
- if (s == gensym("process")){
- pdp_histo_perform(x);
- }
-
-}
-
-
-
-static void pdp_histo_samplesize(t_pdp_histo *x, t_floatarg f)
-{
- int i = (int)f;
- if (i > 0) x->x_sample_size = i;
-}
-
-
-static void pdp_histo_scale(t_pdp_histo *x, t_floatarg f){x->x_scale = f;}
-
-
-
-static void pdp_histo_size(t_pdp_histo *x, t_floatarg f)
-{
- int i = (int)f;
- if (i < 1) return;
- x->x_logN = round_up_2log(i);
-}
-
-
-static void pdp_histo_array(t_pdp_histo *x, t_symbol *s)
-{
- //post("setting symbol %x", s);
- x->x_array_sym = s;
-}
-
-
-static void pdp_histo_free(t_pdp_histo *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-
-t_class *pdp_histo_class;
-
-
-
-void *pdp_histo_new(t_floatarg f)
-{
-
- t_pdp_histo *x = (t_pdp_histo *)pd_new(pdp_histo_class);
- if (f == 0.0f) f = 64;
- pdp_histo_size(x, f);
- x->x_packet0 = -1;
- x->x_debug = 0;
- x->x_sample_size = 16;
- return (void *)x;
-}
-
-
-void *pdp_histo_array_new(t_symbol *s, t_float f, t_float f2)
-{
- t_pdp_histo *x = (t_pdp_histo *)pdp_histo_new(f);
- if (f2 == 0.0f) f2 = 1.0f;
- pdp_histo_scale(x, f2);
- pdp_histo_array(x, s);
- x->x_process_method = dump_to_array;
- return (void *)x;
-}
-
-void *pdp_histo_sample_new(t_float nbsamples, t_float histosize)
-{
- t_pdp_histo *x;
- if (histosize == 0.0f) histosize = 256.0f;
- x = (t_pdp_histo *)pdp_histo_new(histosize);
- if (nbsamples == 0.0f) nbsamples = 16.0f;
- pdp_histo_samplesize(x, nbsamples);
- x->x_process_method = get_brightest;
- x->x_outlet0 = outlet_new(&x->x_obj, gensym("anything"));
- x->x_matrix_output = 0;
-
- inlet_new((t_object *)x, (t_pd *)&x->x_obj, gensym("float"), gensym("nbpoints"));
-
- return (void *)x;
-}
-
-void *pdp_histo_sample_matrix_new(t_float nbsamples, t_float histosize)
-{
- t_pdp_histo *x = pdp_histo_sample_new(nbsamples, histosize);
- if (x) x->x_matrix_output = 1;
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_histo_setup(void)
-{
-
- pdp_histo_class = class_new(gensym("pdp_histo"), (t_newmethod)pdp_histo_array_new,
- (t_method)pdp_histo_free, sizeof(t_pdp_histo), 0, A_DEFSYMBOL, A_DEFFLOAT, A_DEFFLOAT, A_NULL);
-
- class_addcreator((t_newmethod)pdp_histo_sample_new, gensym("pdp_pointcloud"), A_DEFFLOAT, A_DEFFLOAT, A_NULL);
- class_addcreator((t_newmethod)pdp_histo_sample_matrix_new, gensym("pdp_pointcloud_matrix"), A_DEFFLOAT, A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_size, gensym("size"), A_FLOAT, A_NULL);
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_size, gensym("scale"), A_FLOAT, A_NULL);
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_array, gensym("array"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_samplesize, gensym("nbpoints"), A_FLOAT, A_NULL);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/modules/image_special/pdp_scale.c b/modules/image_special/pdp_scale.c
deleted file mode 100644
index 3c74bd8..0000000
--- a/modules/image_special/pdp_scale.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_resample.h"
-
-
-
-typedef struct pdp_scale_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
-
- int x_packet0;
- int x_packet1;
- int x_dropped;
- int x_queue_id;
-
- unsigned int x_width;
- unsigned int x_height;
- int x_quality;
-
-
-} t_pdp_scale;
-
-
-static void pdp_scale_process_yv12(t_pdp_scale *x)
-{
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- t_pdp *header1 = pdp_packet_header(x->x_packet1);
- void *data0 = pdp_packet_data (x->x_packet0);
- void *data1 = pdp_packet_data (x->x_packet1);
-
- unsigned int src_w = header0->info.image.width;
- unsigned int src_h = header0->info.image.height;
-
- unsigned int dst_w = header1->info.image.width;
- unsigned int dst_h = header1->info.image.height;
-
- short int *src_image = (short int *)data0;
- short int *dst_image = (short int *)data1;
-
- unsigned int src_size = src_w*src_h;
- unsigned int src_voffset = src_size;
- unsigned int src_uoffset = src_size + (src_size>>2);
-
- unsigned int dst_size = dst_w*dst_h;
- unsigned int dst_voffset = dst_size;
- unsigned int dst_uoffset = dst_size + (dst_size>>2);
-
- if (x->x_quality){
- pdp_resample_scale_bilin(src_image, dst_image, src_w, src_h, dst_w, dst_h);
- pdp_resample_scale_bilin(src_image+src_voffset, dst_image+dst_voffset, src_w>>1, src_h>>1, dst_w>>1, dst_h>>1);
- pdp_resample_scale_bilin(src_image+src_uoffset, dst_image+dst_uoffset, src_w>>1, src_h>>1, dst_w>>1, dst_h>>1);
- }
- else{
- pdp_resample_scale_nn(src_image, dst_image, src_w, src_h, dst_w, dst_h);
- pdp_resample_scale_nn(src_image+src_voffset, dst_image+dst_voffset, src_w>>1, src_h>>1, dst_w>>1, dst_h>>1);
- pdp_resample_scale_nn(src_image+src_uoffset, dst_image+dst_uoffset, src_w>>1, src_h>>1, dst_w>>1, dst_h>>1);
- }
-
- return;
-}
-
-static void pdp_scale_process_grey(t_pdp_scale *x)
-{
-
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- t_pdp *header1 = pdp_packet_header(x->x_packet1);
- void *data0 = pdp_packet_data (x->x_packet0);
- void *data1 = pdp_packet_data (x->x_packet1);
-
- unsigned int src_w = header0->info.image.width;
- unsigned int src_h = header0->info.image.height;
-
- unsigned int dst_w = header1->info.image.width;
- unsigned int dst_h = header1->info.image.height;
-
- short int *src_image = (short int *)data0;
- short int *dst_image = (short int *)data1;
-
- if (x->x_quality) pdp_resample_scale_bilin(src_image, dst_image, src_w, src_h, dst_w, dst_h);
- else pdp_resample_scale_nn(src_image, dst_image, src_w, src_h, dst_w, dst_h);
-
- return;
-
-
-}
-
-static void pdp_scale_sendpacket(t_pdp_scale *x)
-{
- /* delete source 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_scale_process(t_pdp_scale *x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
-
- /* check data packets */
-
- if ((header0) && (PDP_IMAGE == header0->type)){
-
- /* if dims are equal, just send the packet */
- if ((header0->info.image.width == x->x_width)
- && (header0->info.image.height == x->x_height)){
- x->x_packet1 = x->x_packet0;
- x->x_packet0 = -1;
- pdp_scale_sendpacket(x);
- return;
- }
-
- /* type hub */
- switch(header0->info.image.encoding){
-
- case PDP_IMAGE_YV12:
- x->x_packet1 = pdp_packet_new_image_YCrCb(x->x_width, x->x_height);
- if(x->x_packet1 == -1){
- post("pdp_scale: can't allocate packet");
- return;
- }
- pdp_procqueue_add(q, x, pdp_scale_process_yv12, pdp_scale_sendpacket, &x->x_queue_id);
- break;
-
- case PDP_IMAGE_GREY:
- x->x_packet1 = pdp_packet_new_image_grey(x->x_width, x->x_height);
- if(x->x_packet1 == -1){
- post("pdp_scale: can't allocate packet");
- return;
- }
- pdp_procqueue_add(q, x, pdp_scale_process_grey, pdp_scale_sendpacket, &x->x_queue_id);
- break;
-
- default:
- break;
- /* don't know the type, so dont process */
-
- }
- }
-
-}
-
-
-
-
-static void pdp_scale_input_0(t_pdp_scale *x, t_symbol *s, t_floatarg f)
-{
-
- int p = (int)f;
- int passes, i;
-
- if (s== gensym("register_rw")) x->x_dropped = pdp_packet_copy_ro_or_drop(&x->x_packet0, p);
-
-
- if ((s == gensym("process")) && (-1 != x->x_packet0) && (!x->x_dropped)){
-
- /* add the process method and callback to the process queue */
- pdp_scale_process(x);
-
- }
-
-}
-
-
-
-
-static void pdp_scale_width(t_pdp_scale *x, t_floatarg f)
-{
- int i = (int)f;
- if (i < 32) i = 32;
- x->x_width = i;
-}
-
-static void pdp_scale_height(t_pdp_scale *x, t_floatarg f)
-{
- int i = (int)f;
- if (i < 32) i = 32;
- x->x_height = i;
-}
-
-
-static void pdp_scale_dim(t_pdp_scale *x, t_floatarg w, t_floatarg h)
-{
- pdp_scale_width(x, w);
- pdp_scale_height(x, h);
-}
-
-static void pdp_scale_quality(t_pdp_scale *x, t_floatarg f)
-{
- if (f==0) x->x_quality = 0;
- if (f==1) x->x_quality = 1;
-}
-
-
-t_class *pdp_scale_class;
-
-
-
-void pdp_scale_free(t_pdp_scale *x)
-{
- t_pdp_procqueue *q = pdp_queue_get_queue();
- pdp_procqueue_finish(q, x->x_queue_id);
- pdp_packet_mark_unused(x->x_packet0);
- pdp_packet_mark_unused(x->x_packet1);
-}
-
-void *pdp_scale_new(t_floatarg fw, t_floatarg fh)
-{
- t_pdp_scale *x = (t_pdp_scale *)pd_new(pdp_scale_class);
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
- x->x_packet0 = -1;
- x->x_packet1 = -1;
- x->x_queue_id = -1;
-
- if ((fw != 0.0f) && (fh != 0.0f)) pdp_scale_dim(x, fw, fh);
- else pdp_scale_dim(x, 320, 240);
-
- pdp_scale_quality(x, 1);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_scale_setup(void)
-{
-
-
- pdp_scale_class = class_new(gensym("pdp_scale"), (t_newmethod)pdp_scale_new,
- (t_method)pdp_scale_free, sizeof(t_pdp_scale), 0, A_DEFFLOAT, A_DEFFLOAT, A_NULL);
-
-
- class_addmethod(pdp_scale_class, (t_method)pdp_scale_quality, gensym("quality"), A_FLOAT, A_NULL);
- class_addmethod(pdp_scale_class, (t_method)pdp_scale_width, gensym("width"), A_FLOAT, A_NULL);
- class_addmethod(pdp_scale_class, (t_method)pdp_scale_height, gensym("height"), A_FLOAT, A_NULL);
- class_addmethod(pdp_scale_class, (t_method)pdp_scale_dim, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_scale_class, (t_method)pdp_scale_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_special/pdp_scan.c b/modules/image_special/pdp_scan.c
deleted file mode 100644
index 9b80fea..0000000
--- a/modules/image_special/pdp_scan.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_mmx.h"
-#include <math.h>
-
-#define PDP_SCAN_COSTABLE_SIZE 1024
-static float pdp_cos[PDP_SCAN_COSTABLE_SIZE];
-
-typedef struct pdp_scan_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
- t_outlet *x_outlet1;
-
- float x_centerx;
- float x_centery;
- float x_sizeh;
- float x_sizev;
-
- int x_packet0;
- int x_packet1;
-
- int x_interpolate;
-
-
-} t_pdp_scan;
-
-
-static t_int *pdp_scan_perform(t_int *w)
-{
-
- t_pdp_scan *x = (t_pdp_scan *)(w[1]);
- t_int n = (t_int)(w[2]);
- t_float *in = (float *)(w[3]);
- t_float *out = (float *)(w[4]);
-
-
- /* check if valid image */
- if (-1 == x->x_packet0){
- while (n--) *out++ = 0;
- return (w+5);
- }
- else{
-
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- short int *data0 = (short int *)pdp_packet_data (x->x_packet0);
- short int *data1 = (short int *)pdp_packet_data (x->x_packet1);
- int width = (float)header0->info.image.width;
- float widthm1 = (float)header0->info.image.width - 1;
- float heightm1 = (float)header0->info.image.height - 1;
- int i;
-
- float scale = 1.0f / 32767.0f;
-
- if (x->x_interpolate && (-1 != x->x_packet1)){
- float a_old = 1.0f;
- float a_new = 0.0f;
- float a_inc = 1.0f / (float)n;
- float old, new;
-
- while(n--){
- float phase = *in++;
- int iphase = (int)(phase * PDP_SCAN_COSTABLE_SIZE);
- float c = pdp_cos[iphase & (PDP_SCAN_COSTABLE_SIZE - 1)];
- float s = pdp_cos[(iphase - (PDP_SCAN_COSTABLE_SIZE>>1)) & (PDP_SCAN_COSTABLE_SIZE - 1)];
- int xxx = (int)((x->x_centerx + x->x_sizeh * c) * widthm1);
- int yyy = (int)((x->x_centery + x->x_sizev * c) * heightm1);
- int offset = yyy*width+xxx;
- new = ((float)(data0[offset])) * scale;
- old = ((float)(data1[offset])) * scale;
- *out++ = a_old * old + a_new * new;
- a_new += a_inc;
- a_old -= a_inc;
- }
-
- pdp_packet_mark_unused(x->x_packet1);
- x->x_packet1 = -1;
- }
- else{
- while(n--){
- float phase = *in++;
- int iphase = (int)(phase * PDP_SCAN_COSTABLE_SIZE);
- float c = pdp_cos[iphase & (PDP_SCAN_COSTABLE_SIZE - 1)];
- float s = pdp_cos[(iphase - (PDP_SCAN_COSTABLE_SIZE>>1)) & (PDP_SCAN_COSTABLE_SIZE - 1)];
- int xxx = (int)((x->x_centerx + x->x_sizeh * c) * widthm1);
- int yyy = (int)((x->x_centery + x->x_sizev * c) * heightm1);
- *out++ = ((float)(data0[yyy*width+xxx])) * scale;
- }
- }
-
- return (w+5);
-
- }
-}
-
-
-
-
-static void pdp_scan_input_0(t_pdp_scan *x, t_symbol *s, t_floatarg f)
-{
- int packet = (int)f;
-
- /* register */
- if (s== gensym("register_ro")){
- t_pdp *header = pdp_packet_header(packet);
- if (!header) return;
- if (PDP_IMAGE != header->type) return;
- if ((header->info.image.encoding != PDP_IMAGE_YV12) && (header->info.image.encoding != PDP_IMAGE_GREY)) return;
-
- /* replace if not compatible or we are not interpolating */
- if (!x->x_interpolate || (!pdp_packet_image_compat(x->x_packet0, packet))){
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_copy_ro(packet);
- }
- /* otherwize keep the old one */
- else{
- pdp_packet_mark_unused(x->x_packet1);
- x->x_packet1 = x->x_packet0;
- x->x_packet0 = pdp_packet_copy_ro(packet);
- }
- }
-
- /* pass packet */
- if (s== gensym("process")){
- //if (-1 != x->x_packet0) outlet_pdp (x->x_outlet0, x->x_packet0);
- }
-
-
-}
-
-
-
-
-static void pdp_scan_dsp (t_pdp_scan *x, t_signal **sp)
-{
- dsp_add(pdp_scan_perform, 4, x, sp[0]->s_n, sp[0]->s_vec, sp[1]->s_vec);
-
-}
-
-
-static void pdp_scan_interpolate(t_pdp_scan *x, t_floatarg f)
-{
- if (0.0 == f){
- x->x_interpolate = 0;
- pdp_packet_mark_unused(x->x_packet1);
- }
- if (1.0 == f) x->x_interpolate = 1;
-}
-
-static void pdp_scan_free(t_pdp_scan *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-
-t_class *pdp_scan_class;
-
-
-
-void *pdp_scan_new(void)
-{
- t_pdp_scan *x = (t_pdp_scan *)pd_new(pdp_scan_class);
-
-
- //x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
- x->x_outlet1 = outlet_new(&x->x_obj, &s_signal);
- x->x_packet0 = -1;
- x->x_packet1 = -1;
-
- x->x_centerx = 0.5f;
- x->x_centery = 0.5f;
- x->x_sizeh = 0.3;
- x->x_sizev = 0.3;
-
- pdp_scan_interpolate(x, 0);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_scan_setup(void)
-{
- int i;
- for (i=0; i<PDP_SCAN_COSTABLE_SIZE; i++)
- pdp_cos[i] = cos((double)(i) * 2 * M_PI / PDP_SCAN_COSTABLE_SIZE);
-
-
- pdp_scan_class = class_new(gensym("pdp_scan~"), (t_newmethod)pdp_scan_new,
- (t_method)pdp_scan_free, sizeof(t_pdp_scan), 0, A_NULL);
-
- CLASS_MAINSIGNALIN(pdp_scan_class, t_pdp_scan, x_f);
-
- class_addmethod(pdp_scan_class, (t_method)pdp_scan_interpolate, gensym("interpolate"), A_FLOAT, A_NULL);
- class_addmethod(pdp_scan_class, (t_method)pdp_scan_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_scan_class, (t_method)pdp_scan_dsp, gensym("dsp"), A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_special/pdp_scanxy.c b/modules/image_special/pdp_scanxy.c
deleted file mode 100644
index 6fd7201..0000000
--- a/modules/image_special/pdp_scanxy.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include <math.h>
-
-typedef struct pdp_scanxy_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
- t_outlet *x_outlet1;
-
- int x_packet0;
- int x_packet1;
-
- int x_interpolate;
-
-
-} t_pdp_scanxy;
-
-
-static t_int *pdp_scanxy_perform(t_int *w)
-{
-
- t_pdp_scanxy *x = (t_pdp_scanxy *)(w[1]);
- t_int n = (t_int)(w[2]);
- t_float *inx = (float *)(w[3]);
- t_float *iny = (float *)(w[4]);
- t_float *out = (float *)(w[5]);
-
-
- /* check if valid image */
- if (-1 == x->x_packet0){
- while (n--) *out++ = 0;
- return (w+6);
- }
- else{
-
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- short int *data0 = (short int *)pdp_packet_data (x->x_packet0);
- short int *data1 = (short int *)pdp_packet_data (x->x_packet1);
- int width = (float)header0->info.image.width;
- int height = (float)header0->info.image.height;
- int i;
-
- float scale = 1.0f / 32767.0f;
- float scalein = 0x10000;
-
- if (x->x_interpolate && (-1 != x->x_packet1)){
- float a_old = 1.0f;
- float a_new = 0.0f;
- float a_inc = 1.0f / (float)n;
- float old, new;
-
- while(n--){
- int xxx = ((((int)(scalein * *inx++)) & 0xffff) * width) >> 16;
- int yyy = ((((int)(scalein * *iny++)) & 0xffff) * height) >> 16;
- int offset = yyy*width+xxx;
- new = ((float)(data0[offset])) * scale;
- old = ((float)(data1[offset])) * scale;
- *out++ = a_old * old + a_new * new;
- a_new += a_inc;
- a_old -= a_inc;
- }
-
- pdp_packet_mark_unused(x->x_packet1);
- x->x_packet1 = -1;
- }
- else{
- while(n--){
- int xxx = ((((int)(scalein * *inx++)) & 0xffff) * width) >> 16;
- int yyy = ((((int)(scalein * *iny++)) & 0xffff) * height) >> 16;
- int offset = yyy*width+xxx;
- *out++ = ((float)(data0[offset])) * scale;
- }
- }
-
- return (w+6);
-
- }
-}
-
-
-
-
-static void pdp_scanxy_input_0(t_pdp_scanxy *x, t_symbol *s, t_floatarg f)
-{
- int packet = (int)f;
-
- /* register */
- if (s== gensym("register_ro")){
- t_pdp *header = pdp_packet_header(packet);
- if (!header) return;
- if (PDP_IMAGE != header->type) return;
- if ((header->info.image.encoding != PDP_IMAGE_YV12) && (header->info.image.encoding != PDP_IMAGE_GREY)) return;
-
- /* replace if not compatible or we are not interpolating */
- if (!x->x_interpolate || (!pdp_packet_image_compat(x->x_packet0, packet))){
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_copy_ro(packet);
- }
- /* otherwize keep the old one */
- else{
- pdp_packet_mark_unused(x->x_packet1);
- x->x_packet1 = x->x_packet0;
- x->x_packet0 = pdp_packet_copy_ro(packet);
- }
- }
-
- /* pass packet */
- if (s== gensym("process")){
- //if (-1 != x->x_packet0) outlet_pdp (x->x_outlet0, x->x_packet0);
- }
-
-
-}
-
-
-
-
-static void pdp_scanxy_dsp (t_pdp_scanxy *x, t_signal **sp)
-{
- dsp_add(pdp_scanxy_perform, 5, x, sp[0]->s_n, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec);
-
-}
-
-
-static void pdp_scanxy_interpolate(t_pdp_scanxy *x, t_floatarg f)
-{
- if (0.0 == f){
- x->x_interpolate = 0;
- pdp_packet_mark_unused(x->x_packet1);
- }
- if (1.0 == f) x->x_interpolate = 1;
-}
-
-static void pdp_scanxy_free(t_pdp_scanxy *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-
-t_class *pdp_scanxy_class;
-
-
-
-void *pdp_scanxy_new(void)
-{
- t_pdp_scanxy *x = (t_pdp_scanxy *)pd_new(pdp_scanxy_class);
-
-
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"), gensym("signal"));
- x->x_outlet1 = outlet_new(&x->x_obj, &s_signal);
- x->x_packet0 = -1;
- x->x_packet1 = -1;
-
- pdp_scanxy_interpolate(x, 0);
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_scanxy_setup(void)
-{
-
- pdp_scanxy_class = class_new(gensym("pdp_scanxy~"), (t_newmethod)pdp_scanxy_new,
- (t_method)pdp_scanxy_free, sizeof(t_pdp_scanxy), 0, A_NULL);
-
- CLASS_MAINSIGNALIN(pdp_scanxy_class, t_pdp_scanxy, x_f);
-
- class_addmethod(pdp_scanxy_class, (t_method)pdp_scanxy_interpolate, gensym("interpolate"), A_FLOAT, A_NULL);
- class_addmethod(pdp_scanxy_class, (t_method)pdp_scanxy_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_scanxy_class, (t_method)pdp_scanxy_dsp, gensym("dsp"), A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_special/pdp_scope.c b/modules/image_special/pdp_scope.c
deleted file mode 100644
index 4311a0b..0000000
--- a/modules/image_special/pdp_scope.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include <string.h>
-
-#define BUFSIZE 2048
-
-typedef struct pdp_scope_data
-{
- short int random_seed[4];
-
-}t_pdp_scope_data;
-
-typedef struct pdp_scope_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
- t_pdp_scope_data *x_data;
- int x_packet0;
- int x_queue_id;
-
- int x_pdp_image_type;
-
- unsigned int x_width;
- unsigned int x_height;
-
- float *x_buffer;
- int x_needle;
-
-
-} t_pdp_scope;
-
-
-
-void pdp_scope_type(t_pdp_scope *x, t_symbol *s)
-{
- if (gensym("yv12") == s) {x->x_pdp_image_type = PDP_IMAGE_YV12; return;}
- if (gensym("grey") == s) {x->x_pdp_image_type = PDP_IMAGE_GREY; return;}
-
- x->x_pdp_image_type = -1;
-
-}
-
-
-
-
-
-static void pdp_scope_createpacket_yv12(t_pdp_scope *x)
-{
- t_pdp *header;
-
- unsigned int w = x->x_width;
- unsigned int h = x->x_height;
-
- unsigned int size = w*h;
- unsigned int totalnbpixels = size + (size >> 1);
- unsigned int packet_size = totalnbpixels << 1;
-
- x->x_packet0 = pdp_packet_new_image_YCrCb(w, h);
- if(x->x_packet0 == -1){
- post("pdp_scope: can't allocate packet");
- return;
- }
- header = pdp_packet_header(x->x_packet0);
- memset(pdp_packet_data(x->x_packet0), 0, packet_size);
-
-}
-
-static void pdp_scope_generate_yv12(t_pdp_scope *x)
-{
- unsigned int w = x->x_width;
- unsigned int h = x->x_height;
- unsigned int size = w*h;
- unsigned int totalnbpixels = size + (size >> 1);
- short int *data = (short int *) pdp_packet_data(x->x_packet0);
-
- unsigned int i;
- int offset = x->x_needle;
- int val;
- unsigned int y;
- float fh2 = (float)(h/2);
-
- if (!data) return;
-
-
- for (i=0; i<w; i++){
- y = (h/2) + (int)(fh2 * -x->x_buffer[(offset - w + i) & (BUFSIZE - 1)]);
- if (y>=h) y = h-1;
-
- data[i + y*w] = 0x7fff;
- }
-
- return;
-
-}
-
-static void pdp_scope_createpacket_grey(t_pdp_scope *x)
-{
- t_pdp *header;
- short int *data;
-
- unsigned int w = x->x_width;
- unsigned int h = x->x_height;
-
- unsigned int size = w*h;
- unsigned int totalnbpixels = size;
- unsigned int packet_size = totalnbpixels << 1;
-
- /* create new packet */
- x->x_packet0 = pdp_packet_new_image_grey(w,h);
- if(x->x_packet0 == -1){
- post("pdp_scope: can't allocate packet");
- return;
- }
-
-
- header = pdp_packet_header(x->x_packet0);
- data = (short int *) pdp_packet_data(x->x_packet0);
-
- memset(pdp_packet_data(x->x_packet0), 0, packet_size);
-
-}
-
-static void pdp_scope_generate_grey(t_pdp_scope *x)
-{
- unsigned int w = x->x_width;
- unsigned int h = x->x_height;
- unsigned int totalnbpixels = x->x_width * x->x_height;
- short int *data = (short int *) pdp_packet_data(x->x_packet0);
-
- unsigned int i;
- int offset = x->x_needle;
- int val;
- unsigned int y;
- float fh2 = (float)(h/2);
-
- if (!data) return;
-
- for (i=0; i<w; i++){
- y = (h/2) + (int)(fh2 * -x->x_buffer[(offset - w + i) & (BUFSIZE - 1)]);
- if (y>=h) y = h-1;
-
- data[i + y*w] = 0x7fff;
- }
-
- return;
-}
-
-static void pdp_scope_sendpacket(t_pdp_scope *x)
-{
- /* propagate if valid */
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet0);
-}
-
-
-static void pdp_scope_bang(t_pdp_scope *x)
-{
-
- int encoding;
-
- /* if we have an active packet, don't do anything */
- if (-1 != x->x_packet0) return;
-
- switch(x->x_pdp_image_type){
-
- case PDP_IMAGE_YV12:
- pdp_scope_createpacket_yv12(x); // don't create inside thread!!!
- pdp_scope_generate_yv12(x);
- pdp_scope_sendpacket(x);
- //pdp_queue_add(x, pdp_scope_generate_yv12, pdp_scope_sendpacket, &x->x_queue_id);
- break;
-
- case PDP_IMAGE_GREY:
- pdp_scope_createpacket_grey(x); // don't create inside thread!!!
- pdp_scope_generate_grey(x);
- pdp_scope_sendpacket(x);
- //pdp_queue_add(x, pdp_scope_generate_grey, pdp_scope_sendpacket, &x->x_queue_id);
- break;
-
- default:
- break;
-
- }
-
-
- /* release the packet */
-
-}
-
-
-static void pdp_scope_dim(t_pdp_scope *x, t_floatarg w, t_floatarg h)
-{
- if (w<32.0f) w = 32.0f;
- if (h<32.0f) h = 32.0f;
-
- x->x_width = (unsigned int)w;
- x->x_height = (unsigned int)h;
-}
-
-
-static void pdp_scope_free(t_pdp_scope *x)
-{
-
- /* remove callback from process queue */
- t_pdp_procqueue *q = pdp_queue_get_queue();
- pdp_procqueue_finish(q, x->x_queue_id);
-
-
- /* tidy up */
- pdp_packet_mark_unused(x->x_packet0);
- pdp_dealloc(x->x_data);
-
-}
-static t_int *pdp_scope_perform(t_int *w)
-{
-
-
- t_float *in = (float *)(w[3]);
- t_pdp_scope *x = (t_pdp_scope *)(w[1]);
- t_int n = (t_int)(w[2]);
- t_int i;
-
- t_int offset = x->x_needle;
-
- for (i=0; i<n; i++)
- x->x_buffer[(offset+i)&(BUFSIZE-1)] = in[i];
-
- x->x_needle = (offset + n ) & (BUFSIZE - 1);
-
- return (w+4);
-
-}
-static void pdp_scope_dsp(t_pdp_scope *x, t_signal **sp)
-{
- dsp_add(pdp_scope_perform, 3, x, sp[0]->s_n, sp[0]->s_vec);
-
-}
-
-t_class *pdp_scope_class;
-
-
-
-
-void *pdp_scope_new(void)
-{
- int i;
-
- t_pdp_scope *x = (t_pdp_scope *)pd_new(pdp_scope_class);
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
- x->x_packet0 = -1;
- x->x_queue_id = -1;
- x->x_width = 320;
- x->x_height = 240;
- x->x_f = 0.0;
-
- x->x_data = (t_pdp_scope_data *)pdp_alloc(sizeof(t_pdp_scope_data));
-
- pdp_scope_type(x, gensym("yv12"));
-
- x->x_buffer = (float *)pdp_alloc(sizeof(float) * BUFSIZE);
- x->x_needle = 0;
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-
-void pdp_scope_setup(void)
-{
-
-
- pdp_scope_class = class_new(gensym("pdp_scope~"), (t_newmethod)pdp_scope_new,
- (t_method)pdp_scope_free, sizeof(t_pdp_scope), 0, A_NULL);
-
- CLASS_MAINSIGNALIN(pdp_scope_class, t_pdp_scope, x_f);
-
- class_addmethod(pdp_scope_class, (t_method)pdp_scope_type, gensym("type"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_scope_class, (t_method)pdp_scope_dim, gensym("dim"), A_FLOAT, A_FLOAT, A_NULL);
- class_addmethod(pdp_scope_class, (t_method)pdp_scope_bang, gensym("bang"), A_NULL);
- class_addmethod(pdp_scope_class, (t_method)pdp_scope_dsp, gensym("dsp"), 0);
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_special/pdp_slice_cut.c b/modules/image_special/pdp_slice_cut.c
deleted file mode 100644
index 586f44d..0000000
--- a/modules/image_special/pdp_slice_cut.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-/* this module converts a greyscale image or the luma channel of a colour image
- to a colour image intensity mask, usable for multiplication */
-
-#include "pdp.h"
-#include "pdp_resample.h"
-#include "pdp_imageproc.h"
-
-typedef struct pdp_slice_cut_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
- int x_packet0;
- //int x_dropped;
- //int x_queue_id;
-
- unsigned int x_slice_height;
-
-
-} t_pdp_slice_cut;
-
-
-
-static void pdp_slice_cut_process_grey(t_pdp_slice_cut *x)
-{
- t_pdp *header = pdp_packet_header(x->x_packet0);
- short int *data = (short int *)pdp_packet_data (x->x_packet0);
- t_pdp *newheader = 0;
- short int *newdata = 0;
- int newpacket = -1;
-
- unsigned int w = header->info.image.width;
- unsigned int h = header->info.image.height;
-
- unsigned int size = w*h;
- unsigned int height_left = h;
- unsigned int slice_height = 0;
- unsigned int slice_yoffset = 0;
- unsigned int slice_offset = 0;
- unsigned int slice_size_bytes = 0;
-
- #define min(x,y) (((x)<(y)) ? (x) : (y))
-
- while(height_left){
-
- /* compute slice size */
- slice_height = min(x->x_slice_height, height_left);
- height_left -= slice_height;
- slice_size_bytes = (w << 1) * slice_height;
-
- /* create new slice packet */
- newpacket = pdp_packet_new_image_grey(w, slice_height);
- newheader = pdp_packet_header(newpacket);
-
- if(!newheader){
- post("pdp_slice_cut: can't allocate packet");
- return;
- }
-
- newdata = (s16*)pdp_packet_data(newpacket);
-
- //newheader->info.image.encoding = PDP_IMAGE_GREY;
- //newheader->info.image.width = w;
- //newheader->info.image.height = slice_height;
-
- newheader->info.image.orig_height = h;
- newheader->info.image.slice_yoff = slice_yoffset;
-
- if (slice_height + height_left == h) newheader->info.image.slice_sync = PDP_IMAGE_SLICE_FIRST;
- else if (height_left == 0) newheader->info.image.slice_sync = PDP_IMAGE_SLICE_LAST;
- else newheader->info.image.slice_sync = PDP_IMAGE_SLICE_BODY;
-
- /* copy slice data */
- memcpy(newdata, data+slice_offset, slice_size_bytes);
-
- /* unregister and propagate if valid packet */
- pdp_packet_pass_if_valid(x->x_outlet0, &newpacket);
-
- /* advance pointer stuff */
- slice_offset += (slice_size_bytes>>1);
- slice_yoffset += slice_height;
-
- }
-
-
-
- /* delete source packet when finished */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = -1;
- return;
-}
-
-static void pdp_slice_cut_process_yv12(t_pdp_slice_cut *x)
-{
-
- t_pdp *header = pdp_packet_header(x->x_packet0);
- short int *data = (short int *)pdp_packet_data (x->x_packet0);
- t_pdp *newheader = 0;
- short int *newdata = 0;
- int newpacket = -1;
-
- unsigned int w = header->info.image.width;
- unsigned int h = header->info.image.height;
-
- unsigned int size = w*h;
- unsigned int height_left = h;
- unsigned int slice_height = 0;
- unsigned int sequence_number = 0;
- unsigned int slice_offset = 0;
- unsigned int slice_yoffset = 0;
- unsigned int slice_size_bytes = 0;
- unsigned int slice_size = 0;
-
- #define min(x,y) (((x)<(y)) ? (x) : (y))
-
- while(height_left){
-
- /* compute slice size */
- slice_height = min(x->x_slice_height, height_left);
- height_left -= slice_height;
- slice_size = w * slice_height;
- slice_size_bytes = slice_size << 1;
-
- /* create new slice packet */
- newpacket = pdp_packet_new_image_YCrCb(w, slice_height);
- newheader = pdp_packet_header(newpacket);
-
- if(!newheader){
- post("pdp_slice_cut: can't allocate packet");
- return;
- }
-
- newdata = (s16*)pdp_packet_data(newpacket);
- newheader->info.image.encoding = PDP_IMAGE_YV12;
- newheader->info.image.width = w;
- newheader->info.image.height = slice_height;
- newheader->info.image.orig_height = h;
- newheader->info.image.slice_yoff = slice_yoffset;
-
- if (slice_height + height_left == h) newheader->info.image.slice_sync = PDP_IMAGE_SLICE_FIRST;
- else if (height_left == 0) newheader->info.image.slice_sync = PDP_IMAGE_SLICE_LAST;
- else newheader->info.image.slice_sync = PDP_IMAGE_SLICE_BODY;
-
-
- /* copy slice data */
- memcpy(newdata,
- data + slice_offset,
- slice_size_bytes);
-
- memcpy(newdata + slice_size,
- data + size + (slice_offset>>2),
- slice_size_bytes>>2);
-
- memcpy(newdata + slice_size + (slice_size >> 2),
- data + size + (size >> 2) + (slice_offset >> 2),
- slice_size_bytes>>2);
-
- /* unregister and propagate if valid packet */
- pdp_packet_pass_if_valid(x->x_outlet0, &newpacket);
-
- /* advance pointer stuff */
- slice_offset += (slice_size_bytes>>1);
- slice_yoffset += slice_height;
-
- }
-
-
-
- /* delete source packet when finished */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = -1;
- return;
-
-}
-
-
-
-static void pdp_slice_cut_process(t_pdp_slice_cut *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_slice_cut_process inputs and write into active inlet */
- switch(pdp_packet_header(x->x_packet0)->info.image.encoding){
-
- case PDP_IMAGE_YV12:
- pdp_slice_cut_process_yv12(x);
- break;
-
- case PDP_IMAGE_GREY:
- pdp_slice_cut_process_grey(x);
- break;
-
- default:
- /* don't know the type, so dont pdp_slice_cut_process */
-
- break;
- }
- }
-}
-
-static void pdp_slice_cut_input_0(t_pdp_slice_cut *x, t_symbol *s, t_floatarg f)
-{
-
- int p = (int)f;
-
- if (s== gensym("register_ro")) x->x_packet0 = pdp_packet_copy_ro(p);
- if ((s == gensym("process")) && (-1 != x->x_packet0)) pdp_slice_cut_process(x);
-
-}
-
-
-
-static void pdp_slice_cut_height(t_pdp_slice_cut *x, t_floatarg f)
-{
- int i = (int)f;
- x->x_slice_height = pdp_imageproc_legalheight(i);
- post("pdp_slice: height set to %d", x->x_slice_height);
-
-}
-static void pdp_slice_cut_forceheight(t_pdp_slice_cut *x, t_floatarg f)
-{
- int i = (int)f;
- if (i<1) i = 1;
- x->x_slice_height = i;
- post("pdp_slice: WARNING: forceheight is a debug message. setting this to an abritrary");
- post("pdp_slice: WARNING: value can crash pdp. set it to a multiple of 2 and only use pixel");
- post("pdp_slice: WARNING: operations (no convolution or biquad) in the mmx version.");
- post("pdp_slice: height forced to %d", x->x_slice_height);
-
-}
-
-
-static void pdp_slice_cut_free(t_pdp_slice_cut *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-t_class *pdp_slice_cut_class;
-
-
-
-void *pdp_slice_cut_new(void)
-{
- int i;
-
- t_pdp_slice_cut *x = (t_pdp_slice_cut *)pd_new(pdp_slice_cut_class);
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
- x->x_packet0 = -1;
- //x->x_queue_id = -1;
-
- x->x_slice_height = 8;
- post("pdp_slice_cut: WARNING: experimental object");
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_slice_cut_setup(void)
-{
-
-
- pdp_slice_cut_class = class_new(gensym("pdp_slice_cut"), (t_newmethod)pdp_slice_cut_new,
- (t_method)pdp_slice_cut_free, sizeof(t_pdp_slice_cut), 0, A_NULL);
-
-
- class_addmethod(pdp_slice_cut_class, (t_method)pdp_slice_cut_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
- class_addmethod(pdp_slice_cut_class, (t_method)pdp_slice_cut_height, gensym("height"), A_FLOAT, A_NULL);
- class_addmethod(pdp_slice_cut_class, (t_method)pdp_slice_cut_forceheight, gensym("forceheight"), A_FLOAT, A_NULL);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/image_special/pdp_slice_glue.c b/modules/image_special/pdp_slice_glue.c
deleted file mode 100644
index af6d2bd..0000000
--- a/modules/image_special/pdp_slice_glue.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-/* this module converts a greyscale image or the luma channel of a colour image
- to a colour image intensity mask, usable for multiplication */
-
-#include "pdp.h"
-#include "pdp_resample.h"
-
-typedef struct pdp_slice_glue_struct
-{
- t_object x_obj;
- t_float x_f;
-
- t_outlet *x_outlet0;
-
- int x_packet0; //input packet
- int x_packet1; //output packet
-
-} t_pdp_slice_glue;
-
-
-
-static void pdp_slice_glue_process_grey(t_pdp_slice_glue *x)
-{
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- t_pdp *header1 = pdp_packet_header(x->x_packet1);
- short int *data0 = (short int *)pdp_packet_data (x->x_packet0);
- short int *data1 = (short int *)pdp_packet_data (x->x_packet1);
-
-
- unsigned int offset = header0->info.image.width * header0->info.image.slice_yoff;
- unsigned int slice_size = header0->info.image.width * header0->info.image.height;
-
- memcpy(data1 + offset, data0, slice_size << 1);
-
-
- return;
-}
-
-static void pdp_slice_glue_process_yv12(t_pdp_slice_glue *x)
-{
-
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- t_pdp *header1 = pdp_packet_header(x->x_packet1);
- short int *data0 = (short int *)pdp_packet_data (x->x_packet0);
- short int *data1 = (short int *)pdp_packet_data (x->x_packet1);
-
- unsigned int w = header0->info.image.width;
- unsigned int h = header0->info.image.height;
-
- unsigned int dw = header1->info.image.width;
- unsigned int dh = header1->info.image.height;
- unsigned int dsize = dh*dw;
-
- unsigned int offset = w * header0->info.image.slice_yoff;
- unsigned int slice_size = w * h;
-
- memcpy(data1 + offset, data0, slice_size << 1);
- memcpy(data1 + dsize + (offset >> 2), data0 + slice_size, slice_size >> 1);
- memcpy(data1 + dsize + (dsize >>2) + (offset>>2), data0 + slice_size + (slice_size >> 2), slice_size >> 1);
-
-
- return;
-
-}
-
-
-
-static void pdp_slice_glue_process(t_pdp_slice_glue *x)
-{
- int encoding;
- int newpacket;
- t_pdp *header = 0;
- t_pdp *dest_header = 0;
-
-
- /* check if the packet is a valid slice packet */
- /* if not pass it along */
- if (!((header = pdp_packet_header(x->x_packet0)) &&
- (PDP_IMAGE == header->type) && (header->info.image.orig_height))) goto passalong;
-
- /* if this is the first slice of a sequence, or we don't have a dest packet yet */
- /* create a new destination packet */
- if ((x->x_packet1 == -1) || (header->info.image.slice_sync & PDP_IMAGE_SLICE_FIRST)){
- pdp_packet_mark_unused(x->x_packet1);
- x->x_packet1 = pdp_packet_new_image(header->info.image.encoding, header->info.image.width, header->info.image.orig_height);
- dest_header = pdp_packet_header(x->x_packet1);
- //dest_header->info.image.encoding = header->info.image.encoding;
- //dest_header->info.image.width = header->info.image.width;
- //dest_header->info.image.height = header->info.image.orig_height;
- }
-
- /* if this is a body or last slice, it has to be compatible with the current dest packet */
- /* else ignore it */
- else{
- dest_header = pdp_packet_header(x->x_packet1);
- if (!((dest_header->info.image.encoding == header->info.image.encoding) &&
- ((dest_header->info.image.width == header->info.image.width)))) goto dispose;
- }
-
- /* now we have a dest packet and the source packet is compatible with it, so copy the data */
-
-
- switch(pdp_packet_header(x->x_packet0)->info.image.encoding){
-
- case PDP_IMAGE_YV12:
- pdp_slice_glue_process_yv12(x);
- break;
-
- case PDP_IMAGE_GREY:
- pdp_slice_glue_process_grey(x);
- break;
-
- default:
- /* don't know the type, so dont pdp_slice_glue_process */
-
- break;
- }
-
- /* if the source packet was a final slice, pass on the constructed packet */
- if (header->info.image.slice_sync & PDP_IMAGE_SLICE_LAST){
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet1);
- }
-
-
- /* processing is done so we delete the source packet */
- dispose:
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = -1;
- return;
-
-
- passalong:
- pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet0);
- return;
-
-}
-
-static void pdp_slice_glue_input_0(t_pdp_slice_glue *x, t_symbol *s, t_floatarg f)
-{
-
- int p = (int)f;
-
- if (s== gensym("register_ro")) x->x_packet0 = pdp_packet_copy_ro(p);
- if ((s == gensym("process")) && (-1 != x->x_packet0)) pdp_slice_glue_process(x);
-
-}
-
-
-
-
-static void pdp_slice_glue_free(t_pdp_slice_glue *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
-}
-
-t_class *pdp_slice_glue_class;
-
-
-
-void *pdp_slice_glue_new(void)
-{
- int i;
-
- t_pdp_slice_glue *x = (t_pdp_slice_glue *)pd_new(pdp_slice_glue_class);
-
- x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
- x->x_packet0 = -1;
-
- post("pdp_slice_glue: WARNING: experimental object");
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_slice_glue_setup(void)
-{
-
-
- pdp_slice_glue_class = class_new(gensym("pdp_slice_glue"), (t_newmethod)pdp_slice_glue_new,
- (t_method)pdp_slice_glue_free, sizeof(t_pdp_slice_glue), 0, A_NULL);
-
-
- class_addmethod(pdp_slice_glue_class, (t_method)pdp_slice_glue_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/matrix_basic/Makefile b/modules/matrix_basic/Makefile
deleted file mode 100644
index 3604041..0000000
--- a/modules/matrix_basic/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-current: all_modules
-
-include ../../Makefile.config
-
-PDP_MOD = pdp_mat_mul.o pdp_mat_lu.o pdp_mat_vec.o
-
-all_modules: $(PDP_MOD)
-
-clean:
- rm -f *~
- rm -f *.o
-
diff --git a/modules/matrix_basic/README b/modules/matrix_basic/README
deleted file mode 100644
index d6ece1b..0000000
--- a/modules/matrix_basic/README
+++ /dev/null
@@ -1,5 +0,0 @@
-This directory contains "normal" matrix packet processors,
-derived from the t_pdp_base class defined in pdp_base.h
-
-Most modules are wrappers around Gnu Scientific Library (gsl) calls
-
diff --git a/modules/matrix_basic/clusterstuff.c b/modules/matrix_basic/clusterstuff.c
deleted file mode 100644
index 432a807..0000000
--- a/modules/matrix_basic/clusterstuff.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * Pure Data Packet module.
- * Copyright (c) 2003 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_base.h"
-#include <math.h>
-
-struct _pdp_histo;
-typedef void (*t_histo_proc)(struct _pdp_histo *);
-
-
-/* the cluster struct */
-typedef struct _cluster
-{
- float N;
- float cx;
- float cy;
-} t_cluster;
-
-
-
-typedef struct _pdp_histo
-{
- t_object x_obj;
- t_int x_logN;
- t_symbol *x_array_sym;
- t_float x_scale;
- t_int x_debug;
- t_int x_sample_size; /* pointcloud size */
- t_int x_nb_clusters; /* nb of clusters */
- t_cluster *x_cluster; /* cluster data (for tracking) */
- t_histo_proc x_process_method; /* what to do with the histogram */
- t_outlet *x_outlet0;
- t_outlet *x_outlet1;
-
- /* the packet */
- int x_packet0;
-
- /* packet data */
- short int *x_data;
- int x_width;
- int x_height;
- int x_nb_pixels;
-
- /* histo data for processor: these are stored on the stack */
- int *x_histo;
- int *x_pixel_offset;
-
-} t_pdp_histo;
-
-
-// join 2 clusters. clear the second one
-static void cluster_join(t_cluster *cA, t_cluster *cB)
-{
- float scale = 1.0f / (cA->N + cB->N);
- cA->cx = (cA->N * cA->cx + cB->N * cB->cx) * scale;
- cA->cy = (cA->N * cA->cy + cB->N * cB->cy) * scale;
- cA->N += cB->N;
-
- cB->N = 0.0f;
-}
-
-static void cluster_copy(t_cluster *cA, t_cluster *cB)
-{
- cA->cx = cB->cx;
- cA->cy = cB->cy;
- cA->N = cB->N;
-}
-
-static void cluster_clear(t_cluster *c)
-{
- c->N = 0.0f;
-}
-
-static void cluster_new(t_cluster *c, float x, float y)
-{
- c->N = 1.0f;
- c->cx = x;
- c->cy = y;
-}
-
-static float cluster_dsquared(t_cluster *cA, t_cluster *cB)
-{
- float dx = cA->cx - cB->cx;
- float dy = cA->cy - cB->cy;
- return dx*dx + dy*dy;
-}
-
-
-static int round_up_2log(int i)
-{
- int l = 0;
- i--;
- while (i) {
- i >>= 1;
- l++;
- }
- //post("log is %d, 2^n is %d", l, 1 << l);
-
- l = (l < 16) ? l : 15;
- return l;
-}
-
-
-static void compute_clusters(t_pdp_histo *x)
-{
- t_cluster c[x->x_sample_size];
- int i;
- float scalex = 1.0f / (float)(x->x_width);
- float scaley = 1.0f / (float)(x->x_height);
- int nb_clusters = x->x_sample_size;
-
- /* build the cluster data struct */
- for (i=0; i<x->x_sample_size; i++)
- cluster_new(c+i,
- ((float)(x->x_pixel_offset[i] % x->x_width)) * scalex,
- ((float)(x->x_pixel_offset[i] / x->x_width)) * scaley);
-
- /* the clustering loop */
- while (nb_clusters > x->x_nb_clusters){
- /* initialize cA, cB, d */
- int cA=0;
- int cB=1;
- float d = cluster_dsquared(c+0, c+1);
- int i,j;
-
- /* find the closest 2 clusters:
- scan the distance matrix above the diagonal */
- for (i=2; i<nb_clusters; i++){
- for (j=0; j<i; j++){
- float dij = cluster_dsquared(c+i, c+j);
- if (dij < d){
- cA = j;
- cB = i;
- d = dij;
- }
- }
- }
-
- /* join the two clusters (cA < cB) */
- cluster_join (c+cA, c+cB);
-
- /* reduce the distance matrix by moving
- the last element to the empty spot cB */
- nb_clusters--;
- cluster_copy (c+cB, c+nb_clusters);
- }
-
- /* copy cluster data */
- if (!x->x_cluster){
- int size = sizeof(t_cluster) * x->x_nb_clusters;
- x->x_cluster = (t_cluster *)pdp_alloc(size);
- memcpy(x->x_cluster, c, size);
- }
- /* or perform tracking */
- else{
- int i,j;
- /* find best matches for the first couple of clusters */
- for (i=0; i<x->x_nb_clusters - 1; i++){
- int closest = 0;
- float d_min = cluster_dsquared(x->x_cluster+i, c);
-
- /* get closest cluster */
- for (j=1; j<nb_clusters; j++){
- float dj = cluster_dsquared(x->x_cluster+i, c+j);
- if (dj < d_min){
- closest = j;
- d_min = dj;
- }
- }
-
- /* replace reference cluster with closest match */
- cluster_copy(x->x_cluster+i, c+closest);
-
- /* shrink matrix (like above) */
- nb_clusters--;
- cluster_copy(c+closest, c+nb_clusters);
-
- }
- /* copy the last cluster */
- cluster_copy(x->x_cluster + x->x_nb_clusters - 1, c);
- }
-
- /* print the clusters */
- post("clusters:");
- post("\tN\tcx\tcy");
- for (i=0; i<x->x_nb_clusters; i++){
- post("\t%d\t%0.2f\t%0.2f",
- (int)x->x_cluster[i].N,
- x->x_cluster[i].cx,
- x->x_cluster[i].cy);
- }
-
-
-
-}
-
-static void dump_to_array(t_pdp_histo *x)
-{
- float *vec;
- int nbpoints;
- t_garray *a;
- int i;
- int *histo = x->x_histo;
- int N = 1 << (x->x_logN);
- float scale = 1.0f / (float)(x->x_nb_pixels);
-
-
- /* dump to array if possible */
- if (!x->x_array_sym){
- }
-
- /* check if array is valid */
- else if (!(a = (t_garray *)pd_findbyclass(x->x_array_sym, garray_class))){
- post("pdp_histo: %s: no such array", x->x_array_sym->s_name);
- }
- /* get data */
- else if (!garray_getfloatarray(a, &nbpoints, &vec)){
- post("pdp_histo: %s: bad template", x->x_array_sym->s_name);
- }
- /* scale and dump in array */
- else{
-
- N = (nbpoints < N) ? nbpoints : N;
- for (i=0; i<N; i++) vec[i] = (float)(histo[i]) * scale * x->x_scale;
- //garray_redraw(a);
- }
-
-}
-
-static void get_sampleset(t_pdp_histo *x, int log_tmp_size, int threshold)
-{
- int N = 1 << log_tmp_size;
- int mask = N-1;
- int index, nbpoints, i;
- t_atom a[2];
- float scalex = 1.0f / (float)(x->x_width);
- float scaley = 1.0f / (float)(x->x_height);
- t_symbol *s = gensym("list");
-
- /* store the offsets of the points in a in an oversized array
- the oversizing is to eliminate a division and to limit the
- searching for a free location after a random index is generated */
-
- int offset[N];
-
- /* float versions of the coordinates */
- float fx[x->x_sample_size];
- float fy[x->x_sample_size];
- float max_x, min_x, max_y, min_y;
-
- /* reset the array */
- memset(offset, -1, N * sizeof(int));
-
- /* get the coordinates of the tempsize brightest points
- and store them in a random location in the hash */
- for (i=0; i<x->x_nb_pixels; i++){
- if (x->x_data[i] >= threshold){
- /* get a random index */
- int ri = random();
- //int ri = 0;
- /* find an empty spot to store it */
- while (-1 != offset[ri & mask]) ri++;
- offset[ri & mask] = i;
- }
- }
-
-
- /* repack the array to get the requested
- sample size at the start */
- index = 0;
- nbpoints = 0;
- while (nbpoints < x->x_sample_size){
- while (-1 == offset[index]) index++; // ffwd to next nonepty slot
- offset[nbpoints++] = offset[index++]; // move slot
- }
-
- /* mark output packet samples */
- memset(x->x_data, 0, 2*x->x_nb_pixels);
- for (i=0; i<x->x_sample_size; i++){
- x->x_data[offset[i]] = 0x7fff;
- }
-
- /* send packet to left outlet */
- pdp_pass_if_valid(x->x_outlet0, &x->x_packet0);
-
-
- /* run the clustering algo */
- x->x_pixel_offset = offset;
- compute_clusters(x);
-
-
-}
-
-static void get_brightest(t_pdp_histo *x)
-{
- int i;
- int *histo = x->x_histo;
- int N = 1 << (x->x_logN);
-
- int index, nsamps;
-
- /* check requested size */
- if (x->x_sample_size > x->x_nb_pixels){
- post("WARNING: more samples requested than pixels in image");
- x->x_sample_size = x->x_nb_pixels;
- }
-
-
- /* find limiting index */
- index = N;
- nsamps = 0;
- while (nsamps < x->x_sample_size){
- index--;
- nsamps += histo[index];
- }
-
- /* status report */
- if (x->x_debug){
- post("found %d samples between h[%d] and h[%d]", nsamps, index, N-1);
- }
-
- /* get a representative set from the candidates
- the tempbuf is the rounded log of the nb of samples + 1
- so it is at least 50% sparse */
- get_sampleset(x, round_up_2log(nsamps) + 1, index << (15-x->x_logN));
-
-}
-
-
-static void _pdp_histo_perform(t_pdp_histo *x)
-{
- short int *pp;
- int N = 1 << x->x_logN;
- int nbpixels = x->x_width * x->x_height, i;
-
- int histo[N];
-
- /* init */
- for (i=0; i<N; i++) histo[i] = 0;
-
- /* build histo */
- for (i=0; i<nbpixels; i++){
- int index = x->x_data[i] >> (15 - x->x_logN);
- if (index < 0) index = 0; /* negative -> zero */
- histo[index]++;
- }
-
- /* save the histo stack location */
- x->x_histo = histo;
-
- /* print it */
- if (x->x_debug){
- post("histogram:");
- for (i=0; i<N; i++){
- fprintf(stderr, "%d\t", histo[i]);
- if (!(i % 10)) post("");
- }
- post("");
- }
-
- /* call the processor */
- x->x_process_method(x);
-
-
-}
-
-
-// packet is an image/*/* packet or invalid */
-static void pdp_histo_perform(t_pdp_histo *x)
-{
- t_pdp *header0 = pdp_packet_header(x->x_packet0);
- void *data0 = pdp_packet_data(x->x_packet0);
- if (!header0 || !data0) return;
-
- x->x_width = header0->info.image.width;
- x->x_height = header0->info.image.height;
- x->x_nb_pixels = x->x_width * x->x_height;
- x->x_data = data0;
-
- _pdp_histo_perform(x);
-}
-
-
-
-static void pdp_histo_input_0(t_pdp_histo *x, t_symbol *s, t_floatarg f)
-{
- int packet = (int)f;
-
- /* register */
- if (s == gensym("register_ro")){
- /* replace if not compatible or we are not interpolating */
- pdp_packet_mark_unused(x->x_packet0);
- x->x_packet0 = pdp_packet_convert_rw(packet, pdp_gensym("image/grey/*"));
-
- }
-
- if (s == gensym("process")){
- pdp_histo_perform(x);
- }
-
-}
-
-
-
-static void pdp_histo_samplesize(t_pdp_histo *x, t_floatarg f)
-{
- int i = (int)f;
- if (i >= x->x_nb_clusters ) x->x_sample_size = i;
-}
-
-static void pdp_histo_clusters(t_pdp_histo *x, t_floatarg f)
-{
- int i = (int)f;
- if (i>=2 && i<= x->x_sample_size){
- x->x_nb_clusters = i;
- if (x->x_cluster) pdp_dealloc(x->x_cluster);
- x->x_cluster = 0;
- }
-}
-static void pdp_histo_scale(t_pdp_histo *x, t_floatarg f){x->x_scale = f;}
-
-
-
-static void pdp_histo_size(t_pdp_histo *x, t_floatarg f)
-{
- int i = (int)f;
- if (i < 1) return;
- x->x_logN = round_up_2log(i);
-}
-
-
-static void pdp_histo_array(t_pdp_histo *x, t_symbol *s)
-{
- //post("setting symbol %x", s);
- x->x_array_sym = s;
-}
-
-
-static void pdp_histo_free(t_pdp_histo *x)
-{
- pdp_packet_mark_unused(x->x_packet0);
- if (x->x_cluster) pdp_dealloc(x->x_cluster);
-}
-
-
-t_class *pdp_histo_class;
-
-
-
-void *pdp_histo_new(t_floatarg f)
-{
-
- t_pdp_histo *x = (t_pdp_histo *)pd_new(pdp_histo_class);
- if (f == 0.0f) f = 64;
- pdp_histo_size(x, f);
- x->x_packet0 = -1;
- x->x_debug = 0;
- x->x_sample_size = 16;
- x->x_nb_clusters = 3;
- x->x_cluster = 0;
- return (void *)x;
-}
-
-
-void *pdp_histo_array_new(t_symbol *s, t_float f, t_float f2)
-{
- t_pdp_histo *x = (t_pdp_histo *)pdp_histo_new(f);
- if (f2 == 0.0f) f2 = 1.0f;
- pdp_histo_scale(x, f2);
- pdp_histo_array(x, s);
- x->x_process_method = dump_to_array;
- return (void *)x;
-}
-
-void *pdp_histo_sample_new(t_float nbsamples, t_float histosize)
-{
- t_pdp_histo *x;
- if (histosize == 0.0f) histosize = 256.0f;
- x = (t_pdp_histo *)pdp_histo_new(histosize);
- if (nbsamples == 0.0f) nbsamples = 16.0f;
- pdp_histo_samplesize(x, nbsamples);
- x->x_process_method = get_brightest;
- x->x_outlet0 = outlet_new(&x->x_obj, gensym("anything"));
- //x->x_outlet1 = outlet_new(&x->x_obj, gensym("anything"));
-
- inlet_new((t_object *)x, (t_pd *)&x->x_obj, gensym("float"), gensym("nbpoints"));
-
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_histo_setup(void)
-{
-
- pdp_histo_class = class_new(gensym("pdp_histo"), (t_newmethod)pdp_histo_array_new,
- (t_method)pdp_histo_free, sizeof(t_pdp_histo), 0, A_DEFSYMBOL, A_DEFFLOAT, A_DEFFLOAT, A_NULL);
-
- class_addcreator((t_newmethod)pdp_histo_sample_new, gensym("pdp_pointcloud"), A_DEFFLOAT, A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
-
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_size, gensym("size"), A_FLOAT, A_NULL);
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_size, gensym("scale"), A_FLOAT, A_NULL);
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_array, gensym("array"), A_SYMBOL, A_NULL);
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_samplesize, gensym("nbpoints"), A_FLOAT, A_NULL);
- class_addmethod(pdp_histo_class, (t_method)pdp_histo_clusters, gensym("nbclusters"), A_FLOAT, A_NULL);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/modules/matrix_basic/pdp_mat_lu.c b/modules/matrix_basic/pdp_mat_lu.c
deleted file mode 100644
index af8931d..0000000
--- a/modules/matrix_basic/pdp_mat_lu.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Pure Data Packet module. LU decomposition module.
- * 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.
- *
- */
-
-//#include <gsl/gsl_block.h>
-//#include <gsl/gsl_vector.h>
-//#include <gsl/gsl_matrix.h>
-//#include <gsl/gsl_blas.h>
-#include "pdp.h"
-#include "pdp_base.h"
-
-
-typedef struct pdp_mat_LU_struct
-{
- t_pdp_base x_base;
-
-} t_pdp_mat_LU;
-
-
-
-static void pdp_mat_LU_process_LU_inverse(t_pdp_mat_LU *x)
-{
- int p = pdp_base_get_packet(x, 0);
- int p_LU = pdp_packet_matrix_LU_to_inverse(p);
- pdp_base_set_packet(x, 0, p_LU); // replace packet
-}
-
-static void pdp_mat_LU_process_LU(t_pdp_mat_LU *x)
-{
- int p = pdp_base_get_packet(x, 0);
- int p_LU = pdp_packet_matrix_LU(p);
- pdp_base_set_packet(x, 0, p_LU); // replace packet
-}
-
-static void pdp_mat_LU_process_LU_solve(t_pdp_mat_LU *x)
-{
- int p0 = pdp_base_get_packet(x, 0);
- int p1 = pdp_base_get_packet(x, 1);
- int pvr, pm, pv;
-
- /* determine which is vector and which is matrix */
- if (pdp_packet_matrix_ismatrix(p0) && pdp_packet_matrix_isvector(p1)){
- pm = p0;
- pv = p1;
- }
- else {
- pm = p1;
- pv = p0;
- }
-
- /* create the result vector */
- pvr = pdp_packet_matrix_LU_solve(pm, pv);
-
- /* replace the active packet */
- pdp_base_set_packet(x, 0, pvr);
-}
-
-static void pdp_mat_LU_free(t_pdp_mat_LU *x)
-{
- /* remove process method from queue before deleting data */
- pdp_base_free(x);
-}
-
-t_class *pdp_mat_LU_class;
-
-
-/* common new methods */
-t_pdp_mat_LU *pdp_mat_LU_base_new(void)
-{
- t_pdp_mat_LU *x = (t_pdp_mat_LU *)pd_new(pdp_mat_LU_class);
- pdp_base_init(x);
- pdp_base_add_pdp_outlet(x);
- return x;
-}
-
-void *pdp_mat_LU_inverse_new(void)
-{
- t_pdp_mat_LU *x = pdp_mat_LU_base_new();
- pdp_base_set_process_method(x,(t_pdp_method)pdp_mat_LU_process_LU_inverse);
- pdp_base_readonly_active_inlet(x);
- return (void *)x;
-}
-
-
-void *pdp_mat_LU_new(void)
-{
- t_pdp_mat_LU *x = pdp_mat_LU_base_new();
- pdp_base_set_process_method(x,(t_pdp_method)pdp_mat_LU_process_LU);
- pdp_base_readonly_active_inlet(x);
- return (void *)x;
-}
-
-void *pdp_mat_LU_solve_new(void)
-{
- t_pdp_mat_LU *x = pdp_mat_LU_base_new();
- pdp_base_set_process_method(x,(t_pdp_method)pdp_mat_LU_process_LU_solve);
- pdp_base_readonly_active_inlet(x);
- pdp_base_add_pdp_inlet(x);
- return (void *)x;
-}
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_mat_lu_setup(void)
-{
-
-
- pdp_mat_LU_class = class_new(gensym("pdp_m_LU_inverse"), (t_newmethod)pdp_mat_LU_inverse_new,
- (t_method)pdp_mat_LU_free, sizeof(t_pdp_mat_LU), 0, A_NULL);
-
- pdp_base_setup(pdp_mat_LU_class);
-
-
- class_addcreator((t_newmethod)pdp_mat_LU_new, gensym("pdp_m_LU"), A_NULL);
- class_addcreator((t_newmethod)pdp_mat_LU_solve_new, gensym("pdp_m_LU_solve"), A_NULL);
-
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/matrix_basic/pdp_mat_mul.c b/modules/matrix_basic/pdp_mat_mul.c
deleted file mode 100644
index 329813f..0000000
--- a/modules/matrix_basic/pdp_mat_mul.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Pure Data Packet module. Matrix multiplication module
- * 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.
- *
- */
-
-//#include <gsl/gsl_block.h>
-//#include <gsl/gsl_vector.h>
-//#include <gsl/gsl_matrix.h>
-//#include <gsl/gsl_blas.h>
-#include "pdp.h"
-#include "pdp_base.h"
-
-
-typedef struct pdp_mat_mm_struct
-{
- t_pdp_base x_base;
- CBLAS_TRANSPOSE_t x_T0;
- CBLAS_TRANSPOSE_t x_T1;
- int x_M0;
- int x_M1;
-
- float x_scale_r;
- float x_scale_i;
-
-} t_pdp_mat_mm;
-
-
-static void pdp_mat_mm_rscale(t_pdp_mat_mm *x, t_floatarg r)
-{
- x->x_scale_r = r;
- x->x_scale_i = 0.0f;
-}
-
-static void pdp_mat_mm_cscale(t_pdp_mat_mm *x, t_floatarg r, t_floatarg i)
-{
- x->x_scale_r = r;
- x->x_scale_i = i;
-}
-
-
-/* matrix multilpy */
-static void pdp_mat_mv_process_mul(t_pdp_mat_mm *x)
-{
- int pA = pdp_base_get_packet(x, 0);
- int pB = pdp_base_get_packet(x, 1);
- int p0, p1, pR;
-
- /* determine which one is the vector */
- if (pdp_packet_matrix_isvector(pA)){
- p0 = pB;
- p1 = pA;
- }
- else {
- p1 = pB;
- p0 = pA;
- }
-
- pR = pdp_packet_new_matrix_product_result(x->x_T0, CblasNoTrans, p0, p1);
-
- if (-1 != pR){
- pdp_packet_matrix_setzero(pR);
- if (pdp_packet_matrix_blas_mv(x->x_T0, p0, p1, pR, x->x_scale_r, x->x_scale_i)){
- //post("pdp_packet_matrix_blas_mm failed");
- pdp_packet_mark_unused(pR);
- pR = -1;
- }
- }
- else {
- //post("pdp_packet_new_matrix_product_result failed");
- }
-
- /* replace with result */
- pdp_base_set_packet(x, 0, pR);
-
-}
-
-/* matrix vector multilpy */
-static void pdp_mat_mm_process_mul(t_pdp_mat_mm *x)
-{
- int pA = pdp_base_get_packet(x, 0);
- int pB = pdp_base_get_packet(x, 1);
- int p0, p1, pR;
-
- p0 = (x->x_M0) ? pB : pA;
- p1 = (x->x_M1) ? pB : pA;
-
- pR = pdp_packet_new_matrix_product_result(x->x_T0, x->x_T1, p0, p1);
-
- if (-1 != pR){
- pdp_packet_matrix_setzero(pR);
- if (pdp_packet_matrix_blas_mm(x->x_T0, x->x_T1, p0, p1, pR, x->x_scale_r, x->x_scale_i)){
- //post("pdp_packet_matrix_blas_mm failed");
- pdp_packet_mark_unused(pR);
- pR = -1;
- }
- }
- else {
- //post("pdp_packet_new_matrix_product_result failed");
- }
-
- /* replace with result */
- pdp_base_set_packet(x, 0, pR);
-
-}
-/* matrix macc */
-static void pdp_mat_mm_process_mac(t_pdp_mat_mm *x)
-{
- int pC = pdp_base_get_packet(x, 0);
- int pA = pdp_base_get_packet(x, 1);
- int pB = pdp_base_get_packet(x, 2);
- int p0, p1;
-
- p0 = (x->x_M0) ? pB : pA;
- p1 = (x->x_M1) ? pB : pA;
-
- if (pdp_packet_matrix_blas_mm(x->x_T0, x->x_T1, p0, p1, pC, x->x_scale_r, x->x_scale_i)){
- //post("pdp_packet_matrix_blas_mm failed");
- pdp_base_set_packet(x, 0, -1); // delete packet
- }
-
-}
-
-
-static void pdp_mat_mm_free(t_pdp_mat_mm *x)
-{
- /* remove process method from queue before deleting data */
- pdp_base_free(x);
-}
-
-t_class *pdp_mat_mm_class;
-
-
-/* common new method */
-void *pdp_mat_mm_new(void)
-{
- int i;
- t_pdp_mat_mm *x = (t_pdp_mat_mm *)pd_new(pdp_mat_mm_class);
-
- /* super init */
- pdp_base_init(x);
-
- /* outlet */
- pdp_base_add_pdp_outlet(x);
-
-
- return (void *)x;
-}
-
-
-static int pdp_mat_mm_setup_routing_M0(t_pdp_mat_mm *x, t_symbol *s0)
-{
- if ('A' == s0->s_name[0]){x->x_M0 = 0;} else if ('B' == s0->s_name[0]) {x->x_M0 = 1;} else return 0;
-
- if ((gensym("A") == s0) || (gensym("B") == s0)) x->x_T0 = CblasNoTrans;
- else if ((gensym("A^T") == s0) || (gensym("B^T") == s0)) x->x_T0 = CblasConjTrans;
- else if ((gensym("A^H") == s0) || (gensym("B^H") == s0)) x->x_T0 = CblasConjTrans;
- else return 0;
-
- return 1;
-}
-
-static int pdp_mat_mm_setup_routing_M1(t_pdp_mat_mm *x, t_symbol *s1)
-{
-
- if ('A' == s1->s_name[0]){x->x_M1 = 0;} else if ('B' == s1->s_name[0]) {x->x_M1 = 1;} else return 0;
-
- /* setup second matrix transpose operation */
- if ((gensym("A") == s1) || (gensym("B") == s1)) x->x_T1 = CblasNoTrans;
- else if ((gensym("A^T") == s1) || (gensym("B^T") == s1)) x->x_T1 = CblasConjTrans;
- else if ((gensym("A^H") == s1) || (gensym("B^H") == s1)) x->x_T1 = CblasConjTrans;
- else return 0;
-
- return 1;
-}
-
-
-static int pdp_mat_mm_setup_scaling(t_pdp_mat_mm *x, t_symbol *scale)
-{
- int success = 1;
-
- /* setup scaling inlet */
- if ((gensym ("rscale") == scale) || (gensym("r") == scale)){
- pdp_base_add_gen_inlet(x, gensym("float"), gensym("rscale"));
- }
- else if ((gensym ("cscale") == scale) || (gensym("c") == scale)){
- pdp_base_add_gen_inlet(x, gensym("list"), gensym("cscale"));
- }
- else if (gensym ("") != scale) success = 0;
-
- return success;
-}
-
-void *pdp_mat_mm_new_mul_common(t_symbol *s0, t_symbol *s1, t_symbol *scale, int ein)
-{
- t_pdp_mat_mm *x = pdp_mat_mm_new();
-
- /* add extra pdp inlets */
- while (ein--) pdp_base_add_pdp_inlet(x);
-
- /* setup routing */
- if (!pdp_mat_mm_setup_routing_M0(x, s0)) goto error;
- if (!pdp_mat_mm_setup_routing_M1(x, s1)) goto error;
- if (!pdp_mat_mm_setup_scaling(x, scale)) goto error;
-
- /* default scale = 1 */
- pdp_mat_mm_cscale(x, 1.0f, 0.0f);
- return (void *)x;
-
- error:
- pd_free((void *)x);
- return 0;
-}
-
-void *pdp_mat_mv_new_mul_common(t_symbol *s0, t_symbol *scale, int ein)
-{
- t_pdp_mat_mm *x = pdp_mat_mm_new();
-
- /* add extra pdp inlets */
- while (ein--) pdp_base_add_pdp_inlet(x);
-
- /* setup routing */
- if (!pdp_mat_mm_setup_routing_M0(x, s0)) goto error;
- if (!pdp_mat_mm_setup_scaling(x, scale)) goto error;
-
- /* default scale = 1 */
- pdp_mat_mm_cscale(x, 1.0f, 0.0f);
- return (void *)x;
-
- error:
- pd_free((void *)x);
- return 0;
-}
-
-void *pdp_mat_mm_new_mul(t_symbol *s0, t_symbol *s1, t_symbol *scale)
-{
- t_pdp_mat_mm *x = pdp_mat_mm_new_mul_common(s0, s1, scale, 1);
- if(x){
- pdp_base_set_process_method(x, (t_pdp_method)pdp_mat_mm_process_mul);
- pdp_base_readonly_active_inlet(x);
- }
- return x;
-}
-
-void *pdp_mat_mv_new_mul(t_symbol *s0, t_symbol *scale)
-{
- t_pdp_mat_mm *x = pdp_mat_mv_new_mul_common(s0, scale, 1);
- if(x){
- pdp_base_set_process_method(x, (t_pdp_method)pdp_mat_mv_process_mul);
- pdp_base_readonly_active_inlet(x);
- }
- return x;
-}
-
-void *pdp_mat_mm_new_mac(t_symbol *s0, t_symbol *s1, t_symbol *scale)
-{
- t_pdp_mat_mm *x = pdp_mat_mm_new_mul_common(s0, s1, scale, 2);
- if (x){
- pdp_base_set_process_method(x, (t_pdp_method)pdp_mat_mm_process_mac);
- }
- return x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_mat_mul_setup(void)
-{
-
-
- pdp_mat_mm_class = class_new(gensym("pdp_m_mm"), (t_newmethod)pdp_mat_mm_new_mul,
- (t_method)pdp_mat_mm_free, sizeof(t_pdp_mat_mm), 0, A_SYMBOL, A_SYMBOL, A_DEFSYMBOL, A_NULL);
-
- pdp_base_setup(pdp_mat_mm_class);
-
- class_addcreator((t_newmethod)pdp_mat_mm_new_mac, gensym("pdp_m_+=mm"),
- A_SYMBOL, A_SYMBOL, A_DEFSYMBOL, A_NULL);
-
- class_addcreator((t_newmethod)pdp_mat_mv_new_mul, gensym("pdp_m_mv"),
- A_SYMBOL, A_DEFSYMBOL, A_NULL);
-
-
- class_addmethod(pdp_mat_mm_class, (t_method)pdp_mat_mm_rscale, gensym("rscale"), A_FLOAT, A_NULL);
- class_addmethod(pdp_mat_mm_class, (t_method)pdp_mat_mm_cscale, gensym("cscale"), A_FLOAT, A_FLOAT, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/matrix_basic/pdp_mat_vec.c b/modules/matrix_basic/pdp_mat_vec.c
deleted file mode 100644
index 16257c8..0000000
--- a/modules/matrix_basic/pdp_mat_vec.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Pure Data Packet module. Vector modules.
- * 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.
- *
- */
-
-//#include <gsl/gsl_block.h>
-//#include <gsl/gsl_vector.h>
-//#include <gsl/gsl_matrix.h>
-//#include <gsl/gsl_blas.h>
-#include "pdp.h"
-#include "pdp_base.h"
-
-
-typedef struct pdp_mat_vec_struct
-{
- t_pdp_base x_base;
- int x_type;
- t_outlet *x_out;
- int x_accept_list;
- int x_list_size;
- t_atom *x_list;
-
-} t_pdp_mat_vec;
-
-
-#define GETFLOAT(x) ((x)->a_type == A_FLOAT ? (x)->a_w.w_float : 0.0f)
-#define GETDOUBLE(x) (double)GETFLOAT(x)
-
-
-static void pdp_mat_vec_list_in(t_pdp_mat_vec *x, t_symbol *s, int argc, t_atom *argv)
-{
- int i;
- int vp = -1;
- int f;
- int dim = argc;
-
- if (!x->x_accept_list) return; //check if this handler is enabled
- if (!argc) return; //reject empty list
-
- switch(x->x_type){
- case PDP_MATRIX_TYPE_CFLOAT:
- if (argc & 1) return; //reject odd nb elements
- dim >>= 1; //halve dimension
- case PDP_MATRIX_TYPE_RFLOAT:
- vp = pdp_packet_new_matrix(dim, 1, x->x_type);
- if (-1 != vp){
- float *data = (float *)pdp_packet_data(vp);
- for (i=0; i<argc; i++) data[i] = GETFLOAT(&argv[i]);
- }
- break;
- case PDP_MATRIX_TYPE_CDOUBLE:
- if (argc & 1) return; //reject odd nb elements
- dim >>= 1; //halve dimension
- case PDP_MATRIX_TYPE_RDOUBLE:
- vp = pdp_packet_new_matrix(dim, 1, x->x_type);
- if (-1 != vp){
- double *data = (double *)pdp_packet_data(vp);
- for (i=0; i<argc; i++) data[i] = GETDOUBLE(&argv[i]);
- }
- break;
- default:
- break;
- }
-
- if (-1 != vp){
- /* store vector packet */
- pdp_base_set_packet(x, 0, vp);
- pdp_base_bang(x);
- }
-}
-
-static void pdp_mat_vec_list_out(t_pdp_mat_vec *x)
-{
- int p = pdp_base_move_packet(x, 0);
- int type = pdp_packet_matrix_get_type(p);
- int outlist_size;
- float *fdata = 0;
- double *ddata = 0;
- int i;
-
- /* check if it's a vector */
- gsl_vector *m = (gsl_vector *)pdp_packet_matrix_get_gsl_vector(p, type);
- if (!pdp_packet_matrix_isvector(p)) return;
-
- /* get list size */
- outlist_size = m->size;
- if ((type == PDP_MATRIX_TYPE_CFLOAT)
- || (type == PDP_MATRIX_TYPE_CDOUBLE))
- outlist_size <<= 1;
-
- /* realloc list if necessary */
- if (outlist_size > x->x_list_size){
- free(x->x_list);
- x->x_list = (t_atom *)pdp_alloc(sizeof(t_atom) * outlist_size);
- x->x_list_size = outlist_size;
- }
-
- /* copy data */
- switch(type){
- case PDP_MATRIX_TYPE_RFLOAT:
- case PDP_MATRIX_TYPE_CFLOAT:
- fdata = (float *)pdp_packet_data(p);
- for (i=0; i<outlist_size; i++)
- SETFLOAT(&x->x_list[i], fdata[i]);
- break;
-
- case PDP_MATRIX_TYPE_RDOUBLE:
- case PDP_MATRIX_TYPE_CDOUBLE:
- ddata = (double *)pdp_packet_data(p);
- for (i=0; i<outlist_size; i++)
- SETFLOAT(&x->x_list[i], (float)ddata[i]);
- break;
-
- }
-
- /* dispose of vector packet and output list */
- pdp_packet_mark_unused(p);
- outlet_list(x->x_out, &s_list, outlist_size, x->x_list);
-}
-
-static void pdp_mat_vec_free(t_pdp_mat_vec *x)
-{
- /* remove process method from queue before deleting data */
- pdp_base_free(x);
-
- /* delete list */
- if (x->x_list) pdp_dealloc (x->x_list);
-}
-
-t_class *pdp_mat_vec_class;
-
-
-/* common new methods */
-t_pdp_mat_vec *pdp_mat_vec_base_new(void)
-{
- t_pdp_mat_vec *x = (t_pdp_mat_vec *)pd_new(pdp_mat_vec_class);
- pdp_base_init(x);
- x->x_type = PDP_MATRIX_TYPE_CFLOAT;
- x->x_accept_list = 0;
- x->x_list_size = 0;
- x->x_list = 0;
- return x;
-}
-
-void *pdp_mat_vec_list2vec_new(t_symbol *type)
-{
- t_pdp_mat_vec *x = pdp_mat_vec_base_new();
- pdp_base_disable_active_inlet(x);
- pdp_base_add_pdp_outlet(x);
- x->x_accept_list = 1;
- if ((gensym ("") == type) || (gensym ("double/real") == type)) x->x_type = PDP_MATRIX_TYPE_RDOUBLE;
- else if (gensym ("double/complex") == type) x->x_type = PDP_MATRIX_TYPE_CDOUBLE;
- else if (gensym ("float/real") == type) x->x_type = PDP_MATRIX_TYPE_RFLOAT;
- else if (gensym ("float/complex") == type) x->x_type = PDP_MATRIX_TYPE_CFLOAT;
- else {
- pd_free((t_pd *)x);
- x = 0;
- }
- return (void *)x;
-}
-
-
-void *pdp_mat_vec_vec2list_new(t_symbol *type)
-{
- t_pdp_mat_vec *x = pdp_mat_vec_base_new();
- x->x_out = outlet_new((t_object *)x, &s_anything);
- pdp_base_set_postproc_method(x,(t_pdp_method)pdp_mat_vec_list_out);
- pdp_base_readonly_active_inlet(x);
- return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_mat_vec_setup(void)
-{
-
-
- pdp_mat_vec_class = class_new(gensym("pdp_m_list2vec"), (t_newmethod)pdp_mat_vec_list2vec_new,
- (t_method)pdp_mat_vec_free, sizeof(t_pdp_mat_vec), 0, A_DEFSYMBOL, A_NULL);
-
- pdp_base_setup(pdp_mat_vec_class);
-
-
- class_addcreator((t_newmethod)pdp_mat_vec_vec2list_new, gensym("pdp_m_vec2list"), A_NULL);
-
- class_addlist(pdp_mat_vec_class, (t_method)pdp_mat_vec_list_in);
-
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/modules/test/Makefile b/modules/test/Makefile
deleted file mode 100644
index 12819a3..0000000
--- a/modules/test/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-#current: all_modules
-current: clean
-include ../../Makefile.config
-
-all_modules: pdp_forthtest.o
-
-# build test modules
-# all_modules: $(PDP_MOD)
-
-clean:
- rm -f *~
- rm -f *.o
-
diff --git a/modules/test/README b/modules/test/README
deleted file mode 100644
index eb35faa..0000000
--- a/modules/test/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory contains test modules.
diff --git a/modules/test/pdp_dpd_test.c b/modules/test/pdp_dpd_test.c
deleted file mode 100644
index 1d85bde..0000000
--- a/modules/test/pdp_dpd_test.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Pure Data Packet module.
- * 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.
- *
- */
-
-
-
-#include "pdp.h"
-#include "pdp_dpd_base.h"
-
-typedef struct pdp_dpd_test_struct
-{
- t_pdp_dpd_base x_base;
-
-} t_pdp_dpd_test;
-
-
-
-/* outlet methods */
-static void pdp_dpd_test_1(t_pdp_dpd_test *x){post("%x: one", x);}
-static void pdp_dpd_test_2(t_pdp_dpd_test *x){post("%x: two", x);}
-static void pdp_dpd_test_3(t_pdp_dpd_test *x){post("%x: three", x);}
-static void pdp_dpd_test_cleanup(t_pdp_dpd_test *x){post("%x: cleanup", x);}
-static void pdp_dpd_test_inspect(t_pdp_dpd_test *x){post("%x: inspect", x);}
-
-
-
-static void pdp_dpd_test_bang(t_pdp_dpd_test *x)
-{
- /* store a dummy packet */
- pdp_dpd_base_set_context_packet(x, pdp_packet_new(PDP_IMAGE, 4096));
-
- /* bang base */
- pdp_dpd_base_bang(x);
-}
-
-
-static void pdp_dpd_test_free(t_pdp_dpd_test *x)
-{
- pdp_dpd_base_free(x);
-
-}
-
-t_class *pdp_dpd_test_class;
-
-
-void *pdp_dpd_test_new(void)
-{
- /* allocate */
- t_pdp_dpd_test *x = (t_pdp_dpd_test *)pd_new(pdp_dpd_test_class);
-
- /* init super: this is mandatory */
- pdp_dpd_base_init(x);
-
- /* set the dpd processing methods & outlets */
- pdp_dpd_base_add_outlet(x, (t_pdp_method)pdp_dpd_test_1);
- pdp_dpd_base_add_outlet(x, (t_pdp_method)pdp_dpd_test_2);
- pdp_dpd_base_add_outlet(x, (t_pdp_method)pdp_dpd_test_3);
-
- pdp_dpd_base_add_cleanup(x, (t_pdp_method)pdp_dpd_test_cleanup);
- pdp_dpd_base_add_inspector(x, (t_pdp_method)pdp_dpd_test_inspect);
-
- return (void *)x;
-}
-
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_dpd_test_setup(void)
-{
- /* create a standard pd class */
- pdp_dpd_test_class = class_new(gensym("pdp_dpd_test"), (t_newmethod)pdp_dpd_test_new,
- (t_method)pdp_dpd_test_free, sizeof(t_pdp_dpd_test), 0, A_NULL);
-
- /* inherit pdp base class methods */
- pdp_dpd_base_setup(pdp_dpd_test_class);
-
- /* add bang method */
- class_addbang(pdp_dpd_test_class, pdp_dpd_test_bang);
-}
-
-#ifdef __cplusplus
-}
-#endif