From 47c39e976c12c67c61d42240e42899a06985c2eb Mon Sep 17 00:00:00 2001 From: Rafael Antognolli Date: Tue, 6 Sep 2011 21:15:53 +0000 Subject: [PATCH] emotion/generic: Non-blocking meta info retrieval. SVN revision: 63238 --- .../generic_players/vlc/emotion_generic_vlc.c | 2 +- .../src/modules/generic/emotion_generic.c | 77 +++++++++++++++++-- .../src/modules/generic/emotion_generic.h | 1 + 3 files changed, 71 insertions(+), 9 deletions(-) diff --git a/legacy/emotion/src/generic_players/vlc/emotion_generic_vlc.c b/legacy/emotion/src/generic_players/vlc/emotion_generic_vlc.c index c4ab25b47a..4fb8ba0b45 100644 --- a/legacy/emotion/src/generic_players/vlc/emotion_generic_vlc.c +++ b/legacy/emotion/src/generic_players/vlc/emotion_generic_vlc.c @@ -696,7 +696,7 @@ _position_changed(struct _App *app) _send_all_track_info(app); /* sending meta info */ - // _send_all_meta_info(app); + _send_all_meta_info(app); libvlc_media_player_stop(app->mp); } diff --git a/legacy/emotion/src/modules/generic/emotion_generic.c b/legacy/emotion/src/modules/generic/emotion_generic.c index fc44657343..2b1be32638 100644 --- a/legacy/emotion/src/modules/generic/emotion_generic.c +++ b/legacy/emotion/src/modules/generic/emotion_generic.c @@ -524,14 +524,14 @@ _player_meta_info_read(Emotion_Generic_Video *ev) { INF("Receiving meta info:"); _player_meta_info_free(ev); - _player_helper_str_read(ev, &ev->meta.title); - _player_helper_str_read(ev, &ev->meta.artist); - _player_helper_str_read(ev, &ev->meta.album); - _player_helper_str_read(ev, &ev->meta.year); - _player_helper_str_read(ev, &ev->meta.genre); - _player_helper_str_read(ev, &ev->meta.comment); - _player_helper_str_read(ev, &ev->meta.disc_id); - _player_helper_str_read(ev, &ev->meta.count); + ev->meta.title = ev->cmd.param.meta.title; + ev->meta.artist = ev->cmd.param.meta.artist; + ev->meta.album = ev->cmd.param.meta.album; + ev->meta.year = ev->cmd.param.meta.year; + ev->meta.genre = ev->cmd.param.meta.genre; + ev->meta.comment = ev->cmd.param.meta.comment; + ev->meta.disc_id = ev->cmd.param.meta.disc_id; + ev->meta.count = ev->cmd.param.meta.count; INF("title: '%s'", ev->meta.title); INF("artist: '%s'", ev->meta.artist); INF("album: '%s'", ev->meta.album); @@ -773,6 +773,64 @@ _player_cmd_track_info(Emotion_Generic_Video *ev) _player_cmd_process(ev); } +static void +_player_cmd_meta_info(Emotion_Generic_Video *ev) +{ + int param; + const char *info; + char buf[PATH_MAX]; + + if (ev->cmd.num_params == 0) + { + ev->cmd.cur_param = 0; + ev->cmd.num_params = 8; + ev->cmd.param.meta.title = NULL; + ev->cmd.param.meta.artist = NULL; + ev->cmd.param.meta.album = NULL; + ev->cmd.param.meta.year = NULL; + ev->cmd.param.meta.genre = NULL; + ev->cmd.param.meta.comment = NULL; + ev->cmd.param.meta.disc_id = NULL; + ev->cmd.param.meta.count = NULL; + ev->cmd.s_len = -1; + } + + if (ev->cmd.s_len == -1) + { + if (!_player_cmd_param_read(ev, ¶m, sizeof(param))) + return; + ev->cmd.s_len = param; + } + + if (!_player_cmd_param_read(ev, buf, ev->cmd.s_len)) + return; + + info = eina_stringshare_add_length(buf, ev->cmd.s_len); + ev->cmd.s_len = -1; + + if (ev->cmd.cur_param == 0) + ev->cmd.param.meta.title = info; + else if (ev->cmd.cur_param == 1) + ev->cmd.param.meta.artist = info; + else if (ev->cmd.cur_param == 2) + ev->cmd.param.meta.album = info; + else if (ev->cmd.cur_param == 3) + ev->cmd.param.meta.year = info; + else if (ev->cmd.cur_param == 4) + ev->cmd.param.meta.genre = info; + else if (ev->cmd.cur_param == 5) + ev->cmd.param.meta.comment = info; + else if (ev->cmd.cur_param == 6) + ev->cmd.param.meta.disc_id = info; + else if (ev->cmd.cur_param == 7) + ev->cmd.param.meta.count = info; + + ev->cmd.cur_param++; + + if (ev->cmd.cur_param == 8) + _player_cmd_process(ev); +} + static void _player_cmd_read(Emotion_Generic_Video *ev) { @@ -807,6 +865,9 @@ _player_cmd_read(Emotion_Generic_Video *ev) case EM_RESULT_SPU_TRACK_INFO: _player_cmd_track_info(ev); break; + case EM_RESULT_META_INFO: + _player_cmd_meta_info(ev); + break; default: WRN("received wrong command: %d", ev->cmd.type); diff --git a/legacy/emotion/src/modules/generic/emotion_generic.h b/legacy/emotion/src/modules/generic/emotion_generic.h index 38e7c4215a..50dd8e4f88 100644 --- a/legacy/emotion/src/modules/generic/emotion_generic.h +++ b/legacy/emotion/src/modules/generic/emotion_generic.h @@ -54,6 +54,7 @@ struct _Emotion_Generic_Cmd_Buffer int current; Emotion_Generic_Channel *channels; } track; + Emotion_Generic_Meta meta; } param; };