2004-06-18 08:38:03 -07:00
|
|
|
#include "Emotion.h"
|
|
|
|
#include "emotion_private.h"
|
|
|
|
|
|
|
|
#define E_SMART_OBJ_GET(smart, o, type) \
|
|
|
|
{ \
|
|
|
|
char *_e_smart_str; \
|
|
|
|
\
|
|
|
|
if (!o) return; \
|
|
|
|
smart = evas_object_smart_data_get(o); \
|
|
|
|
if (!smart) return; \
|
|
|
|
_e_smart_str = (char *)evas_object_type_get(o); \
|
|
|
|
if (!_e_smart_str) return; \
|
|
|
|
if (strcmp(_e_smart_str, type)) return; \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define E_SMART_OBJ_GET_RETURN(smart, o, type, ret) \
|
|
|
|
{ \
|
|
|
|
char *_e_smart_str; \
|
|
|
|
\
|
|
|
|
if (!o) return ret; \
|
|
|
|
smart = evas_object_smart_data_get(o); \
|
|
|
|
if (!smart) return ret; \
|
|
|
|
_e_smart_str = (char *)evas_object_type_get(o); \
|
|
|
|
if (!_e_smart_str) return ret; \
|
|
|
|
if (strcmp(_e_smart_str, type)) return ret; \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define E_OBJ_NAME "emotion_object"
|
|
|
|
|
|
|
|
typedef struct _Smart_Data Smart_Data;
|
|
|
|
|
|
|
|
struct _Smart_Data
|
|
|
|
{
|
|
|
|
Emotion_Video_Module *module;
|
|
|
|
void *video;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2006-12-19 06:15:17 -08:00
|
|
|
char *module_name;
|
2005-10-02 00:34:36 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
char *file;
|
|
|
|
Evas_Object *obj;
|
|
|
|
double ratio;
|
|
|
|
double pos;
|
|
|
|
double seek_pos;
|
|
|
|
double len;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-07-21 21:13:28 -07:00
|
|
|
Ecore_Job *job;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
unsigned char play : 1;
|
|
|
|
unsigned char seek : 1;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
char *title;
|
|
|
|
struct {
|
2006-12-19 06:15:17 -08:00
|
|
|
char *info;
|
|
|
|
double stat;
|
2004-06-24 03:55:43 -07:00
|
|
|
} progress;
|
|
|
|
struct {
|
|
|
|
char *file;
|
2006-12-19 06:15:17 -08:00
|
|
|
int num;
|
2004-06-24 03:55:43 -07:00
|
|
|
} ref;
|
|
|
|
struct {
|
|
|
|
int button_num;
|
|
|
|
int button;
|
|
|
|
} spu;
|
2007-03-12 19:30:14 -07:00
|
|
|
|
|
|
|
Emotion_Module_Options module_options;
|
2004-06-18 08:38:03 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
static void _mouse_move(void *data, Evas *ev, Evas_Object *obj, void *event_info);
|
|
|
|
static void _mouse_down(void *data, Evas *ev, Evas_Object *obj, void *event_info);
|
2004-07-21 21:13:28 -07:00
|
|
|
static void _pos_set_job(void *data);
|
2004-06-18 08:38:03 -07:00
|
|
|
static void _pixels_get(void *data, Evas_Object *obj);
|
|
|
|
|
|
|
|
static void _smart_init(void);
|
|
|
|
static void _smart_add(Evas_Object * obj);
|
|
|
|
static void _smart_del(Evas_Object * obj);
|
|
|
|
static void _smart_move(Evas_Object * obj, Evas_Coord x, Evas_Coord y);
|
|
|
|
static void _smart_resize(Evas_Object * obj, Evas_Coord w, Evas_Coord h);
|
|
|
|
static void _smart_show(Evas_Object * obj);
|
|
|
|
static void _smart_hide(Evas_Object * obj);
|
|
|
|
static void _smart_color_set(Evas_Object * obj, int r, int g, int b, int a);
|
|
|
|
static void _smart_clip_set(Evas_Object * obj, Evas_Object * clip);
|
|
|
|
static void _smart_clip_unset(Evas_Object * obj);
|
|
|
|
|
|
|
|
/**********************************/
|
|
|
|
/* Globals for the E Video Object */
|
|
|
|
/**********************************/
|
|
|
|
static Evas_Smart *smart = NULL;
|
2007-11-06 09:03:43 -08:00
|
|
|
static Ecore_Path_Group *path_group = NULL;
|
2004-06-18 08:38:03 -07:00
|
|
|
|
2005-04-15 00:27:02 -07:00
|
|
|
static unsigned char
|
|
|
|
_emotion_module_open(const char *name, Evas_Object *obj, Emotion_Video_Module **mod, void **video)
|
2004-06-18 08:38:03 -07:00
|
|
|
{
|
2007-10-31 12:34:39 -07:00
|
|
|
Ecore_Plugin *plugin;
|
|
|
|
char *tmp = NULL;
|
2007-03-12 19:30:14 -07:00
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2007-03-13 09:17:38 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
2007-11-06 09:03:43 -08:00
|
|
|
if (!path_group)
|
|
|
|
path_group = ecore_path_group_new();
|
2007-10-31 12:34:39 -07:00
|
|
|
tmp = getenv("EMOTION_MODULES_DIR");
|
|
|
|
if (tmp)
|
2007-11-06 09:03:43 -08:00
|
|
|
ecore_path_group_add(path_group, tmp);
|
|
|
|
ecore_path_group_add(path_group, PACKAGE_LIB_DIR"/emotion/");
|
|
|
|
plugin = ecore_plugin_load(path_group, name, NULL);
|
2007-10-31 12:34:39 -07:00
|
|
|
if (plugin)
|
2004-06-18 08:38:03 -07:00
|
|
|
{
|
2007-03-12 19:30:14 -07:00
|
|
|
unsigned char (*func_module_open)(Evas_Object *, Emotion_Video_Module **, void **, Emotion_Module_Options *);
|
2007-10-31 12:34:39 -07:00
|
|
|
|
|
|
|
func_module_open = ecore_plugin_symbol_get(plugin, "module_open");
|
2004-06-18 08:38:03 -07:00
|
|
|
if (func_module_open)
|
|
|
|
{
|
2007-03-12 19:30:14 -07:00
|
|
|
if (func_module_open(obj, mod, video, &(sd->module_options)))
|
2004-06-18 08:38:03 -07:00
|
|
|
{
|
2007-10-26 03:49:16 -07:00
|
|
|
if (*mod)
|
|
|
|
{
|
2007-10-31 12:34:39 -07:00
|
|
|
(*mod)->plugin = plugin;
|
2007-11-06 09:03:43 -08:00
|
|
|
(*mod)->path_group = path_group;
|
2007-10-26 03:49:16 -07:00
|
|
|
return 1;
|
|
|
|
}
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
}
|
2007-10-31 12:34:39 -07:00
|
|
|
ecore_plugin_unload(plugin);
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
2005-10-02 00:34:36 -07:00
|
|
|
else
|
2007-10-31 12:34:39 -07:00
|
|
|
printf ("Unable to load module %s\n", name);
|
|
|
|
|
2007-11-06 09:03:43 -08:00
|
|
|
if (path_group)
|
2007-11-11 08:02:02 -08:00
|
|
|
{
|
|
|
|
ecore_path_group_del(path_group);
|
|
|
|
path_group = NULL;
|
|
|
|
}
|
2007-11-02 04:58:59 -07:00
|
|
|
|
2005-04-15 00:27:02 -07:00
|
|
|
return 0;
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-04-15 00:27:02 -07:00
|
|
|
_emotion_module_close(Emotion_Video_Module *mod, void *video)
|
2004-06-18 08:38:03 -07:00
|
|
|
{
|
2007-10-31 12:34:39 -07:00
|
|
|
Ecore_Plugin *plugin;
|
2005-04-15 00:27:02 -07:00
|
|
|
void (*module_close) (Emotion_Video_Module *module, void *);
|
2007-10-31 12:34:39 -07:00
|
|
|
|
|
|
|
plugin = mod->plugin;
|
2008-10-21 09:35:41 -07:00
|
|
|
fprintf(stderr, "%p\n", plugin);
|
2007-10-31 12:34:39 -07:00
|
|
|
module_close = ecore_plugin_symbol_get(mod->plugin, "module_close");
|
2006-01-22 19:00:35 -08:00
|
|
|
if ((module_close) && (video)) module_close(mod, video);
|
2007-03-12 19:30:14 -07:00
|
|
|
/* FIXME: we can't go dlclosing here as a thread still may be running from
|
|
|
|
* the module - this in theory will leak- but it shouldnt be too bad and
|
|
|
|
* mean that once a module is dlopened() it cant be closed - its refcount
|
|
|
|
* will just keep going up
|
|
|
|
*/
|
2007-10-31 12:34:39 -07:00
|
|
|
/*
|
|
|
|
ecore_plugin_unload(plugin);
|
|
|
|
*/
|
2007-11-11 08:02:02 -08:00
|
|
|
if (path_group)
|
|
|
|
{
|
|
|
|
ecore_path_group_del(path_group);
|
|
|
|
path_group = NULL;
|
|
|
|
}
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/*******************************/
|
|
|
|
/* Externally accessible calls */
|
|
|
|
/*******************************/
|
2005-10-02 00:34:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Object *
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_add(Evas *evas)
|
|
|
|
{
|
|
|
|
_smart_init();
|
2007-10-31 12:34:39 -07:00
|
|
|
return evas_object_smart_add(evas, smart);
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
2007-03-12 19:30:14 -07:00
|
|
|
EAPI void
|
|
|
|
emotion_object_module_option_set(Evas_Object *obj, const char *opt, const char *val)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2007-03-12 19:30:14 -07:00
|
|
|
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 = 1;
|
|
|
|
}
|
|
|
|
else if (!strcmp(opt, "audio"))
|
|
|
|
{
|
|
|
|
if (!strcmp(val, "off")) sd->module_options.no_audio = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2005-10-02 00:34:36 -07:00
|
|
|
emotion_object_init(Evas_Object *obj, const char *module_filename)
|
2004-06-18 08:38:03 -07:00
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2005-08-30 16:40:34 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
2005-05-04 14:32:37 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
if (sd->file) free(sd->file);
|
|
|
|
sd->file = NULL;
|
2004-06-24 03:55:43 -07:00
|
|
|
if (sd->title) free(sd->title);
|
|
|
|
sd->title = NULL;
|
|
|
|
if (sd->progress.info) free(sd->progress.info);
|
|
|
|
sd->progress.info = NULL;
|
|
|
|
sd->progress.stat = 0.0;
|
|
|
|
if (sd->ref.file) free(sd->ref.file);
|
|
|
|
sd->ref.file = NULL;
|
|
|
|
sd->ref.num = 0;
|
|
|
|
sd->spu.button_num = 0;
|
|
|
|
sd->spu.button = -1;
|
|
|
|
sd->ratio = 1.0;
|
|
|
|
sd->pos = 0;
|
|
|
|
sd->seek_pos = 0;
|
|
|
|
sd->len = 0;
|
2005-05-04 14:32:37 -07:00
|
|
|
|
2007-10-04 22:12:38 -07:00
|
|
|
ecore_job_init();
|
|
|
|
|
2007-03-12 19:30:14 -07:00
|
|
|
if ((!sd->module) || (!sd->video))
|
|
|
|
{
|
|
|
|
if (!_emotion_module_open(module_filename, obj,
|
|
|
|
&sd->module, &sd->video))
|
|
|
|
return 0;
|
|
|
|
}
|
2007-10-04 22:12:38 -07:00
|
|
|
|
2005-05-04 14:32:37 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2005-05-04 14:32:37 -07:00
|
|
|
emotion_object_file_set(Evas_Object *obj, const char *file)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2005-05-04 14:32:37 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2008-10-08 08:38:42 -07:00
|
|
|
if (!sd->module) return;
|
|
|
|
|
2005-05-04 14:32:37 -07:00
|
|
|
if ((file) && (sd->file) && (!strcmp(file, sd->file))) return;
|
2005-11-04 00:21:28 -08:00
|
|
|
if ((file) && (file[0] != 0))
|
2004-06-18 08:38:03 -07:00
|
|
|
{
|
2005-06-17 22:29:25 -07:00
|
|
|
int w, h;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2008-05-15 09:52:04 -07:00
|
|
|
if (sd->file) free(sd->file);
|
2004-06-18 08:38:03 -07:00
|
|
|
sd->file = strdup(file);
|
2008-10-08 08:38:42 -07:00
|
|
|
sd->module->file_close(sd->video);
|
|
|
|
evas_object_image_size_set(sd->obj, 0, 0);
|
2005-06-17 22:29:25 -07:00
|
|
|
if (!sd->module->file_open(sd->file, obj, sd->video))
|
2005-10-02 00:34:36 -07:00
|
|
|
return;
|
2005-06-17 22:29:25 -07:00
|
|
|
sd->module->size_get(sd->video, &w, &h);
|
|
|
|
evas_object_image_size_set(sd->obj, w, h);
|
|
|
|
sd->ratio = sd->module->ratio_get(sd->video);
|
|
|
|
sd->pos = 0.0;
|
2005-10-02 00:34:36 -07:00
|
|
|
if (sd->play) sd->module->play(sd->video, 0.0);
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2005-06-17 22:29:25 -07:00
|
|
|
if (sd->video && sd->module)
|
2004-06-18 08:38:03 -07:00
|
|
|
{
|
|
|
|
sd->module->file_close(sd->video);
|
|
|
|
evas_object_image_size_set(sd->obj, 0, 0);
|
|
|
|
}
|
2008-05-15 09:52:04 -07:00
|
|
|
if (sd->file) free(sd->file);
|
|
|
|
sd->file = NULL;
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_file_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
return sd->file;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_play_set(Evas_Object *obj, Evas_Bool play)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (((play) && (sd->play)) || ((!play) && (!sd->play))) return;
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->play = play;
|
|
|
|
if (sd->play) sd->module->play(sd->video, sd->pos);
|
|
|
|
else sd->module->stop(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_play_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->video) return 0;
|
2005-10-02 05:19:36 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
return sd->play;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_position_set(Evas_Object *obj, double sec)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->seek_pos = sec;
|
2004-07-21 21:13:28 -07:00
|
|
|
sd->seek = 1;
|
|
|
|
sd->pos = sd->seek_pos;
|
|
|
|
if (sd->job) ecore_job_del(sd->job);
|
|
|
|
sd->job = ecore_job_add(_pos_set_job, obj);
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI double
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_position_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0.0);
|
|
|
|
if (!sd->module) return 0.0;
|
|
|
|
if (!sd->video) return 0.0;
|
2008-09-26 16:17:57 -07:00
|
|
|
if (!sd->module->pos_get) return 0.0;
|
|
|
|
sd->pos = sd->module->pos_get(sd->video);
|
2004-06-18 08:38:03 -07:00
|
|
|
return sd->pos;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_seekable_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->seekable(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2005-04-24 07:42:50 -07:00
|
|
|
emotion_object_video_handled_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2005-04-24 07:42:50 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->video_handled(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2005-04-24 07:42:50 -07:00
|
|
|
emotion_object_audio_handled_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2005-04-24 07:42:50 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->audio_handled(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI double
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_play_length_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0.0);
|
|
|
|
if (!sd->module) return 0.0;
|
|
|
|
if (!sd->video) return 0.0;
|
|
|
|
sd->len = sd->module->len_get(sd->video);
|
|
|
|
return sd->len;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_size_get(Evas_Object *obj, int *iw, int *ih)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
if (iw) *iw = 0;
|
|
|
|
if (ih) *ih = 0;
|
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
evas_object_image_size_get(sd->obj, iw, ih);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_smooth_scale_set(Evas_Object *obj, Evas_Bool smooth)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
evas_object_image_smooth_scale_set(sd->obj, smooth);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_smooth_scale_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
return evas_object_image_smooth_scale_get(sd->obj);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI double
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_ratio_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 1.0);
|
|
|
|
if (!sd->module) return 0.0;
|
|
|
|
if (!sd->video) return 0.0;
|
|
|
|
return sd->ratio;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_event_simple_send(Evas_Object *obj, Emotion_Event ev)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->event_feed(sd->video, ev);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_audio_volume_set(Evas_Object *obj, double vol)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->audio_channel_volume_set(sd->video, vol);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI double
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_audio_volume_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 1.0);
|
|
|
|
if (!sd->module) return 0.0;
|
|
|
|
if (!sd->video) return 0.0;
|
|
|
|
return sd->module->audio_channel_volume_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_audio_mute_set(Evas_Object *obj, Evas_Bool mute)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->audio_channel_mute_set(sd->video, mute);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_audio_mute_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->audio_channel_mute_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_audio_channel_count(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->audio_channel_count(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_audio_channel_name_get(Evas_Object *obj, int channel)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
if (!sd->module) return NULL;
|
|
|
|
if (!sd->video) return NULL;
|
|
|
|
return sd->module->audio_channel_name_get(sd->video, channel);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_audio_channel_set(Evas_Object *obj, int channel)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->audio_channel_set(sd->video, channel);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_audio_channel_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->audio_channel_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_video_mute_set(Evas_Object *obj, Evas_Bool mute)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->video_channel_mute_set(sd->video, mute);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_video_mute_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->video_channel_mute_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_video_channel_count(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->video_channel_count(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_video_channel_name_get(Evas_Object *obj, int channel)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
if (!sd->module) return NULL;
|
|
|
|
if (!sd->video) return NULL;
|
|
|
|
return sd->module->video_channel_name_get(sd->video, channel);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_video_channel_set(Evas_Object *obj, int channel)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->video_channel_set(sd->video, channel);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_video_channel_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->video_channel_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_spu_mute_set(Evas_Object *obj, Evas_Bool mute)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->spu_channel_mute_set(sd->video, mute);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI Evas_Bool
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_spu_mute_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->spu_channel_mute_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_spu_channel_count(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->spu_channel_count(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_spu_channel_name_get(Evas_Object *obj, int channel)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
if (!sd->module) return NULL;
|
|
|
|
if (!sd->video) return NULL;
|
|
|
|
return sd->module->spu_channel_name_get(sd->video, channel);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_spu_channel_set(Evas_Object *obj, int channel)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->spu_channel_set(sd->video, channel);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_spu_channel_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->spu_channel_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_chapter_count(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->chapter_count(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_chapter_set(Evas_Object *obj, int chapter)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->chapter_set(sd->video, chapter);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_chapter_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
return sd->module->chapter_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_chapter_name_get(Evas_Object *obj, int chapter)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
if (!sd->module) return NULL;
|
|
|
|
if (!sd->video) return NULL;
|
|
|
|
return sd->module->chapter_name_get(sd->video, chapter);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_play_speed_set(Evas_Object *obj, double speed)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->speed_set(sd->video, speed);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI double
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_play_speed_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0.0);
|
|
|
|
if (!sd->module) return 0.0;
|
|
|
|
if (!sd->video) return 0.0;
|
|
|
|
return sd->module->speed_get(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
emotion_object_eject(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
sd->module->eject(sd->video);
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-06-24 03:55:43 -07:00
|
|
|
emotion_object_title_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
return sd->title;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-06-24 03:55:43 -07:00
|
|
|
emotion_object_progress_info_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
return sd->progress.info;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI double
|
2004-06-24 03:55:43 -07:00
|
|
|
emotion_object_progress_status_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0.0);
|
|
|
|
return sd->progress.stat;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-06-24 03:55:43 -07:00
|
|
|
emotion_object_ref_file_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
return sd->ref.file;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-24 03:55:43 -07:00
|
|
|
emotion_object_ref_num_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
return sd->ref.num;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-24 03:55:43 -07:00
|
|
|
emotion_object_spu_button_count_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
return sd->spu.button_num;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI int
|
2004-06-24 03:55:43 -07:00
|
|
|
emotion_object_spu_button_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
return sd->spu.button;
|
|
|
|
}
|
|
|
|
|
2006-09-06 00:17:49 -07:00
|
|
|
EAPI const char *
|
2004-07-24 02:53:00 -07:00
|
|
|
emotion_object_meta_info_get(Evas_Object *obj, Emotion_Meta_Info meta)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-07-24 02:53:00 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
if (!sd->module) return NULL;
|
|
|
|
if (!sd->video) return NULL;
|
|
|
|
switch (meta)
|
|
|
|
{
|
|
|
|
case EMOTION_META_INFO_TRACK_TITLE:
|
|
|
|
return sd->module->meta_get(sd->video, META_TRACK_TITLE);
|
|
|
|
break;
|
|
|
|
case EMOTION_META_INFO_TRACK_ARTIST:
|
|
|
|
return sd->module->meta_get(sd->video, META_TRACK_ARTIST);
|
|
|
|
break;
|
|
|
|
case EMOTION_META_INFO_TRACK_ALBUM:
|
|
|
|
return sd->module->meta_get(sd->video, META_TRACK_ALBUM);
|
|
|
|
break;
|
|
|
|
case EMOTION_META_INFO_TRACK_YEAR:
|
|
|
|
return sd->module->meta_get(sd->video, META_TRACK_YEAR);
|
|
|
|
break;
|
|
|
|
case EMOTION_META_INFO_TRACK_GENRE:
|
|
|
|
return sd->module->meta_get(sd->video, META_TRACK_GENRE);
|
|
|
|
break;
|
|
|
|
case EMOTION_META_INFO_TRACK_COMMENT:
|
|
|
|
return sd->module->meta_get(sd->video, META_TRACK_COMMENT);
|
|
|
|
break;
|
|
|
|
case EMOTION_META_INFO_TRACK_DISC_ID:
|
|
|
|
return sd->module->meta_get(sd->video, META_TRACK_DISCID);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2008-09-25 16:15:21 -07:00
|
|
|
EAPI void
|
|
|
|
emotion_object_vis_set(Evas_Object *obj, Emotion_Vis visualization)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
|
|
|
|
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
if (!sd->module->vis_set) return;
|
|
|
|
sd->module->vis_set(sd->video, visualization);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Emotion_Vis
|
|
|
|
emotion_object_vis_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
|
|
|
|
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, EMOTION_VIS_NONE);
|
|
|
|
if (!sd->module) return EMOTION_VIS_NONE;
|
|
|
|
if (!sd->video) return EMOTION_VIS_NONE;
|
|
|
|
if (!sd->module->vis_get) return EMOTION_VIS_NONE;
|
|
|
|
return sd->module->vis_get(sd->video);
|
|
|
|
}
|
2004-06-24 03:55:43 -07:00
|
|
|
|
2008-09-25 16:15:21 -07:00
|
|
|
EAPI Evas_Bool
|
|
|
|
emotion_object_vis_supported(Evas_Object *obj, Emotion_Vis visualization)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2004-06-18 08:38:03 -07:00
|
|
|
|
2008-09-25 16:15:21 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
|
|
|
|
if (!sd->module) return 0;
|
|
|
|
if (!sd->video) return 0;
|
|
|
|
if (!sd->module->vis_supported) return 0;
|
|
|
|
return sd->module->vis_supported(sd->video, visualization);
|
|
|
|
}
|
2004-06-18 08:38:03 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************/
|
|
|
|
/* Utility calls for modules */
|
|
|
|
/*****************************/
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void *
|
2004-06-18 08:38:03 -07:00
|
|
|
_emotion_video_get(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, NULL);
|
|
|
|
return sd->video;
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
_emotion_frame_new(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
2007-07-17 21:42:31 -07:00
|
|
|
// printf("pix get set 1 %p\n", sd->obj);
|
2004-06-18 08:38:03 -07:00
|
|
|
evas_object_image_pixels_dirty_set(sd->obj, 1);
|
2008-05-15 09:52:04 -07:00
|
|
|
evas_object_smart_callback_call(obj, "frame_decode", NULL);
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
_emotion_video_pos_update(Evas_Object *obj, double pos, double len)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
|
|
|
int npos = 0, nlen = 0;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (pos != sd->pos) npos = 1;
|
|
|
|
if (len != sd->len) nlen = 1;
|
|
|
|
sd->pos = pos;
|
|
|
|
sd->len = len;
|
2008-05-15 09:52:04 -07:00
|
|
|
if (npos) evas_object_smart_callback_call(obj, "position_update", NULL);
|
2004-06-18 08:38:03 -07:00
|
|
|
if (nlen) evas_object_smart_callback_call(obj, "length_change", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-18 08:38:03 -07:00
|
|
|
_emotion_frame_resize(Evas_Object *obj, int w, int h, double ratio)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
|
|
|
int iw, ih;
|
|
|
|
int changed = 0;
|
2005-10-02 05:19:36 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
evas_object_image_size_get(sd->obj, &iw, &ih);
|
|
|
|
if ((w != iw) || (h != ih))
|
|
|
|
{
|
2004-06-24 03:55:43 -07:00
|
|
|
if (h > 0) sd->ratio = (double)w / (double)h;
|
|
|
|
else sd->ratio = 1.0;
|
2004-06-18 08:38:03 -07:00
|
|
|
evas_object_image_size_set(sd->obj, w, h);
|
|
|
|
changed = 1;
|
|
|
|
}
|
|
|
|
if (ratio != sd->ratio)
|
|
|
|
{
|
|
|
|
sd->ratio = ratio;
|
|
|
|
changed = 1;
|
|
|
|
}
|
|
|
|
if (changed) evas_object_smart_callback_call(obj, "frame_resize", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-24 03:55:43 -07:00
|
|
|
_emotion_decode_stop(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (sd->play)
|
|
|
|
{
|
|
|
|
sd->play = 0;
|
|
|
|
evas_object_smart_callback_call(obj, "decode_stop", NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2005-04-15 00:27:02 -07:00
|
|
|
_emotion_playback_finished(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
evas_object_smart_callback_call(obj, "playback_finished", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
|
|
|
_emotion_audio_level_change(Evas_Object *obj)
|
2005-04-24 07:42:50 -07:00
|
|
|
{
|
|
|
|
evas_object_smart_callback_call(obj, "audio_level_change", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-24 03:55:43 -07:00
|
|
|
_emotion_channels_change(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
evas_object_smart_callback_call(obj, "channels_change", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-24 03:55:43 -07:00
|
|
|
_emotion_title_set(Evas_Object *obj, char *title)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (sd->title) free(sd->title);
|
|
|
|
sd->title = strdup(title);
|
|
|
|
evas_object_smart_callback_call(obj, "title_change", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-24 03:55:43 -07:00
|
|
|
_emotion_progress_set(Evas_Object *obj, char *info, double stat)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (sd->progress.info) free(sd->progress.info);
|
|
|
|
sd->progress.info = strdup(info);
|
|
|
|
sd->progress.stat = stat;
|
|
|
|
evas_object_smart_callback_call(obj, "progress_change", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-24 03:55:43 -07:00
|
|
|
_emotion_file_ref_set(Evas_Object *obj, char *file, int num)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
if (sd->ref.file) free(sd->ref.file);
|
|
|
|
sd->ref.file = strdup(file);
|
|
|
|
sd->ref.num = num;
|
|
|
|
evas_object_smart_callback_call(obj, "ref_change", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-24 03:55:43 -07:00
|
|
|
_emotion_spu_button_num_set(Evas_Object *obj, int num)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
sd->spu.button_num = num;
|
|
|
|
evas_object_smart_callback_call(obj, "button_num_change", NULL);
|
|
|
|
}
|
|
|
|
|
2007-05-05 22:03:18 -07:00
|
|
|
EAPI void
|
2004-06-24 03:55:43 -07:00
|
|
|
_emotion_spu_button_set(Evas_Object *obj, int button)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-24 03:55:43 -07:00
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
sd->spu.button = button;
|
|
|
|
evas_object_smart_callback_call(obj, "button_change", NULL);
|
|
|
|
}
|
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
|
|
|
|
/****************************/
|
|
|
|
/* Internal object routines */
|
|
|
|
/****************************/
|
|
|
|
|
2007-10-31 12:34:39 -07:00
|
|
|
static void
|
2004-06-18 08:38:03 -07:00
|
|
|
_mouse_move(void *data, Evas *ev, Evas_Object *obj, void *event_info)
|
2007-10-31 12:34:39 -07:00
|
|
|
{
|
2004-06-18 08:38:03 -07:00
|
|
|
Evas_Event_Mouse_Move *e;
|
|
|
|
Smart_Data *sd;
|
|
|
|
int x, y, iw, ih;
|
|
|
|
Evas_Coord ox, oy, ow, oh;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
e = event_info;
|
|
|
|
sd = data;
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
|
|
|
|
evas_object_image_size_get(obj, &iw, &ih);
|
|
|
|
if ((iw < 1) || (ih < 1)) return;
|
|
|
|
x = (((int)e->cur.canvas.x - ox) * iw) / ow;
|
|
|
|
y = (((int)e->cur.canvas.y - oy) * ih) / oh;
|
|
|
|
sd->module->event_mouse_move_feed(sd->video, x, y);
|
|
|
|
}
|
|
|
|
|
2007-10-31 12:34:39 -07:00
|
|
|
static void
|
2004-06-18 08:38:03 -07:00
|
|
|
_mouse_down(void *data, Evas *ev, Evas_Object *obj, void *event_info)
|
2007-10-31 12:34:39 -07:00
|
|
|
{
|
2004-06-18 08:38:03 -07:00
|
|
|
Evas_Event_Mouse_Down *e;
|
|
|
|
Smart_Data *sd;
|
|
|
|
int x, y, iw, ih;
|
|
|
|
Evas_Coord ox, oy, ow, oh;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
e = event_info;
|
|
|
|
sd = data;
|
|
|
|
if (!sd->module) return;
|
|
|
|
if (!sd->video) return;
|
|
|
|
evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
|
|
|
|
evas_object_image_size_get(obj, &iw, &ih);
|
|
|
|
if ((iw < 1) || (ih < 1)) return;
|
|
|
|
x = (((int)e->canvas.x - ox) * iw) / ow;
|
|
|
|
y = (((int)e->canvas.y - oy) * ih) / oh;
|
|
|
|
sd->module->event_mouse_button_feed(sd->video, 1, x, y);
|
|
|
|
}
|
|
|
|
|
2004-07-21 21:13:28 -07:00
|
|
|
static void
|
|
|
|
_pos_set_job(void *data)
|
|
|
|
{
|
|
|
|
Evas_Object *obj;
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-07-21 21:13:28 -07:00
|
|
|
obj = data;
|
|
|
|
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
|
|
|
|
sd->job = NULL;
|
|
|
|
if (sd->seek)
|
|
|
|
{
|
|
|
|
sd->module->pos_set(sd->video, sd->seek_pos);
|
|
|
|
sd->seek = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
/* called by evas when it needs pixels for the image object */
|
|
|
|
static void
|
|
|
|
_pixels_get(void *data, Evas_Object *obj)
|
|
|
|
{
|
|
|
|
int iw, ih, w, h;
|
|
|
|
Smart_Data *sd;
|
2005-07-08 16:08:48 -07:00
|
|
|
Emotion_Format format;
|
2006-12-19 06:15:17 -08:00
|
|
|
unsigned char *bgra_data;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = data;
|
|
|
|
evas_object_image_size_get(obj, &iw, &ih);
|
2005-07-08 16:08:48 -07:00
|
|
|
sd->module->video_data_size_get(sd->video, &w, &h);
|
2007-10-28 03:19:09 -07:00
|
|
|
w = (w >> 1) << 1;
|
|
|
|
h = (h >> 1) << 1;
|
2004-06-18 08:38:03 -07:00
|
|
|
if ((w != iw) || (h != ih))
|
|
|
|
{
|
2006-12-19 06:15:17 -08:00
|
|
|
evas_object_image_colorspace_set(obj, EVAS_COLORSPACE_YCBCR422P601_PL);
|
|
|
|
evas_object_image_alpha_set(obj, 0);
|
|
|
|
evas_object_image_size_set(obj, w, h);
|
|
|
|
iw = w;
|
|
|
|
ih = h;
|
|
|
|
}
|
|
|
|
if ((iw < 1) || (ih < 1))
|
|
|
|
{
|
2007-07-17 21:42:31 -07:00
|
|
|
// printf("pix get set 0 (1)\n");
|
2006-12-19 06:15:17 -08:00
|
|
|
evas_object_image_pixels_dirty_set(obj, 0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
format = sd->module->format_get(sd->video);
|
|
|
|
if ((format == EMOTION_FORMAT_YV12) || (format == EMOTION_FORMAT_I420))
|
|
|
|
{
|
|
|
|
unsigned char **rows;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2006-12-19 06:15:17 -08:00
|
|
|
evas_object_image_colorspace_set(obj, EVAS_COLORSPACE_YCBCR422P601_PL);
|
|
|
|
rows = evas_object_image_data_get(obj, 1);
|
|
|
|
if (rows)
|
|
|
|
{
|
|
|
|
if (sd->module->yuv_rows_get(sd->video, iw, ih,
|
2007-10-31 12:34:39 -07:00
|
|
|
rows,
|
|
|
|
&rows[ih],
|
2006-12-19 06:15:17 -08:00
|
|
|
&rows[ih + (ih / 2)]))
|
|
|
|
evas_object_image_data_update_add(obj, 0, 0, iw, ih);
|
|
|
|
}
|
|
|
|
evas_object_image_data_set(obj, rows);
|
2007-07-17 21:42:31 -07:00
|
|
|
// printf("pix get set 0 (2)\n");
|
2006-12-19 06:15:17 -08:00
|
|
|
evas_object_image_pixels_dirty_set(obj, 0);
|
|
|
|
}
|
|
|
|
else if (format == EMOTION_FORMAT_BGRA)
|
|
|
|
{
|
2007-10-24 21:52:39 -07:00
|
|
|
if (sd->module->bgra_data_get(sd->video, &bgra_data))
|
2006-12-19 06:15:17 -08:00
|
|
|
{
|
|
|
|
evas_object_image_data_set(obj, bgra_data);
|
2007-07-17 21:42:31 -07:00
|
|
|
// printf("pix get set 0 (3)\n");
|
2006-12-19 06:15:17 -08:00
|
|
|
evas_object_image_pixels_dirty_set(obj, 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2007-01-02 22:24:25 -08:00
|
|
|
// no need for this because on any new frame decode info from the decoder
|
2007-10-31 12:34:39 -07:00
|
|
|
// module, the previous "current frame" is released (done) for us anyway
|
2006-12-19 06:15:17 -08:00
|
|
|
// sd->module->frame_done(sd->video);
|
2007-01-02 22:24:25 -08:00
|
|
|
|
2007-10-31 12:34:39 -07:00
|
|
|
/*
|
2006-12-19 06:15:17 -08:00
|
|
|
evas_object_image_size_get(obj, &iw, &ih);
|
|
|
|
sd->module->video_data_size_get(sd->video, &w, &h);
|
|
|
|
if ((w != iw) || (h != ih))
|
|
|
|
{
|
|
|
|
evas_object_image_size_set(obj, w, h);
|
|
|
|
iw = w;
|
|
|
|
ih = h;
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
2005-07-08 16:08:48 -07:00
|
|
|
format = sd->module->format_get(sd->video);
|
2006-02-04 05:43:13 -08:00
|
|
|
if ((format == EMOTION_FORMAT_YV12) || (format == EMOTION_FORMAT_I420))
|
2005-07-08 16:08:48 -07:00
|
|
|
{
|
2006-12-19 06:15:17 -08:00
|
|
|
unsigned char **rows;
|
|
|
|
Evas_Pixel_Import_Source ps;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2006-12-19 06:15:17 -08:00
|
|
|
ps.format = EVAS_PIXEL_FORMAT_YUV420P_601;
|
|
|
|
ps.w = iw;
|
|
|
|
ps.h = ih;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2006-12-19 06:15:17 -08:00
|
|
|
ps.rows = malloc(ps.h * 2 * sizeof(void *));
|
|
|
|
if (!ps.rows)
|
|
|
|
{
|
|
|
|
sd->module->frame_done(sd->video);
|
|
|
|
return;
|
|
|
|
}
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2006-12-19 06:15:17 -08:00
|
|
|
rows = (unsigned char **)ps.rows;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2006-12-19 06:15:17 -08:00
|
|
|
if (sd->module->yuv_rows_get(sd->video, iw, ih,
|
2007-10-31 12:34:39 -07:00
|
|
|
rows,
|
|
|
|
&rows[ps.h],
|
2006-12-19 06:15:17 -08:00
|
|
|
&rows[ps.h + (ps.h / 2)]))
|
2006-01-22 19:00:35 -08:00
|
|
|
evas_object_image_pixels_import(obj, &ps);
|
2006-12-19 06:15:17 -08:00
|
|
|
evas_object_image_pixels_dirty_set(obj, 0);
|
|
|
|
free(ps.rows);
|
|
|
|
}
|
2006-02-04 05:43:13 -08:00
|
|
|
else if (format == EMOTION_FORMAT_BGRA)
|
2004-06-18 08:38:03 -07:00
|
|
|
{
|
2006-12-19 06:15:17 -08:00
|
|
|
if (sd->module->bgra_data_get(sd->video, &bgra_data));
|
|
|
|
{
|
|
|
|
evas_object_image_data_set(obj, bgra_data);
|
|
|
|
evas_object_image_pixels_dirty_set(obj, 0);
|
|
|
|
}
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
sd->module->frame_done(sd->video);
|
2007-10-31 12:34:39 -07:00
|
|
|
*/
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/*******************************************/
|
|
|
|
/* Internal smart object required routines */
|
|
|
|
/*******************************************/
|
|
|
|
static void
|
|
|
|
_smart_init(void)
|
|
|
|
{
|
|
|
|
if (smart) return;
|
2007-08-04 06:12:43 -07:00
|
|
|
{
|
|
|
|
static const Evas_Smart_Class sc =
|
|
|
|
{
|
|
|
|
E_OBJ_NAME,
|
|
|
|
EVAS_SMART_CLASS_VERSION,
|
|
|
|
_smart_add,
|
|
|
|
_smart_del,
|
|
|
|
_smart_move,
|
|
|
|
_smart_resize,
|
|
|
|
_smart_show,
|
|
|
|
_smart_hide,
|
|
|
|
_smart_color_set,
|
|
|
|
_smart_clip_set,
|
|
|
|
_smart_clip_unset,
|
2008-09-06 18:25:49 -07:00
|
|
|
NULL,
|
2008-10-24 20:01:12 -07:00
|
|
|
NULL,
|
|
|
|
NULL,
|
2007-08-04 06:12:43 -07:00
|
|
|
NULL
|
|
|
|
};
|
|
|
|
smart = evas_smart_class_new(&sc);
|
|
|
|
}
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_smart_add(Evas_Object * obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-03-12 19:30:14 -07:00
|
|
|
unsigned int *pixel;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = calloc(1, sizeof(Smart_Data));
|
|
|
|
if (!sd) return;
|
|
|
|
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);
|
|
|
|
evas_object_image_pixels_get_callback_set(sd->obj, _pixels_get, sd);
|
|
|
|
evas_object_smart_member_add(sd->obj, obj);
|
|
|
|
sd->ratio = 1.0;
|
2004-06-24 03:55:43 -07:00
|
|
|
sd->spu.button = -1;
|
2004-06-18 08:38:03 -07:00
|
|
|
evas_object_image_alpha_set(sd->obj, 0);
|
2007-10-24 21:52:39 -07:00
|
|
|
pixel = evas_object_image_data_get(sd->obj, 1);
|
2007-03-12 19:30:14 -07:00
|
|
|
if (pixel)
|
|
|
|
{
|
|
|
|
*pixel = 0xff000000;
|
|
|
|
evas_object_image_data_set(obj, pixel);
|
|
|
|
}
|
2004-06-18 08:38:03 -07:00
|
|
|
evas_object_smart_data_set(obj, sd);
|
|
|
|
}
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
static void
|
|
|
|
_smart_del(Evas_Object * obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
if (sd->video) sd->module->file_close(sd->video);
|
2006-01-22 19:00:35 -08:00
|
|
|
_emotion_module_close(sd->module, sd->video);
|
2004-06-18 08:38:03 -07:00
|
|
|
evas_object_del(sd->obj);
|
|
|
|
if (sd->file) free(sd->file);
|
2004-07-21 21:13:28 -07:00
|
|
|
if (sd->job) ecore_job_del(sd->job);
|
2004-06-24 03:55:43 -07:00
|
|
|
if (sd->progress.info) free(sd->progress.info);
|
|
|
|
if (sd->ref.file) free(sd->ref.file);
|
2004-06-18 08:38:03 -07:00
|
|
|
free(sd);
|
2007-10-04 22:12:38 -07:00
|
|
|
|
|
|
|
ecore_job_shutdown();
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_smart_move(Evas_Object * obj, Evas_Coord x, Evas_Coord y)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_move(sd->obj, x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_smart_resize(Evas_Object * obj, Evas_Coord w, Evas_Coord h)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_image_fill_set(sd->obj, 0, 0, w, h);
|
|
|
|
evas_object_resize(sd->obj, w, h);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_smart_show(Evas_Object * obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_show(sd->obj);
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_smart_hide(Evas_Object * obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_hide(sd->obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_smart_color_set(Evas_Object * obj, int r, int g, int b, int a)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_color_set(sd->obj, r, g, b, a);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_smart_clip_set(Evas_Object * obj, Evas_Object * clip)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_clip_set(sd->obj, clip);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_smart_clip_unset(Evas_Object * obj)
|
|
|
|
{
|
|
|
|
Smart_Data *sd;
|
2007-10-31 12:34:39 -07:00
|
|
|
|
2004-06-18 08:38:03 -07:00
|
|
|
sd = evas_object_smart_data_get(obj);
|
|
|
|
if (!sd) return;
|
|
|
|
evas_object_clip_unset(sd->obj);
|
2007-10-31 12:34:39 -07:00
|
|
|
}
|