From 7ec1b244d0157b35b9172312f9e7a0c0b3889d6f Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Fri, 10 Apr 2026 09:24:18 +0300 Subject: [PATCH] Lower min playback speed to 0.25x and extract speed range constants Extract MIN_PLAYBACK_SPEED and MAX_PLAYBACK_SPEED constants into VideoPlayerState companion to replace hardcoded magic numbers across all 6 platform implementations. Closes #110 --- .../composemediaplayer/VideoPlayerState.android.kt | 2 +- .../kdroidfilter/composemediaplayer/VideoPlayerState.kt | 5 +++++ .../kdroidfilter/composemediaplayer/VideoPlayerState.ios.kt | 2 +- .../composemediaplayer/linux/LinuxVideoPlayerState.kt | 2 +- .../composemediaplayer/mac/MacVideoPlayerState.kt | 2 +- .../composemediaplayer/windows/WindowsVideoPlayerState.kt | 2 +- .../kdroidfilter/composemediaplayer/VideoPlayerState.web.kt | 2 +- 7 files changed, 11 insertions(+), 6 deletions(-) diff --git a/mediaplayer/src/androidMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.android.kt b/mediaplayer/src/androidMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.android.kt index 3accae82..e7fe0bdb 100644 --- a/mediaplayer/src/androidMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.android.kt +++ b/mediaplayer/src/androidMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.android.kt @@ -215,7 +215,7 @@ open class DefaultVideoPlayerState: VideoPlayerState { override var playbackSpeed: Float get() = _playbackSpeed set(value) { - _playbackSpeed = value.coerceIn(0.5f, 2.0f) + _playbackSpeed = value.coerceIn(VideoPlayerState.MIN_PLAYBACK_SPEED, VideoPlayerState.MAX_PLAYBACK_SPEED) exoPlayer?.let { player -> player.playbackParameters = PlaybackParameters(_playbackSpeed) } diff --git a/mediaplayer/src/commonMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.kt b/mediaplayer/src/commonMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.kt index 9174d939..59783d37 100644 --- a/mediaplayer/src/commonMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.kt +++ b/mediaplayer/src/commonMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.kt @@ -53,6 +53,11 @@ interface VideoPlayerState { var loop: Boolean var playbackSpeed: Float + companion object { + const val MIN_PLAYBACK_SPEED = 0.25f + const val MAX_PLAYBACK_SPEED = 2.0f + } + /** * Provides the audio level for the left channel as a percentage. */ diff --git a/mediaplayer/src/iosMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.ios.kt b/mediaplayer/src/iosMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.ios.kt index 71d6415e..3c2d1978 100644 --- a/mediaplayer/src/iosMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.ios.kt +++ b/mediaplayer/src/iosMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.ios.kt @@ -76,7 +76,7 @@ open class DefaultVideoPlayerState: VideoPlayerState { override var playbackSpeed: Float get() = _playbackSpeed set(value) { - _playbackSpeed = value.coerceIn(0.5f, 2.0f) + _playbackSpeed = value.coerceIn(VideoPlayerState.MIN_PLAYBACK_SPEED, VideoPlayerState.MAX_PLAYBACK_SPEED) // Only update player rate if we are playing to avoid auto-play if (_isPlaying) { player?.rate = _playbackSpeed diff --git a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/linux/LinuxVideoPlayerState.kt b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/linux/LinuxVideoPlayerState.kt index ba39a0f0..0933ac7a 100644 --- a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/linux/LinuxVideoPlayerState.kt +++ b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/linux/LinuxVideoPlayerState.kt @@ -141,7 +141,7 @@ class LinuxVideoPlayerState : VideoPlayerState { override var playbackSpeed: Float get() = _playbackSpeedState.value set(value) { - val newValue = value.coerceIn(0.5f, 2.0f) + val newValue = value.coerceIn(VideoPlayerState.MIN_PLAYBACK_SPEED, VideoPlayerState.MAX_PLAYBACK_SPEED) if (_playbackSpeedState.value != newValue) { _playbackSpeedState.value = newValue ioScope.launch { applyPlaybackSpeed() } diff --git a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/mac/MacVideoPlayerState.kt b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/mac/MacVideoPlayerState.kt index ca16abc1..199c1030 100644 --- a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/mac/MacVideoPlayerState.kt +++ b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/mac/MacVideoPlayerState.kt @@ -147,7 +147,7 @@ class MacVideoPlayerState : VideoPlayerState { override var playbackSpeed: Float get() = _playbackSpeedState.value set(value) { - val newValue = value.coerceIn(0.5f, 2.0f) + val newValue = value.coerceIn(VideoPlayerState.MIN_PLAYBACK_SPEED, VideoPlayerState.MAX_PLAYBACK_SPEED) if (_playbackSpeedState.value != newValue) { _playbackSpeedState.value = newValue // Launch a coroutine to apply the playback speed if the native player is available. diff --git a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/windows/WindowsVideoPlayerState.kt b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/windows/WindowsVideoPlayerState.kt index 7907b9f7..31ed3285 100644 --- a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/windows/WindowsVideoPlayerState.kt +++ b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/windows/WindowsVideoPlayerState.kt @@ -169,7 +169,7 @@ class WindowsVideoPlayerState : VideoPlayerState { override var playbackSpeed: Float get() = _playbackSpeed set(value) { - val newSpeed = value.coerceIn(0.5f, 2.0f) + val newSpeed = value.coerceIn(VideoPlayerState.MIN_PLAYBACK_SPEED, VideoPlayerState.MAX_PLAYBACK_SPEED) if (_playbackSpeed != newSpeed) { _playbackSpeed = newSpeed scope.launch { diff --git a/mediaplayer/src/webMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.web.kt b/mediaplayer/src/webMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.web.kt index bbc6d0b4..19defb21 100644 --- a/mediaplayer/src/webMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.web.kt +++ b/mediaplayer/src/webMain/kotlin/io/github/kdroidfilter/composemediaplayer/VideoPlayerState.web.kt @@ -104,7 +104,7 @@ open class DefaultVideoPlayerState: VideoPlayerState { override var playbackSpeed: Float get() = _playbackSpeed set(value) { - val newValue = value.coerceIn(0.5f, 2.0f) + val newValue = value.coerceIn(VideoPlayerState.MIN_PLAYBACK_SPEED, VideoPlayerState.MAX_PLAYBACK_SPEED) if (_playbackSpeed != newValue) { _playbackSpeed = newValue applyPlaybackSpeedWithThrottle(newValue)