Enlightenment CVS committal
Author : tsauerbeck
Project : misc
Module : eplayer
Dir : misc/eplayer/src
Modified Files:
eplayer.h eplayer.c track.c callbacks.c
Log Message:
threading fixes
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/eplayer.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- eplayer.h 25 Nov 2003 17:50:57 -0000 1.16
+++ eplayer.h 9 Dec 2003 18:42:19 -0000 1.17
@@ -35,8 +35,12 @@
Ecore_Timer *time_timer;
pthread_t playback_thread;
- pthread_mutex_t playback_mutex;
+
+ pthread_mutex_t playback_stop_mutex;
int playback_stop;
+
+ pthread_mutex_t playback_next_mutex;
+ int playback_next;
OutputPlugin *output;
Evas_List *input_plugins; /* lists all available input plugins */
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/eplayer.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- eplayer.c 7 Dec 2003 13:08:48 -0000 1.22
+++ eplayer.c 9 Dec 2003 18:42:19 -0000 1.23
@@ -2,6 +2,7 @@
/* Edje Overhaul startnig phase 4 - Started 7/30/03 */
#include <config.h>
+#include <Edje.h>
#include <Edb.h>
#include <string.h>
#include <sys/stat.h>
@@ -93,7 +94,8 @@
for (l = player->input_plugins; l; l = l->next)
plugin_free(l->data);
- pthread_mutex_destroy(&player->playback_mutex);
+ pthread_mutex_destroy(&player->playback_stop_mutex);
+ pthread_mutex_destroy(&player->playback_next_mutex);
free(player);
}
@@ -141,7 +143,8 @@
return NULL;
}
- pthread_mutex_init(&player->playback_mutex, NULL);
+ pthread_mutex_init(&player->playback_next_mutex, NULL);
+ pthread_mutex_init(&player->playback_stop_mutex, NULL);
player->playback_stop = 1;
return player;
@@ -165,13 +168,28 @@
if (player->playback_stop)
return;
- pthread_mutex_lock(&player->playback_mutex);
+ pthread_mutex_lock(&player->playback_stop_mutex);
player->playback_stop = 1;
- pthread_mutex_unlock(&player->playback_mutex);
+ pthread_mutex_unlock(&player->playback_stop_mutex);
pthread_join(player->playback_thread, NULL);
}
+static int check_playback_next(void *udata) {
+ ePlayer *player = udata;
+
+ if (!player->playback_next)
+ return 1;
+
+ pthread_join(player->playback_thread, NULL);
+ player->playback_next = 0;
+
+ edje_object_signal_emit(player->gui.edje,
+ "PLAY_NEXT", "next_button");
+
+ return 0; /* stop timer */
+}
+
/**
* Starts playback.
*
@@ -182,12 +200,13 @@
if (rewind_track)
track_rewind(player);
+ ecore_timer_add(0.5, check_playback_next, player);
player->time_timer = ecore_timer_add(0.5, track_update_time,
player);
- pthread_mutex_lock(&player->playback_mutex);
+ pthread_mutex_lock(&player->playback_stop_mutex);
player->playback_stop = 0;
- pthread_mutex_unlock(&player->playback_mutex);
+ pthread_mutex_unlock(&player->playback_stop_mutex);
pthread_create(&player->playback_thread, NULL,
(void *) &track_play_chunk, player);
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/track.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- track.c 7 Dec 2003 13:08:48 -0000 1.11
+++ track.c 9 Dec 2003 18:42:19 -0000 1.12
@@ -25,9 +25,12 @@
pthread_mutex_unlock(&pli->pos_mutex);
}
- if (!player->playback_stop) /* EOF -> move to the next track */
- edje_object_signal_emit(player->gui.edje,
- "PLAY_NEXT", "next_button");
+ if (!player->playback_stop) {
+ /* EOF -> move to the next track */
+ pthread_mutex_lock(&player->playback_next_mutex);
+ player->playback_next = 1;
+ pthread_mutex_unlock(&player->playback_next_mutex);
+ }
}
int track_update_time(void *udata) {
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/callbacks.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- callbacks.c 7 Dec 2003 13:08:48 -0000 1.21
+++ callbacks.c 9 Dec 2003 18:42:19 -0000 1.22
@@ -116,8 +116,11 @@
if (play) {
eplayer_playback_start(player, 1);
state = PLAYBACK_STATE_PLAYING;
- } else /* refresh track info parts, but don't start playing yet */
+ } else {
+ /* refresh track info parts, but don't start playing yet */
track_open(player);
+ state = PLAYBACK_STATE_STOPPED;
+ }
}
/**
-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills. Sign up for IBM's
Free Linux Tutorials. Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs