[PD] pd, openCV, pointers and indirection.
Mathieu Bouchard
matju at artengine.ca
Sat Oct 3 23:22:13 CEST 2009
On Sat, 3 Oct 2009, Loic Kessous wrote:
> I understand your point of view, but I am more interested buy the
> approach than the implementation itself. I mean passing a pointer and
> not the image itself.
"Passing the image itself" is largely a myth anyway.
At a first level, Pd doesn't always pass $1, $2, $3, etc., as separate
arguments in C: it often passes the pointer to the list (under the name
"argv"). This is what always happens for running list-methods and
anything-methods, as well as when sending list-messages and
anything-messages (pd automatically converts argv to non-argv and non-argv
to argv whenever needed).
At a second level, not much large data is passed as pd arglists: some
notable exceptions can happen in [pix_data], [pix_set], [#to_list],
[#import], [pix_convolve]'s config, Martin's strings, etc.; plugins such
as Gem and GridFlow use a second level of pointers to avoid Pd's argv.
This is mostly for this reason: because Pd's argv is limited to being a
t_atom array, which is usually too big and inefficient for
tightly-formatted data, spending 8 or 16 bytes on storing a 4-byte float
when you just want to store a single-byte int, for example.
But then, with either level, the way of specifying the pointer to the list
allows basically anything to happen, as the pointer doesn't have to be
stack allocated. With argv, methods aren't allowed to rely on a past
argv after the return is done, but still, the sender of the message can
decide the argv to be anything, not necessarily on the stack; this can
happen to be fairly permanent data.
Beyond that, there is a distinction between systems that let the user deal
with the "pointerness" aspect, and those that try to hide it (to make it
more automatic and easier to think about, they pretend to "pass the image"
but doesn't really). Outside of Pd, both strategies are widely used. Perl
and Tcl are very good examples of strings that never look like they use
pointers but always do. In Pd, ... only GridFlow uses something that looks
like "pass the image" semantics but has a few gotchas, and it's also the
only one that can pass an image without allocating a buffer of the same
size as the image. In the end, all the video frameworks make the user mess
with pointers in some way:
* Gem's [pix_separator]
* PDP's [pdp_trigger]
* GridFlow's [#t]
* MaPoD even required the user to free() image buffers using a special
object-class.
* FrameStein: i don't know (sorry).
> That's why it's compiled as a dll library I suppose
I don't see any link between any of the above notions, and the kind of
linkage (dll, etc) it uses.
> and I wonder how using another solution as shared memory for example
> could be done in the same goal... loic
No idea what you are referring to. I know what shared memory is, I know
what indirection is, but I don't know what is the problem that the
solution solves, you didn't say that. (And if anything, shared memory
introduces new portability concerns.)
_ _ __ ___ _____ ________ _____________ _____________________ ...
| Mathieu Bouchard, Montréal, Québec. téléphone: +1.514.383.3801
More information about the Pd-list
mailing list