From: Cedric B. <ced...@fr...> - 2008-06-06 11:26:46
|
On Fri, Jun 6, 2008 at 11:47 AM, Jose Gonzalez <jos...@ju...> wrote: > Mats Ekberg wrote: >> I have attached a minimal test case that shows the same behaviour as >> our application code. The image size is set once, but the second time >> (if there has been a rendering in between) the assertion error occurs >> if the new size differs from the old. We are not, as Carsten Haitzler >> asked, calling evas_object_image_size_set() from inside the get_pixels >> callback. Perhaps there are some other restrictions on when it is >> allowed to change the image size? >> >> /Mats >> >> On Wed, Jun 4, 2008 at 5:09 PM, Cedric BAIL <ced...@fr...> wrote: >>>> [...] when we resize it, we get the following assertion >>>> error: >>>> >>>> evas-0.9.9.041/src/lib/cache/evas_cache_image.c:488: >>>> evas_cache_image_size_set: Assertion `im->references > 0' failed. >>>> >>>> This does not happen the first time we set the image size, but as we >>>> want the bitmap to exactly match the size of the displayed area, we >>>> need to resize the buffer as the displayed area changes. Any ideas? >>>> >>> >>> Sounds like a cache bug, do you have some test case for this that you >>> could send to me ? > > That certainly seems odd.. any news on this? One thing I did > notice while quickly looking thru the "evas_object_image.c" file in > canvas was that in the render_pre function there are a couple of > instances where the engines' function "image_dirty_region" is used > but its return value doesn't get set to anything (according to the > use it's being put to, it should be giving o->engine_data, which is > the internal version of the image structure). I quickly changed that > but it did nothing to fix this particular problem. > There is an abundance of engine image funcs which return this. I did some test around this and I think it came from the fact that o->dirty_pixels is not set to 1 after the second call to evas_object_image_size_set. A quick fix for your example is to call evas_object_image_pixels_dirty_set just after evas_object_image_size_set. I currently don't know enough to properly fix evas, but this could help others find the right solution. -- Cedric BAIL |