InterlacedJumps[] = { 8, 8, 4, 2 }; /* be read - offsets and jumps... */
+static i_mutex_t mutex;
+
+void
+i_init_gif(void) {
+ mutex = i_mutex_new();
+}
static
void
i_img **
i_readgif_multi_wiol(io_glue *ig, int *count) {
GifFileType *GifFile;
-
+ i_img **result;
+
+ i_mutex_lock(mutex);
+
i_clear_error();
if ((GifFile = DGifOpen((void *)ig, io_glue_read_cb )) == NULL) {
gif_push_error();
i_push_error(0, "Cannot create giflib callback object");
mm_log((1,"i_readgif_multi_wiol: Unable to open callback datasource.\n"));
+ i_mutex_unlock(mutex);
return NULL;
}
- return i_readgif_multi_low(GifFile, count, -1);
+ result = i_readgif_multi_low(GifFile, count, -1);
+
+ i_mutex_unlock(mutex);
+
+ return result;
}
static int
i_img *
i_readgif_wiol(io_glue *ig, int **color_table, int *colors) {
GifFileType *GifFile;
+ i_img *result;
+
+ i_mutex_lock(mutex);
i_clear_error();
gif_push_error();
i_push_error(0, "Cannot create giflib callback object");
mm_log((1,"i_readgif_wiol: Unable to open callback datasource.\n"));
+ i_mutex_unlock(mutex);
return NULL;
}
- return i_readgif_low(GifFile, color_table, colors);
+ result = i_readgif_low(GifFile, color_table, colors);
+
+ i_mutex_unlock(mutex);
+
+ return result;
}
/*
i_img *
i_readgif_single_wiol(io_glue *ig, int page) {
GifFileType *GifFile;
+ i_img *result;
i_clear_error();
if (page < 0) {
return NULL;
}
+ i_mutex_lock(mutex);
+
if ((GifFile = DGifOpen((void *)ig, io_glue_read_cb )) == NULL) {
gif_push_error();
i_push_error(0, "Cannot create giflib callback object");
mm_log((1,"i_readgif_wiol: Unable to open callback datasource.\n"));
+ i_mutex_unlock(mutex);
return NULL;
}
- return i_readgif_single_low(GifFile, page);
+ result = i_readgif_single_low(GifFile, page);
+
+ i_mutex_unlock(mutex);
+
+ return result;
}
/*
GifFileType *GifFile;
int result;
+ i_mutex_lock(mutex);
+
i_clear_error();
gif_set_version(quant, imgs, count);
gif_push_error();
i_push_error(0, "Cannot create giflib callback object");
mm_log((1,"i_writegif_wiol: Unable to open callback datasource.\n"));
+ i_mutex_unlock(mutex);
return 0;
}
result = i_writegif_low(quant, GifFile, imgs, count);
+ i_mutex_unlock(mutex);
+
if (i_io_close(ig))
return 0;
Arnar M. Hrafnkelsson, addi@umich.edu
+Tony Cook <tonyc@cpan.org>
+
=head1 SEE ALSO
perl(1), Imager(3)