Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into develop/v-compose-ui
Browse files Browse the repository at this point in the history
# Conflicts:
#	app/src/main/res/values/strings.xml
  • Loading branch information
damontecres committed Feb 14, 2025
2 parents 6474887 + f04c031 commit 7e11e25
Show file tree
Hide file tree
Showing 5 changed files with 293 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,16 @@ import android.view.View
import android.view.WindowManager
import android.widget.ImageButton
import android.widget.ImageView
import android.widget.TableLayout
import android.widget.TableRow
import android.widget.TextView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.annotation.LayoutRes
import androidx.annotation.OptIn
import androidx.core.os.bundleOf
import androidx.core.view.get
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
Expand All @@ -26,6 +29,7 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.media3.common.PlaybackException
import androidx.media3.common.Player
import androidx.media3.common.Tracks
import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.PlayerControlView
Expand Down Expand Up @@ -63,6 +67,7 @@ import okhttp3.Request
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.format.DateTimeParseException
import kotlin.collections.set

/**
* Parent [Fragment] for playing videos
Expand Down Expand Up @@ -109,6 +114,7 @@ abstract class PlaybackFragment(
protected lateinit var titleText: TextView
protected lateinit var dateText: TextView
protected lateinit var debugView: View
protected lateinit var debugSupportedTable: TableLayout
protected lateinit var debugSceneId: TextView
protected lateinit var debugPlaybackTextView: TextView
protected lateinit var debugVideoTextView: TextView
Expand Down Expand Up @@ -186,6 +192,39 @@ abstract class PlaybackFragment(
}.also { exoPlayer ->
videoView.player = exoPlayer
exoPlayer.addListener(AmbientPlaybackListener())
}.also {
it.addListener(
object : Player.Listener {
override fun onTracksChanged(tracks: Tracks) {
val tracksSupported = checkForSupport(tracks)
viewLifecycleOwner.lifecycleScope.launch(
StashCoroutineExceptionHandler(
autoToast = true,
) + Dispatchers.Main,
) {
(1..<debugSupportedTable.childCount).forEach { _ ->
debugSupportedTable.removeViewAt(1)
}

tracksSupported.forEach { ts ->
val row =
requireActivity().layoutInflater.inflate(
R.layout.debug_supported_row,
debugSupportedTable,
false,
) as TableRow
(row[0] as TextView).text = ts.id
(row[1] as TextView).text = ts.type.name
(row[2] as TextView).text = ts.selected.toString()
(row[3] as TextView).text = ts.codecs
(row[4] as TextView).text = ts.supported.name
(row[5] as TextView).text = ts.labels.joinToString(", ")
debugSupportedTable.addView(row)
}
}
}
},
)
}.also(::postCreatePlayer)

protected fun updateDebugInfo(
Expand Down Expand Up @@ -372,6 +411,7 @@ abstract class PlaybackFragment(
exoCenterControls = view.findViewById(androidx.media3.ui.R.id.exo_center_controls)

debugView = view.findViewById(R.id.playback_debug_info)
debugSupportedTable = view.findViewById(R.id.debug_supported_table)
debugSceneId = view.findViewById(R.id.debug_scene_id)
debugPlaybackTextView = view.findViewById(R.id.debug_playback)
debugVideoTextView = view.findViewById(R.id.debug_video)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ package com.github.damontecres.stashapp.playback
import android.content.Context
import android.net.Uri
import android.util.Log
import androidx.annotation.OptIn
import androidx.media3.common.C
import androidx.media3.common.Format
import androidx.media3.common.MediaItem
import androidx.media3.common.MimeTypes
import androidx.media3.common.Tracks
import androidx.media3.common.util.UnstableApi
import androidx.preference.PreferenceManager
import com.github.damontecres.stashapp.R
import com.github.damontecres.stashapp.api.fragment.Caption
Expand Down Expand Up @@ -187,3 +191,100 @@ fun Caption.displayString(context: Context): String {
}
return "$languageName ($caption_type)"
}

enum class TrackSupportReason {
HANDLED,
EXCEEDS_CAPABILITIES,
UNSUPPORTED_DRM,
UNSUPPORTED_SUBTYPE,
UNSUPPORTED_TYPE,
UNKNOWN,
;

companion object {
@OptIn(UnstableApi::class)
fun fromInt(
@C.FormatSupport value: Int,
): TrackSupportReason =
when (value) {
C.FORMAT_HANDLED -> HANDLED
C.FORMAT_EXCEEDS_CAPABILITIES -> EXCEEDS_CAPABILITIES
C.FORMAT_UNSUPPORTED_DRM -> UNSUPPORTED_DRM
C.FORMAT_UNSUPPORTED_SUBTYPE -> UNSUPPORTED_SUBTYPE
C.FORMAT_UNSUPPORTED_TYPE -> UNSUPPORTED_TYPE
else -> UNKNOWN
}
}
}

enum class TrackType {
UNKNOWN,
DEFAULT,
AUDIO,
VIDEO,
TEXT,
IMAGE,
METADATA,
CAMERA_MOTION,
NONE,
;

companion object {
@OptIn(UnstableApi::class)
fun fromInt(value: Int): TrackType =
when (value) {
C.TRACK_TYPE_UNKNOWN -> UNKNOWN
C.TRACK_TYPE_DEFAULT -> DEFAULT
C.TRACK_TYPE_AUDIO -> AUDIO
C.TRACK_TYPE_VIDEO -> VIDEO
C.TRACK_TYPE_TEXT -> TEXT
C.TRACK_TYPE_IMAGE -> IMAGE
C.TRACK_TYPE_METADATA -> METADATA
C.TRACK_TYPE_CAMERA_MOTION -> CAMERA_MOTION
C.TRACK_TYPE_NONE -> NONE
else -> UNKNOWN
}
}
}

data class TrackSupport(
val id: String?,
val type: TrackType,
val supported: TrackSupportReason,
val selected: Boolean,
val labels: List<String>,
val codecs: String?,
val format: Format,
)

@OptIn(UnstableApi::class)
fun checkForSupport(tracks: Tracks): List<TrackSupport> =
tracks.groups.flatMap {
buildList {
val type = TrackType.fromInt(it.type)
for (i in 0..<it.length) {
val format = it.getTrackFormat(i)
val labels =
format.labels
.map {
if (it.language != null) {
"${it.value} (${it.language})"
} else {
it.value
}
}
val reason = TrackSupportReason.fromInt(it.getTrackSupport(i))
add(
TrackSupport(
format.id,
type,
reason,
it.isSelected,
labels,
format.codecs,
format,
),
)
}
}
}
31 changes: 31 additions & 0 deletions app/src/main/res/layout/debug_supported_row.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
style="@style/DebugInfoOverlayText"
tools:text="@string/id" />

<TextView
style="@style/DebugInfoOverlayText"
tools:text="@string/stashapp_type" />

<TextView
style="@style/DebugInfoOverlayText"
tools:text="@string/selected" />

<TextView
style="@style/DebugInfoOverlayText"
tools:text="@string/codec" />

<TextView
style="@style/DebugInfoOverlayText"
tools:text="@string/supported" />

<TextView
style="@style/DebugInfoOverlayText"
tools:text="@string/labels" />

</TableRow>
Loading

0 comments on commit 7e11e25

Please # to comment.