OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2015 Google Inc. | 3 * Copyright 2015 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 14 matching lines...) Expand all Loading... |
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 | 27 |
28 package org.webrtc; | 28 package org.webrtc; |
29 | 29 |
30 import android.opengl.EGL14; | 30 import android.opengl.EGL14; |
31 import android.opengl.EGLConfig; | 31 import android.opengl.EGLConfig; |
32 import android.opengl.EGLContext; | 32 import android.opengl.EGLContext; |
33 import android.opengl.EGLDisplay; | 33 import android.opengl.EGLDisplay; |
34 import android.opengl.EGLSurface; | 34 import android.opengl.EGLSurface; |
35 import android.util.Log; | |
36 import android.view.Surface; | 35 import android.view.Surface; |
37 | 36 |
| 37 import org.webrtc.Logging; |
| 38 |
38 /** | 39 /** |
39 * Holds EGL state and utility methods for handling an EGLContext, an EGLDisplay
, and an EGLSurface. | 40 * Holds EGL state and utility methods for handling an EGLContext, an EGLDisplay
, and an EGLSurface. |
40 */ | 41 */ |
41 public final class EglBase { | 42 public final class EglBase { |
42 private static final String TAG = "EglBase"; | 43 private static final String TAG = "EglBase"; |
43 private static final int EGL14_SDK_VERSION = android.os.Build.VERSION_CODES.JE
LLY_BEAN_MR1; | 44 private static final int EGL14_SDK_VERSION = android.os.Build.VERSION_CODES.JE
LLY_BEAN_MR1; |
44 private static final int CURRENT_SDK_VERSION = android.os.Build.VERSION.SDK_IN
T; | 45 private static final int CURRENT_SDK_VERSION = android.os.Build.VERSION.SDK_IN
T; |
45 // Android-specific extension. | 46 // Android-specific extension. |
46 private static final int EGL_RECORDABLE_ANDROID = 0x3142; | 47 private static final int EGL_RECORDABLE_ANDROID = 0x3142; |
47 | 48 |
48 private EGLContext eglContext; | 49 private EGLContext eglContext; |
49 private ConfigType configType; | 50 private ConfigType configType; |
50 private EGLConfig eglConfig; | 51 private EGLConfig eglConfig; |
51 private EGLDisplay eglDisplay; | 52 private EGLDisplay eglDisplay; |
52 private EGLSurface eglSurface = EGL14.EGL_NO_SURFACE; | 53 private EGLSurface eglSurface = EGL14.EGL_NO_SURFACE; |
53 | 54 |
54 public static boolean isEGL14Supported() { | 55 public static boolean isEGL14Supported() { |
55 Log.d(TAG, "SDK version: " + CURRENT_SDK_VERSION); | 56 Logging.d(TAG, "SDK version: " + CURRENT_SDK_VERSION); |
56 return (CURRENT_SDK_VERSION >= EGL14_SDK_VERSION); | 57 return (CURRENT_SDK_VERSION >= EGL14_SDK_VERSION); |
57 } | 58 } |
58 | 59 |
59 // EGLConfig constructor type. Influences eglChooseConfig arguments. | 60 // EGLConfig constructor type. Influences eglChooseConfig arguments. |
60 public static enum ConfigType { | 61 public static enum ConfigType { |
61 // No special parameters. | 62 // No special parameters. |
62 PLAIN, | 63 PLAIN, |
63 // Configures with EGL_SURFACE_TYPE = EGL_PBUFFER_BIT. | 64 // Configures with EGL_SURFACE_TYPE = EGL_PBUFFER_BIT. |
64 PIXEL_BUFFER, | 65 PIXEL_BUFFER, |
65 // Configures with EGL_RECORDABLE_ANDROID = 1. | 66 // Configures with EGL_RECORDABLE_ANDROID = 1. |
(...skipping 13 matching lines...) Expand all Loading... |
79 this.configType = configType; | 80 this.configType = configType; |
80 eglDisplay = getEglDisplay(); | 81 eglDisplay = getEglDisplay(); |
81 eglConfig = getEglConfig(eglDisplay, configType); | 82 eglConfig = getEglConfig(eglDisplay, configType); |
82 eglContext = createEglContext(sharedContext, eglDisplay, eglConfig); | 83 eglContext = createEglContext(sharedContext, eglDisplay, eglConfig); |
83 } | 84 } |
84 | 85 |
85 // Create EGLSurface from the Android Surface. | 86 // Create EGLSurface from the Android Surface. |
86 public void createSurface(Surface surface) { | 87 public void createSurface(Surface surface) { |
87 checkIsNotReleased(); | 88 checkIsNotReleased(); |
88 if (configType == ConfigType.PIXEL_BUFFER) { | 89 if (configType == ConfigType.PIXEL_BUFFER) { |
89 Log.w(TAG, "This EGL context is configured for PIXEL_BUFFER, but uses regu
lar Surface"); | 90 Logging.w(TAG, "This EGL context is configured for PIXEL_BUFFER, but uses
regular Surface"); |
90 } | 91 } |
91 if (eglSurface != EGL14.EGL_NO_SURFACE) { | 92 if (eglSurface != EGL14.EGL_NO_SURFACE) { |
92 throw new RuntimeException("Already has an EGLSurface"); | 93 throw new RuntimeException("Already has an EGLSurface"); |
93 } | 94 } |
94 int[] surfaceAttribs = {EGL14.EGL_NONE}; | 95 int[] surfaceAttribs = {EGL14.EGL_NONE}; |
95 eglSurface = EGL14.eglCreateWindowSurface(eglDisplay, eglConfig, surface, su
rfaceAttribs, 0); | 96 eglSurface = EGL14.eglCreateWindowSurface(eglDisplay, eglConfig, surface, su
rfaceAttribs, 0); |
96 if (eglSurface == EGL14.EGL_NO_SURFACE) { | 97 if (eglSurface == EGL14.EGL_NO_SURFACE) { |
97 throw new RuntimeException("Failed to create window surface"); | 98 throw new RuntimeException("Failed to create window surface"); |
98 } | 99 } |
99 } | 100 } |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 EGLContext sharedContext, EGLDisplay eglDisplay, EGLConfig eglConfig) { | 247 EGLContext sharedContext, EGLDisplay eglDisplay, EGLConfig eglConfig) { |
247 int[] contextAttributes = {EGL14.EGL_CONTEXT_CLIENT_VERSION, 2, EGL14.EGL_NO
NE}; | 248 int[] contextAttributes = {EGL14.EGL_CONTEXT_CLIENT_VERSION, 2, EGL14.EGL_NO
NE}; |
248 EGLContext eglContext = | 249 EGLContext eglContext = |
249 EGL14.eglCreateContext(eglDisplay, eglConfig, sharedContext, contextAttr
ibutes, 0); | 250 EGL14.eglCreateContext(eglDisplay, eglConfig, sharedContext, contextAttr
ibutes, 0); |
250 if (eglContext == EGL14.EGL_NO_CONTEXT) { | 251 if (eglContext == EGL14.EGL_NO_CONTEXT) { |
251 throw new RuntimeException("Failed to create EGL context"); | 252 throw new RuntimeException("Failed to create EGL context"); |
252 } | 253 } |
253 return eglContext; | 254 return eglContext; |
254 } | 255 } |
255 } | 256 } |
OLD | NEW |