emotion/generic-vlc: Don't try to stop the player from event thread.

Must send the command through the pipe so the main thread can stop it.

SVN revision: 69591
This commit is contained in:
Rafael Antognolli 2012-03-23 19:42:38 +00:00
parent 8e73b14577
commit a39a4f612e
2 changed files with 22 additions and 3 deletions

View File

@ -18,6 +18,13 @@ _playback_started_cb(void *data, Evas_Object *o, void *event_info)
printf("Emotion object started playback.\n"); printf("Emotion object started playback.\n");
} }
static void
_playback_stopped_cb(void *data, Evas_Object *o, void *event_info)
{
emotion_object_play_set(o, EINA_FALSE);
emotion_object_position_set(o, 0);
}
static Evas_Object * static Evas_Object *
_create_emotion_object(Evas *e) _create_emotion_object(Evas *e)
{ {
@ -27,6 +34,8 @@ _create_emotion_object(Evas *e)
evas_object_smart_callback_add( evas_object_smart_callback_add(
em, "playback_started", _playback_started_cb, NULL); em, "playback_started", _playback_started_cb, NULL);
evas_object_smart_callback_add(
em, "playback_stopped", _playback_stopped_cb, NULL);
return em; return em;
} }
@ -57,8 +66,11 @@ _on_key_down(void *data, Evas *e, Evas_Object *o, void *event_info)
} }
else if (!strcmp(ev->keyname, "s")) else if (!strcmp(ev->keyname, "s"))
{ {
fprintf(stderr, "skipping to position 60\n"); float len, pos;
emotion_object_position_set(em, 60); len = emotion_object_play_length_get(em);
pos = 0.98 * len;
fprintf(stderr, "skipping to position %0.3f\n", pos);
emotion_object_position_set(em, pos);
} }
else if (!strcmp(ev->keyname, "1")) else if (!strcmp(ev->keyname, "1"))
{ {

View File

@ -23,6 +23,7 @@
enum _Thread_Events { enum _Thread_Events {
EM_THREAD_POSITION_CHANGED, EM_THREAD_POSITION_CHANGED,
EM_THREAD_PLAYBACK_STOPPED,
EM_THREAD_LAST EM_THREAD_LAST
}; };
@ -367,7 +368,8 @@ _event_cb(const struct libvlc_event_t *ev, void *data)
_send_file_set(app); _send_file_set(app);
break; break;
case libvlc_MediaPlayerEndReached: case libvlc_MediaPlayerEndReached:
_send_cmd(app, EM_RESULT_PLAYBACK_STOPPED); thread_event = EM_THREAD_PLAYBACK_STOPPED;
write(app->fd_write, &thread_event, sizeof(thread_event));
break; break;
} }
} }
@ -718,6 +720,11 @@ _process_thread_events(struct _App *app)
case EM_THREAD_POSITION_CHANGED: case EM_THREAD_POSITION_CHANGED:
_position_changed(app); _position_changed(app);
break; break;
case EM_THREAD_PLAYBACK_STOPPED:
libvlc_media_player_stop(app->mp);
app->playing = 0;
_send_cmd(app, EM_RESULT_PLAYBACK_STOPPED);
break;
} }
} }