From 464c36f7d80bdee7b7949f0746ecb584303f8e8d Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Mon, 17 Oct 2011 18:34:29 -0200 Subject: [PATCH] AVRCP: respond with UINT32_MAX if duration is not available Section 5.4.1 of AVRCP 1.3 spec says: If TG does not support SongLength And SongPosition on TG, then TG shall return 0xFFFFFFFF. SongPosition is always available, but song length depends on user to provied it. --- audio/avrcp.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/audio/avrcp.c b/audio/avrcp.c index b1c3d546f..5f8277c5a 100644 --- a/audio/avrcp.c +++ b/audio/avrcp.c @@ -796,6 +796,7 @@ static uint8_t avrcp_handle_get_play_status(struct avrcp_player *player, uint16_t len = ntohs(pdu->params_len); uint32_t position; uint32_t duration; + void *pduration; if (len != 0) { pdu->params_len = htons(1); @@ -804,11 +805,13 @@ static uint8_t avrcp_handle_get_play_status(struct avrcp_player *player, } position = player->cb->get_position(player->user_data); - duration = GPOINTER_TO_UINT(player->cb->get_metadata( - AVRCP_MEDIA_ATTRIBUTE_DURATION, - player->user_data)); + pduration = player->cb->get_metadata(AVRCP_MEDIA_ATTRIBUTE_DURATION, + player->user_data); + if (pduration != NULL) + duration = htonl(GPOINTER_TO_UINT(pduration)); + else + duration = htonl(UINT32_MAX); - duration = htonl(duration); position = htonl(position); memcpy(&pdu->params[0], &duration, 4); -- 2.47.3