diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bcca5016..2e9701fc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ ktlint = "1.0.1" ktlintGradle = "12.0.2" detekt = "1.23.4" preferences = "1.2.1" -media3 = "1.1.1" +media3 = "1.2.0" androidSupport = "1.7.0" materialDesign = "1.10.0" diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ArtworkBitmapLoader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ArtworkBitmapLoader.kt index 785d7b64..c0e4c16c 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ArtworkBitmapLoader.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ArtworkBitmapLoader.kt @@ -46,6 +46,10 @@ class ArtworkBitmapLoader : BitmapLoader, KoinComponent { } } + override fun loadBitmap(uri: Uri, options: BitmapFactory.Options?): ListenableFuture { + return loadBitmap(uri) + } + private fun decode(data: ByteArray): Bitmap { val bitmap = BitmapFactory.decodeByteArray(data, 0, data.size) return bitmap ?: throw IllegalArgumentException("Could not decode bitmap") diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/JukeboxUnimplementedFunctions.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/JukeboxUnimplementedFunctions.kt index 10848929..95dcc4cb 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/JukeboxUnimplementedFunctions.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/JukeboxUnimplementedFunctions.kt @@ -12,6 +12,7 @@ import android.view.Surface import android.view.SurfaceHolder import android.view.SurfaceView import android.view.TextureView +import androidx.media3.common.AudioAttributes import androidx.media3.common.MediaItem import androidx.media3.common.MediaMetadata import androidx.media3.common.PlaybackParameters @@ -27,6 +28,10 @@ import androidx.media3.common.Tracks @SuppressLint("UnsafeOptInUsageError") abstract class JukeboxUnimplementedFunctions : Player { + override fun setAudioAttributes(audioAttributes: AudioAttributes, handleAudioFocus: Boolean) { + TODO("Not yet implemented") + } + override fun setMediaItems(mediaItems: MutableList) { TODO("Not yet implemented") } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/PlaybackService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/PlaybackService.kt index ed4dd5fb..c7d28e73 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/PlaybackService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/PlaybackService.kt @@ -20,10 +20,10 @@ import androidx.media3.common.C import androidx.media3.common.C.USAGE_MEDIA import androidx.media3.common.MediaItem import androidx.media3.common.Player +import androidx.media3.common.TrackSelectionParameters import androidx.media3.datasource.DataSource import androidx.media3.datasource.ResolvingDataSource import androidx.media3.datasource.okhttp.OkHttpDataSource -import androidx.media3.exoplayer.DefaultRenderersFactory import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.source.DefaultMediaSourceFactory import androidx.media3.exoplayer.source.ShuffleOrder @@ -237,35 +237,39 @@ class PlaybackService : val cacheDataSourceFactory: DataSource.Factory = CachedDataSource.Factory(resolvingDataSource) - // Create a renderer with HW rendering support - val renderer = DefaultRenderersFactory(this) - - if (Settings.useHwOffload) { - renderer.setEnableAudioOffload(true) - } - // Create the player val player = ExoPlayer.Builder(this) .setAudioAttributes(getAudioAttributes(), true) .setWakeMode(getWakeModeFlag()) .setHandleAudioBecomingNoisy(true) .setMediaSourceFactory(DefaultMediaSourceFactory(cacheDataSourceFactory)) - .setRenderersFactory(renderer) .setSeekBackIncrementMs(Settings.seekInterval.toLong()) .setSeekForwardIncrementMs(Settings.seekInterval.toLong()) .build() + // Enable audio offload + if (Settings.useHwOffload) { + player.enableOffload() + } + // Setup Equalizer equalizer = EqualizerController.create(player.audioSessionId) - // Enable audio offload - if (Settings.useHwOffload) { - player.experimentalSetOffloadSchedulingEnabled(true) - } - return player } + private fun ExoPlayer.enableOffload() { + trackSelectionParameters = trackSelectionParameters.buildUpon() + .setAudioOffloadPreferences( + TrackSelectionParameters.AudioOffloadPreferences + .Builder() + .setAudioOffloadMode( + TrackSelectionParameters.AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED + ) + .build() + ).build() + } + private fun createShuffleListFromCurrentIndex( currentIndex: Int, length: Int,