summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2017-02-28 18:38:04 +0100
committerCarlos Garnacho <carlosg@gnome.org>2017-02-28 19:32:50 +0100
commitd54665c64bfddcb9825721a7254cfcbfec0edcd2 (patch)
tree89162d9330767afa00f1bb02353a14ffe16468a4
parentc5e886ed6ec5513a27bec85fdf25deac850eef23 (diff)
downloadtracker-d54665c64bfddcb9825721a7254cfcbfec0edcd2.tar.gz
tracker-extract: Avoid allocating full image in memory at once
Just read it line by line reusing the same buffer, it will still let us to fetch metadata at the end of the file. https://bugzilla.gnome.org/show_bug.cgi?id=778090
-rw-r--r--src/tracker-extract/tracker-extract-png.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c
index fcfd5f40e..0e1976541 100644
--- a/src/tracker-extract/tracker-extract-png.c
+++ b/src/tracker-extract/tracker-extract-png.c
@@ -621,7 +621,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
png_structp png_ptr;
png_infop info_ptr;
png_infop end_ptr;
- png_bytepp row_pointers;
+ png_bytep row_data;
guint row;
png_uint_32 width, height;
gint bit_depth, color_type;
@@ -694,20 +694,10 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
/* Read the image. FIXME We should be able to skip this step and
* just get the info from the end. This causes some errors atm.
*/
- row_pointers = g_new0 (png_bytep, height);
-
- for (row = 0; row < height; row++) {
- row_pointers[row] = png_malloc (png_ptr,
- png_get_rowbytes (png_ptr,info_ptr));
- }
-
- png_read_image (png_ptr, row_pointers);
-
- for (row = 0; row < height; row++) {
- png_free (png_ptr, row_pointers[row]);
- }
-
- g_free (row_pointers);
+ row_data = png_malloc (png_ptr, png_get_rowbytes (png_ptr, info_ptr));
+ for (row = 0; row < height; row++)
+ png_read_row (png_ptr, row_data, NULL);
+ png_free (png_ptr, row_data);
png_read_end (png_ptr, end_ptr);