* Should fix the autoplay bug

SVN revision: 14622
This commit is contained in:
moom16 2005-05-06 15:35:56 +00:00 committed by moom16
parent 3d0bd377dc
commit 87fd2401ea
1 changed files with 28 additions and 26 deletions

View File

@ -235,6 +235,17 @@ em_init(Evas_Object *obj, void **emotion_video)
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);
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);
*emotion_video = ev;
return 1;
@ -247,6 +258,23 @@ em_shutdown(void *video)
ev = (Emotion_Xine_Video *)video;
ev->delete_me = 1;
// pthread_mutex_lock(&(ev->seek_mutex));
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)
{
printf("closing get_pos thread\n");
pthread_cond_broadcast(&(ev->get_pos_len_cond));
while (ev->get_poslen);
}
printf("EX dispose\n");
xine_dispose(ev->stream);
printf("EX dispose evq\n");
@ -311,16 +339,6 @@ em_file_open(const char *file, Evas_Object *obj, void *video)
ev->get_poslen = 0;
ev->seek_to = 0;
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 1;
}
@ -331,22 +349,6 @@ em_file_close(void *ef)
Emotion_Xine_Video *ev;
ev = (Emotion_Xine_Video *)ef;
ev->delete_me = 1;
// pthread_mutex_lock(&(ev->seek_mutex));
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)
{
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))