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

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

Issue 1498003002: Refactor EglBase configuration. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: 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 a68840c8c8121b81a44eac9c9eacdb72bb162075..e44443baa3b4a93d77e3cb7e35254d4bb0b3cda1 100644
--- a/talk/app/webrtc/java/android/org/webrtc/EglBase.java
+++ b/talk/app/webrtc/java/android/org/webrtc/EglBase.java
@@ -34,7 +34,6 @@ 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;
@@ -60,7 +59,6 @@ public class EglBase {
private final EGL10 egl;
private EGLContext eglContext;
- private ConfigType configType;
private EGLConfig eglConfig;
private EGLDisplay eglDisplay;
private EGLSurface eglSurface = EGL10.EGL_NO_SURFACE;
@@ -74,41 +72,53 @@ public class EglBase {
}
}
- // EGLConfig constructor type. Influences eglChooseConfig arguments.
- public static enum ConfigType {
- // No special parameters.
- PLAIN,
- // Configures with EGL_SURFACE_TYPE = EGL_PBUFFER_BIT.
- PIXEL_BUFFER,
- // Configures with EGL_RECORDABLE_ANDROID = 1.
- // Discourages EGL from using pixel formats that cannot efficiently be
- // converted to something usable by the video encoder.
- RECORDABLE
- }
-
- // Create a new context with the specified config type, sharing data with sharedContext.
+ public static final int[] CONFIG_PLAIN = {
+ EGL10.EGL_RED_SIZE, 8,
+ EGL10.EGL_GREEN_SIZE, 8,
+ EGL10.EGL_BLUE_SIZE, 8,
+ EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL10.EGL_NONE
+ };
+ public static final int[] CONFIG_PIXEL_BUFFER = {
+ EGL10.EGL_RED_SIZE, 8,
+ EGL10.EGL_GREEN_SIZE, 8,
+ EGL10.EGL_BLUE_SIZE, 8,
+ EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT,
+ EGL10.EGL_NONE
+ };
+ public static final int[] CONFIG_RECORDABLE = {
+ EGL10.EGL_RED_SIZE, 8,
+ EGL10.EGL_GREEN_SIZE, 8,
+ EGL10.EGL_BLUE_SIZE, 8,
+ EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL_RECORDABLE_ANDROID, 1,
+ EGL10.EGL_NONE
+ };
+
+ // Create a new context with the specified config attributes, sharing data with sharedContext.
// |sharedContext| can be null.
- public static EglBase create(Context sharedContext, ConfigType configType) {
+ public static EglBase create(Context sharedContext, int[] configAttributes) {
return (EglBase14.isEGL14Supported()
&& (sharedContext == null || sharedContext instanceof EglBase14.Context))
- ? new EglBase14((EglBase14.Context) sharedContext, configType)
- : new EglBase(sharedContext, configType);
+ ? new EglBase14((EglBase14.Context) sharedContext, configAttributes)
+ : new EglBase(sharedContext, configAttributes);
}
public static EglBase create() {
- return create(null, ConfigType.PLAIN);
+ return create(null, CONFIG_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((Context) null, ConfigType.PLAIN);
+ this((Context) null, CONFIG_PLAIN);
}
@Deprecated
- public EglBase(EGLContext sharedContext, ConfigType configType) {
- this(new Context(sharedContext), configType);
+ public EglBase(EGLContext sharedContext, int[] configAttributes) {
+ this(new Context(sharedContext), configAttributes);
Logging.d(TAG, "EglBase created");
}
@@ -118,11 +128,10 @@ public class EglBase {
}
// Create a new context with the specified config type, sharing data with sharedContext.
- EglBase(Context sharedContext, ConfigType configType) {
+ EglBase(Context sharedContext, int[] configAttributes) {
this.egl = (EGL10) EGLContext.getEGL();
- this.configType = configType;
eglDisplay = getEglDisplay();
- eglConfig = getEglConfig(eglDisplay, configType);
+ eglConfig = getEglConfig(eglDisplay, configAttributes);
eglContext = createEglContext(sharedContext, eglDisplay, eglConfig);
}
@@ -211,9 +220,6 @@ public class EglBase {
throw new IllegalStateException("Input must be either a SurfaceHolder or SurfaceTexture");
}
checkIsNotReleased();
- if (configType == ConfigType.PIXEL_BUFFER) {
- Logging.w(TAG, "This EGL context is configured for PIXEL_BUFFER, but uses regular Surface");
- }
if (eglSurface != EGL10.EGL_NO_SURFACE) {
throw new RuntimeException("Already has an EGLSurface");
}
@@ -231,10 +237,6 @@ public class EglBase {
public void createPbufferSurface(int width, int height) {
checkIsNotReleased();
- if (configType != ConfigType.PIXEL_BUFFER) {
- throw new RuntimeException(
- "This EGL context is not configured to use a pixel buffer: " + configType);
- }
if (eglSurface != EGL10.EGL_NO_SURFACE) {
throw new RuntimeException("Already has an EGLSurface");
}
@@ -330,38 +332,12 @@ public class EglBase {
}
// Return an EGLConfig, or die trying.
- private EGLConfig getEglConfig(EGLDisplay eglDisplay, ConfigType configType) {
- // Always RGB888, GLES2.
- int[] configAttributes = {
- EGL10.EGL_RED_SIZE, 8,
- EGL10.EGL_GREEN_SIZE, 8,
- EGL10.EGL_BLUE_SIZE, 8,
- EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
- EGL10.EGL_NONE, 0, // Allocate dummy fields for specific options.
- EGL10.EGL_NONE
- };
-
- // Fill in dummy fields based on configType.
- switch (configType) {
- case PLAIN:
- break;
- case PIXEL_BUFFER:
- configAttributes[configAttributes.length - 3] = EGL10.EGL_SURFACE_TYPE;
- configAttributes[configAttributes.length - 2] = EGL10.EGL_PBUFFER_BIT;
- break;
- case RECORDABLE:
- configAttributes[configAttributes.length - 3] = EGL_RECORDABLE_ANDROID;
- configAttributes[configAttributes.length - 2] = 1;
- break;
- default:
- throw new IllegalArgumentException();
- }
-
+ private EGLConfig getEglConfig(EGLDisplay eglDisplay, int[] configAttributes) {
EGLConfig[] configs = new EGLConfig[1];
int[] numConfigs = new int[1];
if (!egl.eglChooseConfig(
eglDisplay, configAttributes, configs, configs.length, numConfigs)) {
- throw new RuntimeException("Unable to find RGB888 " + configType + " EGL config");
+ throw new RuntimeException("Unable to find any matching EGL config");
}
return configs[0];
}

Powered by Google App Engine
This is Rietveld 408576698