fix nsgifload metadata
various issues pointed out by @lovell
This commit is contained in:
parent
cb660b32fe
commit
89c12b0e62
@ -116,7 +116,8 @@ typedef struct _VipsForeignLoadNsgif {
|
|||||||
*/
|
*/
|
||||||
int frame_count_displayable;
|
int frame_count_displayable;
|
||||||
|
|
||||||
/* Delays between frames (in milliseconds). Array of length @n.
|
/* Delays between frames (in milliseconds). Array of length
|
||||||
|
* @frame_count_displayable.
|
||||||
*/
|
*/
|
||||||
int *delay;
|
int *delay;
|
||||||
|
|
||||||
@ -284,9 +285,35 @@ vips_foreign_load_nsgif_set_header( VipsForeignLoadNsgif *gif,
|
|||||||
VIPS_META_PAGE_HEIGHT, gif->anim->height );
|
VIPS_META_PAGE_HEIGHT, gif->anim->height );
|
||||||
vips_image_set_int( image, VIPS_META_N_PAGES,
|
vips_image_set_int( image, VIPS_META_N_PAGES,
|
||||||
gif->frame_count_displayable );
|
gif->frame_count_displayable );
|
||||||
vips_image_set_int( image, "gif-loop", gif->anim->loop_count );
|
vips_image_set_int( image, "loop", gif->anim->loop_count );
|
||||||
|
vips_image_set_array_int( image, "delay",
|
||||||
|
gif->delay, gif->frame_count_displayable );
|
||||||
|
|
||||||
vips_image_set_array_int( image, "delay", gif->delay, gif->n );
|
if( gif->anim->global_colours &&
|
||||||
|
gif->anim->global_colour_table &&
|
||||||
|
gif->anim->background_index >= 0 &&
|
||||||
|
gif->anim->background_index < gif->anim->colour_table_size ) {
|
||||||
|
int index = gif->anim->background_index;
|
||||||
|
unsigned char *entry = (unsigned char *)
|
||||||
|
&gif->anim->global_colour_table[index];
|
||||||
|
|
||||||
|
double array[3];
|
||||||
|
|
||||||
|
array[0] = entry[0];
|
||||||
|
array[1] = entry[1];
|
||||||
|
array[2] = entry[2];
|
||||||
|
|
||||||
|
vips_image_set_array_double( image, "background", array, 3 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DEPRECATED "gif-loop"
|
||||||
|
*
|
||||||
|
* Not the correct behavior as loop=1 became gif-loop=0
|
||||||
|
* but we want to keep the old behavior untouched!
|
||||||
|
*/
|
||||||
|
vips_image_set_int( image,
|
||||||
|
"gif-loop", gif->anim->loop_count == 0 ?
|
||||||
|
0 : gif->anim->loop_count - 1 );
|
||||||
|
|
||||||
/* The deprecated gif-delay field is in centiseconds.
|
/* The deprecated gif-delay field is in centiseconds.
|
||||||
*/
|
*/
|
||||||
@ -371,11 +398,11 @@ vips_foreign_load_nsgif_header( VipsForeignLoad *load )
|
|||||||
/* In ms, frame_delay in cs.
|
/* In ms, frame_delay in cs.
|
||||||
*/
|
*/
|
||||||
VIPS_FREE( gif->delay );
|
VIPS_FREE( gif->delay );
|
||||||
if( !(gif->delay = VIPS_ARRAY( NULL, gif->n, int )) )
|
if( !(gif->delay = VIPS_ARRAY( NULL,
|
||||||
|
gif->frame_count_displayable, int )) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
for( i = 0; i < gif->n; i++ )
|
for( i = 0; i < gif->frame_count_displayable; i++ )
|
||||||
gif->delay[i] =
|
gif->delay[i] = 10 * gif->anim->frames[i].frame_delay;
|
||||||
10 * gif->anim->frames[gif->page + i].frame_delay;
|
|
||||||
|
|
||||||
gif->gif_delay = gif->anim->frames[0].frame_delay;
|
gif->gif_delay = gif->anim->frames[0].frame_delay;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user