mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-07-08 15:50:16 +02:00
Handles selecting subtitle tracks when transcoding now too Also fixes the adjustment if there's many external subtitles
This commit is contained in:
parent
1508fa1ea3
commit
e9e5aee01c
1 changed files with 53 additions and 44 deletions
|
|
@ -80,7 +80,6 @@ import org.jellyfin.sdk.model.api.BaseItemKind
|
||||||
import org.jellyfin.sdk.model.api.DeviceProfile
|
import org.jellyfin.sdk.model.api.DeviceProfile
|
||||||
import org.jellyfin.sdk.model.api.MediaSegmentDto
|
import org.jellyfin.sdk.model.api.MediaSegmentDto
|
||||||
import org.jellyfin.sdk.model.api.MediaSegmentType
|
import org.jellyfin.sdk.model.api.MediaSegmentType
|
||||||
import org.jellyfin.sdk.model.api.MediaSourceInfo
|
|
||||||
import org.jellyfin.sdk.model.api.MediaStreamType
|
import org.jellyfin.sdk.model.api.MediaStreamType
|
||||||
import org.jellyfin.sdk.model.api.PlayMethod
|
import org.jellyfin.sdk.model.api.PlayMethod
|
||||||
import org.jellyfin.sdk.model.api.PlaybackInfoDto
|
import org.jellyfin.sdk.model.api.PlaybackInfoDto
|
||||||
|
|
@ -560,7 +559,7 @@ class PlaybackViewModel
|
||||||
if (tracks.groups.isNotEmpty()) {
|
if (tracks.groups.isNotEmpty()) {
|
||||||
applyTrackSelections(
|
applyTrackSelections(
|
||||||
player,
|
player,
|
||||||
source,
|
source.supportsDirectPlay,
|
||||||
audioIndex,
|
audioIndex,
|
||||||
subtitleIndex,
|
subtitleIndex,
|
||||||
externalSubtitleCount,
|
externalSubtitleCount,
|
||||||
|
|
@ -1026,17 +1025,24 @@ suspend fun <T> onMain(block: suspend CoroutineScope.() -> T) = withContext(Disp
|
||||||
@OptIn(UnstableApi::class)
|
@OptIn(UnstableApi::class)
|
||||||
private fun applyTrackSelections(
|
private fun applyTrackSelections(
|
||||||
player: Player,
|
player: Player,
|
||||||
source: MediaSourceInfo,
|
supportsDirectPlay: Boolean,
|
||||||
audioIndex: Int?,
|
audioIndex: Int?,
|
||||||
subtitleIndex: Int?,
|
subtitleIndex: Int?,
|
||||||
externalSubtitleCount: Int,
|
externalSubtitleCount: Int,
|
||||||
subtitleIsExternal: Boolean,
|
subtitleIsExternal: Boolean,
|
||||||
) {
|
) {
|
||||||
if (source.supportsDirectPlay) {
|
if (subtitleIndex != null && subtitleIndex >= 0 && (subtitleIsExternal || supportsDirectPlay)) {
|
||||||
if (subtitleIndex != null && subtitleIndex >= 0) {
|
val chosenTrack =
|
||||||
val indexToFind =
|
if (subtitleIsExternal) {
|
||||||
subtitleIndex + if (subtitleIsExternal) 0 else (if (externalSubtitleCount > 0) -1 else 1)
|
player.currentTracks.groups.firstOrNull { group ->
|
||||||
val chosenTrack =
|
group.type == C.TRACK_TYPE_TEXT && group.isSupported &&
|
||||||
|
(0..<group.mediaTrackGroup.length)
|
||||||
|
.mapNotNull {
|
||||||
|
group.getTrackFormat(it).id
|
||||||
|
}.any { it.endsWith("e:$subtitleIndex") }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val indexToFind = subtitleIndex - externalSubtitleCount + 1
|
||||||
player.currentTracks.groups.firstOrNull { group ->
|
player.currentTracks.groups.firstOrNull { group ->
|
||||||
group.type == C.TRACK_TYPE_TEXT && group.isSupported &&
|
group.type == C.TRACK_TYPE_TEXT && group.isSupported &&
|
||||||
(0..<group.mediaTrackGroup.length)
|
(0..<group.mediaTrackGroup.length)
|
||||||
|
|
@ -1044,48 +1050,51 @@ private fun applyTrackSelections(
|
||||||
group.getTrackFormat(it).idAsInt
|
group.getTrackFormat(it).idAsInt
|
||||||
}.contains(indexToFind)
|
}.contains(indexToFind)
|
||||||
}
|
}
|
||||||
Timber.v("Chosen subtitle ($subtitleIndex/$indexToFind) track: $chosenTrack")
|
|
||||||
chosenTrack?.let {
|
|
||||||
player.trackSelectionParameters =
|
|
||||||
player.trackSelectionParameters
|
|
||||||
.buildUpon()
|
|
||||||
.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, false)
|
|
||||||
.setOverrideForType(
|
|
||||||
TrackSelectionOverride(
|
|
||||||
chosenTrack.mediaTrackGroup,
|
|
||||||
0,
|
|
||||||
),
|
|
||||||
).build()
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
Timber.v("Chosen subtitle ($subtitleIndex) track: $chosenTrack")
|
||||||
|
chosenTrack?.let {
|
||||||
player.trackSelectionParameters =
|
player.trackSelectionParameters =
|
||||||
player.trackSelectionParameters
|
player.trackSelectionParameters
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, true)
|
.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, false)
|
||||||
.build()
|
.setOverrideForType(
|
||||||
|
TrackSelectionOverride(
|
||||||
|
chosenTrack.mediaTrackGroup,
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
).build()
|
||||||
}
|
}
|
||||||
if (audioIndex != null) {
|
} else {
|
||||||
val chosenTrack =
|
player.trackSelectionParameters =
|
||||||
player.currentTracks.groups.firstOrNull { group ->
|
player.trackSelectionParameters
|
||||||
group.type == C.TRACK_TYPE_AUDIO && group.isSupported &&
|
.buildUpon()
|
||||||
(0..<group.mediaTrackGroup.length)
|
.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, true)
|
||||||
.map {
|
.build()
|
||||||
group.getTrackFormat(it).idAsInt
|
}
|
||||||
}.contains(audioIndex - externalSubtitleCount + 1) // Indexes are 1 based
|
if (audioIndex != null && supportsDirectPlay) {
|
||||||
}
|
val indexToFind =
|
||||||
Timber.v("Chosen audio track: $chosenTrack")
|
audioIndex - externalSubtitleCount + 1
|
||||||
chosenTrack?.let {
|
val chosenTrack =
|
||||||
player.trackSelectionParameters =
|
player.currentTracks.groups.firstOrNull { group ->
|
||||||
player.trackSelectionParameters
|
group.type == C.TRACK_TYPE_AUDIO && group.isSupported &&
|
||||||
.buildUpon()
|
(0..<group.mediaTrackGroup.length)
|
||||||
.setTrackTypeDisabled(C.TRACK_TYPE_AUDIO, false)
|
.map {
|
||||||
.setOverrideForType(
|
group.getTrackFormat(it).idAsInt
|
||||||
TrackSelectionOverride(
|
}.contains(indexToFind)
|
||||||
chosenTrack.mediaTrackGroup,
|
|
||||||
0,
|
|
||||||
),
|
|
||||||
).build()
|
|
||||||
}
|
}
|
||||||
|
Timber.v("Chosen audio ($audioIndex/$indexToFind) track: $chosenTrack")
|
||||||
|
chosenTrack?.let {
|
||||||
|
player.trackSelectionParameters =
|
||||||
|
player.trackSelectionParameters
|
||||||
|
.buildUpon()
|
||||||
|
.setTrackTypeDisabled(C.TRACK_TYPE_AUDIO, false)
|
||||||
|
.setOverrideForType(
|
||||||
|
TrackSelectionOverride(
|
||||||
|
chosenTrack.mediaTrackGroup,
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
).build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue