evas: now move eina_file also out of the frame_duration API.

This commit is contained in:
Cedric Bail 2013-05-02 18:41:26 +09:00
parent 7d83e42046
commit 6929386895
3 changed files with 20 additions and 11 deletions

View File

@ -420,7 +420,19 @@ evas_common_load_rgba_image_frame_duration_from_file(Image_Entry *ie, const int
evas_image_load_func = ie->info.loader;
evas_module_use((Evas_Module*) ie->info.module);
if (evas_image_load_func->frame_duration)
return evas_image_load_func->frame_duration(ie, ie->file, start, frame_num);
{
Eina_File *f;
double r;
f = eina_file_open(ie->file, EINA_FALSE);
if (!f) return -1;
r = evas_image_load_func->frame_duration(f, &ie->animated, start, frame_num);
eina_file_close(f);
return r;
}
return -1;
}

View File

@ -914,7 +914,9 @@ struct _Evas_Image_Load_Func
Evas_Image_Animated *animated,
void *pixels,
int *error);
double (*frame_duration) (Image_Entry *ie, const char *file, const int start, const int frame_num);
double (*frame_duration) (Eina_File *f,
Evas_Image_Animated *animated,
int start, int frame_num);
Eina_Bool do_region;
};

View File

@ -43,7 +43,6 @@ struct _Gif_Frame
int bg_val;
};
static double evas_image_load_frame_duration_gif(Image_Entry *ie, const char *file, int start_frame, int frame_num) ;
static Eina_Bool evas_image_load_specific_frame(Eina_File *f, const Evas_Image_Load_Opts *opts, Evas_Image_Property *prop, Evas_Image_Animated *animated, int frame_index, int *error);
#define byte2_to_int(a,b) (((b)<<8)|(a))
@ -969,10 +968,10 @@ evas_image_load_file_data_gif(Eina_File *f, const char *key EINA_UNUSED,
}
static double
evas_image_load_frame_duration_gif(Image_Entry *ie, const char *file, const int start_frame, const int frame_num)
evas_image_load_frame_duration_gif(Eina_File *f, Evas_Image_Animated *animated,
int start_frame, int frame_num)
{
Evas_GIF_Info egi;
Eina_File *f;
GifFileType *gif = NULL;
GifRecordType rec;
int current_frame = 1;
@ -980,15 +979,12 @@ evas_image_load_frame_duration_gif(Image_Entry *ie, const char *file, const int
double duration = -1;
int frame_count = 0;
frame_count = ie->animated.frame_count;
frame_count = animated->frame_count;
if (!ie->animated.animated) return -1;
if (!animated->animated) return -1;
if ((start_frame + frame_num) > frame_count) return -1;
if (frame_num < 0) return -1;
f = eina_file_open(file, EINA_FALSE);
if (!f) return -1;
egi.map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL);
if (!egi.map) goto on_error;
egi.length = eina_file_size_get(f);
@ -1058,7 +1054,6 @@ evas_image_load_frame_duration_gif(Image_Entry *ie, const char *file, const int
on_error:
if (gif) DGifCloseFile(gif);
if (egi.map) eina_file_map_free(f, egi.map);
eina_file_close(f);
return duration;
}