@@ -15,6 +15,7 @@ import android.widget.FrameLayout
1515import androidx.annotation.MainThread
1616import androidx.annotation.OptIn
1717import androidx.appcompat.app.AlertDialog
18+ import androidx.core.net.toUri
1819import androidx.media3.common.C.TIME_UNSET
1920import androidx.media3.common.C.TRACK_TYPE_AUDIO
2021import androidx.media3.common.C.TRACK_TYPE_TEXT
@@ -54,8 +55,8 @@ import androidx.media3.exoplayer.source.ClippingMediaSource
5455import androidx.media3.exoplayer.source.ConcatenatingMediaSource
5556import androidx.media3.exoplayer.source.ConcatenatingMediaSource2
5657import androidx.media3.exoplayer.source.DefaultMediaSourceFactory
57- import androidx.media3.exoplayer.source.MergingMediaSource
5858import androidx.media3.exoplayer.source.MediaSource
59+ import androidx.media3.exoplayer.source.MergingMediaSource
5960import androidx.media3.exoplayer.source.SingleSampleMediaSource
6061import androidx.media3.exoplayer.text.TextOutput
6162import androidx.media3.exoplayer.text.TextRenderer
@@ -65,6 +66,7 @@ import androidx.media3.extractor.mp4.FragmentedMp4Extractor
6566import androidx.media3.ui.SubtitleView
6667import androidx.preference.PreferenceManager
6768import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull
69+ import com.lagradost.cloudstream3.AudioFile
6870import com.lagradost.cloudstream3.CloudStreamApp.Companion.getKey
6971import com.lagradost.cloudstream3.CloudStreamApp.Companion.setKey
7072import com.lagradost.cloudstream3.CommonActivity.activity
@@ -73,43 +75,40 @@ import com.lagradost.cloudstream3.MainActivity.Companion.deleteFileOnExit
7375import com.lagradost.cloudstream3.R
7476import com.lagradost.cloudstream3.TvType
7577import com.lagradost.cloudstream3.USER_AGENT
76- import com.lagradost.cloudstream3.AudioFile
7778import com.lagradost.cloudstream3.app
7879import com.lagradost.cloudstream3.mvvm.debugAssert
7980import com.lagradost.cloudstream3.mvvm.logError
8081import com.lagradost.cloudstream3.mvvm.safe
8182import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.fixSubtitleAlignment
82- import com.lagradost.cloudstream3.ui.settings.Globals.TV
83+ import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR
84+ import com.lagradost.cloudstream3.ui.settings.Globals.PHONE
8385import com.lagradost.cloudstream3.ui.settings.Globals.isLayout
8486import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle
8587import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment.Companion.applyStyle
8688import com.lagradost.cloudstream3.utils.AppContextUtils.isUsingMobileData
8789import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus
90+ import com.lagradost.cloudstream3.utils.CLEARKEY_UUID
8891import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
8992import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread
9093import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount
9194import com.lagradost.cloudstream3.utils.DrmExtractorLink
9295import com.lagradost.cloudstream3.utils.EpisodeSkip
9396import com.lagradost.cloudstream3.utils.ExtractorLink
94- import com.lagradost.cloudstream3.utils.CLEARKEY_UUID
95- import com.lagradost.cloudstream3.utils.WIDEVINE_UUID
96- import com.lagradost.cloudstream3.utils.PLAYREADY_UUID
9797import com.lagradost.cloudstream3.utils.ExtractorLinkPlayList
9898import com.lagradost.cloudstream3.utils.ExtractorLinkType
99+ import com.lagradost.cloudstream3.utils.PLAYREADY_UUID
99100import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTagToLanguageName
101+ import com.lagradost.cloudstream3.utils.WIDEVINE_UUID
100102import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory
101103import kotlinx.coroutines.delay
104+ import okhttp3.Interceptor
102105import org.chromium.net.CronetEngine
103106import java.io.File
104107import java.util.UUID
105108import java.util.concurrent.Executors
106109import javax.net.ssl.HttpsURLConnection
107110import javax.net.ssl.SSLContext
108111import javax.net.ssl.SSLSession
109- import kotlin.collections.HashSet
110- import kotlin.text.StringBuilder
111- import androidx.core.net.toUri
112- import okhttp3.Interceptor
113112
114113const val TAG = " CS3ExoPlayer"
115114const val PREFERRED_AUDIO_LANGUAGE_KEY = " preferred_audio_language"
@@ -1079,22 +1078,27 @@ class CS3IPlayer : IPlayer {
10791078 context.getString(R .string.software_decoding_key),
10801079 - 1
10811080 )
1082- val softwareDecoding = when (current) {
1083- 0 -> true // yes
1084- 1 -> false // no
1081+ val (isSoftwareDecodingEnabled, isSoftwareDecodingPreferred) = when (current) {
1082+ 0 -> true to false // HW+SW, aka on but prefer hw
1083+ 2 -> true to true // SW+HW, aka on but prefer sw
1084+ 1 -> false to false // HW, aka off
10851085 // -1 = automatic
1086- else -> {
1087- // we do not want tv to have software decoding, because of crashes
1088- ! isLayout(TV )
1089- }
1086+ // We do not want tv to have software decoding, because of crashes
1087+ else -> isLayout(PHONE or EMULATOR ) to false
10901088 }
10911089
1092- val factory = if (softwareDecoding ) {
1090+ val factory = if (isSoftwareDecodingEnabled ) {
10931091 NextRenderersFactory (context).apply {
10941092 setEnableDecoderFallback(true )
1095- setExtensionRendererMode(DefaultRenderersFactory .EXTENSION_RENDERER_MODE_ON )
1093+ setExtensionRendererMode(
1094+ if (isSoftwareDecodingPreferred)
1095+ DefaultRenderersFactory .EXTENSION_RENDERER_MODE_PREFER
1096+ else
1097+ DefaultRenderersFactory .EXTENSION_RENDERER_MODE_ON
1098+ )
10961099 }
10971100 } else {
1101+ // no nextlib = EXTENSION_RENDERER_MODE_OFF
10981102 DefaultRenderersFactory (context)
10991103 }
11001104
0 commit comments