[GEM-dev] pix buffer improvements

IOhannes m zmoelnig zmoelnig at iem.at
Wed Aug 24 15:25:00 CEST 2005


Georg Holzmann wrote:
> Hallo gem devs!

thanks for the files:

> 
> I need some fast changing images and so I added a open-message to
> pix_buffer_write, so that I can load an image into the buffer.
> I read the image like this:
> 
> imageStruct *image = NULL;
> canvas_makefilename(getCanvas(), filename->s_name, buf, MAXPDSTRING);
> image = image2mem(buf);
> 
> so my question is: do I need all the cache-stuff like in pix_image, or is a
> simple image2mem sufficient (like above) ?

no you don't necessarily need the cache.

however, i reject your patch, since i don't think that 
[pix_buffer_write] is the apropriate place for this operation.
instead of have moved the open()-functionality into [pix_buffer] itself.

(i consider the pix_buffer-objects very much like the table-objects 
within pd: you don't tell [tabwrite] to load a file into a table, rather 
you send the request directly to the table (or use a specialized object))

> 
> 
> Now for the next: pix_buffer_read
> I just noticed, that pix_buffer_read needs much more cpu than pix_image,
> because stuff like this:
> 
>   Obj_header*ohead=(Obj_header*)pd_findbyclass(m_bindname,
> pix_buffer_class);
>   [...]
>   pix_buffer *buffer=(pix_buffer *)(ohead)->data;
>   [..]
>   img=buffer->getMess((int)m_frame);
>   if (img && img->data)
>     img->copy2ImageStruct(&state->image->image);
> 
> is called every frame!

the problem with your solution is, that it crashes as soon, as you 
delete the associated [pix_buffer] object.

to fix this, you _have_ to do a pd_findbyclass() each and everytime you 
access the data behind it.


i have done so and you can find both your improvements in the CVS-head.

mfga.ds.r
IOhannes




More information about the GEM-dev mailing list