diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt
index 2b3ad224..03f556c5 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt
@@ -35,6 +35,7 @@ import org.moire.ultrasonic.activity.NavigationActivity
import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient
import org.moire.ultrasonic.app.UApp
import org.moire.ultrasonic.util.Constants
+import org.moire.ultrasonic.util.Settings
class PlaybackService : MediaLibraryService(), KoinComponent {
private lateinit var player: ExoPlayer
@@ -92,7 +93,8 @@ class PlaybackService : MediaLibraryService(), KoinComponent {
// Create a renderer with HW rendering support
val renderer = DefaultRenderersFactory(this)
- renderer.setEnableAudioOffload(true)
+
+ if (Settings.useHwOffload) renderer.setEnableAudioOffload(true)
// Create the player
player = ExoPlayer.Builder(this)
@@ -104,7 +106,8 @@ class PlaybackService : MediaLibraryService(), KoinComponent {
.build()
// Enable audio offload
- player.experimentalSetOffloadSchedulingEnabled(true)
+ if (Settings.useHwOffload)
+ player.experimentalSetOffloadSchedulingEnabled(true)
// Create browser interface
librarySessionCallback = AutoMediaBrowserCallback(player)
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt
index 8556eae4..6fb9efeb 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt
@@ -71,7 +71,6 @@ object Constants {
const val PREFERENCES_KEY_MEDIA_BUTTONS = "mediaButtons"
const val PREFERENCES_KEY_SCROBBLE = "scrobble"
const val PREFERENCES_KEY_SERVER_SCALING = "serverScaling"
- const val PREFERENCES_KEY_REPEAT_MODE = "repeatMode"
const val PREFERENCES_KEY_WIFI_REQUIRED_FOR_DOWNLOAD = "wifiRequiredForDownload"
const val PREFERENCES_KEY_BUFFER_LENGTH = "bufferLength"
const val PREFERENCES_KEY_NETWORK_TIMEOUT = "networkTimeout"
@@ -105,13 +104,11 @@ object Constants {
const val PREFERENCES_KEY_SHARE_ON_SERVER = "sharingCreateOnServer"
const val PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION = "sharingDefaultExpiration"
const val PREFERENCES_KEY_USE_FIVE_STAR_RATING = "use_five_star_rating"
+ const val PREFERENCES_KEY_HARDWARE_OFFLOAD = "use_hw_offload"
const val PREFERENCES_KEY_CATEGORY_NOTIFICATIONS = "notificationsCategory"
const val PREFERENCES_KEY_FIRST_RUN_EXECUTED = "firstRunExecuted"
const val PREFERENCES_KEY_DEBUG_LOG_TO_FILE = "debugLogToFile"
const val PREFERENCES_KEY_OVERRIDE_LANGUAGE = "overrideLanguage"
- const val PREFERENCE_VALUE_ALL = 0
- const val PREFERENCE_VALUE_A2DP = 1
- const val PREFERENCE_VALUE_DISABLED = 2
const val FILENAME_PLAYLIST_SER = "downloadstate.ser"
const val ALBUM_ART_FILE = "folder.jpeg"
const val STARRED = "starred"
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Settings.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Settings.kt
index 90bba48e..58458f9e 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Settings.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Settings.kt
@@ -243,6 +243,8 @@ object Settings {
var useFiveStarRating by BooleanSetting(Constants.PREFERENCES_KEY_USE_FIVE_STAR_RATING, false)
+ var useHwOffload by BooleanSetting(Constants.PREFERENCES_KEY_HARDWARE_OFFLOAD, false)
+
// TODO: Remove in December 2022
fun migrateFeatureStorage() {
val sp = appContext.getSharedPreferences("feature_flags", Context.MODE_PRIVATE)
diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml
index e17ed742..b1b76090 100644
--- a/ultrasonic/src/main/res/values/strings.xml
+++ b/ultrasonic/src/main/res/values/strings.xml
@@ -484,4 +484,8 @@
Use five star rating for songs
Use five star rating system for songs instead of simply starring/unstarring items.
+ Use hardware playback (experimental)
+ Try to play the media using the media decoder chip on your phone. This can improve battery usage.
+
+
diff --git a/ultrasonic/src/main/res/xml/settings.xml b/ultrasonic/src/main/res/xml/settings.xml
index dfd7bb98..c03bdc62 100644
--- a/ultrasonic/src/main/res/xml/settings.xml
+++ b/ultrasonic/src/main/res/xml/settings.xml
@@ -96,6 +96,12 @@
a:summary="@string/settings.five_star_rating_description"
a:title="@string/settings.five_star_rating_title"
app:iconSpaceReserved="false" />
+