Compare commits

..
7 Commits
12 changed files with 87 additions and 30 deletions

No files matched your search

+14 -2
View File
@@ -11,8 +11,8 @@ android {
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 27 targetSdkVersion 27
versionName "5.6" versionName "5.6.1"
versionCode = 138 versionCode = 139
} }
flavorDimensions "root" flavorDimensions "root"
@@ -23,11 +23,23 @@ android {
// version to devices running O on the Play Store. // version to devices running O on the Play Store.
maxSdkVersion 25 maxSdkVersion 25
externalNativeBuild {
ndkBuild {
arguments "PRODUCT_FLAVOR=root"
}
}
applicationId "com.limelight.root" applicationId "com.limelight.root"
dimension "root" dimension "root"
} }
nonRoot { nonRoot {
externalNativeBuild {
ndkBuild {
arguments "PRODUCT_FLAVOR=nonRoot"
}
}
applicationId "com.limelight" applicationId "com.limelight"
dimension "root" dimension "root"
} }
@@ -4,7 +4,7 @@ import android.app.Activity;
import com.limelight.LimeLog; import com.limelight.LimeLog;
import com.limelight.R; import com.limelight.R;
import com.limelight.binding.input.evdev.EvdevCaptureProvider; import com.limelight.binding.input.evdev.EvdevCaptureProviderShim;
import com.limelight.binding.input.evdev.EvdevListener; import com.limelight.binding.input.evdev.EvdevListener;
public class InputCaptureManager { public class InputCaptureManager {
@@ -17,9 +17,9 @@ public class InputCaptureManager {
LimeLog.info("Using NVIDIA mouse capture extension"); LimeLog.info("Using NVIDIA mouse capture extension");
return new ShieldCaptureProvider(activity); return new ShieldCaptureProvider(activity);
} }
else if (EvdevCaptureProvider.isCaptureProviderSupported()) { else if (EvdevCaptureProviderShim.isCaptureProviderSupported()) {
LimeLog.info("Using Evdev mouse capture"); LimeLog.info("Using Evdev mouse capture");
return new EvdevCaptureProvider(activity, rootListener); return EvdevCaptureProviderShim.createEvdevCaptureProvider(activity, rootListener);
} }
else if (AndroidPointerIconCaptureProvider.isCaptureProviderSupported()) { else if (AndroidPointerIconCaptureProvider.isCaptureProviderSupported()) {
// Android N's native capture can't capture over system UI elements // Android N's native capture can't capture over system UI elements
@@ -0,0 +1,24 @@
package com.limelight.binding.input.evdev;
import android.app.Activity;
import com.limelight.LimelightBuildProps;
import com.limelight.binding.input.capture.InputCaptureProvider;
public class EvdevCaptureProviderShim {
public static boolean isCaptureProviderSupported() {
return LimelightBuildProps.ROOT_BUILD;
}
// We need to construct our capture provider using reflection because it isn't included in non-root builds
public static InputCaptureProvider createEvdevCaptureProvider(Activity activity, EvdevListener listener) {
try {
Class providerClass = Class.forName("com.limelight.binding.input.evdev.EvdevCaptureProvider");
return (InputCaptureProvider) providerClass.getConstructors()[0].newInstance(activity, listener);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
@@ -882,6 +882,16 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
} }
} }
if (decodeUnitLength > buf.limit() - buf.position()) {
IllegalArgumentException exception = new IllegalArgumentException(
"Decode unit length "+decodeUnitLength+" too large for input buffer "+buf.limit());
if (!reportedCrash) {
reportedCrash = true;
crashListener.notifyCrash(exception);
}
throw new RendererException(this, exception);
}
// Copy data from our buffer list into the input buffer // Copy data from our buffer list into the input buffer
buf.put(decodeUnitData, 0, decodeUnitLength); buf.put(decodeUnitData, 0, decodeUnitLength);
@@ -97,10 +97,13 @@ public class MediaCodecHelper {
baselineProfileHackPrefixes = new LinkedList<>(); baselineProfileHackPrefixes = new LinkedList<>();
baselineProfileHackPrefixes.add("omx.intel"); baselineProfileHackPrefixes.add("omx.intel");
blacklistedAdaptivePlaybackPrefixes = new LinkedList<>();
// The Intel decoder on Lollipop on Nexus Player would increase latency badly // The Intel decoder on Lollipop on Nexus Player would increase latency badly
// if adaptive playback was enabled so let's avoid it to be safe. // if adaptive playback was enabled so let's avoid it to be safe.
blacklistedAdaptivePlaybackPrefixes = new LinkedList<>();
blacklistedAdaptivePlaybackPrefixes.add("omx.intel"); blacklistedAdaptivePlaybackPrefixes.add("omx.intel");
// The MediaTek decoder crashes at 1080p when adaptive playback is enabled
// on some Android TV devices with H.265 only.
blacklistedAdaptivePlaybackPrefixes.add("omx.mtk");
constrainedHighProfilePrefixes = new LinkedList<>(); constrainedHighProfilePrefixes = new LinkedList<>();
constrainedHighProfilePrefixes.add("omx.intel"); constrainedHighProfilePrefixes.add("omx.intel");
+22 -18
View File
@@ -5,28 +5,32 @@ include $(call all-subdir-makefiles)
LOCAL_PATH := $(MY_LOCAL_PATH) LOCAL_PATH := $(MY_LOCAL_PATH)
include $(CLEAR_VARS) # Only build evdev_reader for the rooted APK flavor
LOCAL_MODULE := evdev_reader ifeq (root,$(PRODUCT_FLAVOR))
LOCAL_SRC_FILES := evdev_reader.c include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog LOCAL_MODULE := evdev_reader
LOCAL_SRC_FILES := evdev_reader.c
LOCAL_LDLIBS := -llog
# This next portion of the makefile is mostly copied from build-executable.mk but # This next portion of the makefile is mostly copied from build-executable.mk but
# creates a binary with the libXXX.so form so the APK will install and drop # creates a binary with the libXXX.so form so the APK will install and drop
# the binary correctly. # the binary correctly.
LOCAL_BUILD_SCRIPT := BUILD_EXECUTABLE LOCAL_BUILD_SCRIPT := BUILD_EXECUTABLE
LOCAL_MAKEFILE := $(local-makefile) LOCAL_MAKEFILE := $(local-makefile)
$(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT)) $(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT))
$(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE)) $(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))
$(call check-LOCAL_MODULE_FILENAME) $(call check-LOCAL_MODULE_FILENAME)
# we are building target objects # we are building target objects
my := TARGET_ my := TARGET_
$(call handle-module-filename,lib,$(TARGET_SONAME_EXTENSION)) $(call handle-module-filename,lib,$(TARGET_SONAME_EXTENSION))
$(call handle-module-built) $(call handle-module-built)
LOCAL_MODULE_CLASS := EXECUTABLE
include $(BUILD_SYSTEM)/build-module.mk
endif
LOCAL_MODULE_CLASS := EXECUTABLE
include $(BUILD_SYSTEM)/build-module.mk
@@ -6,7 +6,6 @@ import android.os.Looper;
import android.widget.Toast; import android.widget.Toast;
import com.limelight.LimeLog; import com.limelight.LimeLog;
import com.limelight.LimelightBuildProps;
import com.limelight.binding.input.capture.InputCaptureProvider; import com.limelight.binding.input.capture.InputCaptureProvider;
import java.io.DataOutputStream; import java.io.DataOutputStream;
@@ -186,10 +185,6 @@ public class EvdevCaptureProvider extends InputCaptureProvider {
this.libraryPath = activity.getApplicationInfo().nativeLibraryDir; this.libraryPath = activity.getApplicationInfo().nativeLibraryDir;
} }
public static boolean isCaptureProviderSupported() {
return LimelightBuildProps.ROOT_BUILD;
}
private void reportDeviceNotRooted() { private void reportDeviceNotRooted() {
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
+9
View File
@@ -32,3 +32,12 @@ This file serves to document some of the decoder errata when using MediaCodec ha
11. Attempting to use reference picture invalidation at 1080p causes the decoder to crash on low-end Snapdragon SoCs. 720p is unaffected. 11. Attempting to use reference picture invalidation at 1080p causes the decoder to crash on low-end Snapdragon SoCs. 720p is unaffected.
- Affected decoders: Snapdragon 200, 410, 415, 430, 435, 616 - Affected decoders: Snapdragon 200, 410, 415, 430, 435, 616
12. Enabling adaptive playback causes H.265 1080p and 4K playback to fail on some MediaTek SoCs.
- Affected decoders: MT5832 in Sony BRAVIA 4K GB (BRAVIA_ATV2) and MT5890 in Phillips 55PUS6501
13. Some HEVC decoders hang when receiving a stream with 16 reference frames
- Affected decoders: Amlogic S905Z in Fire TV 3
14. Some HEVC decoders lag when receiving a stream with 16 reference frames
- Affected decoders: Tegra X1 in Pixel C (but NOT in SHIELD TV darcy)