On Wed, Dec 28, 2011 at 5:10 PM, Enlightenment SVN
<no-re...@enlightenment.org> wrote:
> Log:
> ethumb: make plugin API fully assynchronous and use it in emotion backend.
>
>  NOTE: epdf isn't asynchronous at the moment, so no need to fix its ethumb 
> plugin.

you should use eyesight instead of epdf. You'll have all the document
formats supported by eyesight in ethumb

Vincent

>
>
> Author:       cedric
> Date:         2011-12-28 08:10:10 -0800 (Wed, 28 Dec 2011)
> New Revision: 66607
> Trac:         http://trac.enlightenment.org/e/changeset/66607
>
> Modified:
>  trunk/ethumb/src/lib/Ethumb_Plugin.h trunk/ethumb/src/lib/ethumb.c 
> trunk/ethumb/src/lib/ethumb_private.h 
> trunk/ethumb/src/plugins/emotion/emotion.c 
> trunk/ethumb/src/plugins/epdf/epdf.c
>
> Modified: trunk/ethumb/src/lib/Ethumb_Plugin.h
> ===================================================================
> --- trunk/ethumb/src/lib/Ethumb_Plugin.h        2011-12-28 16:08:38 UTC (rev 
> 66606)
> +++ trunk/ethumb/src/lib/Ethumb_Plugin.h        2011-12-28 16:10:10 UTC (rev 
> 66607)
> @@ -10,7 +10,8 @@
>  struct _Ethumb_Plugin
>  {
>    const char **extensions;
> -   void (*generate_thumb)(Ethumb *);
> +   void *(*thumb_generate)(Ethumb *);
> +   void (*thumb_cancel)(Ethumb *, void *);
>  };
>
>  EAPI void ethumb_calculate_aspect_from_ratio(Ethumb *e, float ia, int *w, 
> int *h);
>
> Modified: trunk/ethumb/src/lib/ethumb.c
> ===================================================================
> --- trunk/ethumb/src/lib/ethumb.c       2011-12-28 16:08:38 UTC (rev 66606)
> +++ trunk/ethumb/src/lib/ethumb.c       2011-12-28 16:10:10 UTC (rev 66607)
> @@ -1185,7 +1185,8 @@
>    else
>      evas_object_hide(e->img);
>
> -   plugin->generate_thumb(e);
> +   e->plugin = plugin;
> +   e->pdata = plugin->thumb_generate(e);
>
>    return EINA_TRUE;
>  }
> @@ -1519,6 +1520,8 @@
>    if (e->finished_idler)
>      ecore_idler_del(e->finished_idler);
>    e->finished_idler = ecore_idler_add(_ethumb_finished_idler_cb, e);
> +   e->plugin = NULL;
> +   e->pdata = NULL;
>  }
>
>  EAPI Eina_Bool
> @@ -1537,6 +1540,13 @@
>        ERR("thumbnail generation already in progress.");
>        return EINA_FALSE;
>      }
> +   if (e->pdata)
> +     {
> +        e->plugin->thumb_cancel(e, e->pdata);
> +        e->pdata = NULL;
> +        e->plugin = NULL;
> +     }
> +
>    e->finished_cb = finished_cb;
>    e->cb_data = (void *)data;
>    e->cb_data_free = free_data;
> @@ -1549,9 +1559,9 @@
>      }
>
>    r = _ethumb_plugin_generate(e);
> +   fprintf(stderr, "ethumb generate: %i: %p\n", r, e->pdata);
>    if (r)
>      {
> -        ethumb_finished_callback_call(e, r);
>         return EINA_TRUE;
>      }
>
> @@ -1688,6 +1698,8 @@
>    r->cb_data = NULL;
>    r->cb_data_free = NULL;
>    r->cb_result = 0;
> +   r->plugin = NULL;
> +   r->pdata = NULL;
>
>    return r;
>  }
>
> Modified: trunk/ethumb/src/lib/ethumb_private.h
> ===================================================================
> --- trunk/ethumb/src/lib/ethumb_private.h       2011-12-28 16:08:38 UTC (rev 
> 66606)
> +++ trunk/ethumb/src/lib/ethumb_private.h       2011-12-28 16:10:10 UTC (rev 
> 66607)
> @@ -2,6 +2,7 @@
>  #define __ETHUMB_PRIVATE_H__ 1
>
>  #include <Ethumb.h>
> +#include <Ethumb_Plugin.h>
>
>  typedef struct _Ethumb_Frame Ethumb_Frame;
>
> @@ -48,6 +49,9 @@
>    void *cb_data;
>    Eina_Free_Cb cb_data_free;
>    int cb_result;
> +
> +   void *pdata;
> +   Ethumb_Plugin *plugin;
>  };
>
>  #endif /* __ETHUMB_PRIVATE_H__ */
>
> Modified: trunk/ethumb/src/plugins/emotion/emotion.c
> ===================================================================
> --- trunk/ethumb/src/plugins/emotion/emotion.c  2011-12-28 16:08:38 UTC (rev 
> 66606)
> +++ trunk/ethumb/src/plugins/emotion/emotion.c  2011-12-28 16:10:10 UTC (rev 
> 66607)
> @@ -38,6 +38,9 @@
>    int w, h;
>  };
>
> +static Eina_Bool _frame_grab(void *data);
> +static Eina_Bool _frame_grab_single(void *data);
> +
>  static void
>  _resize_movie(struct _emotion_plugin *_plugin)
>  {
> @@ -62,6 +65,17 @@
>  }
>
>  static void
> +_frame_decode_cb(void *data, Evas_Object *o __UNUSED__, void *event_info 
> __UNUSED__)
> +{
> +   struct _emotion_plugin *_plugin = data;
> +
> +   if (_plugin->ef)
> +     _frame_grab(data);
> +   else
> +     _frame_grab_single(data);
> +}
> +
> +static void
>  _frame_resized_cb(void *data, Evas_Object *o __UNUSED__, void *event_info 
> __UNUSED__)
>  {
>    _resize_movie(data);
> @@ -168,6 +182,8 @@
>    int r = 0;
>    evas_object_smart_callback_del(_plugin->video, "frame_resize",
>                                  _frame_resized_cb);
> +   evas_object_smart_callback_del(_plugin->video, "frame_decode",
> +                                 _frame_decode_cb);
>    emotion_object_play_set(_plugin->video, 0);
>    evas_object_del(_plugin->video);
>    if (_plugin->ef)
> @@ -207,7 +223,7 @@
>    emotion_object_play_set(_plugin->video, 0);
>    evas_object_del(_plugin->video);
>    free(_plugin);
> -
> +
>    ethumb_finished_callback_call(e, 1);
>
>    return EINA_FALSE;
> @@ -294,12 +310,10 @@
>        fprintf(stderr, "ERROR: could not open '%s'\n", thumb_path);
>        _finish_thumb_generation(_plugin, 0);
>      }
> -
> -   ecore_timer_add(1.0 / ethumb_video_fps_get(e), _frame_grab, _plugin);
>  }
>
> -static void
> -_generate_thumb(Ethumb *e)
> +static void *
> +_thumb_generate(Ethumb *e)
>  {
>    Evas_Object *o;
>    int r;
> @@ -308,7 +322,7 @@
>    struct _emotion_plugin *_plugin = calloc(sizeof(struct _emotion_plugin), 
> 1);
>
>    o = emotion_object_add(ethumb_evas_get(e));
> -   r = emotion_object_init(o, "xine");
> +   r = emotion_object_init(o, NULL);
>    if (!r)
>      {
>        fprintf(stderr, "ERROR: could not start emotion using gstreamer"
> @@ -316,7 +330,7 @@
>        evas_object_del(o);
>        ethumb_finished_callback_call(e, 0);
>        free(_plugin);
> -       return;
> +       return NULL;
>      }
>
>    _plugin->video = o;
> @@ -334,6 +348,8 @@
>    _plugin->pcount = 1;
>
>    _resize_movie(_plugin);
> +   evas_object_smart_callback_add(o, "frame_decode",
> +                                 _frame_decode_cb, _plugin);
>    evas_object_smart_callback_add(o, "frame_resize",
>                                  _frame_resized_cb, _plugin);
>    evas_object_smart_callback_add(o, "decode_stop",
> @@ -343,16 +359,24 @@
>      {
>        _generate_animated_thumb(_plugin);
>      }
> -   else
> -     {
> -       ecore_timer_add(0.1, _frame_grab_single, _plugin);
> -     }
>
>    _video_pos_set(_plugin);
>    emotion_object_play_set(o, 1);
>    evas_object_show(o);
> +
> +   return _plugin;
>  }
>
> +static void
> +_thumb_cancel(Ethumb *e __UNUSED__, void *data)
> +{
> +   struct _emotion_plugin *_plugin = data;
> +
> +   if (_plugin->ef) eet_close(_plugin->ef);
> +   evas_object_del(_plugin->video);
> +   free(_plugin);
> +}
> +
>  EAPI Ethumb_Plugin *
>  ethumb_plugin_get(void)
>  {
> @@ -361,7 +385,8 @@
>    static Ethumb_Plugin plugin =
>      {
>        extensions,
> -       _generate_thumb,
> +       _thumb_generate,
> +       _thumb_cancel
>      };
>
>    _log_dom = eina_log_domain_register("ethumb_emotion", EINA_COLOR_GREEN);
>
> Modified: trunk/ethumb/src/plugins/epdf/epdf.c
> ===================================================================
> --- trunk/ethumb/src/plugins/epdf/epdf.c        2011-12-28 16:08:38 UTC (rev 
> 66606)
> +++ trunk/ethumb/src/plugins/epdf/epdf.c        2011-12-28 16:10:10 UTC (rev 
> 66607)
> @@ -76,6 +76,7 @@
>      {
>        extensions,
>        _generate_thumb,
> +       NULL /* This plugin is not assynchronous so not possible to cancel it 
> at all */
>      };
>
>    return &plugin;
>
>
> ------------------------------------------------------------------------------
> Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
> infrastructure or vast IT resources to deliver seamless, secure access to
> virtual desktops. With this all-in-one solution, easily deploy virtual
> desktops for less than the cost of PCs and save 60% on VDI infrastructure
> costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
> _______________________________________________
> enlightenment-svn mailing list
> enlightenment-...@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-svn

------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to