diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt index 00f53e82..b7b4fb7c 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt @@ -353,14 +353,14 @@ class PlayerActivity : BasePlayerActivity() { private var selectedIndex = 1 // Default to "Original" (index 1) private fun showQualitySelectionDialog() { - val originalResolution = viewModel.getoriginalResolution() // TODO: Rework getting originalResolution + val originalResolution = viewModel.getoriginalResolution() ?: 0// TODO: Rework getting originalResolution val qualityEntries = resources.getStringArray(CoreR.array.quality_entries).toList() val qualityValues = resources.getStringArray(CoreR.array.quality_values).toList() val qualities = qualityEntries.toMutableList() val closestQuality = VideoQuality.entries .filter { it != VideoQuality.Auto && it != VideoQuality.Original } - .minByOrNull { kotlin.math.abs(it.height*it.width - originalResolution!!) } + .minByOrNull { kotlin.math.abs(it.height*it.width - originalResolution) } if (closestQuality != null) { qualities[1] = "${qualities[1]} (${closestQuality})" diff --git a/core/src/main/res/values/string_arrays.xml b/core/src/main/res/values/string_arrays.xml index 472228cf..36b6658f 100644 --- a/core/src/main/res/values/string_arrays.xml +++ b/core/src/main/res/values/string_arrays.xml @@ -55,4 +55,8 @@ 480p 360p + + h264 + hevc + \ No newline at end of file diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 7716be38..5bc5be72 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -139,6 +139,7 @@ Request timeout (ms) Connect timeout (ms) Socket timeout (ms) + Transcoding Codec Users Add user Hardware decoding diff --git a/core/src/main/res/xml/fragment_settings_network.xml b/core/src/main/res/xml/fragment_settings_network.xml index 5e5bd8a2..fd966364 100644 --- a/core/src/main/res/xml/fragment_settings_network.xml +++ b/core/src/main/res/xml/fragment_settings_network.xml @@ -15,4 +15,11 @@ app:key="pref_network_socket_timeout" app:title="@string/settings_socket_timeout" app:useSimpleSummaryProvider="true" /> + \ No newline at end of file diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt index e16b9fc5..a0847349 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt @@ -641,7 +641,7 @@ class JellyfinRepositoryImpl( context = context, protocol = MediaStreamProtocol.HLS, audioCodec = "aac", - videoCodec = "h264", + videoCodec = appPreferences.transcodeCodec!!, type = DlnaProfileType.VIDEO, conditions = listOf( @@ -715,7 +715,7 @@ class JellyfinRepositoryImpl( playSessionId = playSessionId, videoBitRate = videoBitrate, audioBitRate = 128000, - videoCodec = "h264", + videoCodec = appPreferences.transcodeCodec, audioCodec = "aac", container = container, maxHeight = maxHeight, @@ -745,7 +745,7 @@ class JellyfinRepositoryImpl( videoBitRate = videoBitrate, enableAdaptiveBitrateStreaming = false, audioBitRate = 128000, - videoCodec = "h264", + videoCodec = appPreferences.transcodeCodec, audioCodec = "aac", startTimeTicks = 0, copyTimestamps = true, @@ -762,7 +762,7 @@ class JellyfinRepositoryImpl( mediaSourceId = mediaSourceId, playSessionId = playSessionId, enableAdaptiveBitrateStreaming = true, - videoCodec = "h264", + videoCodec = appPreferences.transcodeCodec, audioCodec = "aac", startTimeTicks = 0, copyTimestamps = true, diff --git a/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt b/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt index c88d2d9d..957f9feb 100644 --- a/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt +++ b/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt @@ -103,6 +103,11 @@ constructor( Constants.NETWORK_DEFAULT_SOCKET_TIMEOUT.toString(), )!!.toLongOrNull() ?: Constants.NETWORK_DEFAULT_SOCKET_TIMEOUT + val transcodeCodec get() = sharedPreferences.getString( + Constants.PREF_NETWORK_CODEC, + Constants.NETWORK_DEFAULT_CODEC, + ) + // Cache val imageCache get() = sharedPreferences.getBoolean( Constants.PREF_IMAGE_CACHE, diff --git a/preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt b/preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt index 852dac19..4f555422 100644 --- a/preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt +++ b/preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt @@ -40,6 +40,7 @@ object Constants { const val PREF_NETWORK_REQUEST_TIMEOUT = "pref_network_request_timeout" const val PREF_NETWORK_CONNECT_TIMEOUT = "pref_network_connect_timeout" const val PREF_NETWORK_SOCKET_TIMEOUT = "pref_network_socket_timeout" + const val PREF_NETWORK_CODEC = "pref_network_codec" const val PREF_DOWNLOADS_MOBILE_DATA = "pref_downloads_mobile_data" const val PREF_DOWNLOADS_ROAMING = "pref_downloads_roaming" const val PREF_DOWNLOADS_QUALITY = "pref_downloads_quality" @@ -60,6 +61,7 @@ object Constants { const val NETWORK_DEFAULT_REQUEST_TIMEOUT = 30_000L const val NETWORK_DEFAULT_CONNECT_TIMEOUT = 6_000L const val NETWORK_DEFAULT_SOCKET_TIMEOUT = 10_000L + const val NETWORK_DEFAULT_CODEC = "h264" // sorting // This values must correspond to a SortString from [SortBy]