evas: now move eina_file also out of the frame_duration API.
authorCedric Bail <cedric.bail@samsung.com>
Thu, 2 May 2013 09:41:26 +0000 (18:41 +0900)
committerCedric Bail <cedric.bail@samsung.com>
Mon, 6 May 2013 10:02:05 +0000 (19:02 +0900)
src/lib/evas/common/evas_image_load.c
src/lib/evas/include/evas_private.h
src/modules/evas/loaders/gif/evas_image_load_gif.c

index 043525d..4ed3624 100644 (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;
 }
 
index cc14903..1adb15b 100644 (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;
 };
 
index fca13ef..5997aad 100644 (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;
 }