diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 649ee680..ddfffce3 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -214,7 +214,7 @@ public class Game extends Activity implements SurfaceHolder.Callback, // Initialize the MediaCodec helper before creating the decoder MediaCodecHelper.initializeWithContext(this); - decoderRenderer = new MediaCodecDecoderRenderer(prefConfig.videoFormat, prefConfig.bitrate); + decoderRenderer = new MediaCodecDecoderRenderer(prefConfig.videoFormat, prefConfig.bitrate, prefConfig.batterySaver); // Display a message to the user if H.265 was forced on but we still didn't find a decoder if (prefConfig.videoFormat == PreferenceConfiguration.FORCE_H265_ON && !decoderRenderer.isHevcSupported()) { diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java index dc372743..603272e0 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -109,12 +109,18 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { this.renderTarget = renderTarget; } - public MediaCodecDecoderRenderer(int videoFormat, int bitrate) { + public MediaCodecDecoderRenderer(int videoFormat, int bitrate, boolean batterySaver) { //dumpDecoders(); this.bitrate = bitrate; - spinnerThreads = new Thread[Runtime.getRuntime().availableProcessors()]; + // Disable spinner threads in battery saver mode + if (batterySaver) { + spinnerThreads = new Thread[0]; + } + else { + spinnerThreads = new Thread[Runtime.getRuntime().availableProcessors()]; + } avcDecoder = findAvcDecoder(); if (avcDecoder != null) { diff --git a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java index b129a03a..97bcdb2a 100644 --- a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java +++ b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java @@ -23,6 +23,7 @@ public class PreferenceConfiguration { private static final String USB_DRIVER_PREF_SRING = "checkbox_usb_driver"; private static final String VIDEO_FORMAT_PREF_STRING = "video_format"; private static final String ONSCREEN_CONTROLLER_PREF_STRING = "checkbox_show_onscreen_controls"; + private static final String BATTERY_SAVER_PREF_STRING = "checkbox_battery_saver"; private static final int BITRATE_DEFAULT_720_30 = 5; private static final int BITRATE_DEFAULT_720_60 = 10; @@ -45,6 +46,7 @@ public class PreferenceConfiguration { private static final boolean DEFAULT_USB_DRIVER = true; private static final String DEFAULT_VIDEO_FORMAT = "auto"; private static final boolean ONSCREEN_CONTROLLER_DEFAULT = false; + private static final boolean DEFAULT_BATTERY_SAVER = false; public static final int FORCE_H265_ON = -1; public static final int AUTOSELECT_H265 = 0; @@ -58,6 +60,7 @@ public class PreferenceConfiguration { public String language; public boolean listMode, smallIconMode, multiController, enable51Surround, usbDriver; public boolean onscreenController; + public boolean batterySaver; public static int getDefaultBitrate(String resFpsString) { if (resFpsString.equals("720p30")) { @@ -188,6 +191,7 @@ public class PreferenceConfiguration { config.enable51Surround = prefs.getBoolean(ENABLE_51_SURROUND_PREF_STRING, DEFAULT_ENABLE_51_SURROUND); config.usbDriver = prefs.getBoolean(USB_DRIVER_PREF_SRING, DEFAULT_USB_DRIVER); config.onscreenController = prefs.getBoolean(ONSCREEN_CONTROLLER_PREF_STRING, ONSCREEN_CONTROLLER_DEFAULT); + config.batterySaver = prefs.getBoolean(BATTERY_SAVER_PREF_STRING, DEFAULT_BATTERY_SAVER); return config; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f3d616fa..223ddc60 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -102,8 +102,8 @@ Lower bitrate to reduce stuttering. Raise bitrate to increase image quality. Mbps Stretch video to full-screen - Disable warning messages - Disable on-screen connection warning messages while streaming + Battery saver + Uses less battery, but may increase stuttering Audio Settings Enable 5.1 surround sound diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 0df12813..a5b3d51c 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -21,9 +21,9 @@ android:title="@string/title_checkbox_stretch_video" android:defaultValue="false" />