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);
/* sending meta info */
// _send_all_meta_info(app);
_send_all_meta_info(app);
libvlc_media_player_stop(app->mp);
}

View File

@ -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, &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
_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);

View File

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