mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2026-04-23 00:36:41 +00:00
Consolidate AV1 and HEVC options into a single preference
This commit is contained in:
@@ -411,12 +411,12 @@ public class Game extends Activity implements SurfaceHolder.Callback,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Display a message to the user if HEVC was forced on but we still didn't find a decoder
|
// Display a message to the user if HEVC was forced on but we still didn't find a decoder
|
||||||
if (prefConfig.hevcFormat == PreferenceConfiguration.FormatOption.FORCE_ON && !decoderRenderer.isHevcSupported()) {
|
if (prefConfig.videoFormat == PreferenceConfiguration.FormatOption.FORCE_HEVC && !decoderRenderer.isHevcSupported()) {
|
||||||
Toast.makeText(this, "No HEVC decoder found", Toast.LENGTH_LONG).show();
|
Toast.makeText(this, "No HEVC decoder found", Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display a message to the user if AV1 was forced on but we still didn't find a decoder
|
// Display a message to the user if AV1 was forced on but we still didn't find a decoder
|
||||||
if (prefConfig.av1Format == PreferenceConfiguration.FormatOption.FORCE_ON && !decoderRenderer.isAv1Supported()) {
|
if (prefConfig.videoFormat == PreferenceConfiguration.FormatOption.FORCE_AV1 && !decoderRenderer.isAv1Supported()) {
|
||||||
Toast.makeText(this, "No AV1 decoder found", Toast.LENGTH_LONG).show();
|
Toast.makeText(this, "No AV1 decoder found", Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -218,8 +218,8 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C
|
|||||||
}
|
}
|
||||||
|
|
||||||
private MediaCodecInfo findHevcDecoder(PreferenceConfiguration prefs, boolean meteredNetwork, boolean requestedHdr) {
|
private MediaCodecInfo findHevcDecoder(PreferenceConfiguration prefs, boolean meteredNetwork, boolean requestedHdr) {
|
||||||
// Don't return anything if HEVC is forced off
|
// Don't return anything if H.264 is forced
|
||||||
if (prefs.hevcFormat == PreferenceConfiguration.FormatOption.FORCE_OFF) {
|
if (prefs.videoFormat == PreferenceConfiguration.FormatOption.FORCE_H264) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,7 +234,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C
|
|||||||
LimeLog.info("Found HEVC decoder, but it's not whitelisted - "+hevcDecoderInfo.getName());
|
LimeLog.info("Found HEVC decoder, but it's not whitelisted - "+hevcDecoderInfo.getName());
|
||||||
|
|
||||||
// Force HEVC enabled if the user asked for it
|
// Force HEVC enabled if the user asked for it
|
||||||
if (prefs.hevcFormat == PreferenceConfiguration.FormatOption.FORCE_ON) {
|
if (prefs.videoFormat == PreferenceConfiguration.FormatOption.FORCE_HEVC) {
|
||||||
LimeLog.info("Forcing HEVC enabled despite non-whitelisted decoder");
|
LimeLog.info("Forcing HEVC enabled despite non-whitelisted decoder");
|
||||||
}
|
}
|
||||||
// HDR implies HEVC forced on, since HEVCMain10HDR10 is required for HDR.
|
// HDR implies HEVC forced on, since HEVCMain10HDR10 is required for HDR.
|
||||||
@@ -259,8 +259,8 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C
|
|||||||
}
|
}
|
||||||
|
|
||||||
private MediaCodecInfo findAv1Decoder(PreferenceConfiguration prefs) {
|
private MediaCodecInfo findAv1Decoder(PreferenceConfiguration prefs) {
|
||||||
// Don't return anything if AV1 is forced off
|
// For now, don't use AV1 unless explicitly requested
|
||||||
if (prefs.av1Format == PreferenceConfiguration.FormatOption.FORCE_OFF) {
|
if (prefs.videoFormat != PreferenceConfiguration.FormatOption.FORCE_AV1) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,7 +270,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C
|
|||||||
LimeLog.info("Found AV1 decoder, but it's not whitelisted - "+decoderInfo.getName());
|
LimeLog.info("Found AV1 decoder, but it's not whitelisted - "+decoderInfo.getName());
|
||||||
|
|
||||||
// Force HEVC enabled if the user asked for it
|
// Force HEVC enabled if the user asked for it
|
||||||
if (prefs.av1Format == PreferenceConfiguration.FormatOption.FORCE_ON) {
|
if (prefs.videoFormat == PreferenceConfiguration.FormatOption.FORCE_AV1) {
|
||||||
LimeLog.info("Forcing AV1 enabled despite non-whitelisted decoder");
|
LimeLog.info("Forcing AV1 enabled despite non-whitelisted decoder");
|
||||||
}
|
}
|
||||||
// Use AV1 if the HEVC decoder is unable to meet the performance point
|
// Use AV1 if the HEVC decoder is unable to meet the performance point
|
||||||
|
|||||||
@@ -12,8 +12,9 @@ import com.limelight.nvstream.jni.MoonBridge;
|
|||||||
public class PreferenceConfiguration {
|
public class PreferenceConfiguration {
|
||||||
public enum FormatOption {
|
public enum FormatOption {
|
||||||
AUTO,
|
AUTO,
|
||||||
FORCE_ON,
|
FORCE_AV1,
|
||||||
FORCE_OFF
|
FORCE_HEVC,
|
||||||
|
FORCE_H264,
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final String LEGACY_RES_FPS_PREF_STRING = "list_resolution_fps";
|
private static final String LEGACY_RES_FPS_PREF_STRING = "list_resolution_fps";
|
||||||
@@ -34,8 +35,7 @@ public class PreferenceConfiguration {
|
|||||||
private static final String MULTI_CONTROLLER_PREF_STRING = "checkbox_multi_controller";
|
private static final String MULTI_CONTROLLER_PREF_STRING = "checkbox_multi_controller";
|
||||||
static final String AUDIO_CONFIG_PREF_STRING = "list_audio_config";
|
static final String AUDIO_CONFIG_PREF_STRING = "list_audio_config";
|
||||||
private static final String USB_DRIVER_PREF_SRING = "checkbox_usb_driver";
|
private static final String USB_DRIVER_PREF_SRING = "checkbox_usb_driver";
|
||||||
private static final String HEVC_FORMAT_PREF_STRING = "video_format";
|
private static final String VIDEO_FORMAT_PREF_STRING = "video_format";
|
||||||
private static final String AV1_FORMAT_PREF_STRING = "av1_format";
|
|
||||||
private static final String ONSCREEN_CONTROLLER_PREF_STRING = "checkbox_show_onscreen_controls";
|
private static final String ONSCREEN_CONTROLLER_PREF_STRING = "checkbox_show_onscreen_controls";
|
||||||
private static final String ONLY_L3_R3_PREF_STRING = "checkbox_only_show_L3R3";
|
private static final String ONLY_L3_R3_PREF_STRING = "checkbox_only_show_L3R3";
|
||||||
private static final String LEGACY_DISABLE_FRAME_DROP_PREF_STRING = "checkbox_disable_frame_drop";
|
private static final String LEGACY_DISABLE_FRAME_DROP_PREF_STRING = "checkbox_disable_frame_drop";
|
||||||
@@ -70,8 +70,7 @@ public class PreferenceConfiguration {
|
|||||||
public static final String DEFAULT_LANGUAGE = "default";
|
public static final String DEFAULT_LANGUAGE = "default";
|
||||||
private static final boolean DEFAULT_MULTI_CONTROLLER = true;
|
private static final boolean DEFAULT_MULTI_CONTROLLER = true;
|
||||||
private static final boolean DEFAULT_USB_DRIVER = true;
|
private static final boolean DEFAULT_USB_DRIVER = true;
|
||||||
private static final String DEFAULT_HEVC_FORMAT = "auto";
|
private static final String DEFAULT_VIDEO_FORMAT = "auto";
|
||||||
private static final String DEFAULT_AV1_FORMAT = "never";
|
|
||||||
|
|
||||||
private static final boolean ONSCREEN_CONTROLLER_DEFAULT = false;
|
private static final boolean ONSCREEN_CONTROLLER_DEFAULT = false;
|
||||||
private static final boolean ONLY_L3_R3_DEFAULT = false;
|
private static final boolean ONLY_L3_R3_DEFAULT = false;
|
||||||
@@ -111,8 +110,7 @@ public class PreferenceConfiguration {
|
|||||||
|
|
||||||
public int width, height, fps;
|
public int width, height, fps;
|
||||||
public int bitrate;
|
public int bitrate;
|
||||||
public FormatOption hevcFormat;
|
public FormatOption videoFormat;
|
||||||
public FormatOption av1Format;
|
|
||||||
public int deadzonePercentage;
|
public int deadzonePercentage;
|
||||||
public int oscOpacity;
|
public int oscOpacity;
|
||||||
public boolean stretchVideo, enableSops, playHostAudio, disableWarnings;
|
public boolean stretchVideo, enableSops, playHostAudio, disableWarnings;
|
||||||
@@ -301,37 +299,21 @@ public class PreferenceConfiguration {
|
|||||||
prefs.getString(FPS_PREF_STRING, DEFAULT_FPS));
|
prefs.getString(FPS_PREF_STRING, DEFAULT_FPS));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static FormatOption getHevcFormatValue(Context context) {
|
private static FormatOption getVideoFormatValue(Context context) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
String str = prefs.getString(HEVC_FORMAT_PREF_STRING, DEFAULT_HEVC_FORMAT);
|
String str = prefs.getString(VIDEO_FORMAT_PREF_STRING, DEFAULT_VIDEO_FORMAT);
|
||||||
if (str.equals("auto")) {
|
if (str.equals("auto")) {
|
||||||
return FormatOption.AUTO;
|
return FormatOption.AUTO;
|
||||||
}
|
}
|
||||||
|
else if (str.equals("forceav1")) {
|
||||||
|
return FormatOption.FORCE_AV1;
|
||||||
|
}
|
||||||
else if (str.equals("forceh265")) {
|
else if (str.equals("forceh265")) {
|
||||||
return FormatOption.FORCE_ON;
|
return FormatOption.FORCE_HEVC;
|
||||||
}
|
}
|
||||||
else if (str.equals("neverh265")) {
|
else if (str.equals("neverh265")) {
|
||||||
return FormatOption.FORCE_OFF;
|
return FormatOption.FORCE_H264;
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Should never get here
|
|
||||||
return FormatOption.AUTO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static FormatOption getAV1FormatValue(Context context) {
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
||||||
|
|
||||||
String str = prefs.getString(AV1_FORMAT_PREF_STRING, DEFAULT_AV1_FORMAT);
|
|
||||||
if (str.equals("auto")) {
|
|
||||||
return FormatOption.AUTO;
|
|
||||||
}
|
|
||||||
else if (str.equals("force")) {
|
|
||||||
return FormatOption.FORCE_ON;
|
|
||||||
}
|
|
||||||
else if (str.equals("never")) {
|
|
||||||
return FormatOption.FORCE_OFF;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Should never get here
|
// Should never get here
|
||||||
@@ -379,8 +361,7 @@ public class PreferenceConfiguration {
|
|||||||
.remove(LEGACY_RES_FPS_PREF_STRING)
|
.remove(LEGACY_RES_FPS_PREF_STRING)
|
||||||
.remove(RESOLUTION_PREF_STRING)
|
.remove(RESOLUTION_PREF_STRING)
|
||||||
.remove(FPS_PREF_STRING)
|
.remove(FPS_PREF_STRING)
|
||||||
.remove(HEVC_FORMAT_PREF_STRING)
|
.remove(VIDEO_FORMAT_PREF_STRING)
|
||||||
.remove(AV1_FORMAT_PREF_STRING)
|
|
||||||
.remove(ENABLE_HDR_PREF_STRING)
|
.remove(ENABLE_HDR_PREF_STRING)
|
||||||
.remove(UNLOCK_FPS_STRING)
|
.remove(UNLOCK_FPS_STRING)
|
||||||
.remove(FULL_RANGE_PREF_STRING)
|
.remove(FULL_RANGE_PREF_STRING)
|
||||||
@@ -507,8 +488,7 @@ public class PreferenceConfiguration {
|
|||||||
config.audioConfiguration = MoonBridge.AUDIO_CONFIGURATION_STEREO;
|
config.audioConfiguration = MoonBridge.AUDIO_CONFIGURATION_STEREO;
|
||||||
}
|
}
|
||||||
|
|
||||||
config.hevcFormat = getHevcFormatValue(context);
|
config.videoFormat = getVideoFormatValue(context);
|
||||||
config.av1Format = getAV1FormatValue(context);
|
|
||||||
config.framePacing = getFramePacingValue(context);
|
config.framePacing = getFramePacingValue(context);
|
||||||
|
|
||||||
config.deadzonePercentage = prefs.getInt(DEADZONE_PREF_STRING, DEFAULT_DEADZONE);
|
config.deadzonePercentage = prefs.getInt(DEADZONE_PREF_STRING, DEFAULT_DEADZONE);
|
||||||
|
|||||||
@@ -96,27 +96,18 @@
|
|||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="video_format_names">
|
<string-array name="video_format_names">
|
||||||
<item>@string/videoformat_hevcauto</item>
|
<item>@string/videoformat_auto</item>
|
||||||
|
<item>@string/videoformat_av1always</item>
|
||||||
<item>@string/videoformat_hevcalways</item>
|
<item>@string/videoformat_hevcalways</item>
|
||||||
<item>@string/videoformat_hevcnever</item>
|
<item>@string/videoformat_h264always</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="video_format_values" translatable="false">
|
<string-array name="video_format_values" translatable="false">
|
||||||
<item>auto</item>
|
<item>auto</item>
|
||||||
|
<item>forceav1</item>
|
||||||
<item>forceh265</item>
|
<item>forceh265</item>
|
||||||
<item>neverh265</item>
|
<item>neverh265</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="av1_format_names">
|
|
||||||
<item>@string/av1_format_auto</item>
|
|
||||||
<item>@string/av1_format_always</item>
|
|
||||||
<item>@string/av1_format_never</item>
|
|
||||||
</string-array>
|
|
||||||
<string-array name="av1_format_values" translatable="false">
|
|
||||||
<item>auto</item>
|
|
||||||
<item>force</item>
|
|
||||||
<item>never</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
<string-array name="video_frame_pacing_names">
|
<string-array name="video_frame_pacing_names">
|
||||||
<item>@string/pacing_latency</item>
|
<item>@string/pacing_latency</item>
|
||||||
<item>@string/pacing_balanced</item>
|
<item>@string/pacing_balanced</item>
|
||||||
|
|||||||
@@ -236,10 +236,8 @@
|
|||||||
<string name="summary_checkbox_disable_warnings">Disable on-screen connection warning messages while streaming</string>
|
<string name="summary_checkbox_disable_warnings">Disable on-screen connection warning messages while streaming</string>
|
||||||
<string name="title_disable_frame_drop">Never drop frames</string>
|
<string name="title_disable_frame_drop">Never drop frames</string>
|
||||||
<string name="summary_disable_frame_drop">May reduce micro-stuttering on some devices, but can increase latency</string>
|
<string name="summary_disable_frame_drop">May reduce micro-stuttering on some devices, but can increase latency</string>
|
||||||
<string name="title_video_format">Change HEVC settings</string>
|
<string name="title_video_format">Change codec settings</string>
|
||||||
<string name="summary_video_format">HEVC lowers video bandwidth requirements but requires a newer device</string>
|
<string name="summary_video_format">Newer codecs can lower video bandwidth requirements if your device supports them. Codec selections may be ignored if not supported by the host software or GPU.</string>
|
||||||
<string name="title_av1_format">Change AV1 settings (Experimental)</string>
|
|
||||||
<string name="summary_av1_format">AV1 lowers video bandwidth requirements more than HEVC, but is currently experimental.</string>
|
|
||||||
<string name="title_enable_hdr">Enable HDR (Experimental)</string>
|
<string name="title_enable_hdr">Enable HDR (Experimental)</string>
|
||||||
<string name="summary_enable_hdr">Stream HDR when the game and PC GPU support it. HDR requires a GPU with HEVC Main 10 encoding support.</string>
|
<string name="summary_enable_hdr">Stream HDR when the game and PC GPU support it. HDR requires a GPU with HEVC Main 10 encoding support.</string>
|
||||||
<string name="title_full_range">Force full range video (Experimental)</string>
|
<string name="title_full_range">Force full range video (Experimental)</string>
|
||||||
@@ -274,13 +272,10 @@
|
|||||||
<string name="audioconf_51surround">5.1 Surround Sound</string>
|
<string name="audioconf_51surround">5.1 Surround Sound</string>
|
||||||
<string name="audioconf_71surround">7.1 Surround Sound</string>
|
<string name="audioconf_71surround">7.1 Surround Sound</string>
|
||||||
|
|
||||||
<string name="videoformat_hevcauto">Automatic (Recommended)</string>
|
<string name="videoformat_auto">Automatic (Recommended)</string>
|
||||||
|
<string name="videoformat_av1always">Prefer AV1 (Experimental)</string>
|
||||||
<string name="videoformat_hevcalways">Prefer HEVC</string>
|
<string name="videoformat_hevcalways">Prefer HEVC</string>
|
||||||
<string name="videoformat_hevcnever">Never use HEVC</string>
|
<string name="videoformat_h264always">Prefer H.264</string>
|
||||||
|
|
||||||
<string name="av1_format_auto">Automatic (Recommended)</string>
|
|
||||||
<string name="av1_format_always">Prefer AV1</string>
|
|
||||||
<string name="av1_format_never">Never use AV1</string>
|
|
||||||
|
|
||||||
<string name="title_frame_pacing">Video frame pacing</string>
|
<string name="title_frame_pacing">Video frame pacing</string>
|
||||||
<string name="summary_frame_pacing">Specify how to balance video latency and smoothness</string>
|
<string name="summary_frame_pacing">Specify how to balance video latency and smoothness</string>
|
||||||
|
|||||||
@@ -220,13 +220,6 @@
|
|||||||
android:entryValues="@array/video_format_values"
|
android:entryValues="@array/video_format_values"
|
||||||
android:summary="@string/summary_video_format"
|
android:summary="@string/summary_video_format"
|
||||||
android:defaultValue="auto" />
|
android:defaultValue="auto" />
|
||||||
<ListPreference
|
|
||||||
android:key="av1_format"
|
|
||||||
android:title="@string/title_av1_format"
|
|
||||||
android:entries="@array/av1_format_names"
|
|
||||||
android:entryValues="@array/av1_format_values"
|
|
||||||
android:summary="@string/summary_av1_format"
|
|
||||||
android:defaultValue="auto" />
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="checkbox_enable_hdr"
|
android:key="checkbox_enable_hdr"
|
||||||
android:title="@string/title_enable_hdr"
|
android:title="@string/title_enable_hdr"
|
||||||
|
|||||||
Reference in New Issue
Block a user