Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Unified Diff: talk/app/webrtc/java/android/org/webrtc/EglBase.java

Issue 1461083002: Use EGL14 if supported on Android (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Changed VideoRendererGui to return an EglBase.Context. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: talk/app/webrtc/java/android/org/webrtc/EglBase.java
diff --git a/talk/app/webrtc/java/android/org/webrtc/EglBase.java b/talk/app/webrtc/java/android/org/webrtc/EglBase.java
index 1de34d254e30cbc9bc48b2b7c4d4b2699dee3224..a68840c8c8121b81a44eac9c9eacdb72bb162075 100644
--- a/talk/app/webrtc/java/android/org/webrtc/EglBase.java
+++ b/talk/app/webrtc/java/android/org/webrtc/EglBase.java
@@ -34,6 +34,8 @@ import android.view.Surface;
import android.view.SurfaceHolder;
import org.webrtc.Logging;
+import org.webrtc.EglBase.ConfigType;
+import org.webrtc.EglBase.Context;
import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
@@ -42,7 +44,8 @@ import javax.microedition.khronos.egl.EGLDisplay;
import javax.microedition.khronos.egl.EGLSurface;
/**
- * Holds EGL state and utility methods for handling an EGLContext, an EGLDisplay, and an EGLSurface.
+ * Holds EGL state and utility methods for handling an egl 1.0 EGLContext, an EGLDisplay,
+ * and an EGLSurface.
*/
public class EglBase {
private static final String TAG = "EglBase";
@@ -62,6 +65,15 @@ public class EglBase {
private EGLDisplay eglDisplay;
private EGLSurface eglSurface = EGL10.EGL_NO_SURFACE;
+ // EGL wrapper for an actual EGLContext.
+ public static class Context {
+ private final EGLContext eglContext;
+
+ public Context(EGLContext eglContext) {
+ this.eglContext = eglContext;
+ }
+ }
+
// EGLConfig constructor type. Influences eglChooseConfig arguments.
public static enum ConfigType {
// No special parameters.
@@ -74,14 +86,39 @@ public class EglBase {
RECORDABLE
}
- // Create root context without any EGLSurface or parent EGLContext. This can be used for branching
+ // Create a new context with the specified config type, sharing data with sharedContext.
+ // |sharedContext| can be null.
+ public static EglBase create(Context sharedContext, ConfigType configType) {
+ return (EglBase14.isEGL14Supported()
+ && (sharedContext == null || sharedContext instanceof EglBase14.Context))
+ ? new EglBase14((EglBase14.Context) sharedContext, configType)
+ : new EglBase(sharedContext, configType);
+ }
+
+ public static EglBase create() {
+ return create(null, ConfigType.PLAIN);
+ }
+
+ //Create root context without any EGLSurface or parent EGLContext. This can be used for branching
// new contexts that share data.
+ @Deprecated
public EglBase() {
- this(EGL10.EGL_NO_CONTEXT, ConfigType.PLAIN);
+ this((Context) null, ConfigType.PLAIN);
}
- // Create a new context with the specified config type, sharing data with sharedContext.
+ @Deprecated
public EglBase(EGLContext sharedContext, ConfigType configType) {
+ this(new Context(sharedContext), configType);
+ Logging.d(TAG, "EglBase created");
+ }
+
+ @Deprecated
+ public EGLContext getContext() {
+ return eglContext;
+ }
+
+ // Create a new context with the specified config type, sharing data with sharedContext.
+ EglBase(Context sharedContext, ConfigType configType) {
this.egl = (EGL10) EGLContext.getEGL();
this.configType = configType;
eglDisplay = getEglDisplay();
@@ -89,7 +126,13 @@ public class EglBase {
eglContext = createEglContext(sharedContext, eglDisplay, eglConfig);
}
- // Create EGLSurface from the Android Surface.
+ // TODO(perkj): This is a hacky ctor used to allow us to create an EGLBase14. Remove this and
+ // make EglBase an abstract class once all applications have started using the create factory
+ // method.
+ protected EglBase(boolean dummy) {
+ this.egl = null;
+ }
+
public void createSurface(Surface surface) {
/**
* We have to wrap Surface in a SurfaceHolder because for some reason eglCreateWindowSurface
@@ -114,6 +157,7 @@ public class EglBase {
return false;
}
+ @Deprecated
@Override
public void setType(int i) {}
@@ -201,8 +245,8 @@ public class EglBase {
}
}
- public EGLContext getContext() {
- return eglContext;
+ public Context getEglBaseContext() {
+ return new Context(eglContext);
}
public boolean hasSurface() {
@@ -324,10 +368,12 @@ public class EglBase {
// Return an EGLConfig, or die trying.
private EGLContext createEglContext(
- EGLContext sharedContext, EGLDisplay eglDisplay, EGLConfig eglConfig) {
+ Context sharedContext, EGLDisplay eglDisplay, EGLConfig eglConfig) {
int[] contextAttributes = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE};
+ EGLContext rootContext =
+ sharedContext == null ? EGL10.EGL_NO_CONTEXT : sharedContext.eglContext;
EGLContext eglContext =
- egl.eglCreateContext(eglDisplay, eglConfig, sharedContext, contextAttributes);
+ egl.eglCreateContext(eglDisplay, eglConfig, rootContext, contextAttributes);
if (eglContext == EGL10.EGL_NO_CONTEXT) {
throw new RuntimeException("Failed to create EGL context");
}

Powered by Google App Engine
This is Rietveld 408576698