emotion/generic: Non-blocking meta info retrieval.

SVN revision: 63238
This commit is contained in:
Rafael Antognolli 2011-09-06 21:15:53 +00:00
parent 7779d54fe4
commit 47c39e976c
3 changed files with 71 additions and 9 deletions

View File

@ -696,7 +696,7 @@ _position_changed(struct _App *app)
_send_all_track_info(app); _send_all_track_info(app);
/* sending meta info */ /* sending meta info */
// _send_all_meta_info(app); _send_all_meta_info(app);
libvlc_media_player_stop(app->mp); libvlc_media_player_stop(app->mp);
} }

View File

@ -524,14 +524,14 @@ _player_meta_info_read(Emotion_Generic_Video *ev)
{ {
INF("Receiving meta info:"); INF("Receiving meta info:");
_player_meta_info_free(ev); _player_meta_info_free(ev);
_player_helper_str_read(ev, &ev->meta.title); ev->meta.title = ev->cmd.param.meta.title;
_player_helper_str_read(ev, &ev->meta.artist); ev->meta.artist = ev->cmd.param.meta.artist;
_player_helper_str_read(ev, &ev->meta.album); ev->meta.album = ev->cmd.param.meta.album;
_player_helper_str_read(ev, &ev->meta.year); ev->meta.year = ev->cmd.param.meta.year;
_player_helper_str_read(ev, &ev->meta.genre); ev->meta.genre = ev->cmd.param.meta.genre;
_player_helper_str_read(ev, &ev->meta.comment); ev->meta.comment = ev->cmd.param.meta.comment;
_player_helper_str_read(ev, &ev->meta.disc_id); ev->meta.disc_id = ev->cmd.param.meta.disc_id;
_player_helper_str_read(ev, &ev->meta.count); ev->meta.count = ev->cmd.param.meta.count;
INF("title: '%s'", ev->meta.title); INF("title: '%s'", ev->meta.title);
INF("artist: '%s'", ev->meta.artist); INF("artist: '%s'", ev->meta.artist);
INF("album: '%s'", ev->meta.album); INF("album: '%s'", ev->meta.album);
@ -773,6 +773,64 @@ _player_cmd_track_info(Emotion_Generic_Video *ev)
_player_cmd_process(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, &param, 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 static void
_player_cmd_read(Emotion_Generic_Video *ev) _player_cmd_read(Emotion_Generic_Video *ev)
{ {
@ -807,6 +865,9 @@ _player_cmd_read(Emotion_Generic_Video *ev)
case EM_RESULT_SPU_TRACK_INFO: case EM_RESULT_SPU_TRACK_INFO:
_player_cmd_track_info(ev); _player_cmd_track_info(ev);
break; break;
case EM_RESULT_META_INFO:
_player_cmd_meta_info(ev);
break;
default: default:
WRN("received wrong command: %d", ev->cmd.type); WRN("received wrong command: %d", ev->cmd.type);

View File

@ -54,6 +54,7 @@ struct _Emotion_Generic_Cmd_Buffer
int current; int current;
Emotion_Generic_Channel *channels; Emotion_Generic_Channel *channels;
} track; } track;
Emotion_Generic_Meta meta;
} param; } param;
}; };