return an event to player with the mplayer wrapper when a playback has ended
authorMathieu Schroeter <mathieu.schroeter@mycable.ch>
Sat Aug 04 18:06:27 2007 +0200 (2 years ago)
changeset 78a47596f52cce
parent 77936d51b7d234
child 79be136641b5d9
return an event to player with the mplayer wrapper when a playback has ended
src/wrapper_mplayer.c
       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))