[PD] [GEM-dev] Timing and PD....

B. Bogart ben at ekran.org
Thu Oct 30 17:28:53 CET 2008

Hey all,

I'll try and work on some test patches, right now I'm trying hard to get
an installation ready, and these issues turned out to be a large
stumbling block.

I suppose I'm doing lots of processing that may be unusual, like:

Grab an image from video device
put the image in a buffer for each frame
send the image in the buffer to a second buffer on each bang from a metro.
pix_share the image in the second buffer
send a bang to tell second pd instance to pix_dump.
turn off the metro.
pix_dump (640x480 GRAY) to ann_som in a second thread
netreceive the winning BMU
use that BMU as the index in which the image has saved in a third buffer.
turn the metro back on.

I'm not thinking pix_share should do sync!! But I feel the need for some
infrastructure better than trigger for complex timing problems like
those I'm having.

I'm still debugging my patch, but adding a whole lot of arbitrary delays
(150ms) are being used to get PD to wait a little bit before accessing
the image in a buffer once it has been written.

Seems the safest way...

I remember Cyrille did mention needing to use these delays to make
things work. I had to use them in parts of pixelTANGO also (when a
message gets passed through many objects and many routes it takes time...)

As I have not noticed any render blocks with pix_buffer stuff, can I
assume it uses a thread like pix_image and so on? I think a "done" bang
would be really useful there.

I also had issues with things like pix_histo, where I would try and save
the hist, but the hist had not changed for the new pix_buffer_read
frame, just because the delay was slower than t b b delay.

Are cyrille and I the only ones seeing these kinds of issues?

Thanks for the comments.

chris clepper wrote:
> Internally, objects like pix_image and pix_film set flags for whether an
> image is new or not.  This tells other objects to update.  Perhaps a
> generic object (pix_info ?) can output when that flag is set.
> pix_share is a little different than image loading as it just dumps a
> new image into the gemlist each frame.  It is not designed to do sync
> between instances of pd, but rather to be an asynchronous way to
> distribute processing.  Making it sync would remove the performance gains.
> On Thu, Oct 30, 2008 at 9:32 AM, Hans-Christoph Steiner <hans at eds.org
> <mailto:hans at eds.org>> wrote:
>     I agree.  I think for any indeterminate operation, like anything in a
>     separate thread, there should be a bang when that operation is
>     complete.  That way you can guarantee that things are ready when you
>     run a process.  If you want to make sure that things will be there on
>     time, then these threaded/indeterminate operations should run well in
>     advance.  Using guesswork and delays is not a real solution...
>     .hc
>     On Oct 30, 2008, at 4:25 AM, cyrille henry wrote:
>     > helo,
>     >
>     > i'm also having this kind of problem.
>     > specially when loading a picture in pix_image.
>     > i think the best would be the have a bang when things are ready...
>     >
>     > C
>     >
>     >
>     > B. Bogart a écrit :
>     >> Hey all,
>     >>
>     >> I'm having more and more problems with sync in PD. By sync I mean
>     >> that
>     >> parts of my patches have processing delays that mess up timing. In
>     >> general I've been using buffers and delays to keep things working.
>     >>
>     >> This approach is not very scalable.
>     >>
>     >> I find myself using the "timer" object all the time to see if
>     >> there is a
>     >> processing delay I have to worry about. That is in cases where
>     >> there is
>     >> a bang saying an operation is done.
>     >>
>     >> Two examples I'm working on now (in Gem):
>     >>
>     >> First there is a delay between sending a message and the
>     >> pix_buffer to
>     >> store, and then again for pix_buffer_read to read the pixels. The
>     >> delay
>     >> is long enough that trigger does not work, there needs to be a
>     >> delay to
>     >> make sure the image in the buffer is the right one. (sometimes as
>     >> much
>     >> as 200ms)
>     >>
>     >> A second example is that I'm using pix_share and and second PD
>     >> instance
>     >> to offload some CPU usage. Making sure the image sent to that PD
>     >> instance and the image received later in the chain is difficult.
>     >>
>     >> I'm not writing for specific advice, hence the generalities, but
>     >> wanted
>     >> to start a discussion on the issue.
>     >>
>     >> What is the long-term solution for PD to solve these issues?
>     >> Should all
>     >> objects that introduce a delay send a bang when they are complete?
>     >> (for
>     >> example pix_buffer? Of course an additional delay occurs when when
>     >> the
>     >> pix_buffer is written to memory and when it gets to the gfx card for
>     >> display.
>     >>
>     >> I'm banging my head over these issues a lot lately and wonder if
>     >> there
>     >> is a better approach.
>     >>
>     >> Back to attempting kludging a solution.
>     >> .b.
>     >>
>     >>
>     >> _______________________________________________
>     >> GEM-dev mailing list
>     >> GEM-dev at iem.at <mailto:GEM-dev at iem.at>
>     >> http://lists.puredata.info/listinfo/gem-dev
>     >>
>     >
>     >
>     > _______________________________________________
>     > GEM-dev mailing list
>     > GEM-dev at iem.at <mailto:GEM-dev at iem.at>
>     > http://lists.puredata.info/listinfo/gem-dev
>     ------------------------------------------------------------------------
>     ----
>                       ¡El pueblo unido jamás será vencido!
>     _______________________________________________
>     GEM-dev mailing list
>     GEM-dev at iem.at <mailto:GEM-dev at iem.at>
>     http://lists.puredata.info/listinfo/gem-dev

More information about the Pd-list mailing list