From bcababe6050d043f871703750657332497ff535d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= Date: Tue, 27 May 2025 08:46:15 +0200 Subject: [PATCH] audio/player: Update track duration if previously set to 0 Sometimes some stacks may set the track duration to 0 in GetItemAttributes before updating it in GetPlayStatus. Currently the track duration is updated only if it has never been set before. To fix the issue this also checks that the current value is not 0. > ACL Data RX: Handle 11 flags 0x02 dlen 102 Channel: 71 len 98 ctrl 0x0202 [PSM 27 mode Enhanced Retransmission (0x03)] {chan 7} I-frame: Unsegmented TxSeq 1 ReqSeq 2 AVCTP Browsing: Response: type 0x00 label 1 PID 0x110e AVRCP: GetItemAttributes: len 0x0058 ... AttributeID: 0x00000007 (Track duration) CharsetID: 0x006a (UTF-8) AttributeLength: 0x0001 (1) AttributeValue: 0 ... > ACL Data RX: Handle 11 flags 0x02 dlen 26 Channel: 68 len 22 [PSM 23 mode Basic (0x00)] {chan 4} AVCTP Control: Response: type 0x00 label 9 PID 0x110e AV/C: Stable: address 0x48 opcode 0x00 Subunit: Panel Opcode: Vendor Dependent Company ID: 0x001958 AVRCP: GetPlayStatus pt Single len 0x0009 SongLength: 0x000255a8 (153000 miliseconds) SongPosition: 0x00009256 (37462 miliseconds) PlayStatus: 0x02 (PAUSED) --- profiles/audio/player.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/profiles/audio/player.c b/profiles/audio/player.c index 0f72d7601..52844c9c0 100644 --- a/profiles/audio/player.c +++ b/profiles/audio/player.c @@ -1320,9 +1320,9 @@ void media_player_set_duration(struct media_player *mp, uint32_t duration) if (g_hash_table_size(mp->track) == 0) return; - /* Ignore if duration is already set */ + /* Ignore if duration is already set to value > 0 */ curval = g_hash_table_lookup(mp->track, "Duration"); - if (curval != NULL) + if (curval != NULL && atoi(curval) != 0) return; value = g_strdup_printf("%u", duration); -- 2.47.3