#include <unistd.h>
#include <fcntl.h>
+#include <Eina.h>
+
#include "Emotion.h"
#include "emotion_private.h"
#include "emotion_gstreamer.h"
Emotion_Module_Options *opt)
{
Emotion_Gstreamer_Video *ev;
+ Emotion_Audio_Sink *asink;
+ Emotion_Video_Sink *vsink;
GError *error;
int fds[2];
goto failure_gstreamer;
/* We allocate the sinks lists */
- ev->video_sinks = ecore_list_new();
if (!ev->video_sinks)
goto failure_video_sinks;
- ecore_list_free_cb_set(ev->video_sinks, ECORE_FREE_CB(free));
- ev->audio_sinks = ecore_list_new();
if (!ev->audio_sinks)
goto failure_audio_sinks;
- ecore_list_free_cb_set(ev->audio_sinks, ECORE_FREE_CB(free));
*emotion_video = ev;
return 1;
failure_pipe:
- ecore_list_destroy(ev->audio_sinks);
+ EINA_LIST_FREE(ev->audio_sinks, asink)
+ free(asink);
failure_audio_sinks:
- ecore_list_destroy(ev->video_sinks);
+ EINA_LIST_FREE(ev->video_sinks, vsink)
+ free(vsink);
failure_video_sinks:
failure_gstreamer:
free(ev);
em_shutdown(void *video)
{
Emotion_Gstreamer_Video *ev;
+ Emotion_Audio_Sink *asink;
+ Emotion_Video_Sink *vsink;
ev = (Emotion_Gstreamer_Video *)video;
if (!ev)
/* FIXME: and the evas object ? */
if (ev->obj_data) free(ev->obj_data);
- ecore_list_destroy(ev->video_sinks);
- ecore_list_destroy(ev->audio_sinks);
+ EINA_LIST_FREE(ev->audio_sinks, asink)
+ free(asink);
+ EINA_LIST_FREE(ev->video_sinks, vsink)
+ free(vsink);
free(ev);
Emotion_Video_Sink *vsink;
Emotion_Audio_Sink *asink;
- vsink = (Emotion_Video_Sink *)ecore_list_first_goto(ev->video_sinks);
+ vsink = (Emotion_Video_Sink *)eina_list_data_get(ev->video_sinks);
if (vsink)
{
fprintf(stderr, "video : \n");
GST_TIME_ARGS((guint64)(vsink->length_time * GST_SECOND)));
}
- asink = (Emotion_Audio_Sink *)ecore_list_first_goto(ev->audio_sinks);
+ asink = (Emotion_Audio_Sink *)eina_list_data_get(ev->audio_sinks);
if (asink)
{
fprintf(stderr, "audio : \n");
em_file_close(void *video)
{
Emotion_Gstreamer_Video *ev;
+ Emotion_Audio_Sink *asink;
+ Emotion_Video_Sink *vsink;
ev = (Emotion_Gstreamer_Video *)video;
if (!ev)
return;
/* we clear the sink lists */
- ecore_list_clear(ev->video_sinks);
- ecore_list_clear(ev->audio_sinks);
+ EINA_LIST_FREE(ev->audio_sinks, asink)
+ free(asink);
+ EINA_LIST_FREE(ev->video_sinks, vsink)
+ free(vsink);
/* shutdown eos */
if (ev->eos_timer)
ev = (Emotion_Gstreamer_Video *)video;
- vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
+ vsink = (Emotion_Video_Sink *)eina_list_nth(ev->video_sinks, ev->video_sink_nbr);
if (vsink)
{
if (width) *width = vsink->width;
ev = (Emotion_Gstreamer_Video *)video;
- vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
- asink = (Emotion_Audio_Sink *)ecore_list_index_goto(ev->video_sinks, ev->audio_sink_nbr);
+ vsink = (Emotion_Video_Sink *)eina_list_nth(ev->video_sinks, ev->video_sink_nbr);
+ asink = (Emotion_Audio_Sink *)eina_list_nth(ev->video_sinks, ev->audio_sink_nbr);
if (vsink)
{
Emotion_Gstreamer_Video *ev;
Emotion_Video_Sink *vsink;
Emotion_Audio_Sink *asink;
+ Eina_List *l;
GstFormat fmt;
gint64 val;
gboolean ret;
return val / 1000000000.0;
fallback:
- ecore_list_first_goto(ev->audio_sinks);
- while ((asink = ecore_list_next(ev->audio_sinks)) != NULL)
+ fputs("Gstreamer reported no length, try existing sinks...\n", stderr);
+
+ EINA_LIST_FOREACH(ev->audio_sinks, l, asink)
if (asink->length_time >= 0)
return asink->length_time;
- ecore_list_first_goto(ev->video_sinks);
- while ((vsink = ecore_list_next(ev->video_sinks)) != NULL)
+ EINA_LIST_FOREACH(ev->video_sinks, l, vsink)
if (vsink->length_time >= 0)
return vsink->length_time;
ev = (Emotion_Gstreamer_Video *)video;
- vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
+ vsink = (Emotion_Video_Sink *)eina_list_nth(ev->video_sinks, ev->video_sink_nbr);
if (vsink)
return vsink->fps_num;
ev = (Emotion_Gstreamer_Video *)video;
- vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
+ vsink = (Emotion_Video_Sink *)eina_list_nth(ev->video_sinks, ev->video_sink_nbr);
if (vsink)
return vsink->fps_den;
ev = (Emotion_Gstreamer_Video *)video;
- vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
+ vsink = (Emotion_Video_Sink *)eina_list_nth(ev->video_sinks, ev->video_sink_nbr);
if (vsink)
return (double)vsink->fps_num / (double)vsink->fps_den;
ev = (Emotion_Gstreamer_Video *)video;
- if (ecore_list_empty_is(ev->video_sinks))
+ if (!eina_list_count(ev->video_sinks))
return 0;
return 1;
ev = (Emotion_Gstreamer_Video *)video;
- if (ecore_list_empty_is(ev->audio_sinks))
+ if (!eina_list_count(ev->audio_sinks))
return 0;
return 1;
ev = (Emotion_Gstreamer_Video *)video;
- vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
+ vsink = (Emotion_Video_Sink *)eina_list_nth(ev->video_sinks, ev->video_sink_nbr);
if (vsink)
{
switch (vsink->fourcc)
ev = (Emotion_Gstreamer_Video *)video;
- vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
+ vsink = (Emotion_Video_Sink *)eina_list_nth(ev->video_sinks, ev->video_sink_nbr);
if (vsink)
{
*w = vsink->width;
ev = (Emotion_Gstreamer_Video *)video;
- return ecore_list_count(ev->video_sinks);
+ return eina_list_count(ev->video_sinks);
}
static void
ev = (Emotion_Gstreamer_Video *)video;
- return ecore_list_count(ev->audio_sinks);
+ return eina_list_count(ev->audio_sinks);
}
static void
em_meta_get(void *video, int meta)
{
Emotion_Gstreamer_Video *ev;
- const char *str;
+ const char *str = NULL;
ev = (Emotion_Gstreamer_Video *)video;
ev = (Emotion_Gstreamer_Video *)data;
buffer = *((GstBuffer **)buf);
_emotion_frame_new(ev->obj);
- vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
+ vsink = (Emotion_Video_Sink *)eina_list_nth(ev->video_sinks, ev->video_sink_nbr);
if (vsink) _emotion_video_pos_update(ev->obj, ev->position, vsink->length_time);
}
Ecore_Timer *eos_timer;
/* Sinks */
- Ecore_List *video_sinks;
- Ecore_List *audio_sinks;
+ Eina_List *video_sinks;
+ Eina_List *audio_sinks;
int video_sink_nbr;
int audio_sink_nbr;
else
{
Emotion_Audio_Sink *asink;
- asink = (Emotion_Audio_Sink *)ecore_list_index_goto(ev->audio_sinks, ev->audio_sink_nbr);
+ asink = (Emotion_Audio_Sink *)eina_list_nth(ev->audio_sinks, ev->audio_sink_nbr);
_emotion_video_pos_update(ev->obj, ev->position, asink->length_time);
}
Emotion_Gstreamer_Video *ev;
GstCaps *caps;
gchar *str;
+ unsigned int index;
ev = (Emotion_Gstreamer_Video *)user_data;
caps = gst_pad_get_caps(new_pad);
vsink = (Emotion_Video_Sink *)calloc(1, sizeof(Emotion_Video_Sink));
if (!vsink) return;
- if (!ecore_list_append(ev->video_sinks, vsink))
+ ev->video_sinks = eina_list_append(ev->video_sinks, vsink);
+ if (!eina_list_data_find(ev->video_sinks, vsink))
{
free(vsink);
return;
videopad = gst_element_get_pad(queue, "sink");
gst_pad_link(new_pad, videopad);
gst_object_unref(videopad);
- if (ecore_list_count(ev->video_sinks) == 1)
+ if (eina_list_count(ev->video_sinks) == 1)
{
ev->ratio = (double)vsink->width / (double)vsink->height;
}
asink = (Emotion_Audio_Sink *)calloc(1, sizeof(Emotion_Audio_Sink));
if (!asink) return;
- if (!ecore_list_append(ev->audio_sinks, asink))
+ ev->audio_sinks = eina_list_append(ev->audio_sinks, asink);
+ if (!eina_list_data_find(ev->audio_sinks, asink))
{
free(asink);
return;
}
- asink->sink = emotion_audio_sink_create(ev, ecore_list_index(ev->audio_sinks));
+ for (index = 0; asink != eina_list_nth(ev->audio_sinks, index); index++)
+ ;
+ asink->sink = emotion_audio_sink_create(ev, index);
gst_bin_add(GST_BIN(ev->pipeline), asink->sink);
audiopad = gst_element_get_pad(asink->sink, "sink");
gst_pad_link(new_pad, audiopad);
vsink = (Emotion_Video_Sink *)calloc(1, sizeof(Emotion_Video_Sink));
if (!vsink) return NULL;
- if (!ecore_list_append(ev->video_sinks, vsink))
+ ev->video_sinks = eina_list_append(ev->video_sinks, vsink);
+ if (!eina_list_data_find(ev->video_sinks, vsink))
{
free(vsink);
return NULL;
{
if (!ev || !vsink) return;
- if (ecore_list_goto(ev->video_sinks, vsink))
- {
- ecore_list_remove(ev->video_sinks);
+ ev->video_sinks = eina_list_remove(ev->video_sinks, vsink);
free(vsink);
- }
}
Emotion_Video_Sink *
emotion_streams_sinks_get(Emotion_Gstreamer_Video *ev, GstElement *decoder)
{
GstIterator *it;
+ Eina_List *alist;
+ Eina_List *vlist;
gpointer data;
- ecore_list_first_goto(ev->video_sinks);
- ecore_list_first_goto(ev->audio_sinks);
+ alist = ev->audio_sinks;
+ vlist = ev->video_sinks;
it = gst_element_iterate_src_pads(decoder);
while (gst_iterator_next(it, &data) == GST_ITERATOR_OK)
{
Emotion_Video_Sink *vsink;
- vsink = (Emotion_Video_Sink *)ecore_list_next(ev->video_sinks);
+ vsink = (Emotion_Video_Sink *)eina_list_data_get(vlist);
+ vlist = eina_list_next(vlist);
emotion_video_sink_fill(vsink, pad, caps);
}
else if (g_str_has_prefix(str, "audio/"))
{
Emotion_Audio_Sink *asink;
- gint index;
+ unsigned int index;
- asink = (Emotion_Audio_Sink *)ecore_list_next(ev->audio_sinks);
+ asink = (Emotion_Audio_Sink *)eina_list_data_get(alist);
+ alist = eina_list_next(alist);
emotion_audio_sink_fill(asink, pad, caps);
- index = ecore_list_index(ev->audio_sinks);
+ for (index = 0; asink != eina_list_nth(ev->audio_sinks, index) ; index++)
+ ;
- if (ecore_list_count(ev->video_sinks) == 0)
+ if (eina_list_count(ev->video_sinks) == 0)
{
if (index == 1)
{
asink = (Emotion_Audio_Sink *)malloc(sizeof(Emotion_Audio_Sink));
if (!asink) return NULL;
- if (!ecore_list_append(ev->audio_sinks, asink))
+ ev->audio_sinks = eina_list_append(ev->audio_sinks, asink);
+ if (!eina_list_data_find(ev->audio_sinks, asink))
{
free(asink);
return NULL;
{
if (!ev || !asink) return;
- if (ecore_list_goto(ev->audio_sinks, asink))
- {
- ecore_list_remove(ev->audio_sinks);
+ ev->audio_sinks = eina_list_remove(ev->audio_sinks, asink);
free(asink);
- }
}
GstElement *dvdreadsrc;
GstElement *dvddemux;
Emotion_Gstreamer_Video *ev;
+ Eina_List *alist;
+ Eina_List *vlist;
ev = (Emotion_Gstreamer_Video *)video;
if (!ev) return 0;
no_more_pads = 0;
/* We get the informations of streams */
- ecore_list_first_goto(ev->video_sinks);
- ecore_list_first_goto(ev->audio_sinks);
+ alist = ev->audio_sinks;
+ vlist = ev->video_sinks;
{
GstIterator *it;
GstPad *sink_pad;
GstCaps *sink_caps;
- vsink = (Emotion_Video_Sink *)ecore_list_next(ev->video_sinks);
+ vsink = (Emotion_Video_Sink *)eina_list_data_get(vlist);
+ vlist = eina_list_next(vlist);
sink_pad = gst_element_get_pad(gst_bin_get_by_name(GST_BIN(ev->pipeline), "mpeg2dec"), "src");
sink_caps = gst_pad_get_caps(sink_pad);
str = gst_caps_to_string(sink_caps);
GstPad *sink_pad;
GstCaps *sink_caps;
- asink = (Emotion_Audio_Sink *)ecore_list_next(ev->audio_sinks);
+ asink = (Emotion_Audio_Sink *)eina_list_data_get(alist);
sink_pad = gst_element_get_pad(gst_bin_get_by_name(GST_BIN(ev->pipeline), "a52dec"), "src");
sink_caps = gst_pad_get_caps(sink_pad);
{
Emotion_Video_Sink *vsink;
- vsink = (Emotion_Video_Sink *)ecore_list_first_goto(ev->video_sinks);
+ vsink = (Emotion_Video_Sink *)eina_list_data_get(ev->video_sinks);
if (vsink && vsink->sink)
{
g_object_set(G_OBJECT(vsink->sink), "sync", TRUE, NULL);
vsink = (Emotion_Video_Sink *)malloc(sizeof(Emotion_Video_Sink));
if (!vsink) return;
- if (!ecore_list_append(ev->video_sinks, vsink))
+ ev->video_sinks = eina_list_append(ev->video_sinks, vsink);
+ if (!eina_list_data_find(ev->video_sinks, vsink))
{
free(vsink);
return;
videopad = gst_element_get_pad(queue, "sink");
gst_pad_link(GST_PAD(new_pad), videopad);
gst_object_unref(videopad);
- if (ecore_list_count(ev->video_sinks) == 1)
+ if (eina_list_count(ev->video_sinks) == 1)
{
ev->ratio = (double)vsink->width / (double)vsink->height;
}
asink = (Emotion_Audio_Sink *)malloc(sizeof(Emotion_Audio_Sink));
if (!asink) return;
- if (!ecore_list_append(ev->audio_sinks, asink))
+ ev->audio_sinks = eina_list_append(ev->audio_sinks, asink);
+ if (!eina_list_data_find(ev->audio_sinks, asink))
{
free(asink);
return;
{
Emotion_Video_Sink *vsink;
- vsink = (Emotion_Video_Sink *)ecore_list_first_goto(ev->video_sinks);
+ vsink = (Emotion_Video_Sink *)eina_list_data_get(ev->video_sinks);
if (vsink && vsink->sink)
{
g_object_set(G_OBJECT(vsink->sink), "sync", TRUE, NULL);
{
Emotion_Video_Sink *vsink;
- vsink = (Emotion_Video_Sink *)ecore_list_first_goto(ev->video_sinks);
+ vsink = (Emotion_Video_Sink *)eina_list_data_get(ev->video_sinks);
if (vsink && vsink->sink)
{
g_object_set(G_OBJECT(vsink->sink), "sync", TRUE, NULL);