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]