From: Enlightenment S. <no-...@en...> - 2010-08-30 13:25:42
|
Log: * emotion: emotion_object_init will choose the best available backend if NULL is passed. Author: cedric Date: 2010-08-30 06:25:35 -0700 (Mon, 30 Aug 2010) New Revision: 51747 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2010-08-30 11:27:39 UTC (rev 51746) +++ trunk/emotion/src/lib/emotion_smart.c 2010-08-30 13:25:35 UTC (rev 51747) @@ -145,7 +145,7 @@ return eina_hash_del(_backends, name, NULL); } -static Eina_Bool +static const char * _emotion_module_open(const char *name, Evas_Object *obj, Emotion_Video_Module **mod, void **video) { Eina_Emotion_Plugins *plugin; @@ -156,7 +156,7 @@ if (!_backends) { fprintf(stderr, "No backend loaded\n"); - return EINA_FALSE; + return NULL; } /* FIXME: Always look for a working backend. */ @@ -179,7 +179,7 @@ if (*mod) { (*mod)->plugin = plugin; - return EINA_TRUE; + return name; } } @@ -188,7 +188,7 @@ fprintf (stderr, "Unable to load module %s\n", name); - return EINA_FALSE; + return NULL; } static void @@ -240,14 +240,12 @@ Smart_Data *sd; char *file; - if (!module_filename) return EINA_FALSE; - E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0); - if ((sd->module_name) && (!strcmp(sd->module_name, module_filename))) + if ((sd->module_name) && module_filename && (!strcmp(sd->module_name, module_filename))) return EINA_TRUE; free(sd->module_name); - sd->module_name = strdup(module_filename); + sd->module_name = NULL; file = sd->file; sd->file = NULL; @@ -272,9 +270,13 @@ _emotion_module_close(sd->module, sd->video); sd->module = NULL; sd->video = NULL; - if (!_emotion_module_open(module_filename, obj, &sd->module, &sd->video)) + + module_filename = _emotion_module_open(module_filename, obj, &sd->module, &sd->video); + if (!module_filename) return EINA_FALSE; + sd->module_name = strdup(module_filename); + if (file) { emotion_object_file_set(obj, file); |
From: Enlightenment S. <no-...@en...> - 2010-08-30 16:18:21
|
Log: * emotion: fix build of static module. Author: cedric Date: 2010-08-30 09:18:11 -0700 (Mon, 30 Aug 2010) New Revision: 51759 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2010-08-30 16:17:05 UTC (rev 51758) +++ trunk/emotion/src/lib/emotion_smart.c 2010-08-30 16:18:11 UTC (rev 51759) @@ -1263,13 +1263,13 @@ /*******************************************/ /* Internal smart object required routines */ /*******************************************/ -#ifdef EINA_STATIC_BUILD_XINE +#ifdef EMOTION_STATIC_BUILD_XINE Eina_Bool xine_module_init(void); #endif -#ifdef EINA_STATIC_BUILD_VLC +#ifdef EMOTION_STATIC_BUILD_VLC Eina_Bool vlc_module_init(void); #endif -#ifdef EINA_STATIC_BUILD_GSTREAMER +#ifdef EMOTION_STATIC_BUILD_GSTREAMER Eina_Bool gstreamer_module_init(void); #endif |
From: Enlightenment S. <no-...@en...> - 2011-02-25 11:33:26
|
Log: emotion: override engine by setting EMOTION_ENGINE environ. Author: cedric Date: 2011-02-25 03:33:19 -0800 (Fri, 25 Feb 2011) New Revision: 57320 Trac: http://trac.enlightenment.org/e/changeset/57320 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-02-25 11:32:09 UTC (rev 57319) +++ trunk/emotion/src/lib/emotion_smart.c 2011-02-25 11:33:19 UTC (rev 57320) @@ -187,6 +187,9 @@ return NULL; } + if (!name && getenv("EMOTION_ENGINE")) + name = getenv("EMOTION_ENGINE"); + /* FIXME: Always look for a working backend. */ retry: if (!name || index > 0) |
From: Enlightenment S. <no-...@en...> - 2011-06-29 13:58:49
|
Log: emotion: use stringshare for file. Author: cedric Date: 2011-06-29 06:58:42 -0700 (Wed, 29 Jun 2011) New Revision: 60818 Trac: http://trac.enlightenment.org/e/changeset/60818 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-06-29 13:25:58 UTC (rev 60817) +++ trunk/emotion/src/lib/emotion_smart.c 2011-06-29 13:58:42 UTC (rev 60818) @@ -1,6 +1,14 @@ #include "emotion_private.h" #include "Emotion.h" +#ifdef HAVE_EIO +# include <Eio.h> +#else +# ifdef HAVE_XATTR +# include <sys/xattr.h> +# endif +#endif + #define E_SMART_OBJ_GET(smart, o, type) \ { \ char *_e_smart_str; \ @@ -42,7 +50,7 @@ char *module_name; - char *file; + const char *file; Evas_Object *obj; double ratio; double pos; @@ -69,6 +77,11 @@ int button; } spu; +#ifdef HAVE_EIO + Eio_File *load_xattr; + Eio_File *save_xattr; +#endif + Emotion_Module_Options module_options; }; @@ -275,7 +288,7 @@ emotion_object_init(Evas_Object *obj, const char *module_filename) { Smart_Data *sd; - char *file; + const char *file; E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0); @@ -317,7 +330,7 @@ if (file) { emotion_object_file_set(obj, file); - free(file); + eina_stringshare_del(file); } return EINA_TRUE; @@ -333,13 +346,12 @@ DBG("file=%s", file); if (!sd->module) return EINA_FALSE; - if ((file) && (sd->file) && (!strcmp(file, sd->file))) return EINA_FALSE; + if ((file) && (sd->file) && (file == sd->file || !strcmp(file, sd->file))) return EINA_FALSE; if ((file) && (file[0] != 0)) { int w, h; - free(sd->file); - sd->file = strdup(file); + eina_stringshare_replace(&sd->file, file); sd->module->file_close(sd->video); evas_object_image_data_set(sd->obj, NULL); evas_object_image_size_set(sd->obj, 1, 1); @@ -361,8 +373,7 @@ evas_object_image_size_set(sd->obj, 1, 1); _emotion_image_data_zero(sd->obj); } - free(sd->file); - sd->file = NULL; + eina_stringshare_replace(&sd->file, NULL); } return EINA_TRUE; @@ -1597,7 +1608,7 @@ if (sd->video) sd->module->file_close(sd->video); _emotion_module_close(sd->module, sd->video); evas_object_del(sd->obj); - free(sd->file); + eina_stringshare_del(sd->file); free(sd->module_name); if (sd->job) ecore_job_del(sd->job); free(sd->progress.info); |
From: Enlightenment S. <no-...@en...> - 2011-06-30 09:49:30
|
Log: emotion: cleanup emotion async loader on file set. Author: cedric Date: 2011-06-30 02:49:24 -0700 (Thu, 30 Jun 2011) New Revision: 60869 Trac: http://trac.enlightenment.org/e/changeset/60869 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-06-30 08:18:26 UTC (rev 60868) +++ trunk/emotion/src/lib/emotion_smart.c 2011-06-30 09:49:24 UTC (rev 60869) @@ -395,6 +395,12 @@ eina_stringshare_replace(&sd->file, 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); + sd->load_xattr = NULL; +#endif + return EINA_TRUE; } @@ -1023,16 +1029,16 @@ #ifdef HAVE_EIO static void -_eio_load_xattr_cleanup(Smart_Data *sd) +_eio_load_xattr_cleanup(Smart_Data *sd, Eio_File *handler) { - sd->load_xattr = NULL; + if (handler == sd->load_xattr) sd->load_xattr = NULL; EINA_REFCOUNT_UNREF(sd) _smart_data_free(sd); } static void -_eio_load_xattr_done(void *data, Eio_File *handler __UNUSED__, const char *xattr_data, unsigned int xattr_size) +_eio_load_xattr_done(void *data, Eio_File *handler, const char *xattr_data, unsigned int xattr_size) { Smart_Data *sd = data; @@ -1045,15 +1051,15 @@ emotion_object_position_set(evas_object_smart_parent_get(sd->obj), ldexp((double)m, e)); } - _eio_load_xattr_cleanup(sd); + _eio_load_xattr_cleanup(sd, handler); } static void -_eio_load_xattr_error(void *data, Eio_File *handler __UNUSED__, int err __UNUSED__) +_eio_load_xattr_error(void *data, Eio_File *handler, int err __UNUSED__) { Smart_Data *sd = data; - _eio_load_xattr_cleanup(sd); + _eio_load_xattr_cleanup(sd, handler); } #endif |
From: Enlightenment S. <no-...@en...> - 2011-07-01 08:58:00
|
Log: emotion: add empty infrastructure for suspending the pipeline. Author: cedric Date: 2011-07-01 01:57:54 -0700 (Fri, 01 Jul 2011) New Revision: 60909 Trac: http://trac.enlightenment.org/e/changeset/60909 Modified: trunk/emotion/src/lib/Emotion.h trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/Emotion.h =================================================================== --- trunk/emotion/src/lib/Emotion.h 2011-07-01 07:41:48 UTC (rev 60908) +++ trunk/emotion/src/lib/Emotion.h 2011-07-01 08:57:54 UTC (rev 60909) @@ -109,6 +109,14 @@ EMOTION_VIS_LAST /* sentinel */ }; +typedef enum +{ + EMOTION_WAKEUP, + EMOTION_SLEEP, + EMOTION_DEEP_SLEEP, + EMOTION_HIBERNATE +} Emotion_Suspend; + typedef enum _Emotion_Module Emotion_Module; typedef enum _Emotion_Event Emotion_Event; typedef enum _Emotion_Meta_Info Emotion_Meta_Info; @@ -120,7 +128,7 @@ #ifdef __cplusplus extern "C" { #endif - + /* api calls available */ /** @@ -501,6 +509,9 @@ EAPI void emotion_object_last_position_load (Evas_Object *obj); EAPI void emotion_object_last_position_save (Evas_Object *obj); +EAPI void emotion_object_suspend_set (Evas_Object *obj, Emotion_Suspend state); +EAPI Emotion_Suspend emotion_object_suspend_get (Evas_Object *obj); + EAPI Eina_Bool emotion_object_extension_can_play_get(const Evas_Object *obj, const char *file); EAPI Eina_Bool emotion_object_extension_can_play_fast_get(const Evas_Object *obj, const char *file); Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-07-01 07:41:48 UTC (rev 60908) +++ trunk/emotion/src/lib/emotion_smart.c 2011-07-01 08:57:54 UTC (rev 60909) @@ -55,18 +55,18 @@ const char *file; Evas_Object *obj; - double ratio; - double pos; - double seek_pos; - double len; Ecore_Job *job; - unsigned char play : 1; - unsigned char seek : 1; - unsigned char seeking : 1; + char *title; - char *title; +#ifdef HAVE_EIO + Eio_File *load_xattr; + Eio_File *save_xattr; + + const char *time_seek; +#endif + struct { char *info; double stat; @@ -80,14 +80,18 @@ int button; } spu; -#ifdef HAVE_EIO - Eio_File *load_xattr; - Eio_File *save_xattr; + double ratio; + double pos; + double seek_pos; + double len; - const char *time_seek; -#endif + Emotion_Module_Options module_options; - Emotion_Module_Options module_options; + Emotion_Suspend state; + + Eina_Bool play : 1; + Eina_Bool seek : 1; + Eina_Bool seeking : 1; }; static void _mouse_move(void *data, Evas *ev, Evas_Object *obj, void *event_info); @@ -424,6 +428,7 @@ if (!sd->module) return; if (!sd->video) return; sd->play = play; + if (sd->state != EMOTION_WAKEUP) emotion_object_suspend_set(obj, EMOTION_WAKEUP); if (sd->play) sd->module->play(sd->video, sd->pos); else sd->module->stop(sd->video); } @@ -1214,6 +1219,38 @@ return result; } +EAPI void +emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend state) +{ + Smart_Data *sd; + + E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); + switch (state) + { + case EMOTION_WAKEUP: + /* Restore the rendering pipeline, offset and everything back to play again (this will be called automatically by play_set) */ + case EMOTION_SLEEP: + /* This destroy some part of the rendering pipeline */ + case EMOTION_DEEP_SLEEP: + /* This destroy all the rendering pipeline and just keep the last rendered image (fullscreen) */ + case EMOTION_HIBERNATE: + /* This destroy all the rendering pipeline and keep 1/4 of the last rendered image */ + default: + break; + } + + sd->state = state; +} + +EAPI Emotion_Suspend +motion_object_suspend_get(Evas_Object *obj) +{ + Smart_Data *sd; + + E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, EMOTION_WAKEUP); + return sd->state; +} + /*****************************/ /* Utility calls for modules */ /*****************************/ @@ -1748,6 +1785,7 @@ sd = calloc(1, sizeof(Smart_Data)); if (!sd) return; EINA_REFCOUNT_INIT(sd); + sd->state = EMOTION_WAKEUP; sd->obj = evas_object_image_add(evas_object_evas_get(obj)); evas_object_event_callback_add(sd->obj, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move, sd); evas_object_event_callback_add(sd->obj, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, sd); |
From: Enlightenment S. <no-...@en...> - 2011-07-05 11:02:34
|
Log: emotion: fix off by one. Author: cedric Date: 2011-07-05 04:02:28 -0700 (Tue, 05 Jul 2011) New Revision: 61039 Trac: http://trac.enlightenment.org/e/changeset/61039 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-07-05 10:56:56 UTC (rev 61038) +++ trunk/emotion/src/lib/emotion_smart.c 2011-07-05 11:02:28 UTC (rev 61039) @@ -1030,7 +1030,7 @@ { Smart_Data *sd = data; - if (xattr_size < 128 && xattr_data[xattr_size] == '\0') + if (xattr_size < 128 && xattr_data[xattr_size - 1] == '\0') { long long int m = 0; long int e = 0; |
From: Enlightenment S. <no-...@en...> - 2011-07-13 14:14:42
|
Log: emotion: raise gstreamer backend as it is more stable than the other. Author: cedric Date: 2011-07-13 07:14:32 -0700 (Wed, 13 Jul 2011) New Revision: 61340 Trac: http://trac.enlightenment.org/e/changeset/61340 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-07-13 14:07:31 UTC (rev 61339) +++ trunk/emotion/src/lib/emotion_smart.c 2011-07-13 14:14:32 UTC (rev 61340) @@ -119,8 +119,8 @@ static int _log_domain = -1; static const char *_backend_priority[] = { + "gstreamer", "xine", - "gstreamer", "vlc" }; |
From: Enlightenment S. <no-...@en...> - 2011-07-17 21:39:33
|
Log: emotion: remove useless code. Author: cedric Date: 2011-07-17 14:39:26 -0700 (Sun, 17 Jul 2011) New Revision: 61453 Trac: http://trac.enlightenment.org/e/changeset/61453 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-07-17 21:38:54 UTC (rev 61452) +++ trunk/emotion/src/lib/emotion_smart.c 2011-07-17 21:39:26 UTC (rev 61453) @@ -299,14 +299,6 @@ E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); if ((!opt) || (!val)) return; - if (!strcmp(opt, "video")) - { - if (!strcmp(val, "off")) sd->module_options.no_video = EINA_TRUE; - } - else if (!strcmp(opt, "audio")) - { - if (!strcmp(val, "off")) sd->module_options.no_audio = EINA_TRUE; - } } EAPI Eina_Bool |
From: Enlightenment S. <no-...@en...> - 2011-07-17 21:58:46
|
Log: emotion: always forgot that damn svn add ! Author: cedric Date: 2011-07-17 14:58:40 -0700 (Sun, 17 Jul 2011) New Revision: 61454 Trac: http://trac.enlightenment.org/e/changeset/61454 Added: trunk/emotion/src/lib/emotion_main.c |
From: Enlightenment S. <no-...@en...> - 2011-07-19 22:35:03
|
Log: emotion: add v4l2:// uri scheme for webcam. Author: cedric Date: 2011-07-19 15:34:54 -0700 (Tue, 19 Jul 2011) New Revision: 61512 Trac: http://trac.enlightenment.org/e/changeset/61512 Modified: trunk/emotion/src/lib/emotion_main.c Modified: trunk/emotion/src/lib/emotion_main.c =================================================================== --- trunk/emotion/src/lib/emotion_main.c 2011-07-19 22:34:17 UTC (rev 61511) +++ trunk/emotion/src/lib/emotion_main.c 2011-07-19 22:34:54 UTC (rev 61512) @@ -184,14 +184,21 @@ _emotion_webcam_new(const char *syspath) { Emotion_Webcam *test; + const char *device; + char *local; test = malloc(sizeof (Emotion_Webcam)); if (!test) return NULL; test->syspath = eina_stringshare_ref(syspath); - test->device = eeze_udev_syspath_get_property(syspath, "DEVNAME"); test->name = eeze_udev_syspath_get_sysattr(syspath, "name"); + device = eeze_udev_syspath_get_property(syspath, "DEVNAME"); + local = alloca(eina_stringshare_strlen(device) + 8); + snprintf(local, eina_stringshare_strlen(device) + 8, "v4l2://%s", device); + test->device = eina_stringshare_add(local); + eina_stringshare_del(device); + return test; } |
From: Enlightenment S. <no-...@en...> - 2011-08-03 14:23:58
|
Log: emotion: fix webcam detection. Author: cedric Date: 2011-08-03 07:23:51 -0700 (Wed, 03 Aug 2011) New Revision: 62054 Trac: http://trac.enlightenment.org/e/changeset/62054 Modified: trunk/emotion/src/lib/Emotion.h trunk/emotion/src/lib/emotion_main.c Modified: trunk/emotion/src/lib/Emotion.h =================================================================== --- trunk/emotion/src/lib/Emotion.h 2011-08-03 12:27:57 UTC (rev 62053) +++ trunk/emotion/src/lib/Emotion.h 2011-08-03 14:23:51 UTC (rev 62054) @@ -843,9 +843,11 @@ typedef struct _Emotion_Webcam Emotion_Webcam; +extern int EMOTION_WEBCAM_UPDATE; + EAPI const Eina_List *emotion_webcams_get(void); -EAPI const char *emotion_webcam_name_get(Emotion_Webcam *ew); -EAPI const char *emotion_webcam_device_get(Emotion_Webcam *ew); +EAPI const char *emotion_webcam_name_get(const Emotion_Webcam *ew); +EAPI const char *emotion_webcam_device_get(const Emotion_Webcam *ew); /** * @} Modified: trunk/emotion/src/lib/emotion_main.c =================================================================== --- trunk/emotion/src/lib/emotion_main.c 2011-08-03 12:27:57 UTC (rev 62053) +++ trunk/emotion/src/lib/emotion_main.c 2011-08-03 14:23:51 UTC (rev 62054) @@ -124,6 +124,8 @@ const char *syspath; const char *device; const char *name; + + const char *filename; }; static int _emotion_webcams_count = 0; @@ -150,8 +152,8 @@ if (!ew) return ; if (!ew->device) goto on_error; - fd = open(ew->device, O_RDONLY); - if (!fd) goto on_error; + fd = open(ew->filename, O_RDONLY); + if (fd < 0) goto on_error; if (ioctl(fd, VIDIOC_QUERYCAP, &caps) == -1) goto on_error; @@ -173,7 +175,7 @@ return ; on_error: - fprintf(stderr, "'%s' is not a webcam\n", ew->name); + fprintf(stderr, "'%s' is not a webcam ['%s']\n", ew->name, strerror(errno)); eina_stringshare_del(ew->syspath); eina_stringshare_del(ew->device); eina_stringshare_del(ew->name); @@ -198,6 +200,7 @@ snprintf(local, eina_stringshare_strlen(device) + 8, "v4l2://%s", device); test->device = eina_stringshare_add(local); eina_stringshare_del(device); + test->filename = test->device + 7; return test; } @@ -303,7 +306,7 @@ } EAPI const char * -emotion_webcam_name_get(Emotion_Webcam *ew) +emotion_webcam_name_get(const Emotion_Webcam *ew) { if (!ew) return NULL; @@ -315,7 +318,7 @@ } EAPI const char * -emotion_webcam_device_get(Emotion_Webcam *ew) +emotion_webcam_device_get(const Emotion_Webcam *ew) { if (!ew) return NULL; |
From: Enlightenment S. <no-...@en...> - 2011-09-02 08:52:02
|
Log: emotion: remove useless code. Author: cedric Date: 2011-09-02 01:51:56 -0700 (Fri, 02 Sep 2011) New Revision: 63087 Trac: http://trac.enlightenment.org/e/changeset/63087 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-09-02 07:51:46 UTC (rev 63086) +++ trunk/emotion/src/lib/emotion_smart.c 2011-09-02 08:51:56 UTC (rev 63087) @@ -62,9 +62,6 @@ #ifdef HAVE_EIO Eio_File *load_xattr; - Eio_File *save_xattr; - - const char *time_seek; #endif struct { @@ -1122,31 +1119,14 @@ #ifdef HAVE_EIO static void -_eio_save_xattr_cleanup(Smart_Data *sd) +_eio_save_xattr_done(void *data __UNUSED__, Eio_File *handler __UNUSED__) { - sd->save_xattr = NULL; - eina_stringshare_del(sd->time_seek); - sd->time_seek = NULL; - - EINA_REFCOUNT_UNREF(sd) - _smart_data_free(sd); } static void -_eio_save_xattr_done(void *data, Eio_File *handler __UNUSED__) +_eio_save_xattr_error(void *data __UNUSED__, Eio_File *handler __UNUSED__, int err __UNUSED__) { - Smart_Data *sd = data; - - _eio_save_xattr_cleanup(sd); } - -static void -_eio_save_xattr_error(void *data, Eio_File *handler __UNUSED__, int err __UNUSED__) -{ - Smart_Data *sd = data; - - _eio_save_xattr_cleanup(sd); -} #endif EAPI void @@ -1169,14 +1149,9 @@ eina_convert_dtoa(emotion_object_position_get(obj), double_to_string); #ifdef HAVE_EIO - if (sd->save_xattr) return ; - - EINA_REFCOUNT_REF(sd); - - sd->time_seek = eina_stringshare_add(double_to_string); - sd->save_xattr = eio_file_xattr_set(tmp, "user.e.time_seek", - sd->time_seek, eina_stringshare_strlen(sd->time_seek) + 1, 0, - _eio_save_xattr_done, _eio_save_xattr_error, sd); + eio_file_xattr_set(tmp, "user.e.time_seek", + double_to_string, strlen(double_to_string) + 1, 0, + _eio_save_xattr_done, _eio_save_xattr_error, sd); #else # ifdef HAVE_XATTR setxattr(tmp, "user.e.time_seek", double_to_string, strlen(double_to_string), 0); |
From: Enlightenment S. <no-...@en...> - 2011-09-20 10:55:00
|
Log: emotion: correctly update position of sub-object. Author: cedric Date: 2011-09-20 03:54:53 -0700 (Tue, 20 Sep 2011) New Revision: 63496 Trac: http://trac.enlightenment.org/e/changeset/63496 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-09-20 09:40:55 UTC (rev 63495) +++ trunk/emotion/src/lib/emotion_smart.c 2011-09-20 10:54:53 UTC (rev 63496) @@ -285,23 +285,32 @@ } static void -_clipper_position_size_update(Evas_Object *obj, int w, int h, int vid_w, int vid_h) +_clipper_position_size_update(Evas_Object *obj, int x, int y, int w, int h, int vid_w, int vid_h) { Smart_Data *sd; double scale_w, scale_h; - int x, y; E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); - evas_object_geometry_get(obj, &x, &y, NULL, NULL); - evas_object_move(sd->crop.clipper, x, y); - scale_w = (double)w / (double)(vid_w - sd->crop.l - sd->crop.r); - scale_h = (double)h / (double)(vid_h - sd->crop.t - sd->crop.b); + if (vid_w == 0 || vid_h == 0) + { + evas_object_image_fill_set(sd->obj, 0, 0, 0, 0); + evas_object_move(sd->obj, x, y); + evas_object_resize(sd->obj, 0, 0); + evas_object_move(sd->crop.clipper, x, y); + evas_object_resize(sd->crop.clipper, 0, 0); + } + else + { + evas_object_move(sd->crop.clipper, x, y); + scale_w = (double)w / (double)(vid_w - sd->crop.l - sd->crop.r); + scale_h = (double)h / (double)(vid_h - sd->crop.t - sd->crop.b); - evas_object_image_fill_set(sd->obj, 0, 0, vid_w * scale_w, vid_h * scale_h); - evas_object_resize(sd->obj, vid_w * scale_w, vid_h * scale_h); - evas_object_move(sd->obj, x - sd->crop.l * scale_w, y - sd->crop.t * scale_h); - evas_object_resize(sd->crop.clipper, w, h); + evas_object_image_fill_set(sd->obj, 0, 0, vid_w * scale_w, vid_h * scale_h); + evas_object_resize(sd->obj, vid_w * scale_w, vid_h * scale_h); + evas_object_move(sd->obj, x - sd->crop.l * scale_w, y - sd->crop.t * scale_h); + evas_object_resize(sd->crop.clipper, w, h); + } } /*******************************/ @@ -448,6 +457,10 @@ static void _emotion_aspect_borders_apply(Evas_Object *obj, Smart_Data *sd, int w, int h, int iw, int ih) { + int x, y; + + evas_object_geometry_get(obj, &x, &y, NULL, NULL); + /* applying calculated borders */ if (sd->crop.l == 0 && sd->crop.r == 0 && sd->crop.t == 0 && sd->crop.b == 0) @@ -478,7 +491,7 @@ evas_object_show(sd->crop.clipper); } } - _clipper_position_size_update(obj, w, h, iw, ih); + _clipper_position_size_update(obj, x, y, w, h, iw, ih); } static void @@ -1408,6 +1421,7 @@ Smart_Data *sd; 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); @@ -1843,7 +1857,7 @@ int vid_w, vid_h, w, h; sd->module->video_data_size_get(sd->video, &vid_w, &vid_h); evas_object_geometry_get(obj, NULL, NULL, &w, &h); - _clipper_position_size_update(obj, w, h, vid_w, vid_h); + _clipper_position_size_update(obj, x, y, w, h, vid_w, vid_h); evas_object_move(sd->bg, x, y); } |
From: Enlightenment S. <no-...@en...> - 2011-10-03 10:29:11
|
Log: emotion: forgotten declaration. Author: cedric Date: 2011-10-03 03:29:04 -0700 (Mon, 03 Oct 2011) New Revision: 63768 Trac: http://trac.enlightenment.org/e/changeset/63768 Modified: trunk/emotion/src/lib/Emotion.h Modified: trunk/emotion/src/lib/Emotion.h =================================================================== --- trunk/emotion/src/lib/Emotion.h 2011-10-03 09:10:37 UTC (rev 63767) +++ trunk/emotion/src/lib/Emotion.h 2011-10-03 10:29:04 UTC (rev 63768) @@ -1041,6 +1041,9 @@ */ EAPI Eina_Bool emotion_object_vis_supported (const Evas_Object *obj, Emotion_Vis visualization); +EAPI void emotion_object_priority_set(Evas_Object *obj, Eina_Bool priority); +EAPI Eina_Bool emotion_object_priority_get(const Evas_Object *obj); + EAPI void emotion_object_last_position_load (Evas_Object *obj); EAPI void emotion_object_last_position_save (Evas_Object *obj); |
From: Enlightenment S. <no-...@en...> - 2011-10-05 02:54:34
|
Log: emotion: some docs. Author: cedric Date: 2011-10-04 19:54:27 -0700 (Tue, 04 Oct 2011) New Revision: 63820 Trac: http://trac.enlightenment.org/e/changeset/63820 Modified: trunk/emotion/src/lib/Emotion.h Modified: trunk/emotion/src/lib/Emotion.h =================================================================== --- trunk/emotion/src/lib/Emotion.h 2011-10-05 02:24:15 UTC (rev 63819) +++ trunk/emotion/src/lib/Emotion.h 2011-10-05 02:54:27 UTC (rev 63820) @@ -202,12 +202,22 @@ EMOTION_VIS_LAST /* sentinel */ }; +/** + * @enum Emotion_Suspend + * + * Used for emotion pipeline ressource management. + * + * @see emotion_object_suspend_set() + * @see emotion_object_suspend_get() + * + * @ingroup Emotion_Ressource + */ typedef enum { - EMOTION_WAKEUP, - EMOTION_SLEEP, - EMOTION_DEEP_SLEEP, - EMOTION_HIBERNATE + EMOTION_WAKEUP, /**< pipeline is up and running */ + EMOTION_SLEEP, /**< turn off hardware ressource usage like overlay */ + EMOTION_DEEP_SLEEP, /**< destroy the pipeline, but keep full resolution pixels output around */ + EMOTION_HIBERNATE /**< destroy the pipeline, and keep half resolution or object resolution if lower */ } Emotion_Suspend; enum _Emotion_Aspect @@ -309,6 +319,10 @@ * @defgroup Emotion_Info Miscellaneous information retrieval functions */ +/** + * @defgroup Emotion_Ressource Video ressource management + */ + EAPI Eina_Bool emotion_init(void); EAPI Eina_Bool emotion_shutdown(void); @@ -931,6 +945,17 @@ * @ingroup Emotion_Video */ EAPI Eina_Bool emotion_object_video_mute_get (const Evas_Object *obj); + +/** + * @brief Get the number of available video channel + * + * @param obj The object which we are retrieving the channel count from + * @return the number of available channel. + * + * @see emotion_object_video_channel_name_get() + * + * @ingroup Emotion_Video + */ EAPI int emotion_object_video_channel_count (const Evas_Object *obj); EAPI const char *emotion_object_video_channel_name_get(const Evas_Object *obj, int channel); EAPI void emotion_object_video_channel_set (Evas_Object *obj, int channel); @@ -1041,26 +1066,176 @@ */ EAPI Eina_Bool emotion_object_vis_supported (const Evas_Object *obj, Emotion_Vis visualization); +/** + * @brief Raise priority of an object so it will have a priviledged access to hardware ressource. + * + * @param obj The object which the query is being ran on. + * @param priority EINA_TRUE means give me a priority access to the hardware ressource. + * + * Hardware have a few dedicated hardware pipeline that process the video at no cost for the CPU. + * Especially on SoC, you mostly have one (on mobile phone SoC) or two (on Set Top Box SoC) when + * Picture in Picture is needed. And most application just have a few video stream that really + * deserve high frame rate, hiogh quality output. That's why this call is for. + * + * Please note that if Emotion can't acquire a priviledged hardware ressource, it will fallback + * to the no-priority path. This work on the first asking first get basis system. + * + * @see emotion_object_priority_get() + * + * @ingroup Emotion_Ressource + */ EAPI void emotion_object_priority_set(Evas_Object *obj, Eina_Bool priority); + +/** + * @brief Get the actual priority of an object. + * + * @param obj The object which the query is being ran on. + * @return EINA_TRUE if the object has a priority access to the hardware. + * + * This actually return the priority status of an object. If it failed to have a priviledged + * access to the hardware, it will return EINA_FALSE. + * + * @see emotion_object_priority_get() + * + * @ingroup Emotion_Ressource + */ EAPI Eina_Bool emotion_object_priority_get(const Evas_Object *obj); -EAPI void emotion_object_last_position_load (Evas_Object *obj); -EAPI void emotion_object_last_position_save (Evas_Object *obj); +/** + * @brief Change the state of an object pipeline. + * + * @param obj The object which the query is being ran on. + * @param state The new state for the object. + * + * Changing the state of a pipeline should help preserve the battery of an embedded device. + * But it will only work sanely if the pipeline is not playing at the time you change its + * state. Depending on the engine all state may be not implemented. + * + * @see Emotion_Suspend + * @see emotion_object_suspend_get() + * + * @ingroup Emotion_Ressource + */ +EAPI void emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend state); -EAPI void emotion_object_suspend_set (Evas_Object *obj, Emotion_Suspend state); -EAPI Emotion_Suspend emotion_object_suspend_get (Evas_Object *obj); +/** + * @brief Get the current state of the pipeline + * + * @param obj The object which the query is being ran on. + * @return the current state of the pipeline. + * + * @see Emotion_Suspend + * @see emotion_object_suspend_set() + * + * @ingroup Emotion_Ressource + */ +EAPI Emotion_Suspend emotion_object_suspend_get(Evas_Object *obj); +/** + * @brief Load the last known position if available + * + * @param obj The object which the query is being ran on. + * + * By using Xattr, Emotion is able, if the system permitt it, to store and retrieve + * the latest position. It should trigger some smart callback to let the application + * know when it succeed or fail. Every operation is fully asynchronous and not + * linked to the actual engine used to play the vide. + * + * @see emotion_object_last_position_save() + * + * @ingroup Emotion_Info + */ +EAPI void emotion_object_last_position_load(Evas_Object *obj); + +/** + * @brief Save the lastest position if possible + * + * @param obj The object which the query is being ran on. + * + * By using Xattr, Emotion is able, if the system permitt it, to store and retrieve + * the latest position. It should trigger some smart callback to let the application + * know when it succeed or fail. Every operation is fully asynchronous and not + * linked to the actual engine used to play the vide. + * + * @see emotion_object_last_position_load() + * + * @ingroup Emotion_Info + */ +EAPI void emotion_object_last_position_save(Evas_Object *obj); + +/** + * @brief Do we have a chance to play that file + * + * @param file A stringshared filename that we want to know if Emotion can play. + * + * This just actually look at the extention of the file, it doesn't check the mime-type + * nor if the file is actually sane. So this is just an hint for your application. + * + * @see emotion_object_extension_may_play_get() + */ EAPI Eina_Bool emotion_object_extension_may_play_fast_get(const char *file); + +/** + * @brief Do we have a chance to play that file + * + * @param file A filename that we want to know if Emotion can play. + * + * This just actually look at the extention of the file, it doesn't check the mime-type + * nor if the file is actually sane. So this is just an hint for your application. + * + * @see emotion_object_extension_may_play_fast_get() + */ EAPI Eina_Bool emotion_object_extension_may_play_get(const char *file); +/** + * @brief Get the actual image object that contains the pixels of the video stream + * + * @param obj The object which the query is being ran on. + * + * This function is usefull when you want to get a direct access to the pixels. + * + * @see emotion_object_image_get() + */ EAPI Evas_Object *emotion_object_image_get(const Evas_Object *obj); -typedef struct _Emotion_Webcam Emotion_Webcam; +/** + * @defgroup Emotion_Webcam + */ -extern int EMOTION_WEBCAM_UPDATE; +typedef struct _Emotion_Webcam Emotion_Webcam; /**< Webcam description */ +extern int EMOTION_WEBCAM_UPDATE; /**< Ecore_Event triggered when a new webcam is plugged in */ + +/** + * @brief Get a list of active and available webcam + * + * @return the list of available webcam at the time of the call. + * + * It will return the current live list of webcam. It is updated before + * triggering EMOTION_WEBCAM_UPDATE and should never be modified. + * + * @ingroup Emotion_Webcam + */ EAPI const Eina_List *emotion_webcams_get(void); + +/** + * @brief Get the human understandable name of a Webcam + * + * @param ew The webcam to get the name from. + * @return the actual human readable name. + * + * @ingroup Emotion_Webcam + */ EAPI const char *emotion_webcam_name_get(const Emotion_Webcam *ew); + +/** + * @brief Get the uri of a Webcam that will be understood by emotion + * + * @param ew The webcam to get the uri from. + * @return the actual uri that emotion will later understood. + * + * @ingroup Emotion_Webcam + */ EAPI const char *emotion_webcam_device_get(const Emotion_Webcam *ew); /** |
From: Enlightenment S. <no-...@en...> - 2011-10-19 09:42:11
|
Log: emotion: destroy all created object. Author: cedric Date: 2011-10-19 02:42:05 -0700 (Wed, 19 Oct 2011) New Revision: 64172 Trac: http://trac.enlightenment.org/e/changeset/64172 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2011-10-19 09:41:17 UTC (rev 64171) +++ trunk/emotion/src/lib/emotion_smart.c 2011-10-19 09:42:05 UTC (rev 64172) @@ -207,6 +207,7 @@ _emotion_module_close(sd->module, sd->video); evas_object_del(sd->obj); evas_object_del(sd->crop.clipper); + evas_object_del(sd->bg); eina_stringshare_del(sd->file); free(sd->module_name); if (sd->job) ecore_job_del(sd->job); |
From: Enlightenment S. <no-...@en...> - 2011-11-13 21:52:22
|
Log: emotion: no segv when no webcam has been detected. Author: cedric Date: 2011-11-13 13:52:13 -0800 (Sun, 13 Nov 2011) New Revision: 65137 Trac: http://trac.enlightenment.org/e/changeset/65137 Modified: trunk/emotion/src/lib/emotion_main.c Modified: trunk/emotion/src/lib/emotion_main.c =================================================================== --- trunk/emotion/src/lib/emotion_main.c 2011-11-13 17:58:11 UTC (rev 65136) +++ trunk/emotion/src/lib/emotion_main.c 2011-11-13 21:52:13 UTC (rev 65137) @@ -406,9 +406,12 @@ const Emotion_Webcam *ew; const Eina_List *l; - EINA_LIST_FOREACH(_emotion_webcams->webcams, l, ew) - if (ew->device && strcmp(device, ew->device) == 0) - return ew->custom; + if (_emotion_webcams) + { + EINA_LIST_FOREACH(_emotion_webcams->webcams, l, ew) + if (ew->device && strcmp(device, ew->device) == 0) + return ew->custom; + } return NULL; } |
From: Enlightenment S. <no-...@en...> - 2012-02-23 17:42:15
|
Log: emotion: call some callback when load and save are done. Author: cedric Date: 2012-02-23 09:42:04 -0800 (Thu, 23 Feb 2012) New Revision: 68355 Trac: http://trac.enlightenment.org/e/changeset/68355 Modified: trunk/emotion/src/lib/emotion_smart.c Modified: trunk/emotion/src/lib/emotion_smart.c =================================================================== --- trunk/emotion/src/lib/emotion_smart.c 2012-02-23 17:28:02 UTC (rev 68354) +++ trunk/emotion/src/lib/emotion_smart.c 2012-02-23 17:42:04 UTC (rev 68355) @@ -163,6 +163,11 @@ static const char SIG_BUTTON_NUM_CHANGE[] = "button_num_change"; static const char SIG_BUTTON_CHANGE[] = "button_change"; static const char SIG_OPEN_DONE[] = "open_done"; +static const char SIG_POSITION_SAVE_SUCCEED[] = "position_save,succeed"; +static const char SIG_POSITION_SAVE_FAILED[] = "position_save,failed"; +static const char SIG_POSITION_LOAD_SUCCEED[] = "position_load,succeed"; +static const char SIG_POSITION_LOAD_FAILED[] = "position_load,failed"; + static const Evas_Smart_Cb_Description _smart_callbacks[] = { {SIG_FRAME_DECODE, ""}, {SIG_POSITION_UPDATE, ""}, @@ -1332,6 +1337,7 @@ 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); _eio_load_xattr_cleanup(sd, handler); } @@ -1340,6 +1346,7 @@ { Smart_Data *sd = data; + evas_object_smart_callback_call(sd->obj, SIG_POSITION_LOAD_FAILED, NULL); _eio_load_xattr_cleanup(sd, handler); } #endif @@ -1377,19 +1384,30 @@ if (eina_xattr_double_get(tmp, "user.e.time_seek", &xattr)) { emotion_object_position_set(obj, xattr); + evas_object_smart_callback_call(obj, SIG_POSITION_LOAD_SUCCEED, NULL); } + else + { + evas_object_smart_callback_call(obj, SIG_POSITION_LOAD_FAILED, NULL); + } #endif } #ifdef HAVE_EIO static void -_eio_save_xattr_done(void *data __UNUSED__, Eio_File *handler __UNUSED__) +_eio_save_xattr_done(void *data, Eio_File *handler __UNUSED__) { + Smart_Data *sd = data; + + evas_object_smart_callback_call(sd->obj, SIG_POSITION_SAVE_SUCCEED, NULL); } static void -_eio_save_xattr_error(void *data __UNUSED__, Eio_File *handler __UNUSED__, int err __UNUSED__) +_eio_save_xattr_error(void *data, Eio_File *handler __UNUSED__, int err __UNUSED__) { + Smart_Data *sd = data; + + evas_object_smart_callback_call(sd->obj, SIG_POSITION_SAVE_FAILED, NULL); } #endif @@ -1413,7 +1431,10 @@ eio_file_xattr_double_set(tmp, "user.e.time_seek", emotion_object_position_get(obj), 0, _eio_save_xattr_done, _eio_save_xattr_error, sd); #else - eina_xattr_double_set(tmp, "user.e.time_seek", emotion_object_position_get(obj), 0); + if (eina_xattr_double_set(tmp, "user.e.time_seek", emotion_object_position_get(obj), 0)) + evas_object_smart_callback_call(obj, SIG_POSITION_SAVE_SUCCEED, NULL); + else + evas_object_smart_callback_call(obj, SIG_POSITION_SAVE_FAILED, NULL); #endif } |