Use cairo_image_surface_create_for_data().

On Fri, Jul 5, 2019 at 6:37 AM Moazin Khatri <[email protected]> wrote:

> Hi,
>
> I'm trying to fix all of the memory leaks in the work that I have
> done so far and one very important memory leak is that of the whole
> image buffer data.
>
> For example, in my `resvg' port, after the SVG document has been
> rendered to a cairo surface, I use `cairo_image_surface_get_data'
> to get a pointer to the actual image data and just set the
> `slot->bitmap.buffer' to this pointer. This works, but the problem
> is freeing this memory later on. All of this memory was allocated
> by cairo and the right way to free is by `cairo_surface_destroy'.
> But we don't wanna free it immediately, only after the user has
> done their thing with the data.
>
> We could solve this by creating another hook that will be triggered
> for clearing the surface, but this method is tedious. An easier way
> could be to allocate a new memory block by using `FT_Memory', copy
> the image data there, free all the cairo resources and set the flag
> `FT_GLYPH_OWN_BITMAP' at `slot->internal->flags'. Now, FreeType can
> easily handle freeing this memory whenever it wants to.
>
> This approach works fine as long as the client program is linking to
> FreeType statically. Turns out, the functions `ft_mem_alloc' and
> `ft_mem_free' don't make it to the dynamic symbol table and thus are
> not accessible to my rendering port if the client program is linking
> dynamically. This is simply because `ft_mem_*' functions are not
> exported and cannot be used from outside.
>
> Any ideas on what I should do here? Is it a bad idea to get access
> to `ft_mem_*' functions from inside my ports?
>
> Regards,
>
> Moazin
> _______________________________________________
> Freetype-devel mailing list
> [email protected]
> https://lists.nongnu.org/mailman/listinfo/freetype-devel
>


-- 
behdad
http://behdad.org/
_______________________________________________
Freetype-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/freetype-devel

Reply via email to