forked from enlightenment/efl
simon treney's emotion patches - THANKs :o)
SVN revision: 14208
This commit is contained in:
parent
67ce5e1c1f
commit
4c2a9d32f9
|
@ -19,9 +19,9 @@ typedef struct _Emotion_Video_Module Emotion_Video_Module;
|
|||
|
||||
struct _Emotion_Video_Module
|
||||
{
|
||||
int (*init) (void);
|
||||
int (*shutdown) (void);
|
||||
void * (*file_open) (const char *file, Evas_Object *obj);
|
||||
unsigned char (*init) (Evas_Object *obj, void **video);
|
||||
int (*shutdown) (void *video);
|
||||
unsigned char (*file_open) (const char *file, Evas_Object *obj, void *video);
|
||||
void (*file_close) (void *ef);
|
||||
void (*play) (void *ef, double pos);
|
||||
void (*stop) (void *ef);
|
||||
|
@ -75,6 +75,7 @@ void _emotion_frame_new(Evas_Object *obj);
|
|||
void _emotion_video_pos_update(Evas_Object *obj, double pos, double len);
|
||||
void _emotion_frame_resize(Evas_Object *obj, int w, int h, double ratio);
|
||||
void _emotion_decode_stop(Evas_Object *obj);
|
||||
void _emotion_playback_finished(Evas_Object *obj);
|
||||
void _emotion_channels_change(Evas_Object *obj);
|
||||
void _emotion_title_set(Evas_Object *obj, char *title);
|
||||
void _emotion_progress_set(Evas_Object *obj, char *info, double stat);
|
||||
|
|
|
@ -88,8 +88,8 @@ static void _smart_clip_unset(Evas_Object * obj);
|
|||
/**********************************/
|
||||
static Evas_Smart *smart = NULL;
|
||||
|
||||
static Emotion_Video_Module *
|
||||
_emotion_module_open(const char *name)
|
||||
static unsigned char
|
||||
_emotion_module_open(const char *name, Evas_Object *obj, Emotion_Video_Module **mod, void **video)
|
||||
{
|
||||
void *handle;
|
||||
char buf[4096];
|
||||
|
@ -98,34 +98,31 @@ _emotion_module_open(const char *name)
|
|||
handle = dlopen(buf, RTLD_NOW | RTLD_GLOBAL);
|
||||
if (handle)
|
||||
{
|
||||
Emotion_Video_Module *(*func_module_open) (void);
|
||||
unsigned char (*func_module_open)(Evas_Object *, Emotion_Video_Module **, void **);
|
||||
|
||||
func_module_open = dlsym(handle, "module_open");
|
||||
if (func_module_open)
|
||||
{
|
||||
Emotion_Video_Module *mod;
|
||||
|
||||
mod = func_module_open();
|
||||
if (mod)
|
||||
if (func_module_open(obj, mod, video))
|
||||
{
|
||||
mod->handle = handle;
|
||||
return mod;
|
||||
(*mod)->handle = handle;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
dlclose(handle);
|
||||
}
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_emotion_module_close(Emotion_Video_Module *mod)
|
||||
_emotion_module_close(Emotion_Video_Module *mod, void *video)
|
||||
{
|
||||
void *handle;
|
||||
void (*module_close) (Emotion_Video_Module *module);
|
||||
void (*module_close) (Emotion_Video_Module *module, void *);
|
||||
|
||||
handle = mod->handle;
|
||||
module_close = dlsym(handle, "module_close");
|
||||
if (module_close) module_close(mod);
|
||||
if (module_close) module_close(mod, video);
|
||||
dlclose(handle);
|
||||
}
|
||||
|
||||
|
@ -168,24 +165,23 @@ emotion_object_file_set(Evas_Object *obj, const char *file)
|
|||
int w, h;
|
||||
|
||||
sd->file = strdup(file);
|
||||
if ((sd->video) && (sd->module))
|
||||
if (sd->module)
|
||||
{
|
||||
sd->module->file_close(sd->video);
|
||||
sd->video = NULL;
|
||||
evas_object_image_size_set(sd->obj, 0, 0);
|
||||
}
|
||||
if (sd->module) _emotion_module_close(sd->module);
|
||||
sd->module = _emotion_module_open("emotion_decoder_xine.so");
|
||||
if (!sd->module) return;
|
||||
sd->video = sd->module->file_open(sd->file, obj);
|
||||
if (sd->video)
|
||||
{
|
||||
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;
|
||||
if (sd->play) sd->module->play(sd->video, 0.0);
|
||||
}
|
||||
if (!sd->module || !sd->video)
|
||||
{
|
||||
if (!_emotion_module_open("emotion_decoder_xine.so", obj, &sd->module, &sd->video))
|
||||
return;
|
||||
}
|
||||
if (!sd->module->file_open(sd->file, obj, sd->video))
|
||||
return;
|
||||
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;
|
||||
if (sd->play) sd->module->play(sd->video, 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -195,8 +191,6 @@ emotion_object_file_set(Evas_Object *obj, const char *file)
|
|||
sd->video = NULL;
|
||||
evas_object_image_size_set(sd->obj, 0, 0);
|
||||
}
|
||||
if (sd->module) _emotion_module_close(sd->module);
|
||||
sd->module = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -810,6 +804,12 @@ _emotion_decode_stop(Evas_Object *obj)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
_emotion_playback_finished(Evas_Object *obj)
|
||||
{
|
||||
evas_object_smart_callback_call(obj, "playback_finished", NULL);
|
||||
}
|
||||
|
||||
void
|
||||
_emotion_channels_change(Evas_Object *obj)
|
||||
{
|
||||
|
@ -1025,11 +1025,10 @@ static void
|
|||
_smart_del(Evas_Object * obj)
|
||||
{
|
||||
Smart_Data *sd;
|
||||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
if (sd->video) sd->module->file_close(sd->video);
|
||||
if (sd->module) _emotion_module_close(sd->module);
|
||||
if (sd->module) _emotion_module_close(sd->module, sd->video);
|
||||
evas_object_del(sd->obj);
|
||||
if (sd->file) free(sd->file);
|
||||
if (sd->job) ecore_job_del(sd->job);
|
||||
|
|
|
@ -2,11 +2,9 @@
|
|||
#include "emotion_private.h"
|
||||
#include "emotion_xine.h"
|
||||
|
||||
static int init_count = 0;
|
||||
|
||||
static int em_init(void);
|
||||
static int em_shutdown(void);
|
||||
static void *em_file_open(const char *file, Evas_Object *obj);
|
||||
static unsigned char em_init(Evas_Object *obj, void **emotion_video);
|
||||
static int em_shutdown(void *video);
|
||||
static unsigned char em_file_open(const char *file, Evas_Object *obj, void *video);
|
||||
static void em_file_close(void *ef);
|
||||
static void em_play(void *ef, double pos);
|
||||
static void em_stop(void *ef);
|
||||
|
@ -60,42 +58,27 @@ static int _em_timer (void *data);
|
|||
static void *_em_get_pos_len_th(void *par);
|
||||
static void _em_get_pos_len (Emotion_Xine_Video *ev);
|
||||
|
||||
static int
|
||||
em_init(void)
|
||||
{
|
||||
init_count++;
|
||||
if (init_count > 1) return init_count;
|
||||
return init_count;
|
||||
}
|
||||
|
||||
static int
|
||||
em_shutdown(void)
|
||||
{
|
||||
init_count--;
|
||||
if (init_count > 0) return init_count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void *
|
||||
em_file_open(const char *file, Evas_Object *obj)
|
||||
static unsigned char
|
||||
em_init(Evas_Object *obj, void **emotion_video)
|
||||
{
|
||||
Emotion_Xine_Video *ev;
|
||||
int pos_stream = 0;
|
||||
int pos_time = 0;
|
||||
int length_time = 0;
|
||||
uint32_t v;
|
||||
int fds[2];
|
||||
|
||||
if (!emotion_video)
|
||||
return;
|
||||
|
||||
ev = calloc(1, sizeof(Emotion_Xine_Video));
|
||||
if (!ev) return NULL;
|
||||
if (!ev) return 0;
|
||||
ev->obj = obj;
|
||||
|
||||
ev->decoder = xine_new();
|
||||
if (!ev->decoder)
|
||||
{
|
||||
free(ev);
|
||||
return NULL;
|
||||
}
|
||||
{
|
||||
free(ev);
|
||||
return 0;
|
||||
}
|
||||
xine_init(ev->decoder);
|
||||
xine_init(ev->decoder);
|
||||
if (1)
|
||||
{
|
||||
xine_cfg_entry_t cf;
|
||||
|
@ -222,39 +205,25 @@ em_file_open(const char *file, Evas_Object *obj)
|
|||
printf("MRL: %s\n", auto_play_mrls[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (pipe(fds) == 0)
|
||||
{
|
||||
int fds[2];
|
||||
|
||||
if (pipe(fds) == 0)
|
||||
{
|
||||
ev->fd_read = fds[0];
|
||||
ev->fd_write = fds[1];
|
||||
fcntl(ev->fd_read, F_SETFL, O_NONBLOCK);
|
||||
ev->fd_handler = ecore_main_fd_handler_add(ev->fd_read,
|
||||
ECORE_FD_READ,
|
||||
_em_fd_active,
|
||||
ev,
|
||||
NULL,
|
||||
NULL);
|
||||
ecore_main_fd_handler_active_set(ev->fd_handler, ECORE_FD_READ);
|
||||
}
|
||||
ev->fd_read = fds[0];
|
||||
ev->fd_write = fds[1];
|
||||
fcntl(ev->fd_read, F_SETFL, O_NONBLOCK);
|
||||
ev->fd_handler = ecore_main_fd_handler_add(ev->fd_read,
|
||||
ECORE_FD_READ, _em_fd_active, ev, NULL, NULL);
|
||||
ecore_main_fd_handler_active_set(ev->fd_handler, ECORE_FD_READ);
|
||||
}
|
||||
|
||||
if (pipe(fds) == 0)
|
||||
{
|
||||
int fds[2];
|
||||
|
||||
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);
|
||||
ecore_main_fd_handler_active_set(ev->fd_ev_handler, ECORE_FD_READ);
|
||||
}
|
||||
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);
|
||||
ecore_main_fd_handler_active_set(ev->fd_ev_handler, ECORE_FD_READ);
|
||||
}
|
||||
ev->fd = ev->fd_write;
|
||||
|
||||
|
@ -266,21 +235,51 @@ em_file_open(const char *file, Evas_Object *obj)
|
|||
ev->stream = xine_stream_new(ev->decoder, ev->audio, ev->video);
|
||||
ev->queue = xine_event_new_queue(ev->stream);
|
||||
xine_event_create_listener_thread(ev->queue, _em_event, ev);
|
||||
*emotion_video = ev;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
em_shutdown(void *video)
|
||||
{
|
||||
Emotion_Xine_Video *ev;
|
||||
|
||||
ev = (Emotion_Xine_Video *)video;
|
||||
|
||||
printf("EX dispose\n");
|
||||
xine_dispose(ev->stream);
|
||||
printf("EX dispose evq\n");
|
||||
xine_event_dispose_queue(ev->queue);
|
||||
printf("EX close video drv\n");
|
||||
if (ev->video) xine_close_video_driver(ev->decoder, ev->video);
|
||||
printf("EX close audio drv\n");
|
||||
if (ev->audio) xine_close_audio_driver(ev->decoder, ev->audio);
|
||||
printf("EX del fds\n");
|
||||
ecore_main_fd_handler_del(ev->fd_handler);
|
||||
close(ev->fd_write);
|
||||
close(ev->fd_read);
|
||||
ecore_main_fd_handler_del(ev->fd_ev_handler);
|
||||
close(ev->fd_ev_write);
|
||||
close(ev->fd_ev_read);
|
||||
xine_exit(ev->decoder);
|
||||
free(ev);
|
||||
}
|
||||
|
||||
static unsigned char
|
||||
em_file_open(const char *file, Evas_Object *obj, void *video)
|
||||
{
|
||||
Emotion_Xine_Video *ev = (Emotion_Xine_Video *)video;
|
||||
int pos_stream = 0;
|
||||
int pos_time = 0;
|
||||
int length_time = 0;
|
||||
uint32_t v;
|
||||
|
||||
if (!ev)
|
||||
return 0;
|
||||
|
||||
if (!xine_open(ev->stream, file))
|
||||
{
|
||||
ecore_main_fd_handler_del(ev->fd_handler);
|
||||
close(ev->fd_write);
|
||||
close(ev->fd_read);
|
||||
ecore_main_fd_handler_del(ev->fd_ev_handler);
|
||||
close(ev->fd_ev_write);
|
||||
close(ev->fd_ev_read);
|
||||
xine_dispose(ev->stream);
|
||||
if (ev->video) xine_close_video_driver(ev->decoder, ev->video);
|
||||
if (ev->audio) xine_close_audio_driver(ev->decoder, ev->audio);
|
||||
xine_event_dispose_queue(ev->queue);
|
||||
free(ev);
|
||||
return NULL;
|
||||
}
|
||||
return 0;
|
||||
if (xine_get_pos_length(ev->stream, &pos_stream, &pos_time, &length_time))
|
||||
{
|
||||
if (length_time == 0)
|
||||
|
@ -295,6 +294,11 @@ em_file_open(const char *file, Evas_Object *obj)
|
|||
ev->len = (double)length_time / 1000.0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ev->pos = 0.0;
|
||||
ev->len = 1.0;
|
||||
}
|
||||
v = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_FRAME_DURATION);
|
||||
if (v > 0) ev->fps = 90000.0 / (double)v;
|
||||
v = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_WIDTH);
|
||||
|
@ -305,27 +309,20 @@ em_file_open(const char *file, Evas_Object *obj)
|
|||
ev->ratio = (double)v / 10000.0;
|
||||
ev->just_loaded = 1;
|
||||
ev->get_poslen = 0;
|
||||
ev->seek_to = 0;
|
||||
|
||||
{
|
||||
pthread_attr_t thattr;
|
||||
|
||||
pthread_cond_init(&(ev->seek_cond), NULL);
|
||||
pthread_cond_init(&(ev->get_pos_len_cond), NULL);
|
||||
pthread_mutex_init(&(ev->seek_mutex), NULL);
|
||||
pthread_mutex_init(&(ev->get_pos_len_mutex), NULL);
|
||||
|
||||
pthread_attr_init(&thattr);
|
||||
pthread_create(&ev->seek_th, NULL, _em_seek, ev);
|
||||
pthread_attr_destroy(&thattr);
|
||||
|
||||
pthread_attr_init(&thattr);
|
||||
pthread_create(&ev->get_pos_len_th, NULL, _em_get_pos_len_th, ev);
|
||||
pthread_attr_destroy(&thattr);
|
||||
|
||||
ev->delete_me = 0;
|
||||
ev->get_pos_thread_deleted = 0;
|
||||
}
|
||||
ev->seek_thread_deleted = 0;
|
||||
pthread_cond_init(&(ev->seek_cond), NULL);
|
||||
pthread_cond_init(&(ev->get_pos_len_cond), NULL);
|
||||
pthread_mutex_init(&(ev->seek_mutex), NULL);
|
||||
pthread_mutex_init(&(ev->get_pos_len_mutex), NULL);
|
||||
pthread_create(&ev->seek_th, NULL, _em_seek, ev);
|
||||
pthread_create(&ev->get_pos_len_th, NULL, _em_get_pos_len_th, ev);
|
||||
|
||||
// em_debug(ev);
|
||||
return ev;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -336,52 +333,38 @@ em_file_close(void *ef)
|
|||
ev = (Emotion_Xine_Video *)ef;
|
||||
ev->delete_me = 1;
|
||||
// pthread_mutex_lock(&(ev->seek_mutex));
|
||||
pthread_cond_broadcast(&(ev->seek_cond));
|
||||
while (ev->seek_to);
|
||||
if (!ev->seek_thread_deleted)
|
||||
{
|
||||
printf("closing seek thread\n");
|
||||
pthread_cond_broadcast(&(ev->seek_cond));
|
||||
while (ev->seek_to);
|
||||
}
|
||||
|
||||
// pthread_mutex_lock(&(ev->get_pos_len_mutex));
|
||||
if (!ev->get_pos_thread_deleted)
|
||||
{
|
||||
pthread_cond_broadcast(&(ev->get_pos_len_cond));
|
||||
while (ev->get_poslen);
|
||||
}
|
||||
{
|
||||
printf("closing get_pos thread\n");
|
||||
pthread_cond_broadcast(&(ev->get_pos_len_cond));
|
||||
while (ev->get_poslen);
|
||||
}
|
||||
|
||||
printf("EX pause end...\n");
|
||||
if (!emotion_object_play_get(ev->obj))
|
||||
// if (xine_get_param(ev->stream, XINE_PARAM_SPEED) == XINE_SPEED_PAUSE)
|
||||
{
|
||||
printf("sync...\n");
|
||||
while (xine_get_param(ev->stream, XINE_PARAM_SPEED) == XINE_SPEED_NORMAL);
|
||||
printf("sync...\n");
|
||||
while (xine_get_param(ev->stream, XINE_PARAM_SPEED) == XINE_SPEED_PAUSE)
|
||||
{
|
||||
printf(" ... unpause\n");
|
||||
xine_set_param(ev->stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL);
|
||||
}
|
||||
printf(" ... unpause\n");
|
||||
xine_set_param(ev->stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL);
|
||||
}
|
||||
printf("EX stop\n");
|
||||
xine_stop(ev->stream);
|
||||
printf("EX close\n");
|
||||
xine_close(ev->stream);
|
||||
printf("EX dispose\n");
|
||||
xine_dispose(ev->stream);
|
||||
printf("EX dispose evq\n");
|
||||
xine_event_dispose_queue(ev->queue);
|
||||
printf("EX close video drv\n");
|
||||
if (ev->video) xine_close_video_driver(ev->decoder, ev->video);
|
||||
printf("EX close audio drv\n");
|
||||
if (ev->audio) xine_close_audio_driver(ev->decoder, ev->audio);
|
||||
printf("EX del timer\n");
|
||||
if (ev->timer) ecore_timer_del(ev->timer);
|
||||
printf("EX del fds\n");
|
||||
ecore_main_fd_handler_del(ev->fd_handler);
|
||||
close(ev->fd_write);
|
||||
close(ev->fd_read);
|
||||
ecore_main_fd_handler_del(ev->fd_ev_handler);
|
||||
close(ev->fd_ev_write);
|
||||
close(ev->fd_ev_read);
|
||||
xine_exit(ev->decoder);
|
||||
free(ev);
|
||||
if (ev->timer)
|
||||
{
|
||||
ecore_timer_del(ev->timer);
|
||||
ev->timer = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -473,7 +456,7 @@ em_pos_set(void *ef, double pos)
|
|||
// if (xine_get_stream_info(ev->stream, XINE_STREAM_INFO_SEEKABLE))
|
||||
{
|
||||
ev->seek_to_pos = pos;
|
||||
ev->seek_to++;
|
||||
ev->seek_to = 1;
|
||||
pthread_cond_broadcast(&(ev->seek_cond));
|
||||
}
|
||||
}
|
||||
|
@ -1010,13 +993,6 @@ em_meta_get(Emotion_Xine_Video *ev, int meta)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static void *
|
||||
_em_seek(void *par)
|
||||
{
|
||||
|
@ -1026,30 +1002,29 @@ _em_seek(void *par)
|
|||
pthread_mutex_lock(&(ev->seek_mutex));
|
||||
for (;;)
|
||||
{
|
||||
double ppos = -1.0;
|
||||
double ppos;
|
||||
|
||||
pthread_cond_wait(&(ev->seek_cond), &(ev->seek_mutex));
|
||||
while (ev->seek_to > 0)
|
||||
if (ev->seek_to)
|
||||
{
|
||||
again:
|
||||
ppos = ev->seek_to_pos;
|
||||
if (ppos > ev->len) ppos = ev->len;
|
||||
if (ppos > ev->len)
|
||||
ppos = ev->len;
|
||||
if (ev->no_time)
|
||||
xine_play(ev->stream, ppos * 65535, 0);
|
||||
else
|
||||
xine_play(ev->stream, 0, ppos * 1000);
|
||||
ev->seek_to = 0;
|
||||
if (ev->delete_me) return NULL;
|
||||
|
||||
if (!ev->play)
|
||||
xine_set_param(ev->stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
|
||||
}
|
||||
if (!ev->play)
|
||||
if (ev->delete_me)
|
||||
{
|
||||
xine_set_param(ev->stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
|
||||
ev->seek_thread_deleted = 1;
|
||||
return NULL;
|
||||
}
|
||||
if (ev->delete_me) return NULL;
|
||||
usleep(1000000 / 10);
|
||||
if (ppos != ev->seek_to_pos)
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1146,6 +1121,8 @@ _em_fd_ev_active(void *data, Ecore_Fd_Handler *fdh)
|
|||
{
|
||||
case XINE_EVENT_UI_PLAYBACK_FINISHED:
|
||||
{
|
||||
if ((ev->pos / ev->len) < 0.999)
|
||||
break;
|
||||
if (ev->timer)
|
||||
{
|
||||
ecore_timer_del(ev->timer);
|
||||
|
@ -1153,6 +1130,7 @@ _em_fd_ev_active(void *data, Ecore_Fd_Handler *fdh)
|
|||
}
|
||||
ev->play = 0;
|
||||
_emotion_decode_stop(ev->obj);
|
||||
_emotion_playback_finished(ev->obj);
|
||||
}
|
||||
break;
|
||||
case XINE_EVENT_UI_CHANNELS_CHANGED:
|
||||
|
@ -1277,16 +1255,13 @@ _em_get_pos_len_th(void *par)
|
|||
for (;;)
|
||||
{
|
||||
pthread_cond_wait(&(ev->get_pos_len_cond), &(ev->get_pos_len_mutex));
|
||||
while (ev->get_poslen > 0 || ev->delete_me)
|
||||
if (ev->get_poslen)
|
||||
{
|
||||
int pos_stream = 0;
|
||||
int pos_time = 0;
|
||||
int length_time = 0;
|
||||
|
||||
if (xine_get_pos_length(ev->stream,
|
||||
&pos_stream,
|
||||
&pos_time,
|
||||
&length_time))
|
||||
if (xine_get_pos_length(ev->stream, &pos_stream, &pos_time, &length_time))
|
||||
{
|
||||
if (length_time == 0)
|
||||
{
|
||||
|
@ -1301,15 +1276,13 @@ _em_get_pos_len_th(void *par)
|
|||
ev->no_time = 0;
|
||||
}
|
||||
}
|
||||
if (ev->delete_me)
|
||||
{
|
||||
ev->get_poslen = 0;
|
||||
ev->get_pos_thread_deleted = 1;
|
||||
return NULL;
|
||||
}
|
||||
ev->get_poslen = 0;
|
||||
// printf("get pos %3.3f\n", ev->pos);
|
||||
usleep(1000000 / 15);
|
||||
//printf("get pos %3.3f\n", ev->pos);
|
||||
}
|
||||
if (ev->delete_me)
|
||||
{
|
||||
ev->get_pos_thread_deleted = 1;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
@ -1319,29 +1292,9 @@ static void
|
|||
_em_get_pos_len(Emotion_Xine_Video *ev)
|
||||
{
|
||||
if (ev->get_poslen) return;
|
||||
ev->get_poslen++;
|
||||
ev->get_poslen = 1;
|
||||
pthread_cond_broadcast(&(ev->get_pos_len_cond));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static Emotion_Video_Module em_module =
|
||||
{
|
||||
|
@ -1394,35 +1347,25 @@ static Emotion_Video_Module em_module =
|
|||
em_meta_get /* meta_get */
|
||||
};
|
||||
|
||||
Emotion_Video_Module *
|
||||
module_open(void)
|
||||
unsigned char
|
||||
module_open(Evas_Object *obj, Emotion_Video_Module **module, void **video)
|
||||
{
|
||||
em_module.init();
|
||||
return &em_module;
|
||||
if (!module)
|
||||
return 0;
|
||||
|
||||
if (!em_module.init(obj, video))
|
||||
return 0;
|
||||
|
||||
*module = &em_module;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
module_close(Emotion_Video_Module *module)
|
||||
module_close(Emotion_Video_Module *module, void *video)
|
||||
{
|
||||
em_module.shutdown();
|
||||
em_module.shutdown(video);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
void
|
||||
em_debug(Emotion_Xine_Video *ev)
|
||||
|
|
|
@ -49,6 +49,7 @@ struct _Emotion_Xine_Video
|
|||
pthread_cond_t get_pos_len_cond;
|
||||
pthread_mutex_t seek_mutex;
|
||||
pthread_mutex_t get_pos_len_mutex;
|
||||
unsigned char seek_thread_deleted : 1;
|
||||
unsigned char get_pos_thread_deleted : 1;
|
||||
};
|
||||
|
||||
|
@ -71,7 +72,7 @@ struct _Emotion_Xine_Event
|
|||
char *xine_event;
|
||||
};
|
||||
|
||||
Emotion_Video_Module *module_open (void);
|
||||
void module_close(Emotion_Video_Module *module);
|
||||
unsigned char module_open(Evas_Object *obj, Emotion_Video_Module **module, void **video);
|
||||
void module_close(Emotion_Video_Module *module, void *video);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue