forked from enlightenment/efl
emotion+visualization: export and reorder.
done: * module api changed, vis_set is not close to vis_get, vis_supported was added. * exported these properties in emotion_object. * gstreamer plugin now starts with no visualization. todo: * add xine support. * make gstreamer able to dynamically change visualization. PS: gstreamer module really needs a cleanup, losts of functions need "static" or add proper prefix, including "gst" to avoid it clash with other symbols. SVN revision: 36260
This commit is contained in:
parent
42d39725b4
commit
d29b7694cb
|
@ -46,6 +46,7 @@ static int startw = 800;
|
||||||
static int starth = 600;
|
static int starth = 600;
|
||||||
|
|
||||||
static Evas_List *video_objs = NULL;
|
static Evas_List *video_objs = NULL;
|
||||||
|
static Emotion_Vis vis = EMOTION_VIS_NONE;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
main_start(int argc, char **argv)
|
main_start(int argc, char **argv)
|
||||||
|
@ -92,6 +93,11 @@ main_start(int argc, char **argv)
|
||||||
{
|
{
|
||||||
mode = 3;
|
mode = 3;
|
||||||
}
|
}
|
||||||
|
else if ((!strcmp(argv[i], "-vis")) && (i < (argc - 1)))
|
||||||
|
{
|
||||||
|
vis = atoi(argv[i + 1]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if HAVE_ECORE_EVAS_X
|
#if HAVE_ECORE_EVAS_X
|
||||||
|
@ -370,6 +376,33 @@ bg_key_down(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
||||||
printf("done\n");
|
printf("done\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(ev->keyname, "z"))
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
|
vis = (vis + 1) % EMOTION_VIS_LAST;
|
||||||
|
printf("new visualization: %d\n", vis);
|
||||||
|
|
||||||
|
|
||||||
|
for (l = video_objs; l; l = l->next)
|
||||||
|
{
|
||||||
|
Evas_Object *obj;
|
||||||
|
Evas_Bool supported;
|
||||||
|
|
||||||
|
obj = l->data;
|
||||||
|
supported = emotion_object_vis_supported(obj, vis);
|
||||||
|
if (supported)
|
||||||
|
emotion_object_vis_set(obj, vis);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const char *file;
|
||||||
|
|
||||||
|
file = emotion_object_file_get(obj);
|
||||||
|
printf("object %p (%s) does not support visualization %d\n",
|
||||||
|
obj, file, vis);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("UNHANDLED: %s\n", ev->keyname);
|
printf("UNHANDLED: %s\n", ev->keyname);
|
||||||
|
@ -736,6 +769,7 @@ init_video_object(char *module_filename, char *filename)
|
||||||
o = emotion_object_add(evas);
|
o = emotion_object_add(evas);
|
||||||
if (!emotion_object_init(o, module_filename))
|
if (!emotion_object_init(o, module_filename))
|
||||||
return;
|
return;
|
||||||
|
emotion_object_vis_set(o, vis);
|
||||||
emotion_object_file_set(o, filename);
|
emotion_object_file_set(o, filename);
|
||||||
emotion_object_play_set(o, 1);
|
emotion_object_play_set(o, 1);
|
||||||
evas_object_move(o, 0, 0);
|
evas_object_move(o, 0, 0);
|
||||||
|
@ -836,7 +870,7 @@ main(int argc, char **argv)
|
||||||
(!strcmp(argv[i], "--help"))))
|
(!strcmp(argv[i], "--help"))))
|
||||||
{
|
{
|
||||||
printf("Usage:\n");
|
printf("Usage:\n");
|
||||||
printf(" %s [-gl] [-g WxH] [-xine] [-gstreamer] filename\n", argv[0]);
|
printf(" %s [-gl] [-g WxH] [-vis NUMBER] [-xine] [-gstreamer] filename\n", argv[0]);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
else if (!strcmp(argv[i], "-gl"))
|
else if (!strcmp(argv[i], "-gl"))
|
||||||
|
@ -856,6 +890,10 @@ main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
module_filename = "gstreamer";
|
module_filename = "gstreamer";
|
||||||
}
|
}
|
||||||
|
else if ((!strcmp(argv[i], "-vis")) && (i < (argc - 1)))
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf ("module : %s\n", module_filename);
|
printf ("module : %s\n", module_filename);
|
||||||
|
|
|
@ -74,9 +74,34 @@ enum _Emotion_Meta_Info
|
||||||
EMOTION_META_INFO_TRACK_COUNT
|
EMOTION_META_INFO_TRACK_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum _Emotion_Vis
|
||||||
|
{
|
||||||
|
EMOTION_VIS_NONE,
|
||||||
|
EMOTION_VIS_GOOM,
|
||||||
|
EMOTION_VIS_LIBVISUAL_BUMPSCOPE,
|
||||||
|
EMOTION_VIS_LIBVISUAL_CORONA,
|
||||||
|
EMOTION_VIS_LIBVISUAL_DANCING_PARTICLES,
|
||||||
|
EMOTION_VIS_LIBVISUAL_GDKPIXBUF,
|
||||||
|
EMOTION_VIS_LIBVISUAL_G_FORCE,
|
||||||
|
EMOTION_VIS_LIBVISUAL_GOOM,
|
||||||
|
EMOTION_VIS_LIBVISUAL_INFINITE,
|
||||||
|
EMOTION_VIS_LIBVISUAL_JAKDAW,
|
||||||
|
EMOTION_VIS_LIBVISUAL_JESS,
|
||||||
|
EMOTION_VIS_LIBVISUAL_LV_ANALYSER,
|
||||||
|
EMOTION_VIS_LIBVISUAL_LV_FLOWER,
|
||||||
|
EMOTION_VIS_LIBVISUAL_LV_GLTEST,
|
||||||
|
EMOTION_VIS_LIBVISUAL_LV_SCOPE,
|
||||||
|
EMOTION_VIS_LIBVISUAL_MADSPIN,
|
||||||
|
EMOTION_VIS_LIBVISUAL_NEBULUS,
|
||||||
|
EMOTION_VIS_LIBVISUAL_OINKSIE,
|
||||||
|
EMOTION_VIS_LIBVISUAL_PLASMA,
|
||||||
|
EMOTION_VIS_LAST /* sentinel */
|
||||||
|
};
|
||||||
|
|
||||||
typedef enum _Emotion_Module Emotion_Module;
|
typedef enum _Emotion_Module Emotion_Module;
|
||||||
typedef enum _Emotion_Event Emotion_Event;
|
typedef enum _Emotion_Event Emotion_Event;
|
||||||
typedef enum _Emotion_Meta_Info Emotion_Meta_Info;
|
typedef enum _Emotion_Meta_Info Emotion_Meta_Info;
|
||||||
|
typedef enum _Emotion_Vis Emotion_Vis;
|
||||||
|
|
||||||
#define EMOTION_CHANNEL_AUTO -1
|
#define EMOTION_CHANNEL_AUTO -1
|
||||||
#define EMOTION_CHANNEL_DEFAULT 0
|
#define EMOTION_CHANNEL_DEFAULT 0
|
||||||
|
@ -140,6 +165,10 @@ EAPI int emotion_object_spu_button_count_get (Evas_Object *obj);
|
||||||
EAPI int emotion_object_spu_button_get (Evas_Object *obj);
|
EAPI int emotion_object_spu_button_get (Evas_Object *obj);
|
||||||
EAPI const char *emotion_object_meta_info_get (Evas_Object *obj, Emotion_Meta_Info meta);
|
EAPI const char *emotion_object_meta_info_get (Evas_Object *obj, Emotion_Meta_Info meta);
|
||||||
|
|
||||||
|
EAPI void emotion_object_vis_set (Evas_Object *obj, Emotion_Vis visualization);
|
||||||
|
EAPI Emotion_Vis emotion_object_vis_get (Evas_Object *obj);
|
||||||
|
EAPI Evas_Bool emotion_object_vis_supported (Evas_Object *obj, Emotion_Vis visualization);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <Ecore_Job.h>
|
#include <Ecore_Job.h>
|
||||||
#include <Ecore_Data.h>
|
#include <Ecore_Data.h>
|
||||||
#include <Ecore_Str.h>
|
#include <Ecore_Str.h>
|
||||||
|
#include <Emotion.h>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -23,7 +24,6 @@
|
||||||
#define META_TRACK_COUNT 8
|
#define META_TRACK_COUNT 8
|
||||||
|
|
||||||
typedef enum _Emotion_Format Emotion_Format;
|
typedef enum _Emotion_Format Emotion_Format;
|
||||||
typedef enum _Emotion_Vis Emotion_Vis;
|
|
||||||
typedef struct _Emotion_Video_Module Emotion_Video_Module;
|
typedef struct _Emotion_Video_Module Emotion_Video_Module;
|
||||||
typedef struct _Emotion_Module_Options Emotion_Module_Options;
|
typedef struct _Emotion_Module_Options Emotion_Module_Options;
|
||||||
|
|
||||||
|
@ -36,28 +36,6 @@ enum _Emotion_Format
|
||||||
EMOTION_FORMAT_BGRA
|
EMOTION_FORMAT_BGRA
|
||||||
};
|
};
|
||||||
|
|
||||||
enum _Emotion_Vis
|
|
||||||
{
|
|
||||||
EMOTION_VIS_GOOM,
|
|
||||||
EMOTION_VIS_LIBVISUAL_BUMPSCOPE,
|
|
||||||
EMOTION_VIS_LIBVISUAL_CORONA,
|
|
||||||
EMOTION_VIS_LIBVISUAL_DANCING_PARTICLES,
|
|
||||||
EMOTION_VIS_LIBVISUAL_GDKPIXBUF,
|
|
||||||
EMOTION_VIS_LIBVISUAL_G_FORCE,
|
|
||||||
EMOTION_VIS_LIBVISUAL_GOOM,
|
|
||||||
EMOTION_VIS_LIBVISUAL_INFINITE,
|
|
||||||
EMOTION_VIS_LIBVISUAL_JAKDAW,
|
|
||||||
EMOTION_VIS_LIBVISUAL_JESS,
|
|
||||||
EMOTION_VIS_LIBVISUAL_LV_ANALYSER,
|
|
||||||
EMOTION_VIS_LIBVISUAL_LV_FLOWER,
|
|
||||||
EMOTION_VIS_LIBVISUAL_LV_GLTEST,
|
|
||||||
EMOTION_VIS_LIBVISUAL_LV_SCOPE,
|
|
||||||
EMOTION_VIS_LIBVISUAL_MADSPIN,
|
|
||||||
EMOTION_VIS_LIBVISUAL_NEBULUS,
|
|
||||||
EMOTION_VIS_LIBVISUAL_OINKSIE,
|
|
||||||
EMOTION_VIS_LIBVISUAL_PLASMA
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _Emotion_Module_Options
|
struct _Emotion_Module_Options
|
||||||
{
|
{
|
||||||
unsigned char no_video : 1;
|
unsigned char no_video : 1;
|
||||||
|
@ -74,13 +52,14 @@ struct _Emotion_Video_Module
|
||||||
void (*stop) (void *ef);
|
void (*stop) (void *ef);
|
||||||
void (*size_get) (void *ef, int *w, int *h);
|
void (*size_get) (void *ef, int *w, int *h);
|
||||||
void (*pos_set) (void *ef, double pos);
|
void (*pos_set) (void *ef, double pos);
|
||||||
void (*vis_set) (void *ef, Emotion_Vis vis);
|
|
||||||
double (*len_get) (void *ef);
|
double (*len_get) (void *ef);
|
||||||
int (*fps_num_get) (void *ef);
|
int (*fps_num_get) (void *ef);
|
||||||
int (*fps_den_get) (void *ef);
|
int (*fps_den_get) (void *ef);
|
||||||
double (*fps_get) (void *ef);
|
double (*fps_get) (void *ef);
|
||||||
double (*pos_get) (void *ef);
|
double (*pos_get) (void *ef);
|
||||||
|
void (*vis_set) (void *ef, Emotion_Vis vis);
|
||||||
Emotion_Vis (*vis_get) (void *ef);
|
Emotion_Vis (*vis_get) (void *ef);
|
||||||
|
Evas_Bool (*vis_supported) (void *ef, Emotion_Vis vis);
|
||||||
double (*ratio_get) (void *ef);
|
double (*ratio_get) (void *ef);
|
||||||
int (*video_handled) (void *ef);
|
int (*video_handled) (void *ef);
|
||||||
int (*audio_handled) (void *ef);
|
int (*audio_handled) (void *ef);
|
||||||
|
|
|
@ -815,8 +815,41 @@ emotion_object_meta_info_get(Evas_Object *obj, Emotion_Meta_Info meta)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Evas_Bool
|
||||||
|
emotion_object_vis_supported(Evas_Object *obj, Emotion_Vis visualization)
|
||||||
|
{
|
||||||
|
Smart_Data *sd;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,6 @@ static void em_size_get (void *video,
|
||||||
static void em_pos_set (void *video,
|
static void em_pos_set (void *video,
|
||||||
double pos);
|
double pos);
|
||||||
|
|
||||||
static void em_vis_set (void *video,
|
|
||||||
Emotion_Vis vis);
|
|
||||||
|
|
||||||
static double em_len_get (void *video);
|
static double em_len_get (void *video);
|
||||||
|
|
||||||
|
@ -55,8 +53,14 @@ static double em_fps_get (void *video);
|
||||||
|
|
||||||
static double em_pos_get (void *video);
|
static double em_pos_get (void *video);
|
||||||
|
|
||||||
|
static void em_vis_set (void *video,
|
||||||
|
Emotion_Vis vis);
|
||||||
|
|
||||||
static Emotion_Vis em_vis_get (void *video);
|
static Emotion_Vis em_vis_get (void *video);
|
||||||
|
|
||||||
|
static Evas_Bool em_vis_supported (void *video,
|
||||||
|
Emotion_Vis vis);
|
||||||
|
|
||||||
static double em_ratio_get (void *video);
|
static double em_ratio_get (void *video);
|
||||||
|
|
||||||
static int em_video_handled (void *video);
|
static int em_video_handled (void *video);
|
||||||
|
@ -177,13 +181,14 @@ static Emotion_Video_Module em_module =
|
||||||
em_stop, /* stop */
|
em_stop, /* stop */
|
||||||
em_size_get, /* size_get */
|
em_size_get, /* size_get */
|
||||||
em_pos_set, /* pos_set */
|
em_pos_set, /* pos_set */
|
||||||
em_vis_set, /* vis_set */
|
|
||||||
em_len_get, /* len_get */
|
em_len_get, /* len_get */
|
||||||
em_fps_num_get, /* fps_num_get */
|
em_fps_num_get, /* fps_num_get */
|
||||||
em_fps_den_get, /* fps_den_get */
|
em_fps_den_get, /* fps_den_get */
|
||||||
em_fps_get, /* fps_get */
|
em_fps_get, /* fps_get */
|
||||||
em_pos_get, /* pos_get */
|
em_pos_get, /* pos_get */
|
||||||
|
em_vis_set, /* vis_set */
|
||||||
em_vis_get, /* vis_get */
|
em_vis_get, /* vis_get */
|
||||||
|
em_vis_supported, /* vis_supported */
|
||||||
em_ratio_get, /* ratio_get */
|
em_ratio_get, /* ratio_get */
|
||||||
em_video_handled, /* video_handled */
|
em_video_handled, /* video_handled */
|
||||||
em_audio_handled, /* audio_handled */
|
em_audio_handled, /* audio_handled */
|
||||||
|
@ -265,7 +270,7 @@ em_init(Evas_Object *obj,
|
||||||
ev->ratio = 1.0;
|
ev->ratio = 1.0;
|
||||||
ev->video_sink_nbr = 0;
|
ev->video_sink_nbr = 0;
|
||||||
ev->audio_sink_nbr = 0;
|
ev->audio_sink_nbr = 0;
|
||||||
ev->vis = EMOTION_VIS_GOOM;
|
ev->vis = EMOTION_VIS_NONE;
|
||||||
|
|
||||||
/* Create the file descriptors */
|
/* Create the file descriptors */
|
||||||
if (pipe(fds) == 0)
|
if (pipe(fds) == 0)
|
||||||
|
@ -581,18 +586,6 @@ em_pos_set(void *video,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
em_vis_set(void *video,
|
|
||||||
Emotion_Vis vis)
|
|
||||||
{
|
|
||||||
Emotion_Gstreamer_Video *ev;
|
|
||||||
|
|
||||||
ev = (Emotion_Gstreamer_Video *)video;
|
|
||||||
|
|
||||||
if (ev->vis == vis) return;
|
|
||||||
ev->vis = vis;
|
|
||||||
}
|
|
||||||
|
|
||||||
static double
|
static double
|
||||||
em_len_get(void *video)
|
em_len_get(void *video)
|
||||||
{
|
{
|
||||||
|
@ -663,6 +656,18 @@ em_pos_get(void *video)
|
||||||
return ev->position;
|
return ev->position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
em_vis_set(void *video,
|
||||||
|
Emotion_Vis vis)
|
||||||
|
{
|
||||||
|
Emotion_Gstreamer_Video *ev;
|
||||||
|
|
||||||
|
ev = (Emotion_Gstreamer_Video *)video;
|
||||||
|
|
||||||
|
if (ev->vis == vis) return;
|
||||||
|
ev->vis = vis;
|
||||||
|
}
|
||||||
|
|
||||||
static Emotion_Vis
|
static Emotion_Vis
|
||||||
em_vis_get(void *video)
|
em_vis_get(void *video)
|
||||||
{
|
{
|
||||||
|
@ -673,6 +678,27 @@ em_vis_get(void *video)
|
||||||
return ev->vis;
|
return ev->vis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Evas_Bool
|
||||||
|
em_vis_supported(void *ef, Emotion_Vis vis)
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
GstElementFactory *factory;
|
||||||
|
|
||||||
|
if (vis == EMOTION_VIS_NONE)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
name = emotion_visualization_element_name_get(vis);
|
||||||
|
if (!name)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
factory = gst_element_factory_find(name);
|
||||||
|
if (!factory)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
gst_object_unref(factory);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static double
|
static double
|
||||||
em_ratio_get(void *video)
|
em_ratio_get(void *video)
|
||||||
{
|
{
|
||||||
|
|
|
@ -249,6 +249,54 @@ emotion_pipeline_cdda_track_count_get(void *video)
|
||||||
return tracks_count;
|
return tracks_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
emotion_visualization_element_name_get(Emotion_Vis visualisation)
|
||||||
|
{
|
||||||
|
switch (visualisation)
|
||||||
|
{
|
||||||
|
case EMOTION_VIS_NONE:
|
||||||
|
return NULL;
|
||||||
|
case EMOTION_VIS_GOOM:
|
||||||
|
return "goom";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_BUMPSCOPE:
|
||||||
|
return "libvisual_bumpscope";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_CORONA:
|
||||||
|
return "libvisual_corona";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_DANCING_PARTICLES:
|
||||||
|
return "libvisual_dancingparticles";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_GDKPIXBUF:
|
||||||
|
return "libvisual_gdkpixbuf";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_G_FORCE:
|
||||||
|
return "libvisual_G-Force";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_GOOM:
|
||||||
|
return "libvisual_goom";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_INFINITE:
|
||||||
|
return "libvisual_infinite";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_JAKDAW:
|
||||||
|
return "libvisual_jakdaw";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_JESS:
|
||||||
|
return "libvisual_jess";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_LV_ANALYSER:
|
||||||
|
return "libvisual_lv_analyzer";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_LV_FLOWER:
|
||||||
|
return "libvisual_lv_flower";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_LV_GLTEST:
|
||||||
|
return "libvisual_lv_gltest";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_LV_SCOPE:
|
||||||
|
return "libvisual_lv_scope";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_MADSPIN:
|
||||||
|
return "libvisual_madspin";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_NEBULUS:
|
||||||
|
return "libvisual_nebulus";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_OINKSIE:
|
||||||
|
return "libvisual_oinksie";
|
||||||
|
case EMOTION_VIS_LIBVISUAL_PLASMA:
|
||||||
|
return "libvisual_plazma";
|
||||||
|
default:
|
||||||
|
return "goom";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GstElement *
|
GstElement *
|
||||||
emotion_audio_sink_create(Emotion_Gstreamer_Video *ev, int index)
|
emotion_audio_sink_create(Emotion_Gstreamer_Video *ev, int index)
|
||||||
{
|
{
|
||||||
|
@ -302,102 +350,46 @@ emotion_audio_sink_create(Emotion_Gstreamer_Video *ev, int index)
|
||||||
|
|
||||||
/* visualisation part */
|
/* visualisation part */
|
||||||
{
|
{
|
||||||
GstElement *vis = NULL;
|
const char *vis_name = emotion_visualization_element_name_get(ev->vis);
|
||||||
char *vis_name;
|
|
||||||
|
|
||||||
switch (ev->vis)
|
if (vis_name)
|
||||||
{
|
{
|
||||||
case EMOTION_VIS_GOOM:
|
GstElement *vis;
|
||||||
vis_name = "goom";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_BUMPSCOPE:
|
|
||||||
vis_name = "libvisual_bumpscope";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_CORONA:
|
|
||||||
vis_name = "libvisual_corona";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_DANCING_PARTICLES:
|
|
||||||
vis_name = "libvisual_dancingparticles";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_GDKPIXBUF:
|
|
||||||
vis_name = "libvisual_gdkpixbuf";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_G_FORCE:
|
|
||||||
vis_name = "libvisual_G-Force";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_GOOM:
|
|
||||||
vis_name = "libvisual_goom";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_INFINITE:
|
|
||||||
vis_name = "libvisual_infinite";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_JAKDAW:
|
|
||||||
vis_name = "libvisual_jakdaw";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_JESS:
|
|
||||||
vis_name = "libvisual_jess";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_LV_ANALYSER:
|
|
||||||
vis_name = "libvisual_lv_analyzer";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_LV_FLOWER:
|
|
||||||
vis_name = "libvisual_lv_flower";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_LV_GLTEST:
|
|
||||||
vis_name = "libvisual_lv_gltest";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_LV_SCOPE:
|
|
||||||
vis_name = "libvisual_lv_scope";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_MADSPIN:
|
|
||||||
vis_name = "libvisual_madspin";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_NEBULUS:
|
|
||||||
vis_name = "libvisual_nebulus";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_OINKSIE:
|
|
||||||
vis_name = "libvisual_oinksie";
|
|
||||||
break;
|
|
||||||
case EMOTION_VIS_LIBVISUAL_PLASMA:
|
|
||||||
vis_name = "libvisual_plazma";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
vis_name = "goom";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_snprintf(buf, 128, "vis%d", index);
|
g_snprintf(buf, 128, "vis%d", index);
|
||||||
if ((vis = gst_element_factory_make(vis_name, buf)))
|
vis = gst_element_factory_make(vis_name, buf);
|
||||||
{
|
if (vis)
|
||||||
GstElement *queue;
|
{
|
||||||
GstElement *conv;
|
GstElement *queue;
|
||||||
GstElement *cspace;
|
GstElement *conv;
|
||||||
GstElement *sink;
|
GstElement *cspace;
|
||||||
GstPad *vispad;
|
GstElement *sink;
|
||||||
GstCaps *caps;
|
GstPad *vispad;
|
||||||
|
GstCaps *caps;
|
||||||
|
|
||||||
g_snprintf(buf, 128, "visbin%d", index);
|
g_snprintf(buf, 128, "visbin%d", index);
|
||||||
visbin = gst_bin_new(buf);
|
visbin = gst_bin_new(buf);
|
||||||
|
|
||||||
queue = gst_element_factory_make("queue", NULL);
|
queue = gst_element_factory_make("queue", NULL);
|
||||||
conv = gst_element_factory_make("audioconvert", NULL);
|
conv = gst_element_factory_make("audioconvert", NULL);
|
||||||
cspace = gst_element_factory_make("ffmpegcolorspace", NULL);
|
cspace = gst_element_factory_make("ffmpegcolorspace", NULL);
|
||||||
g_snprintf(buf, 128, "vissink%d", index);
|
g_snprintf(buf, 128, "vissink%d", index);
|
||||||
sink = gst_element_factory_make("fakesink", buf);
|
sink = gst_element_factory_make("fakesink", buf);
|
||||||
|
|
||||||
gst_bin_add_many(GST_BIN(visbin),
|
gst_bin_add_many(GST_BIN(visbin),
|
||||||
queue, conv, vis, cspace, sink, NULL);
|
queue, conv, vis, cspace, sink, NULL);
|
||||||
gst_element_link_many(queue, conv, vis, cspace, NULL);
|
gst_element_link_many(queue, conv, vis, cspace, NULL);
|
||||||
caps = gst_caps_new_simple("video/x-raw-rgb",
|
caps = gst_caps_new_simple("video/x-raw-rgb",
|
||||||
"bpp", G_TYPE_INT, 32,
|
"bpp", G_TYPE_INT, 32,
|
||||||
"width", G_TYPE_INT, 320,
|
"width", G_TYPE_INT, 320,
|
||||||
"height", G_TYPE_INT, 200,
|
"height", G_TYPE_INT, 200,
|
||||||
NULL);
|
NULL);
|
||||||
gst_element_link_filtered(cspace, sink, caps);
|
gst_element_link_filtered(cspace, sink, caps);
|
||||||
|
|
||||||
vispad = gst_element_get_pad(queue, "sink");
|
vispad = gst_element_get_pad(queue, "sink");
|
||||||
gst_element_add_pad(visbin, gst_ghost_pad_new("sink", vispad));
|
gst_element_add_pad(visbin, gst_ghost_pad_new("sink", vispad));
|
||||||
gst_object_unref(vispad);
|
gst_object_unref(vispad);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,5 +37,7 @@ void file_new_decoded_pad_cb (GstElement *decodebin,
|
||||||
gboolean last,
|
gboolean last,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
const char *emotion_visualization_element_name_get(Emotion_Vis visualisation);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __EMOTION_GSTREAMER_PIPELINE_H__ */
|
#endif /* __EMOTION_GSTREAMER_PIPELINE_H__ */
|
||||||
|
|
|
@ -11,13 +11,14 @@ static void em_play (void *ef, double pos);
|
||||||
static void em_stop (void *ef);
|
static void em_stop (void *ef);
|
||||||
static void em_size_get (void *ef, int *w, int *h);
|
static void em_size_get (void *ef, int *w, int *h);
|
||||||
static void em_pos_set (void *ef, double pos);
|
static void em_pos_set (void *ef, double pos);
|
||||||
static void em_vis_set (void *ef, Emotion_Vis vis);
|
|
||||||
static double em_len_get (void *ef);
|
static double em_len_get (void *ef);
|
||||||
static int em_fps_num_get (void *ef);
|
static int em_fps_num_get (void *ef);
|
||||||
static int em_fps_den_get (void *ef);
|
static int em_fps_den_get (void *ef);
|
||||||
static double em_fps_get (void *ef);
|
static double em_fps_get (void *ef);
|
||||||
static double em_pos_get (void *ef);
|
static double em_pos_get (void *ef);
|
||||||
|
static void em_vis_set (void *ef, Emotion_Vis vis);
|
||||||
static Emotion_Vis em_vis_get (void *ef);
|
static Emotion_Vis em_vis_get (void *ef);
|
||||||
|
static Evas_Bool em_vis_supported (void *ef, Emotion_Vis vis);
|
||||||
static double em_ratio_get (void *ef);
|
static double em_ratio_get (void *ef);
|
||||||
static int em_seekable (void *ef);
|
static int em_seekable (void *ef);
|
||||||
static void em_frame_done (void *ef);
|
static void em_frame_done (void *ef);
|
||||||
|
@ -508,17 +509,6 @@ em_pos_set(void *ef, double pos)
|
||||||
_em_slave_event(ev, 6, ppos);
|
_em_slave_event(ev, 6, ppos);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
em_vis_set(void *ef,
|
|
||||||
Emotion_Vis vis)
|
|
||||||
{
|
|
||||||
Emotion_Xine_Video *ev;
|
|
||||||
|
|
||||||
ev = (Emotion_Xine_Video *)ef;
|
|
||||||
if (ev->vis == vis) return;
|
|
||||||
ev->vis = vis;
|
|
||||||
}
|
|
||||||
|
|
||||||
static double
|
static double
|
||||||
em_len_get(void *ef)
|
em_len_get(void *ef)
|
||||||
{
|
{
|
||||||
|
@ -564,6 +554,16 @@ em_pos_get(void *ef)
|
||||||
return ev->pos;
|
return ev->pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
em_vis_set(void *ef, Emotion_Vis vis)
|
||||||
|
{
|
||||||
|
Emotion_Xine_Video *ev;
|
||||||
|
|
||||||
|
ev = (Emotion_Xine_Video *)ef;
|
||||||
|
if (ev->vis == vis) return;
|
||||||
|
ev->vis = vis;
|
||||||
|
}
|
||||||
|
|
||||||
static Emotion_Vis
|
static Emotion_Vis
|
||||||
em_vis_get(void *ef)
|
em_vis_get(void *ef)
|
||||||
{
|
{
|
||||||
|
@ -574,6 +574,12 @@ em_vis_get(void *ef)
|
||||||
return ev->vis;
|
return ev->vis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Evas_Bool
|
||||||
|
em_vis_supported(void *ef, Emotion_Vis vis)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static double
|
static double
|
||||||
em_ratio_get(void *ef)
|
em_ratio_get(void *ef)
|
||||||
{
|
{
|
||||||
|
@ -1467,13 +1473,14 @@ static Emotion_Video_Module em_module =
|
||||||
em_stop, /* stop */
|
em_stop, /* stop */
|
||||||
em_size_get, /* size_get */
|
em_size_get, /* size_get */
|
||||||
em_pos_set, /* pos_set */
|
em_pos_set, /* pos_set */
|
||||||
em_vis_set, /* vis_set */
|
|
||||||
em_len_get, /* len_get */
|
em_len_get, /* len_get */
|
||||||
em_fps_num_get, /* fps_num_get */
|
em_fps_num_get, /* fps_num_get */
|
||||||
em_fps_den_get, /* fps_den_get */
|
em_fps_den_get, /* fps_den_get */
|
||||||
em_fps_get, /* fps_get */
|
em_fps_get, /* fps_get */
|
||||||
em_pos_get, /* pos_get */
|
em_pos_get, /* pos_get */
|
||||||
|
em_vis_set, /* vis_set */
|
||||||
em_vis_get, /* vis_get */
|
em_vis_get, /* vis_get */
|
||||||
|
em_vis_supported, /* vis_supported */
|
||||||
em_ratio_get, /* ratio_get */
|
em_ratio_get, /* ratio_get */
|
||||||
em_video_handled, /* video_handled */
|
em_video_handled, /* video_handled */
|
||||||
em_audio_handled, /* audio_handled */
|
em_audio_handled, /* audio_handled */
|
||||||
|
|
Loading…
Reference in New Issue