feat(youtube/force-video-codec): Force HDR Codec patch (#25)

This commit is contained in:
Hoàng Gia Bảo
2023-10-17 12:04:12 +07:00
committed by GitHub
parent 7645aa9a07
commit 5b4faf74d3
10 changed files with 40 additions and 33 deletions

View File

@ -1,4 +1,4 @@
package app.revanced.patches.youtube.misc.forceopus package app.revanced.patches.youtube.misc.codec.audio
import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.CompatiblePackage

View File

@ -1,4 +1,4 @@
package app.revanced.patches.youtube.misc.forcevp9 package app.revanced.patches.youtube.misc.codec.video
import app.revanced.extensions.exception import app.revanced.extensions.exception
import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.data.BytecodeContext
@ -11,12 +11,12 @@ import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patches.youtube.misc.forcevp9.fingerprints.VideoCapabilitiesFingerprint import app.revanced.patches.youtube.misc.codec.video.fingerprints.VideoCapabilitiesFingerprint
import app.revanced.patches.youtube.misc.forcevp9.fingerprints.VideoCapabilitiesParentFingerprint import app.revanced.patches.youtube.misc.codec.video.fingerprints.VideoCapabilitiesParentFingerprint
import app.revanced.patches.youtube.misc.forcevp9.fingerprints.Vp9PrimaryFingerprint import app.revanced.patches.youtube.misc.codec.video.fingerprints.VideoPrimaryFingerprint
import app.revanced.patches.youtube.misc.forcevp9.fingerprints.Vp9PropsFingerprint import app.revanced.patches.youtube.misc.codec.video.fingerprints.VideoPropsFingerprint
import app.revanced.patches.youtube.misc.forcevp9.fingerprints.Vp9PropsParentFingerprint import app.revanced.patches.youtube.misc.codec.video.fingerprints.VideoPropsParentFingerprint
import app.revanced.patches.youtube.misc.forcevp9.fingerprints.Vp9SecondaryFingerprint import app.revanced.patches.youtube.misc.codec.video.fingerprints.VideoSecondaryFingerprint
import app.revanced.patches.youtube.utils.fingerprints.LayoutSwitchFingerprint import app.revanced.patches.youtube.utils.fingerprints.LayoutSwitchFingerprint
import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch
import app.revanced.util.integrations.Constants.MISC_PATH import app.revanced.util.integrations.Constants.MISC_PATH
@ -26,8 +26,8 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
@Patch( @Patch(
name = "Force VP9 codec", name = "Force video codec",
description = "Forces the VP9 codec for videos.", description = "Forces the video codec for videos.",
dependencies = [SettingsPatch::class], dependencies = [SettingsPatch::class],
compatiblePackages = [ compatiblePackages = [
CompatiblePackage( CompatiblePackage(
@ -49,27 +49,27 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
] ]
) )
@Suppress("unused") @Suppress("unused")
object ForceVP9CodecPatch : BytecodePatch( object ForceVideoCodecPatch : BytecodePatch(
setOf( setOf(
LayoutSwitchFingerprint, LayoutSwitchFingerprint,
VideoCapabilitiesParentFingerprint, VideoCapabilitiesParentFingerprint,
Vp9PropsParentFingerprint VideoPropsParentFingerprint
) )
) { ) {
override fun execute(context: BytecodeContext) { override fun execute(context: BytecodeContext) {
LayoutSwitchFingerprint.result?.classDef?.let { classDef -> LayoutSwitchFingerprint.result?.classDef?.let { classDef ->
arrayOf( arrayOf(
Vp9PrimaryFingerprint, VideoPrimaryFingerprint,
Vp9SecondaryFingerprint VideoSecondaryFingerprint
).forEach { fingerprint -> ).forEach { fingerprint ->
fingerprint.also { it.resolve(context, classDef) }.result?.injectOverride() fingerprint.also { it.resolve(context, classDef) }.result?.injectOverride()
?: throw fingerprint.exception ?: throw fingerprint.exception
} }
} ?: throw LayoutSwitchFingerprint.exception } ?: throw LayoutSwitchFingerprint.exception
Vp9PropsParentFingerprint.result?.let { parentResult -> VideoPropsParentFingerprint.result?.let { parentResult ->
Vp9PropsFingerprint.also { VideoPropsFingerprint.also {
it.resolve( it.resolve(
context, context,
parentResult.classDef parentResult.classDef
@ -82,8 +82,8 @@ object ForceVP9CodecPatch : BytecodePatch(
).forEach { (fieldName, descriptor) -> ).forEach { (fieldName, descriptor) ->
it.hookProps(fieldName, descriptor) it.hookProps(fieldName, descriptor)
} }
} ?: throw Vp9PropsFingerprint.exception } ?: throw VideoPropsFingerprint.exception
} ?: throw Vp9PropsParentFingerprint.exception } ?: throw VideoPropsParentFingerprint.exception
VideoCapabilitiesParentFingerprint.result?.let { parentResult -> VideoCapabilitiesParentFingerprint.result?.let { parentResult ->
VideoCapabilitiesFingerprint.also { VideoCapabilitiesFingerprint.also {
@ -116,11 +116,11 @@ object ForceVP9CodecPatch : BytecodePatch(
*/ */
SettingsPatch.addPreference( SettingsPatch.addPreference(
arrayOf( arrayOf(
"SETTINGS: ENABLE_VP9_CODEC" "SETTINGS: ENABLE_VIDEO_CODEC"
) )
) )
SettingsPatch.updatePatchStatus("force-vp9-codec") SettingsPatch.updatePatchStatus("force-video-codec")
} }
@ -128,7 +128,7 @@ object ForceVP9CodecPatch : BytecodePatch(
"$MISC_PATH/CodecOverridePatch;" "$MISC_PATH/CodecOverridePatch;"
private const val INTEGRATIONS_CLASS_METHOD_REFERENCE = private const val INTEGRATIONS_CLASS_METHOD_REFERENCE =
"$INTEGRATIONS_CLASS_DESCRIPTOR->shouldForceVP9(Z)Z" "$INTEGRATIONS_CLASS_DESCRIPTOR->shouldForceCodec(Z)Z"
private fun MethodFingerprintResult.injectOverride() { private fun MethodFingerprintResult.injectOverride() {
mutableMethod.apply { mutableMethod.apply {

View File

@ -1,4 +1,4 @@
package app.revanced.patches.youtube.misc.forcevp9.fingerprints package app.revanced.patches.youtube.misc.codec.video.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode

View File

@ -1,4 +1,4 @@
package app.revanced.patches.youtube.misc.forcevp9.fingerprints package app.revanced.patches.youtube.misc.codec.video.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint

View File

@ -1,11 +1,11 @@
package app.revanced.patches.youtube.misc.forcevp9.fingerprints package app.revanced.patches.youtube.misc.codec.video.fingerprints
import app.revanced.patcher.extensions.or import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
object Vp9PrimaryFingerprint : MethodFingerprint( object VideoPrimaryFingerprint : MethodFingerprint(
returnType = "Z", returnType = "Z",
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
parameters = listOf("I"), parameters = listOf("I"),

View File

@ -1,11 +1,11 @@
package app.revanced.patches.youtube.misc.forcevp9.fingerprints package app.revanced.patches.youtube.misc.codec.video.fingerprints
import app.revanced.patcher.extensions.or import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
object Vp9PropsFingerprint : MethodFingerprint( object VideoPropsFingerprint : MethodFingerprint(
returnType = "L", returnType = "L",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList(), parameters = emptyList(),

View File

@ -1,8 +1,8 @@
package app.revanced.patches.youtube.misc.forcevp9.fingerprints package app.revanced.patches.youtube.misc.codec.video.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object Vp9PropsParentFingerprint : MethodFingerprint( object VideoPropsParentFingerprint : MethodFingerprint(
returnType = "V", returnType = "V",
strings = listOf("Android Wear") strings = listOf("Android Wear")
) )

View File

@ -1,11 +1,11 @@
package app.revanced.patches.youtube.misc.forcevp9.fingerprints package app.revanced.patches.youtube.misc.codec.video.fingerprints
import app.revanced.patcher.extensions.or import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
object Vp9SecondaryFingerprint : MethodFingerprint( object VideoSecondaryFingerprint : MethodFingerprint(
returnType = "Z", returnType = "Z",
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
parameters = listOf("L", "I"), parameters = listOf("L", "I"),

View File

@ -164,6 +164,8 @@ Only available to some users who can use the speed overlay"</string>
<string name="revanced_enable_tablet_navigation_bar_title">Enable tablet navigation bar</string> <string name="revanced_enable_tablet_navigation_bar_title">Enable tablet navigation bar</string>
<string name="revanced_enable_vp9_codec_summary">Spoof device information to enable vp9 codec</string> <string name="revanced_enable_vp9_codec_summary">Spoof device information to enable vp9 codec</string>
<string name="revanced_enable_vp9_codec_title">Enable vp9 codec</string> <string name="revanced_enable_vp9_codec_title">Enable vp9 codec</string>
<string name="revanced_enable_hdr_codec_summary">Spoof device information to enable HDR codec</string>
<string name="revanced_enable_hdr_codec_title">Enable HDR codec</string>
<string name="revanced_enable_wide_search_bar_summary_off">Wide search bar is disabled</string> <string name="revanced_enable_wide_search_bar_summary_off">Wide search bar is disabled</string>
<string name="revanced_enable_wide_search_bar_summary_on">Wide search bar is enabled</string> <string name="revanced_enable_wide_search_bar_summary_on">Wide search bar is enabled</string>
<string name="revanced_enable_wide_search_bar_title">Enable wide search bar</string> <string name="revanced_enable_wide_search_bar_title">Enable wide search bar</string>
@ -602,6 +604,10 @@ If you enable this setting, the following features are not available:
<string name="revanced_reboot_warning_vp9">"Spoofs device information to enable VP9 codec <string name="revanced_reboot_warning_vp9">"Spoofs device information to enable VP9 codec
Since these setting is quite outdated, it may not be valid"</string> Since these setting is quite outdated, it may not be valid"</string>
<string name="revanced_reboot_warning_hdr">"Spoofs device information to unlock HDR codec
As this is still an experimental feature, there may be other unknown issues.
Are you sure you want to continue though?"</string>
<string name="revanced_ryd_about">About</string> <string name="revanced_ryd_about">About</string>
<string name="revanced_ryd_attribution_summary">Dislike data is provided by the Return YouTube Dislike API. Tap here to learn more.</string> <string name="revanced_ryd_attribution_summary">Dislike data is provided by the Return YouTube Dislike API. Tap here to learn more.</string>

View File

@ -289,8 +289,9 @@
<!-- SETTINGS: LAYOUT_SWITCH <!-- SETTINGS: LAYOUT_SWITCH
<SwitchPreference android:title="@string/revanced_enable_tablet_layout_title" android:key="revanced_enable_tablet_layout" android:summary="@string/revanced_enable_tablet_layout_summary" android:defaultValue="false" />SETTINGS: LAYOUT_SWITCH --> <SwitchPreference android:title="@string/revanced_enable_tablet_layout_title" android:key="revanced_enable_tablet_layout" android:summary="@string/revanced_enable_tablet_layout_summary" android:defaultValue="false" />SETTINGS: LAYOUT_SWITCH -->
<!-- SETTINGS: ENABLE_VP9_CODEC <!-- SETTINGS: ENABLE_VIDEO_CODEC
<SwitchPreference android:title="@string/revanced_enable_vp9_codec_title" android:key="revanced_enable_vp9_codec" android:defaultValue="false" android:summary="@string/revanced_enable_vp9_codec_summary" />SETTINGS: ENABLE_VP9_CODEC --> <SwitchPreference android:title="@string/revanced_enable_vp9_codec_title" android:key="revanced_enable_vp9_codec" android:defaultValue="false" android:summary="@string/revanced_enable_vp9_codec_summary" />
<SwitchPreference android:title="@string/revanced_enable_hdr_codec_title" android:key="revanced_enable_hdr_codec" android:defaultValue="false" android:summary="@string/revanced_enable_hdr_codec_summary" />SETTINGS: ENABLE_VIDEO_CODEC -->
<!-- SETTINGS: SPOOF_APP_VERSION <!-- SETTINGS: SPOOF_APP_VERSION
<SwitchPreference android:title="@string/revanced_spoof_app_version_title" android:key="revanced_spoof_app_version" android:defaultValue="false" android:summary="@string/revanced_spoof_app_version_summary" /> <SwitchPreference android:title="@string/revanced_spoof_app_version_title" android:key="revanced_spoof_app_version" android:defaultValue="false" android:summary="@string/revanced_spoof_app_version_summary" />