diff --git a/legacy/emotion/ChangeLog b/legacy/emotion/ChangeLog index ca8f7aff55..beb9c64034 100644 --- a/legacy/emotion/ChangeLog +++ b/legacy/emotion/ChangeLog @@ -21,3 +21,7 @@ 2012-06-08 Hugo Camboulive * Implement SPU switch for generic/vlc. + +2012-06-19 Cedric Bail + + * Sync rendering with Ecore_Animator. diff --git a/legacy/emotion/NEWS b/legacy/emotion/NEWS index 9f7f54ab73..cb4d5af68f 100644 --- a/legacy/emotion/NEWS +++ b/legacy/emotion/NEWS @@ -6,6 +6,7 @@ Changes since Emotion 1.0.0: Additions: - Add support for "playback_started" callback to generic player. - Implement SPU switch for generic/vlc. + - Sync rendering with Ecore_Animator. Fixes: - build out of tree. diff --git a/legacy/emotion/src/lib/emotion_smart.c b/legacy/emotion/src/lib/emotion_smart.c index 141137442f..8421f6f581 100644 --- a/legacy/emotion/src/lib/emotion_smart.c +++ b/legacy/emotion/src/lib/emotion_smart.c @@ -111,6 +111,8 @@ struct _Smart_Data Emotion_Suspend state; Emotion_Aspect aspect; + Ecore_Animator *anim; + Eina_Bool open : 1; Eina_Bool play : 1; Eina_Bool remember_play : 1; @@ -234,6 +236,7 @@ _smart_data_free(Smart_Data *sd) eina_stringshare_del(sd->file); free(sd->module_name); if (sd->job) ecore_job_del(sd->job); + if (sd->anim) ecore_animator_del(sd->anim); free(sd->progress.info); free(sd->ref.file); free(sd); @@ -410,6 +413,9 @@ emotion_object_init(Evas_Object *obj, const char *module_filename) sd->len = 0; sd->remember_play = 0; + if (sd->anim) ecore_animator_del(sd->anim); + sd->anim = NULL; + _emotion_module_close(sd->module, sd->video_data); sd->module = NULL; sd->video_data = NULL; @@ -468,6 +474,9 @@ emotion_object_file_set(Evas_Object *obj, const char *file) eina_stringshare_replace(&sd->file, NULL); } + if (sd->anim) ecore_animator_del(sd->anim); + sd->anim = NULL; + #ifdef HAVE_EIO /* Only cancel the load_xattr or we will loose ref to time_seek stringshare */ if (sd->load_xattr) eio_file_cancel(sd->load_xattr); @@ -1349,7 +1358,7 @@ _eio_load_xattr_done(void *data, Eio_File *handler, double xattr_double) Smart_Data *sd = data; emotion_object_position_set(evas_object_smart_parent_get(sd->obj), xattr_double); - evas_object_smart_callback_call(sd->obj, SIG_POSITION_LOAD_SUCCEED, NULL); + evas_object_smart_callback_call(evas_object_smart_parent_get(sd->obj), SIG_POSITION_LOAD_SUCCEED, NULL); _eio_load_xattr_cleanup(sd, handler); } @@ -1495,6 +1504,21 @@ _emotion_video_get(const Evas_Object *obj) return sd->video_data; } +static Eina_Bool +_emotion_frame_anim(void *data) +{ + Evas_Object *obj = data; + Smart_Data *sd; + + E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, EINA_FALSE); + + evas_object_image_pixels_dirty_set(sd->obj, 1); + evas_object_smart_callback_call(obj, SIG_FRAME_DECODE, NULL); + sd->anim = NULL; + + return EINA_FALSE; +} + EAPI void _emotion_frame_new(Evas_Object *obj) { @@ -1502,9 +1526,7 @@ _emotion_frame_new(Evas_Object *obj) E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); -// printf("pix get set 1 %p\n", sd->obj); - evas_object_image_pixels_dirty_set(sd->obj, 1); - evas_object_smart_callback_call(obj, SIG_FRAME_DECODE, NULL); + if (!sd->anim) sd->anim = ecore_animator_add(_emotion_frame_anim, obj); } EAPI void