summaryrefslogtreecommitdiff
path: root/legacy/emotion/src
diff options
context:
space:
mode:
authorCedric BAIL <cedric.bail@free.fr>2011-07-17 21:38:54 +0000
committerCedric BAIL <cedric.bail@free.fr>2011-07-17 21:38:54 +0000
commitdad10a507f2f1da8dee4ad358f29adca42e6c010 (patch)
tree98279ee3aa5d296d5e1452cd997fb733ad9a618d /legacy/emotion/src
parent1fdf2c67b5ee1c7f54bfb443b955b02adfb356eb (diff)
emotion: add webcam detection, cleanup code and add timing detection.
SVN revision: 61452
Diffstat (limited to 'legacy/emotion/src')
-rw-r--r--legacy/emotion/src/lib/Emotion.h12
-rw-r--r--legacy/emotion/src/lib/Makefile.am7
-rw-r--r--legacy/emotion/src/lib/emotion_private.h3
-rw-r--r--legacy/emotion/src/lib/emotion_smart.c128
-rw-r--r--legacy/emotion/src/modules/gstreamer/emotion_gstreamer.c20
-rw-r--r--legacy/emotion/src/modules/gstreamer/emotion_sink.c22
-rw-r--r--legacy/emotion/src/modules/vlc/emotion_vlc.c2
-rw-r--r--legacy/emotion/src/modules/xine/emotion_xine.c1
8 files changed, 51 insertions, 144 deletions
diff --git a/legacy/emotion/src/lib/Emotion.h b/legacy/emotion/src/lib/Emotion.h
index b17dbe9bf0..9640a4d317 100644
--- a/legacy/emotion/src/lib/Emotion.h
+++ b/legacy/emotion/src/lib/Emotion.h
@@ -223,6 +223,9 @@ extern "C" {
223 * @defgroup Emotion_Info Miscellaneous information retrieval functions 223 * @defgroup Emotion_Info Miscellaneous information retrieval functions
224 */ 224 */
225 225
226EAPI Eina_Bool emotion_init(void);
227EAPI Eina_Bool emotion_shutdown(void);
228
226/** 229/**
227 * @brief Add an emotion object to the canvas. 230 * @brief Add an emotion object to the canvas.
228 * 231 *
@@ -760,12 +763,15 @@ EAPI void emotion_object_last_position_save (Evas_Object *obj);
760EAPI void emotion_object_suspend_set (Evas_Object *obj, Emotion_Suspend state); 763EAPI void emotion_object_suspend_set (Evas_Object *obj, Emotion_Suspend state);
761EAPI Emotion_Suspend emotion_object_suspend_get (Evas_Object *obj); 764EAPI Emotion_Suspend emotion_object_suspend_get (Evas_Object *obj);
762 765
763EAPI Eina_Bool emotion_object_extension_can_play_get(const Evas_Object *obj, const char *file);
764EAPI Eina_Bool emotion_object_extension_can_play_fast_get(const Evas_Object *obj, const char *file);
765
766EAPI Eina_Bool emotion_object_extension_may_play_fast_get(const char *file); 766EAPI Eina_Bool emotion_object_extension_may_play_fast_get(const char *file);
767EAPI Eina_Bool emotion_object_extension_may_play_get(const char *file); 767EAPI Eina_Bool emotion_object_extension_may_play_get(const char *file);
768 768
769typedef struct _Emotion_Webcam Emotion_Webcam;
770
771EAPI const Eina_List *emotion_webcams_get(void);
772EAPI const char *emotion_webcam_name_get(Emotion_Webcam *ew);
773EAPI const char *emotion_webcam_device_get(Emotion_Webcam *ew);
774
769/** 775/**
770 * @} 776 * @}
771 */ 777 */
diff --git a/legacy/emotion/src/lib/Makefile.am b/legacy/emotion/src/lib/Makefile.am
index cf2dadce1e..528de493bb 100644
--- a/legacy/emotion/src/lib/Makefile.am
+++ b/legacy/emotion/src/lib/Makefile.am
@@ -10,7 +10,8 @@ AM_CPPFLAGS = \
10@EMOTION_CPPFLAGS@ \ 10@EMOTION_CPPFLAGS@ \
11@EMOTION_CFLAGS@ \ 11@EMOTION_CFLAGS@ \
12@EIO_CFLAGS@ \ 12@EIO_CFLAGS@ \
13@EFL_EMOTION_BUILD@ 13@EFL_EMOTION_BUILD@ \
14@EEZE_CFLAGS@
14 15
15if EMOTION_STATIC_BUILD_XINE 16if EMOTION_STATIC_BUILD_XINE
16AM_CPPFLAGS += @XINE_CFLAGS@ 17AM_CPPFLAGS += @XINE_CFLAGS@
@@ -28,7 +29,7 @@ lib_LTLIBRARIES = libemotion.la
28includes_HEADERS = Emotion.h 29includes_HEADERS = Emotion.h
29includesdir = $(includedir)/emotion-@VMAJ@ 30includesdir = $(includedir)/emotion-@VMAJ@
30 31
31libemotion_la_SOURCES = emotion_smart.c 32libemotion_la_SOURCES = emotion_smart.c emotion_main.c
32 33
33if EMOTION_STATIC_BUILD_XINE 34if EMOTION_STATIC_BUILD_XINE
34libemotion_la_SOURCES += \ 35libemotion_la_SOURCES += \
@@ -47,7 +48,7 @@ libemotion_la_SOURCES += \
47$(top_srcdir)/src/modules/vlc/emotion_vlc.c 48$(top_srcdir)/src/modules/vlc/emotion_vlc.c
48endif 49endif
49 50
50libemotion_la_LIBADD = @EMOTION_LIBS@ @EIO_LIBS@ 51libemotion_la_LIBADD = @EMOTION_LIBS@ @EIO_LIBS@ @EEZE_LIBS@
51 52
52if EMOTION_STATIC_BUILD_XINE 53if EMOTION_STATIC_BUILD_XINE
53libemotion_la_LIBADD += @XINE_LIBS@ 54libemotion_la_LIBADD += @XINE_LIBS@
diff --git a/legacy/emotion/src/lib/emotion_private.h b/legacy/emotion/src/lib/emotion_private.h
index cedf978579..3fae9684b2 100644
--- a/legacy/emotion/src/lib/emotion_private.h
+++ b/legacy/emotion/src/lib/emotion_private.h
@@ -109,7 +109,6 @@ struct _Emotion_Video_Module
109 double (*speed_get) (void *ef); 109 double (*speed_get) (void *ef);
110 int (*eject) (void *ef); 110 int (*eject) (void *ef);
111 const char * (*meta_get) (void *ef, int meta); 111 const char * (*meta_get) (void *ef, int meta);
112 Eina_Bool (*can_play_get) (const void *ef, const char *file);
113 112
114 Eina_Emotion_Plugins *plugin; 113 Eina_Emotion_Plugins *plugin;
115}; 114};
@@ -132,8 +131,6 @@ EAPI void _emotion_spu_button_num_set(Evas_Object *obj, int num);
132EAPI void _emotion_spu_button_set(Evas_Object *obj, int button); 131EAPI void _emotion_spu_button_set(Evas_Object *obj, int button);
133EAPI void _emotion_seek_done(Evas_Object *obj); 132EAPI void _emotion_seek_done(Evas_Object *obj);
134 133
135EAPI Eina_Bool _emotion_object_extension_can_play_generic_get(const void *data __UNUSED__, const char *file);
136
137EAPI Eina_Bool _emotion_module_register(const char *name, Emotion_Module_Open open, Emotion_Module_Close close); 134EAPI Eina_Bool _emotion_module_register(const char *name, Emotion_Module_Open open, Emotion_Module_Close close);
138EAPI Eina_Bool _emotion_module_unregister(const char *name); 135EAPI Eina_Bool _emotion_module_unregister(const char *name);
139 136
diff --git a/legacy/emotion/src/lib/emotion_smart.c b/legacy/emotion/src/lib/emotion_smart.c
index fb32dfb85e..3c1f3afcdf 100644
--- a/legacy/emotion/src/lib/emotion_smart.c
+++ b/legacy/emotion/src/lib/emotion_smart.c
@@ -1156,52 +1156,6 @@ emotion_object_last_position_save(Evas_Object *obj)
1156#endif 1156#endif
1157} 1157}
1158 1158
1159EAPI Eina_Bool
1160emotion_object_extension_can_play_fast_get(const Evas_Object *obj, const char *file)
1161{
1162 const Smart_Data *sd;
1163
1164 E_SMART_OBJ_GET_RETURN(sd, obj, E_OBJ_NAME, 0);
1165 if (!sd->module) return EINA_FALSE;
1166 if (!sd->video) return EINA_FALSE;
1167 if (!sd->module->can_play_get) return EINA_FALSE;
1168 return sd->module->can_play_get(sd->video, file);
1169}
1170
1171EAPI Eina_Bool
1172emotion_object_extension_can_play_get(const Evas_Object *obj, const char *file)
1173{
1174 const char *tmp;
1175 Eina_Bool result;
1176
1177 tmp = eina_stringshare_add(file);
1178 result = emotion_object_extension_can_play_fast_get(obj, tmp);
1179 eina_stringshare_del(tmp);
1180
1181 return result;
1182}
1183
1184EAPI Eina_Bool
1185emotion_object_extension_may_play_fast_get(const char *file)
1186{
1187 if (!file) return EINA_FALSE;
1188 return _emotion_object_extension_can_play_generic_get(NULL, file);
1189}
1190
1191EAPI Eina_Bool
1192emotion_object_extension_may_play_get(const char *file)
1193{
1194 const char *tmp;
1195 Eina_Bool result;
1196
1197 if (!file) return EINA_FALSE;
1198 tmp = eina_stringshare_add(file);
1199 result = emotion_object_extension_may_play_fast_get(tmp);
1200 eina_stringshare_del(tmp);
1201
1202 return result;
1203}
1204
1205EAPI void 1159EAPI void
1206emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend state) 1160emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend state)
1207{ 1161{
@@ -1238,87 +1192,6 @@ motion_object_suspend_get(Evas_Object *obj)
1238/* Utility calls for modules */ 1192/* Utility calls for modules */
1239/*****************************/ 1193/*****************************/
1240 1194
1241struct ext_match_s
1242{
1243 unsigned int length;
1244 const char *extension;
1245};
1246
1247#define MATCHING(Ext) \
1248 { sizeof (Ext), Ext }
1249
1250static const struct ext_match_s matchs[] =
1251{ /* map extensions to know if it's a emotion playable content for good first-guess tries */
1252 MATCHING(".264"),
1253 MATCHING(".3g2"),
1254 MATCHING(".3gp"),
1255 MATCHING(".3gp2"),
1256 MATCHING(".3gpp"),
1257 MATCHING(".3gpp2"),
1258 MATCHING(".3p2"),
1259 MATCHING(".asf"),
1260 MATCHING(".avi"),
1261 MATCHING(".bdm"),
1262 MATCHING(".bdmv"),
1263 MATCHING(".clpi"),
1264 MATCHING(".clp"),
1265 MATCHING(".fla"),
1266 MATCHING(".flv"),
1267 MATCHING(".m1v"),
1268 MATCHING(".m2v"),
1269 MATCHING(".m2t"),
1270 MATCHING(".m4v"),
1271 MATCHING(".mkv"),
1272 MATCHING(".mov"),
1273 MATCHING(".mp2"),
1274 MATCHING(".mp2ts"),
1275 MATCHING(".mp4"),
1276 MATCHING(".mpe"),
1277 MATCHING(".mpeg"),
1278 MATCHING(".mpg"),
1279 MATCHING(".mpl"),
1280 MATCHING(".mpls"),
1281 MATCHING(".mts"),
1282 MATCHING(".mxf"),
1283 MATCHING(".nut"),
1284 MATCHING(".nuv"),
1285 MATCHING(".ogg"),
1286 MATCHING(".ogm"),
1287 MATCHING(".ogv"),
1288 MATCHING(".rm"),
1289 MATCHING(".rmj"),
1290 MATCHING(".rmm"),
1291 MATCHING(".rms"),
1292 MATCHING(".rmx"),
1293 MATCHING(".rmvb"),
1294 MATCHING(".swf"),
1295 MATCHING(".ts"),
1296 MATCHING(".weba"),
1297 MATCHING(".webm"),
1298 MATCHING(".wmv")
1299};
1300
1301EAPI Eina_Bool
1302_emotion_object_extension_can_play_generic_get(const void *data __UNUSED__, const char *file)
1303{
1304 unsigned int length;
1305 unsigned int i;
1306
1307 length = eina_stringshare_strlen(file) + 1;
1308 if (length < 5) return EINA_FALSE;
1309
1310 for (i = 0; i < sizeof (matchs) / sizeof (struct ext_match_s); ++i)
1311 {
1312 if (matchs[i].length > length) continue;
1313
1314 if (!strcasecmp(matchs[i].extension,
1315 file + length - matchs[i].length))
1316 return EINA_TRUE;
1317 }
1318
1319 return EINA_FALSE;
1320}
1321
1322EAPI void * 1195EAPI void *
1323_emotion_video_get(const Evas_Object *obj) 1196_emotion_video_get(const Evas_Object *obj)
1324{ 1197{
@@ -1880,3 +1753,4 @@ _emotion_image_get(const Evas_Object *obj)
1880 if (!sd) return NULL; 1753 if (!sd) return NULL;
1881 return sd->obj; 1754 return sd->obj;
1882} 1755}
1756
diff --git a/legacy/emotion/src/modules/gstreamer/emotion_gstreamer.c b/legacy/emotion/src/modules/gstreamer/emotion_gstreamer.c
index faaaa7fd5e..15f26830bc 100644
--- a/legacy/emotion/src/modules/gstreamer/emotion_gstreamer.c
+++ b/legacy/emotion/src/modules/gstreamer/emotion_gstreamer.c
@@ -227,7 +227,6 @@ static Emotion_Video_Module em_module =
227 em_speed_get, /* speed_get */ 227 em_speed_get, /* speed_get */
228 em_eject, /* eject */ 228 em_eject, /* eject */
229 em_meta_get, /* meta_get */ 229 em_meta_get, /* meta_get */
230 _emotion_object_extension_can_play_generic_get, /* play_get */
231 NULL /* handle */ 230 NULL /* handle */
232}; 231};
233 232
@@ -379,6 +378,7 @@ em_file_open(const char *file,
379 Emotion_Gstreamer_Video *ev; 378 Emotion_Gstreamer_Video *ev;
380 Eina_Strbuf *sbuf = NULL; 379 Eina_Strbuf *sbuf = NULL;
381 const char *uri; 380 const char *uri;
381 double start, end;
382 int i; 382 int i;
383 383
384 ev = (Emotion_Gstreamer_Video *)video; 384 ev = (Emotion_Gstreamer_Video *)video;
@@ -407,20 +407,26 @@ em_file_open(const char *file,
407 eina_strbuf_append(sbuf, file); 407 eina_strbuf_append(sbuf, file);
408 } 408 }
409 409
410 start = ecore_time_get();
410 uri = sbuf ? eina_strbuf_string_get(sbuf) : file; 411 uri = sbuf ? eina_strbuf_string_get(sbuf) : file;
411 DBG("setting file to '%s'", uri); 412 DBG("setting file to '%s'", uri);
412 ev->pipeline = gstreamer_video_sink_new(ev, obj, uri); 413 ev->pipeline = gstreamer_video_sink_new(ev, obj, uri);
413 if (sbuf) eina_strbuf_free(sbuf); 414 if (sbuf) eina_strbuf_free(sbuf);
415 end = ecore_time_get();
416 DBG("Pipeline creation: %f", end - start);
414 417
415 if (!ev->pipeline) 418 if (!ev->pipeline)
416 return EINA_FALSE; 419 return EINA_FALSE;
417 420
421 start = ecore_time_get();
418 ev->eos_bus = gst_pipeline_get_bus(GST_PIPELINE(ev->pipeline)); 422 ev->eos_bus = gst_pipeline_get_bus(GST_PIPELINE(ev->pipeline));
419 if (!ev->eos_bus) 423 if (!ev->eos_bus)
420 { 424 {
421 ERR("could not get the bus"); 425 ERR("could not get the bus");
422 return EINA_FALSE; 426 return EINA_FALSE;
423 } 427 }
428 end = ecore_time_get();
429 DBG("Get the bus: %f", end - start);
424 430
425 /* Evas Object */ 431 /* Evas Object */
426 ev->obj = obj; 432 ev->obj = obj;
@@ -442,6 +448,7 @@ em_file_open(const char *file,
442 448
443 /* video stream */ 449 /* video stream */
444 450
451 start = ecore_time_get();
445 for (i = 0; i < ev->video_stream_nbr; i++) 452 for (i = 0; i < ev->video_stream_nbr; i++)
446 { 453 {
447 Emotion_Video_Stream *vstream; 454 Emotion_Video_Stream *vstream;
@@ -515,9 +522,12 @@ em_file_open(const char *file,
515 unref_pad_v: 522 unref_pad_v:
516 gst_object_unref(pad); 523 gst_object_unref(pad);
517 } 524 }
525 end = ecore_time_get();
526 DBG("Get video streams: %f", end - start);
518 527
519 /* Audio streams */ 528 /* Audio streams */
520 529
530 start = ecore_time_get();
521 for (i = 0; i < ev->audio_stream_nbr; i++) 531 for (i = 0; i < ev->audio_stream_nbr; i++)
522 { 532 {
523 Emotion_Audio_Stream *astream; 533 Emotion_Audio_Stream *astream;
@@ -575,9 +585,12 @@ em_file_open(const char *file,
575 unref_pad_a: 585 unref_pad_a:
576 gst_object_unref(pad); 586 gst_object_unref(pad);
577 } 587 }
588 end = ecore_time_get();
589 DBG("Get audio streams: %f", end - start);
578 590
579 /* Visualization sink */ 591 /* Visualization sink */
580 592
593 start = ecore_time_get();
581 if (ev->video_stream_nbr == 0) 594 if (ev->video_stream_nbr == 0)
582 { 595 {
583 GstElement *vis = NULL; 596 GstElement *vis = NULL;
@@ -613,6 +626,8 @@ em_file_open(const char *file,
613 flags |= 0x00000008; 626 flags |= 0x00000008;
614 g_object_set(G_OBJECT(ev->pipeline), "flags", flags, NULL); 627 g_object_set(G_OBJECT(ev->pipeline), "flags", flags, NULL);
615 } 628 }
629 end = ecore_time_get();
630 DBG("Get visualization streams: %f", end - start);
616 631
617 finalize: 632 finalize:
618 633
@@ -656,10 +671,13 @@ em_file_open(const char *file,
656 _free_metadata(ev->metadata); 671 _free_metadata(ev->metadata);
657 ev->metadata = calloc(1, sizeof(Emotion_Gstreamer_Metadata)); 672 ev->metadata = calloc(1, sizeof(Emotion_Gstreamer_Metadata));
658 673
674 start = ecore_time_get();
659 em_audio_channel_volume_set(ev, ev->volume); 675 em_audio_channel_volume_set(ev, ev->volume);
660 676
661 _eos_timer_fct(ev); 677 _eos_timer_fct(ev);
662 _emotion_open_done(ev->obj); 678 _emotion_open_done(ev->obj);
679 end = ecore_time_get();
680 DBG("Last stuff: %f", end - start);
663 681
664 return 1; 682 return 1;
665} 683}
diff --git a/legacy/emotion/src/modules/gstreamer/emotion_sink.c b/legacy/emotion/src/modules/gstreamer/emotion_sink.c
index decc4e6293..e11071c501 100644
--- a/legacy/emotion/src/modules/gstreamer/emotion_sink.c
+++ b/legacy/emotion/src/modules/gstreamer/emotion_sink.c
@@ -471,10 +471,10 @@ static void evas_video_sink_render_handler(void *data,
471 471
472 if (priv->format == GST_VIDEO_FORMAT_I420) { 472 if (priv->format == GST_VIDEO_FORMAT_I420) {
473 int i; 473 int i;
474 unsigned char **rows; 474 const unsigned char **rows;
475 475
476 evas_object_image_pixels_dirty_set(priv->o, 1); 476 evas_object_image_pixels_dirty_set(priv->o, 1);
477 rows = (unsigned char **)evas_data; 477 rows = (const unsigned char **)evas_data;
478 478
479 for (i = 0; i < priv->height; i++) 479 for (i = 0; i < priv->height; i++)
480 rows[i] = &gst_data[i * priv->width]; 480 rows[i] = &gst_data[i * priv->width];
@@ -490,11 +490,11 @@ static void evas_video_sink_render_handler(void *data,
490 490
491 if (priv->format == GST_VIDEO_FORMAT_YV12) { 491 if (priv->format == GST_VIDEO_FORMAT_YV12) {
492 int i; 492 int i;
493 unsigned char **rows; 493 const unsigned char **rows;
494 494
495 evas_object_image_pixels_dirty_set(priv->o, 1); 495 evas_object_image_pixels_dirty_set(priv->o, 1);
496 496
497 rows = (unsigned char **)evas_data; 497 rows = (const unsigned char **)evas_data;
498 498
499 for (i = 0; i < priv->height; i++) 499 for (i = 0; i < priv->height; i++)
500 rows[i] = &gst_data[i * priv->width]; 500 rows[i] = &gst_data[i * priv->width];
@@ -646,6 +646,7 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
646 GstElement *sink; 646 GstElement *sink;
647 Evas_Object *obj; 647 Evas_Object *obj;
648 GstStateChangeReturn res; 648 GstStateChangeReturn res;
649 double start, end;
649 650
650 obj = _emotion_image_get(o); 651 obj = _emotion_image_get(o);
651 if (!obj) 652 if (!obj)
@@ -654,13 +655,17 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
654 return NULL; 655 return NULL;
655 } 656 }
656 657
658 start = ecore_time_get();
657 playbin = gst_element_factory_make("playbin2", "playbin"); 659 playbin = gst_element_factory_make("playbin2", "playbin");
658 if (!playbin) 660 if (!playbin)
659 { 661 {
660 ERR("Unable to create 'playbin' GstElement."); 662 ERR("Unable to create 'playbin' GstElement.");
661 return NULL; 663 return NULL;
662 } 664 }
665 end = ecore_time_get();
666 DBG("Playbin2: %f", end - start);
663 667
668 start = ecore_time_get();
664 sink = gst_element_factory_make("emotion-sink", "sink"); 669 sink = gst_element_factory_make("emotion-sink", "sink");
665 if (!sink) 670 if (!sink)
666 { 671 {
@@ -671,20 +676,29 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
671 g_object_set(G_OBJECT(playbin), "video-sink", sink, NULL); 676 g_object_set(G_OBJECT(playbin), "video-sink", sink, NULL);
672 g_object_set(G_OBJECT(playbin), "uri", uri, NULL); 677 g_object_set(G_OBJECT(playbin), "uri", uri, NULL);
673 g_object_set(G_OBJECT(sink), "evas-object", obj, NULL); 678 g_object_set(G_OBJECT(sink), "evas-object", obj, NULL);
679 end = ecore_time_get();
674 680
681 DBG("emotion-sink: %f", end - start);
682
683 start = ecore_time_get();
675 res = gst_element_set_state(playbin, GST_STATE_PAUSED); 684 res = gst_element_set_state(playbin, GST_STATE_PAUSED);
676 if (res == GST_STATE_CHANGE_FAILURE) 685 if (res == GST_STATE_CHANGE_FAILURE)
677 { 686 {
678 ERR("Unable to set GST_STATE_PAUSED."); 687 ERR("Unable to set GST_STATE_PAUSED.");
679 goto unref_pipeline; 688 goto unref_pipeline;
680 } 689 }
690 end = ecore_time_get();
691 DBG("Pause pipeline: %f", end - start);
681 692
693 start = ecore_time_get();
682 res = gst_element_get_state(playbin, NULL, NULL, GST_CLOCK_TIME_NONE); 694 res = gst_element_get_state(playbin, NULL, NULL, GST_CLOCK_TIME_NONE);
683 if (res != GST_STATE_CHANGE_SUCCESS) 695 if (res != GST_STATE_CHANGE_SUCCESS)
684 { 696 {
685 ERR("Unable to get GST_CLOCK_TIME_NONE."); 697 ERR("Unable to get GST_CLOCK_TIME_NONE.");
686 goto unref_pipeline; 698 goto unref_pipeline;
687 } 699 }
700 end = ecore_time_get();
701 DBG("No time: %f", end - start);
688 702
689 evas_object_data_set(obj, "_emotion_gstreamer_video", ev); 703 evas_object_data_set(obj, "_emotion_gstreamer_video", ev);
690 704
diff --git a/legacy/emotion/src/modules/vlc/emotion_vlc.c b/legacy/emotion/src/modules/vlc/emotion_vlc.c
index 6179d183e1..c59cfc909b 100644
--- a/legacy/emotion/src/modules/vlc/emotion_vlc.c
+++ b/legacy/emotion/src/modules/vlc/emotion_vlc.c
@@ -1193,8 +1193,6 @@ static Emotion_Video_Module em_module =
1193 em_speed_get, /* speed_get */ 1193 em_speed_get, /* speed_get */
1194 em_eject, /* eject */ 1194 em_eject, /* eject */
1195 em_meta_get, /* meta_get */ 1195 em_meta_get, /* meta_get */
1196 _emotion_object_extension_can_play_generic_get, /* can_play_get */
1197
1198 NULL /* handle */ 1196 NULL /* handle */
1199}; 1197};
1200 1198
diff --git a/legacy/emotion/src/modules/xine/emotion_xine.c b/legacy/emotion/src/modules/xine/emotion_xine.c
index de02e3b60b..55ac337bba 100644
--- a/legacy/emotion/src/modules/xine/emotion_xine.c
+++ b/legacy/emotion/src/modules/xine/emotion_xine.c
@@ -1556,7 +1556,6 @@ static Emotion_Video_Module em_module =
1556 em_speed_get, /* speed_get */ 1556 em_speed_get, /* speed_get */
1557 em_eject, /* eject */ 1557 em_eject, /* eject */
1558 em_meta_get, /* meta_get */ 1558 em_meta_get, /* meta_get */
1559 _emotion_object_extension_can_play_generic_get, /* can_play_get */
1560 NULL /* handle */ 1559 NULL /* handle */
1561}; 1560};
1562 1561