forked from enlightenment/efl
parent
0d3907acf3
commit
ac83d5a90b
|
@ -1,3 +1,6 @@
|
|||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||
*/
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
|
@ -9,11 +12,8 @@
|
|||
|
||||
/* Callbacks to get the eos */
|
||||
static int _eos_timer_fct (void *data);
|
||||
|
||||
static int _em_fd_ev_active (void *data, Ecore_Fd_Handler *fdh);
|
||||
|
||||
static void _for_each_tag (GstTagList const* list, gchar const* tag, void *data);
|
||||
|
||||
static void _free_metadata (Emotion_Gstreamer_Metadata *m);
|
||||
|
||||
/* Interface */
|
||||
|
@ -224,7 +224,6 @@ static Emotion_Video_Module em_module =
|
|||
em_speed_get, /* speed_get */
|
||||
em_eject, /* eject */
|
||||
em_meta_get, /* meta_get */
|
||||
|
||||
NULL /* handle */
|
||||
};
|
||||
|
||||
|
@ -269,15 +268,15 @@ em_init(Evas_Object *obj,
|
|||
ev->vis = EMOTION_VIS_GOOM;
|
||||
|
||||
/* Create the file descriptors */
|
||||
if (pipe(fds) == 0) {
|
||||
if (pipe(fds) == 0)
|
||||
{
|
||||
ev->fd_ev_read = fds[0];
|
||||
ev->fd_ev_write = fds[1];
|
||||
fcntl(ev->fd_ev_read, F_SETFL, O_NONBLOCK);
|
||||
ev->fd_ev_handler = ecore_main_fd_handler_add(ev->fd_ev_read,
|
||||
ECORE_FD_READ,
|
||||
_em_fd_ev_active,
|
||||
ev,
|
||||
NULL, NULL);
|
||||
ev, NULL, NULL);
|
||||
ecore_main_fd_handler_active_set(ev->fd_ev_handler, ECORE_FD_READ);
|
||||
}
|
||||
else
|
||||
|
@ -346,51 +345,61 @@ em_file_open(const char *file,
|
|||
ev->obj = obj;
|
||||
|
||||
/* CD Audio */
|
||||
if (strstr (file,"cdda://")) {
|
||||
if (strstr(file, "cdda://"))
|
||||
{
|
||||
const char *device = NULL;
|
||||
unsigned int track = 1;
|
||||
|
||||
device = file + strlen("cdda://");
|
||||
if (device[0] == '/') {
|
||||
if (device[0] == '/')
|
||||
{
|
||||
char *tmp;
|
||||
|
||||
if ((tmp = strchr (device, '?')) || (tmp = strchr (device, '#'))) {
|
||||
if ((tmp = strchr(device, '?')) || (tmp = strchr(device, '#')))
|
||||
{
|
||||
sscanf(tmp + 1, "%d", &track);
|
||||
tmp[0] = '\0';
|
||||
}
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
device = NULL;
|
||||
sscanf(file, "cdda://%d", &track);
|
||||
}
|
||||
fprintf(stderr, "[Emotion] [gst] build CD Audio pipeline\n");
|
||||
if (!(emotion_pipeline_cdda_build (ev, device, track))) {
|
||||
if (!(emotion_pipeline_cdda_build(ev, device, track)))
|
||||
{
|
||||
fprintf(stderr, "[Emotion] [gst] error while building CD Audio pipeline\n");
|
||||
gst_object_unref(ev->pipeline);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/* Dvd */
|
||||
else if (strstr (file, "dvd://")) {
|
||||
else if (strstr(file, "dvd://"))
|
||||
{
|
||||
|
||||
fprintf(stderr, "[Emotion] [gst] build DVD pipeline\n");
|
||||
if (!(emotion_pipeline_dvd_build (ev, NULL))) {
|
||||
if (!(emotion_pipeline_dvd_build(ev, NULL)))
|
||||
{
|
||||
fprintf(stderr, "[Emotion] [gst] error while building DVD pipeline\n");
|
||||
gst_object_unref(ev->pipeline);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/* http */
|
||||
else if (strstr (file, "http://")) {
|
||||
else if (strstr(file, "http://"))
|
||||
{
|
||||
fprintf(stderr, "[Emotion] [gst] build URI pipeline\n");
|
||||
if (!(emotion_pipeline_uri_build (ev, file))) {
|
||||
if (!(emotion_pipeline_uri_build(ev, file)))
|
||||
{
|
||||
fprintf(stderr, "[Emotion] [gst] error while building URI pipeline\n");
|
||||
gst_object_unref(ev->pipeline);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/* Normal media file */
|
||||
else {
|
||||
else
|
||||
{
|
||||
const char *filename;
|
||||
|
||||
filename = strstr(file, "file://")
|
||||
|
@ -398,7 +407,8 @@ em_file_open(const char *file,
|
|||
: file;
|
||||
|
||||
fprintf(stderr, "[Emotion] [gst] build file pipeline\n");
|
||||
if (!(emotion_pipeline_file_build (ev, filename))) {
|
||||
if (!(emotion_pipeline_file_build(ev, filename)))
|
||||
{
|
||||
fprintf(stderr, "[Emotion] [gst] error while building File pipeline\n");
|
||||
gst_object_unref(ev->pipeline);
|
||||
return 0;
|
||||
|
@ -413,7 +423,8 @@ em_file_open(const char *file,
|
|||
Emotion_Audio_Sink *asink;
|
||||
|
||||
vsink = (Emotion_Video_Sink *)ecore_list_first_goto(ev->video_sinks);
|
||||
if (vsink) {
|
||||
if (vsink)
|
||||
{
|
||||
fprintf(stderr, "video : \n");
|
||||
fprintf(stderr, " size : %dx%d\n", vsink->width, vsink->height);
|
||||
fprintf(stderr, " fps : %d/%d\n", vsink->fps_num, vsink->fps_den);
|
||||
|
@ -423,7 +434,8 @@ em_file_open(const char *file,
|
|||
}
|
||||
|
||||
asink = (Emotion_Audio_Sink *)ecore_list_first_goto(ev->audio_sinks);
|
||||
if (asink) {
|
||||
if (asink)
|
||||
{
|
||||
fprintf(stderr, "audio : \n");
|
||||
fprintf(stderr, " chan : %d\n", asink->channels);
|
||||
fprintf(stderr, " rate : %d\n", asink->samplerate);
|
||||
|
@ -455,7 +467,8 @@ em_file_close(void *video)
|
|||
ecore_list_clear(ev->audio_sinks);
|
||||
|
||||
/* shutdown eos */
|
||||
if (ev->eos_timer) {
|
||||
if (ev->eos_timer)
|
||||
{
|
||||
ecore_timer_del(ev->eos_timer);
|
||||
ev->eos_timer = NULL;
|
||||
}
|
||||
|
@ -502,7 +515,8 @@ em_stop(void *video)
|
|||
ev = (Emotion_Gstreamer_Video *)video;
|
||||
|
||||
/* shutdown eos */
|
||||
if (ev->eos_timer) {
|
||||
if (ev->eos_timer)
|
||||
{
|
||||
ecore_timer_del(ev->eos_timer);
|
||||
ev->eos_timer = NULL;
|
||||
}
|
||||
|
@ -522,11 +536,13 @@ em_size_get(void *video,
|
|||
ev = (Emotion_Gstreamer_Video *)video;
|
||||
|
||||
vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
|
||||
if (vsink) {
|
||||
if (vsink)
|
||||
{
|
||||
if (width) *width = vsink->width;
|
||||
if (height) *height = vsink->height;
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
if (width) *width = 0;
|
||||
if (height) *height = 0;
|
||||
}
|
||||
|
@ -547,23 +563,23 @@ em_pos_set(void *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);
|
||||
|
||||
if (vsink) {
|
||||
if (vsink)
|
||||
{
|
||||
gst_element_seek(vsink->sink, 1.0,
|
||||
GST_FORMAT_TIME,
|
||||
GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH,
|
||||
GST_SEEK_TYPE_SET,
|
||||
(gint64)(pos * (double)GST_SECOND),
|
||||
GST_SEEK_TYPE_NONE,
|
||||
-1);
|
||||
GST_SEEK_TYPE_NONE, -1);
|
||||
}
|
||||
if (asink) {
|
||||
if (asink)
|
||||
{
|
||||
gst_element_seek(asink->sink, 1.0,
|
||||
GST_FORMAT_TIME,
|
||||
GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH,
|
||||
GST_SEEK_TYPE_SET,
|
||||
(gint64)(pos * (double)GST_SECOND),
|
||||
GST_SEEK_TYPE_NONE,
|
||||
-1);
|
||||
GST_SEEK_TYPE_NONE, -1);
|
||||
}
|
||||
ev->seek_to_pos = pos;
|
||||
}
|
||||
|
@ -723,8 +739,10 @@ em_format_get (void *video)
|
|||
ev = (Emotion_Gstreamer_Video *)video;
|
||||
|
||||
vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
|
||||
if (vsink) {
|
||||
switch (vsink->fourcc) {
|
||||
if (vsink)
|
||||
{
|
||||
switch (vsink->fourcc)
|
||||
{
|
||||
case GST_MAKE_FOURCC('I', '4', '2', '0'):
|
||||
return EMOTION_FORMAT_I420;
|
||||
case GST_MAKE_FOURCC('Y', 'V', '1', '2'):
|
||||
|
@ -749,11 +767,13 @@ em_video_data_size_get(void *video, int *w, int *h)
|
|||
ev = (Emotion_Gstreamer_Video *)video;
|
||||
|
||||
vsink = (Emotion_Video_Sink *)ecore_list_index_goto(ev->video_sinks, ev->video_sink_nbr);
|
||||
if (vsink) {
|
||||
if (vsink)
|
||||
{
|
||||
*w = vsink->width;
|
||||
*h = vsink->height;
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
*w = 0;
|
||||
*h = 0;
|
||||
}
|
||||
|
@ -774,7 +794,8 @@ em_yuv_rows_get(void *video,
|
|||
|
||||
if (ev->obj_data)
|
||||
{
|
||||
if (em_format_get(video) == EMOTION_FORMAT_I420) {
|
||||
if (em_format_get(video) == EMOTION_FORMAT_I420)
|
||||
{
|
||||
for (i = 0; i < h; i++)
|
||||
yrows[i] = &ev->obj_data[i * w];
|
||||
|
||||
|
@ -784,7 +805,8 @@ em_yuv_rows_get(void *video,
|
|||
for (i = 0; i < (h / 2); i++)
|
||||
vrows[i] = &ev->obj_data[h * w + h * (w /4) + i * (w / 2)];
|
||||
}
|
||||
else if (em_format_get(video) == EMOTION_FORMAT_YV12) {
|
||||
else if (em_format_get(video) == EMOTION_FORMAT_YV12)
|
||||
{
|
||||
for (i = 0; i < h; i++)
|
||||
yrows[i] = &ev->obj_data[i * w];
|
||||
|
||||
|
@ -810,7 +832,8 @@ em_bgra_data_get(void *video, unsigned char **bgra_data)
|
|||
|
||||
ev = (Emotion_Gstreamer_Video *)video;
|
||||
|
||||
if (ev->obj_data && em_format_get(video) == EMOTION_FORMAT_BGRA) {
|
||||
if (ev->obj_data && em_format_get(video) == EMOTION_FORMAT_BGRA)
|
||||
{
|
||||
*bgra_data = ev->obj_data;
|
||||
return 1;
|
||||
}
|
||||
|
@ -1130,8 +1153,6 @@ em_speed_get(void *video)
|
|||
|
||||
static int
|
||||
em_eject(void *video)
|
||||
|
||||
|
||||
{
|
||||
Emotion_Gstreamer_Video *ev;
|
||||
|
||||
|
@ -1220,7 +1241,7 @@ _for_each_tag (GstTagList const* list,
|
|||
count = gst_tag_list_get_tag_size(list, tag);
|
||||
val = gst_tag_list_get_value_index(list, tag, 0);
|
||||
|
||||
for ( i = 0; i < count; ++i)
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if (!strcmp(tag, GST_TAG_TITLE))
|
||||
{
|
||||
|
@ -1334,7 +1355,6 @@ _free_metadata (Emotion_Gstreamer_Metadata *m)
|
|||
if (m->disc_id) g_free(m->disc_id);
|
||||
|
||||
free(m);
|
||||
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -1366,15 +1386,19 @@ _em_fd_ev_active(void *data, Ecore_Fd_Handler *fdh)
|
|||
return 1;
|
||||
}
|
||||
|
||||
int _eos_timer_fct (void *data)
|
||||
static int
|
||||
_eos_timer_fct(void *data)
|
||||
{
|
||||
Emotion_Gstreamer_Video *ev;
|
||||
GstMessage *msg;
|
||||
|
||||
ev = (Emotion_Gstreamer_Video *)data;
|
||||
while ((msg = gst_bus_poll (ev->eos_bus, GST_MESSAGE_ERROR | GST_MESSAGE_EOS | GST_MESSAGE_TAG, 0))) {
|
||||
switch (GST_MESSAGE_TYPE(msg)) {
|
||||
case GST_MESSAGE_ERROR: {
|
||||
while ((msg = gst_bus_poll(ev->eos_bus, GST_MESSAGE_ERROR | GST_MESSAGE_EOS | GST_MESSAGE_TAG, 0)))
|
||||
{
|
||||
switch (GST_MESSAGE_TYPE(msg))
|
||||
{
|
||||
case GST_MESSAGE_ERROR:
|
||||
{
|
||||
gchar *debug;
|
||||
GError *err;
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||
*/
|
||||
#ifndef __EMOTION_GSTREAMER_H__
|
||||
#define __EMOTION_GSTREAMER_H__
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||
*/
|
||||
#ifndef __EMOTION_GSTREAMER_PIPELINE_H__
|
||||
#define __EMOTION_GSTREAMER_PIPELINE_H__
|
||||
|
||||
|
|
Loading…
Reference in New Issue