[PATCH BlueZ] audio/player: Update track duration if previously set to 0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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                                                                                                                                                                             #287 [hci0] 4.537033
      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                                                                                                                                                                              #296 [hci0] 4.589649
      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.43.0





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux