From e63f4d3cceef67635395f78c34a24270704ac695 Mon Sep 17 00:00:00 2001 From: Quentin Gliosca Date: Mon, 10 Jun 2024 11:44:08 +0200 Subject: [PATCH 1/2] Never report audio progress beyond duration --- .../readium/navigator/media/audio/AudioNavigator.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioNavigator.kt b/readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioNavigator.kt index 0b1f7e5c6e..dd5f29078f 100644 --- a/readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioNavigator.kt +++ b/readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioNavigator.kt @@ -108,11 +108,21 @@ public class AudioNavigator = audioEngine.playback.mapStateIn(coroutineScope) { playback -> + val itemDuration = + readingOrder.items[playback.index].duration + + val coercedOffset = + if (itemDuration == null) { + playback.offset + } else { + playback.offset.coerceAtMost(itemDuration) + } + Playback( playback.state.toState(), playback.playWhenReady, playback.index, - playback.offset, + coercedOffset, playback.buffered ) } From e03556767bcd8ae5929c2540903cd54e0a3bb86f Mon Sep 17 00:00:00 2001 From: Quentin Gliosca Date: Mon, 10 Jun 2024 11:56:35 +0200 Subject: [PATCH 2/2] Fix other values --- .../navigator/media/audio/AudioNavigator.kt | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioNavigator.kt b/readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioNavigator.kt index dd5f29078f..e5bb2abc43 100644 --- a/readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioNavigator.kt +++ b/readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioNavigator.kt @@ -91,17 +91,21 @@ public class AudioNavigator = audioEngine.playback.mapStateIn(coroutineScope) { val currentItem = readingOrder.items[it.index] - Location(currentItem.href, it.offset) + val coercedOffset = it.coerceOffset(currentItem.duration) + Location(currentItem.href, coercedOffset) } override fun play() { @@ -188,4 +189,11 @@ public class AudioNavigator State.Buffering is AudioEngine.State.Failure -> State.Failure(error) } + + private fun AudioEngine.Playback.coerceOffset(duration: Duration?): Duration = + if (duration == null) { + offset + } else { + offset.coerceAtMost(duration) + } }