1 --- a/src/wrapper_mplayer.c Sat Aug 04 17:00:27 2007 +0200
2 +++ b/src/wrapper_mplayer.c Sat Aug 04 18:06:27 2007 +0200
3 @@ -53,6 +53,7 @@
4 /* Status of MPlayer child */
5 typedef enum mplayer_status {
6 MPLAYER_IS_IDLE,
7 + MPLAYER_IS_PLAYING,
8 MPLAYER_IS_DEAD
9 } mplayer_status_t;
10
11 @@ -233,7 +234,19 @@
12 }
13 pthread_mutex_unlock (&mplayer->mutex);
14
15 - if (strstr (buffer, "Exiting")) {
16 + if (strstr (buffer, "EOF code: 1") &&
17 + mplayer->status == MPLAYER_IS_PLAYING)
18 + {
19 + plog (MODULE_NAME, "Playback of stream has ended");
20 + mplayer->status = MPLAYER_IS_IDLE;
21 +
22 + if (player->event_cb)
23 + player->event_cb (PLAYER_EVENT_PLAYBACK_FINISHED, NULL);
24 + /* X11 */
25 + if (player->x11 && mrl_uses_vo (player->mrl))
26 + x11_unmap (player);
27 + }
28 + else if (strstr (buffer, "Exiting")) {
29 mplayer->status = MPLAYER_IS_DEAD;
30 break;
31 }
32 @@ -659,6 +672,7 @@
33 params[pp++] = "mplayer";
34 params[pp++] = "-slave"; /* work in slave mode */
35 params[pp++] = "-quiet"; /* reduce output messages */
36 + params[pp++] = "-v"; /* necessary for detect EOF */
37 params[pp++] = "-idle"; /* MPlayer stays always alive */
38 params[pp++] = "-fs"; /* fullscreen (if possible) */
39 params[pp++] = "-zoom"; /* zoom (if possible) */
40 @@ -1000,9 +1014,16 @@
41 static playback_status_t
42 mplayer_playback_start (player_t *player)
43 {
44 + mplayer_t *mplayer = NULL;
45 +
46 plog (MODULE_NAME, "playback_start");
47
48 if (!player)
49 + return PLAYER_PB_FATAL;
50 +
51 + mplayer = (mplayer_t *) player->priv;
52 +
53 + if (!mplayer)
54 return PLAYER_PB_FATAL;
55
56 /* identify the current stream */
57 @@ -1011,6 +1032,8 @@
58 // FIXME: playback error if not loaded
59 /* 0: new play, 1: append to the current playlist */
60 slave_cmd_int (player, SLAVE_LOADFILE, 0);
61 +
62 + mplayer->status = MPLAYER_IS_PLAYING;
63
64 /* X11 */
65 if (player->x11 && mrl_uses_vo (player->mrl))
66 @@ -1022,10 +1045,19 @@
67 static void
68 mplayer_playback_stop (player_t *player)
69 {
70 + mplayer_t *mplayer = NULL;
71 +
72 plog (MODULE_NAME, "playback_stop");
73
74 if (!player)
75 return;
76 +
77 + mplayer = (mplayer_t *) player->priv;
78 +
79 + if (!mplayer)
80 + return;
81 +
82 + mplayer->status = MPLAYER_IS_IDLE;
83
84 /* X11 */
85 if (player->x11 && mrl_uses_vo (player->mrl))