From 0f83256816256dd42f731efdd11d585b2a9b16b3 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 10 Oct 2013 14:33:43 +0300 Subject: [PATCH] audio/media: Send status changed if position changes If position changes send a status changed event to force the position to be resynced. --- profiles/audio/media.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/profiles/audio/media.c b/profiles/audio/media.c index 09a959a7a..5edd3dee1 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c @@ -1304,13 +1304,21 @@ static gboolean set_status(struct media_player *mp, DBusMessageIter *iter) static gboolean set_position(struct media_player *mp, DBusMessageIter *iter) { uint64_t value; + const char *status; if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_INT64) return FALSE; dbus_message_iter_get_basic(iter, &value); - mp->position = value / 1000; + value /= 1000; + + if (value > get_position(mp)) + status = "forward-seek"; + else + status = "reverse-seek"; + + mp->position = value; g_timer_start(mp->timer); DBG("Position=%u", mp->position); @@ -1325,9 +1333,14 @@ static gboolean set_position(struct media_player *mp, DBusMessageIter *iter) * If position is the maximum value allowed or greater than track's * duration, we send a track-reached-end event. */ - if (mp->position == UINT32_MAX || mp->position >= mp->duration) + if (mp->position == UINT32_MAX || mp->position >= mp->duration) { avrcp_player_event(mp->player, AVRCP_EVENT_TRACK_REACHED_END, NULL); + return TRUE; + } + + /* Send a status change to force resync the position */ + avrcp_player_event(mp->player, AVRCP_EVENT_STATUS_CHANGED, status); return TRUE; } -- 2.47.3