This commit is contained in:
Damontecres 2025-11-06 08:30:47 -05:00
parent db6e31f295
commit f3688b8417
No known key found for this signature in database

View file

@ -37,6 +37,11 @@ import timber.log.Timber
import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.concurrent.atomics.ExperimentalAtomicApi
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
/**
* This is barebones implementation of a [Player] which plays content using libmpv
*
* It doesn't support every feature or emit every event
*/
@kotlin.OptIn(ExperimentalAtomicApi::class) @kotlin.OptIn(ExperimentalAtomicApi::class)
@OptIn(UnstableApi::class) @OptIn(UnstableApi::class)
class MpvPlayer( class MpvPlayer(
@ -50,7 +55,6 @@ class MpvPlayer(
private var isPaused: Boolean = true private var isPaused: Boolean = true
private var surface: Surface? = null private var surface: Surface? = null
// private val listeners = mutableListOf<Player.Listener>()
private val looper = Util.getCurrentOrMainLooper() private val looper = Util.getCurrentOrMainLooper()
private val handler = Handler(looper) private val handler = Handler(looper)
@ -62,10 +66,8 @@ class MpvPlayer(
listener.onEvents(this@MpvPlayer, Player.Events(eventFlags)) listener.onEvents(this@MpvPlayer, Player.Events(eventFlags))
} }
private val availableCommands: Player.Commands private val availableCommands: Player.Commands
private lateinit var surfaceSize: Size
private var mediaItem: MediaItem? = null private var mediaItem: MediaItem? = null
private var startPositionMs: Long = 0L private var startPositionMs: Long = 0L
private var durationMs: Long = 0L private var durationMs: Long = 0L
private var positionMs: Long = 0L private var positionMs: Long = 0L
@ -275,7 +277,7 @@ class MpvPlayer(
override fun getCurrentTracks(): Tracks { override fun getCurrentTracks(): Tracks {
if (DEBUG) Timber.v("getCurrentTracks") if (DEBUG) Timber.v("getCurrentTracks")
return getTracks() ?: Tracks.EMPTY return getTracks()
} }
override fun getTrackSelectionParameters(): TrackSelectionParameters { override fun getTrackSelectionParameters(): TrackSelectionParameters {
@ -558,7 +560,7 @@ class MpvPlayer(
if (startPositionMs > 0) { if (startPositionMs > 0) {
seekTo(startPositionMs) seekTo(startPositionMs)
} }
getTracks()?.let { getTracks().let {
notifyListeners(EVENT_TRACKS_CHANGED) { onTracksChanged(it) } notifyListeners(EVENT_TRACKS_CHANGED) { onTracksChanged(it) }
} }
} }
@ -594,8 +596,8 @@ class MpvPlayer(
} }
} }
private fun getTracks(): Tracks? { private fun getTracks(): Tracks {
val trackCount = MPVLib.getPropertyInt("track-list/count") ?: return null val trackCount = MPVLib.getPropertyInt("track-list/count") ?: return Tracks.EMPTY
val groups = val groups =
(0..<trackCount).mapNotNull { idx -> (0..<trackCount).mapNotNull { idx ->
val type = MPVLib.getPropertyString("track-list/$idx/type") val type = MPVLib.getPropertyString("track-list/$idx/type")