summaryrefslogtreecommitdiff
path: root/gdk-pixbuf/io-gif-animation.c
Commit message (Collapse)AuthorAgeFilesLines
* GIF: Plug animation data and iterator leakSebastian Keller2020-04-021-1/+5
| | | | | | The get_static_image() method for gifs is leaking an iterator and since the iterator has a reference to the animation, this results in all animation frames being leaked.
* Check the memset length argumentEmmanuele Bassi2020-04-021-1/+5
| | | | | | Avoid overflows by using the checked multiplication macro for gsize. Fixes: #132
* gif: Fix build on Solaris by including <string.h>Alan Coopersmith2019-11-251-0/+1
| | | | | | | | | | | | | | | | | | | | | Fixes build failure of: ../gdk-pixbuf/io-gif-animation.c: In function ‘gdk_pixbuf_gif_anim_iter_get_pixbuf’: ../gdk-pixbuf/io-gif-animation.c:418:17: error: implicit declaration of function ‘memset’ [-Werror=implicit-function-declaration] 418 | memset (gdk_pixbuf_get_pixels (anim->last_frame_data), 0, gdk_pixbuf_get_rowstride (anim->last_frame_data) * anim->height); | ^~~~~~ ../gdk-pixbuf/io-gif-animation.c:418:17: warning: incompatible implicit declaration of built-in function ‘memset’ ../gdk-pixbuf/io-gif-animation.c:28:1: note: include ‘<string.h>’ or provide a declaration of ‘memset’ 27 | #include "lzw.h" +++ |+#include <string.h> 28 | ../gdk-pixbuf/io-gif-animation.c:443:33: warning: incompatible implicit declaration of built-in function ‘memset’ 443 | memset (line, 0, (x_end - anim->last_frame->x_offset) * 4); | ^~~~~~ ../gdk-pixbuf/io-gif-animation.c:443:33: note: include ‘<string.h>’ or provide a declaration of ‘memset’ cc1: some warnings being treated as errors Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
* gif: Suppress last deprecation warningEmmanuele Bassi2019-07-291-0/+2
|
* gif: Render GIF frames on demandRobert Ancell2019-07-291-275/+144
| | | | | | | | | | | | | | | | | | | | | | | | | The previous code loaded all the frames into memory, which causes a memory and CPU explosion when a large GIF was loaded. From the existing code: /* The below reflects the "use hell of a lot of RAM" philosophy of coding */ The updated code now generates each image on demand by storing the compressed data and decompressing and combining with the last image. This uses more CPU than the old method, but allows arbitraritly large GIFs to play. The stop_after_first_frame hack that worked around this is no longer required and removed. This hack didn't work for progressive loading. If a GIF was played with frames out of order (e.g. in reverse) this would be quite slow, as repeated rendering would occur. This seems unlikely in the GIF use case but if it was a problem storing some key frames that would normally be discarded would reduce this while not using too much memory. A render cache could also be helpful in making a CPU / RAM trade-off for small repeating GIFs that have few frames. Fixes #101
* gif: Remove unused variableRobert Ancell2019-07-291-14/+10
|
* gif: Disable deprecation warnings for GTimeValEmmanuele Bassi2019-07-291-1/+8
|
* io-gif-animation.c: Don't use gdk-pixbuf-private.hFederico Mena Quintero2018-06-011-1/+0
|
* gif: Preventing undefined behaviour by making left shift unsignedTobias Mueller2017-12-041-1/+1
| | | | | | | | io-gif.c:509:44: runtime error: index -2 out of bounds for type 'guchar [280]' io-gif.c:510:44: runtime error: index -1 out of bounds for type 'guchar [280]' io-gif-animation.c:422:68: runtime error: left shift of 249 by 24 places cannot be represented in type 'int' https://bugzilla.gnome.org/show_bug.cgi?id=778584
* gif: Minimize memory usage for gif animationDenis Pauk2014-10-221-4/+49
| | | | | | | | | | | | | | Update the logic to create the next frame. When the new frame uses a buffer from the previous frame, in retain, revert or dispose mode, try to reuse the allocated buffer from the previous frame. This reduces allocated memory by an order of magnitude. For other cases when we can't use the old buffer, clean up the previous buffers after the new frame has been handled. https://bugzilla.gnome.org/show_bug.cgi?id=585425
* Updated FSF's addressDaniel Mustieles2014-01-311-3/+1
|
* Convert animation implementation to G_DEFINE_TYPEMatthias Clasen2011-12-161-104/+56
| | | | | | | | This has the nice side-effect of giving us thread-safe get_type functions, which might fix a few thumbnailing-related gnome-shell segfaults that have been accumulating in bugzilla. See e.g. https://bugzilla.redhat.com/show_bug.cgi?id=756343
* Make it compileMatthias Clasen2010-06-251-0/+1
|
* Do not use static GTypeInfo and GInterfaceInfoNicola Fontana2009-11-061-2/+2
| | | | | | | | | Either g_type_register_static_simple (used by G_DEFINE_TYPE_EXTENDED) and G_IMPLEMENT_INTERFACE use automatic variables for GTypeInfo and GInterfaceInfo structs, while tutorials and source code often use static variables. This commit consistently adopts the former method. https://bugzilla.gnome.org/show_bug.cgi?id=600158
* Include "config.h" instead of <config.h> Command used: find -nameJohan Dahlin2008-06-221-1/+1
| | | | | | | | | | | | 2008-06-21 Johan Dahlin <jdahlin@async.com.br> * *.[ch]: Include "config.h" instead of <config.h> Command used: find -name \*.[ch]|xargs perl -p -i -e 's/^#include <config.h>/#include "config.h"/g' Rubberstamped by Mitch and Tim svn path=/trunk/; revision=20669
* Intern type names before registering the type to avoid unnecessary copies.Matthias Clasen2005-08-311-2/+2
| | | | | | | | | | | | | | 2005-08-31 Matthias Clasen <mclasen@redhat.com> * io-ani-animation.c (gdk_pixbuf_ani_anim_iter_get_type) (gdk_pixbuf_ani_anim_get_type): * io-gif-animation.c (gdk_pixbuf_gif_anim_get_type) (gdk_pixbuf_gif_anim_iter_get_type): * gdk-pixbuf-loader.c (gdk_pixbuf_loader_get_type): * gdk-pixbuf.c (gdk_pixbuf_get_type): * gdk-pixbuf-animation.c (gdk_pixbuf_animation_get_type): Intern type names before registering the type to avoid unnecessary copies.
* Fix a C99ism. (#169741, Morten Welinder)Matthias Clasen2005-03-091-2/+3
| | | | | | | 2005-03-09 Matthias Clasen <mclasen@redhat.com> * io-gif-animation.c (gdk_pixbuf_gif_anim_frame_composite): Fix a C99ism. (#169741, Morten Welinder)
* Make the gif loader handle oom when loading animations. (#168857, TommiMatthias Clasen2005-03-031-7/+32
| | | | | | | | | | | | | 2005-03-03 Matthias Clasen <mclasen@redhat.com> Make the gif loader handle oom when loading animations. (#168857, Tommi Komulainen) * io-gif-animation.c (gdk_pixbuf_gif_anim_frame_composite): Handle oom by returning NULL. * io-gif.c (gif_get_lzw): Return an error if composite returns NULL.
* Make it compile with C89 compilers.Soeren Sandmann2003-06-271-2/+4
| | | | | | | | | | | | | Fri Jun 27 03:56:59 2003 Soeren Sandmann <sandmann@daimi.au.dk> * io-gif-animation.c (gdk_pixbuf_gif_anim_frame_composite): Make it compile with C89 compilers. Thu Jun 26 21:41:16 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_cell_set_cell_data): only set "is_expander" and "is_expanded" if the new value is different fromt he old one.
* Reset block_count to 0 for all application extensions, otherwise the dataMatthias Clasen2003-06-221-70/+71
| | | | | | | | | | | | | | | | | | | 2003-06-22 Matthias Clasen <matthias@localhost.localdomain> * io-gif.c (gif_get_extension): Reset block_count to 0 for all application extensions, otherwise the data blocks of unknown extensions are not propertly skipped. Second half of the fix for #106962, handle frames extending beyond the logical screen: * io-gif.c (clip_frame): New helper function to clip a rectangle to the logical screen size of the gif. (maybe_update): New helper function to call update_func only if the rectangle is not completely off-bounds. (gif_get_lzw): Read frames extending outside the logical screen size, but be careful clip to the logical screen size when operating on the composite pixbuf and when calling update_func. (gif_init): Set the animation size to the logical screen size. (gif_get_frame_info): Don't refuse to load images with frames extending beyond the logical screen size. * io-gif-animation.c (gdk_pixbuf_gif_anim_frame_composite): Be careful to clip all rectangles to the logical screen size, also handle the fact that frames may be completely off-bounds.
* Improve progressive loading from slow sources: (#107368)Matthias Clasen2003-05-191-4/+17
| | | | | | | | | | | | | | 2003-05-19 Matthias Clasen <maclas@gmx.de> Improve progressive loading from slow sources: (#107368) * io-gif-animation.c (gdk_pixbuf_gif_anim_get_iter): Initialize first_loop_slowness. (gdk_pixbuf_gif_anim_iter_advance): Don't wrap during loading if the datasource falls behind the speed of the display. * io-gif-animation.h: Add a loading flag to GdkPixbufGifAnim and first_loop_slowness to GdkPixbufGifAnimIter.
* Always clear the initial frame and "disposed" areas with transparentMatthias Clasen2003-02-191-4/+2
| | | | | | | | | 2003-02-20 Matthias Clasen <maclas@gmx.de> * io-gif-animation.c (gdk_pixbuf_gif_anim_frame_composite): Always clear the initial frame and "disposed" areas with transparent pixels, no matter whether the frame has transparency or not. (#55502)
* Support the Netscape application extension for gif animations (#95060):Matthias Clasen2002-10-201-3/+9
|
* Support for separately installed loaders. (#77486)Matthias Clasen2002-10-031-1/+0
| | | | | | | | | | | | | | | | | * Makefile.am gdk-pixbuf-animation.c gdk-pixbuf-data.c gdk-pixbuf-io.c gdk-pixbuf-io.h gdk-pixbuf-loader.c gdk-pixbuf-loader.h gdk-pixbuf-private.h gdk-pixbuf.h gdk-pixdata.c io-ani-animation.h io-ani.c io-bmp.c io-gif-animation.c io-gif-animation.h io-gif.c io-ico.c io-jpeg.c io-png.c io-pnm.c io-ras.c io-tga.c io-tiff.c io-wbmp.c io-xbm.c io-xpm.c pixbufloader_ani.def pixbufloader_bmp.def pixbufloader_gif.def pixbufloader_ico.def pixbufloader_jpeg.def pixbufloader_png.def pixbufloader_pnm.def pixbufloader_ras.def pixbufloader_tga.def pixbufloader_tiff.def pixbufloader_wbmp.def pixbufloader_xbm.def pixbufloader_xpm.def test-gdk-pixbuf.c gdk-pixbuf-animation.h queryloaders.c: Support for separately installed loaders. (#77486)
* Remove assorted G_OBJECT casts where unnecessary.Sebastian Wilhelmi2001-12-131-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2001-12-13 Sebastian Wilhelmi <wilhelmi@ira.uka.de> * gdk-pixbuf-animation.c, gdk-pixbuf-loader.c, gdk-pixpuf.c, io-gif-animation.c, io-gif.c, io-tiff.c, test-loaders.c: Remove assorted G_OBJECT casts where unnecessary. * gdk-pixbuf-loader.c: Call g_object_ref and g_object_unref instead of gdk_pixbuf_animation_ref and gdk_pixbuf_animation_unref resp. * gdk-pixbuf-csource.c, io-bmp.c, io-gif-animation.c, io-ico.c, io-jpeg.c, io-png.c, io-pnm.c, io-ras.c, io-tga.c, io-wbmp.c, io-xbm.c, io-xpm.c, test-gdk-pixbuf.c: Dito for gdk_pixbuf_ref and gdk_pixbuf_unref. * Makefile.am, pixops/Makefile.am: Compile everything with -DG_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED * gdk-pixdata.c: Use g_ascii_strup() instead of g_strup(). * io-xpm.c: Use g_ascii_strcasecmp() instead of g_strcasecmp(). * demos/testpixbuf-drawable.c, demos/testpixbuf-save.c, demos/testpixbuf-scale.c, demos/testpixbuf.c: Call g_object_ref and g_object_unref instead of gdk_pixbuf_ref and gdk_pixbuf_unref resp.
* remove bogus g_return_if_failHavoc Pennington2001-06-081-3/+3
| | | | | | | | | | | | 2001-06-08 Havoc Pennington <hp@redhat.com> * gdk-pixbuf-loader.c (gdk_pixbuf_loader_load_module): remove bogus g_return_if_fail * io-gif.c (gif_get_lzw): if delay time is 0 or smaller than likely timeout resolution, set it to an arbitrarily-chosen short delay. Fixes bug #55953 from warmenhoven@yahoo.com
* fix some shell typosHavoc Pennington2001-05-071-0/+557
2001-05-04 Havoc Pennington <hp@redhat.com> * configure.in: fix some shell typos * gtk/gtkcolorsel.c (gtk_color_selection_destroy): warning fix * gtk/gtkimage.c: handle animations * gtk/gtkcheckbutton.c (gtk_check_button_size_request): request border_width * 2, not just border_width * gtk/gtkscale.c: add "format_value" signal to allow people to override the way values are drawn. (gtk_scale_get_value_size): fix width/height mistake, and compute size from actual displayed text, not from made-up text. * gtk/gtktexttag.c (gtk_text_tag_class_init): fix return type in signal registration * tests/testtext.c: Add "Remove all tags" menu item for testing * gtk/gtktextbuffer.c (gtk_text_buffer_remove_all_tags): implement * demos/gtk-demo/main.c (main): add hack so we can find modules without installing gtk * demos/gtk-demo/textview.c (insert_text): demo font scaling * gtk/gtkcellrenderertext.c: Add "scale" property (font scaling factor) (gtk_cell_renderer_text_set_property): remove some bogus g_object_notify * gtk/gtktexttag.c: add "scale" property which is a font scaling factor * gtk/gtktextlayout.c (add_text_attrs): add font scale attribute to layout * gtk/gtktextiter.c (gtk_text_iter_is_start): rename from gtk_text_iter_is_first 2001-05-04 Havoc Pennington <hp@redhat.com> * pixops/pixops.c (pixops_process): merge fix from stable: Patch from hoshem@mel.comcen.com.au to fix nonzero X offsets. Fixes bug #50371. * gdk-pixbuf/pixops/pixops.c (pixops_composite_nearest): merge from stable: Patch from OKADA Mitsuru <m-okada@fjb.co.jp> to fix confusion of using "src" instead of "p". (pixops_composite_color_nearest): Use a more accurate (and correct, to begin with) compositing method. This cures checks showing through on images with no alpha. * gdk-pixbuf.c (gdk_pixbuf_fill): fix bug that left some trailing bytes unfilled. * gdk-pixbuf-io.h: fix UpdatedNotifyFunc to use signed ints * gdk-pixbuf-loader.h (struct _GdkPixbufLoaderClass): Change area_updated signal to use signed ints. Removed animation-related signals. * io-gif.c, io-gif-animation.h, io-gif-animation.c: Massive rewrite action * gdk-pixbuf-animation.c: Add GdkPixbufAnimationIter to abstract all the pesky details. Remove old frame-based API. Make GdkPixbufAnimation an abstract base class, derived by the loaders.