Skip to content

Commit c28ee05

Browse files
authored
Added more software decoding options
1 parent 58c84f0 commit c28ee05

File tree

2 files changed

+30
-24
lines changed

2 files changed

+30
-24
lines changed

app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import android.widget.FrameLayout
1515
import androidx.annotation.MainThread
1616
import androidx.annotation.OptIn
1717
import androidx.appcompat.app.AlertDialog
18+
import androidx.core.net.toUri
1819
import androidx.media3.common.C.TIME_UNSET
1920
import androidx.media3.common.C.TRACK_TYPE_AUDIO
2021
import androidx.media3.common.C.TRACK_TYPE_TEXT
@@ -54,8 +55,8 @@ import androidx.media3.exoplayer.source.ClippingMediaSource
5455
import androidx.media3.exoplayer.source.ConcatenatingMediaSource
5556
import androidx.media3.exoplayer.source.ConcatenatingMediaSource2
5657
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory
57-
import androidx.media3.exoplayer.source.MergingMediaSource
5858
import androidx.media3.exoplayer.source.MediaSource
59+
import androidx.media3.exoplayer.source.MergingMediaSource
5960
import androidx.media3.exoplayer.source.SingleSampleMediaSource
6061
import androidx.media3.exoplayer.text.TextOutput
6162
import androidx.media3.exoplayer.text.TextRenderer
@@ -65,6 +66,7 @@ import androidx.media3.extractor.mp4.FragmentedMp4Extractor
6566
import androidx.media3.ui.SubtitleView
6667
import androidx.preference.PreferenceManager
6768
import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull
69+
import com.lagradost.cloudstream3.AudioFile
6870
import com.lagradost.cloudstream3.CloudStreamApp.Companion.getKey
6971
import com.lagradost.cloudstream3.CloudStreamApp.Companion.setKey
7072
import com.lagradost.cloudstream3.CommonActivity.activity
@@ -73,43 +75,40 @@ import com.lagradost.cloudstream3.MainActivity.Companion.deleteFileOnExit
7375
import com.lagradost.cloudstream3.R
7476
import com.lagradost.cloudstream3.TvType
7577
import com.lagradost.cloudstream3.USER_AGENT
76-
import com.lagradost.cloudstream3.AudioFile
7778
import com.lagradost.cloudstream3.app
7879
import com.lagradost.cloudstream3.mvvm.debugAssert
7980
import com.lagradost.cloudstream3.mvvm.logError
8081
import com.lagradost.cloudstream3.mvvm.safe
8182
import 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
8385
import com.lagradost.cloudstream3.ui.settings.Globals.isLayout
8486
import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle
8587
import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment.Companion.applyStyle
8688
import com.lagradost.cloudstream3.utils.AppContextUtils.isUsingMobileData
8789
import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus
90+
import com.lagradost.cloudstream3.utils.CLEARKEY_UUID
8891
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
8992
import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread
9093
import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount
9194
import com.lagradost.cloudstream3.utils.DrmExtractorLink
9295
import com.lagradost.cloudstream3.utils.EpisodeSkip
9396
import 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
9797
import com.lagradost.cloudstream3.utils.ExtractorLinkPlayList
9898
import com.lagradost.cloudstream3.utils.ExtractorLinkType
99+
import com.lagradost.cloudstream3.utils.PLAYREADY_UUID
99100
import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTagToLanguageName
101+
import com.lagradost.cloudstream3.utils.WIDEVINE_UUID
100102
import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory
101103
import kotlinx.coroutines.delay
104+
import okhttp3.Interceptor
102105
import org.chromium.net.CronetEngine
103106
import java.io.File
104107
import java.util.UUID
105108
import java.util.concurrent.Executors
106109
import javax.net.ssl.HttpsURLConnection
107110
import javax.net.ssl.SSLContext
108111
import 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

114113
const val TAG = "CS3ExoPlayer"
115114
const 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

app/src/main/res/values/array.xml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -236,14 +236,16 @@
236236

237237
<array name="software_decoding_switch">
238238
<item>@string/automatic</item>
239-
<item>@string/yes</item>
240-
<item>@string/no</item>
239+
<item>HW+SW</item>
240+
<item>SW+HW</item>
241+
<item>HW</item>
241242
</array>
242243

243244
<array name="software_decoding_switch_values">
244-
<item>-1</item>
245-
<item>0</item>
246-
<item>1</item>
245+
<item>-1</item> <!-- Auto-->
246+
<item>0</item> <!-- HW+SW, aka on but prefer hw -->
247+
<item>2</item> <!-- SW+HW, aka on but prefer sw -->
248+
<item>1</item> <!-- HW, aka off -->
247249
</array>
248250

249251
<array name="confirm_exit">

0 commit comments

Comments
 (0)