Merge "Catch egl errors when drawIntoSurfaces"
am: 7604961e1d
Change-Id: I32e0503ee15061a1f7b35086b2d7bd4bbc52d094
This commit is contained in:
@@ -521,9 +521,10 @@ public class SurfaceTextureRenderer {
|
|||||||
clearState();
|
clearState();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void makeCurrent(EGLSurface surface) {
|
private void makeCurrent(EGLSurface surface)
|
||||||
|
throws LegacyExceptionUtils.BufferQueueAbandonedException {
|
||||||
EGL14.eglMakeCurrent(mEGLDisplay, surface, surface, mEGLContext);
|
EGL14.eglMakeCurrent(mEGLDisplay, surface, surface, mEGLContext);
|
||||||
checkEglError("makeCurrent");
|
checkEglDrawError("makeCurrent");
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean swapBuffers(EGLSurface surface)
|
private boolean swapBuffers(EGLSurface surface)
|
||||||
@@ -557,6 +558,17 @@ public class SurfaceTextureRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkEglDrawError(String msg)
|
||||||
|
throws LegacyExceptionUtils.BufferQueueAbandonedException {
|
||||||
|
int error;
|
||||||
|
if ((error = EGL14.eglGetError()) == EGL14.EGL_BAD_NATIVE_WINDOW) {
|
||||||
|
throw new LegacyExceptionUtils.BufferQueueAbandonedException();
|
||||||
|
}
|
||||||
|
if ((error = EGL14.eglGetError()) != EGL14.EGL_SUCCESS) {
|
||||||
|
throw new IllegalStateException(msg + ": EGL error: 0x" + Integer.toHexString(error));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void checkEglError(String msg) {
|
private void checkEglError(String msg) {
|
||||||
int error;
|
int error;
|
||||||
if ((error = EGL14.eglGetError()) != EGL14.EGL_SUCCESS) {
|
if ((error = EGL14.eglGetError()) != EGL14.EGL_SUCCESS) {
|
||||||
@@ -709,8 +721,14 @@ public class SurfaceTextureRenderer {
|
|||||||
if (mConversionSurfaces.size() > 0) {
|
if (mConversionSurfaces.size() > 0) {
|
||||||
configureEGLPbufferSurfaces(mConversionSurfaces);
|
configureEGLPbufferSurfaces(mConversionSurfaces);
|
||||||
}
|
}
|
||||||
makeCurrent((mSurfaces.size() > 0) ? mSurfaces.get(0).eglSurface :
|
|
||||||
|
try {
|
||||||
|
makeCurrent((mSurfaces.size() > 0) ? mSurfaces.get(0).eglSurface :
|
||||||
mConversionSurfaces.get(0).eglSurface);
|
mConversionSurfaces.get(0).eglSurface);
|
||||||
|
} catch (LegacyExceptionUtils.BufferQueueAbandonedException e) {
|
||||||
|
Log.w(TAG, "Surface abandoned, skipping configuration... ", e);
|
||||||
|
}
|
||||||
|
|
||||||
initializeGLState();
|
initializeGLState();
|
||||||
mSurfaceTexture = new SurfaceTexture(getTextureId());
|
mSurfaceTexture = new SurfaceTexture(getTextureId());
|
||||||
|
|
||||||
@@ -798,9 +816,9 @@ public class SurfaceTextureRenderer {
|
|||||||
}
|
}
|
||||||
for (EGLSurfaceHolder holder : mConversionSurfaces) {
|
for (EGLSurfaceHolder holder : mConversionSurfaces) {
|
||||||
if (LegacyCameraDevice.containsSurfaceId(holder.surface, targetSurfaceIds)) {
|
if (LegacyCameraDevice.containsSurfaceId(holder.surface, targetSurfaceIds)) {
|
||||||
makeCurrent(holder.eglSurface);
|
|
||||||
// glReadPixels reads from the bottom of the buffer, so add an extra vertical flip
|
// glReadPixels reads from the bottom of the buffer, so add an extra vertical flip
|
||||||
try {
|
try {
|
||||||
|
makeCurrent(holder.eglSurface);
|
||||||
drawFrame(mSurfaceTexture, holder.width, holder.height,
|
drawFrame(mSurfaceTexture, holder.width, holder.height,
|
||||||
(mFacing == CameraCharacteristics.LENS_FACING_FRONT) ?
|
(mFacing == CameraCharacteristics.LENS_FACING_FRONT) ?
|
||||||
FLIP_TYPE_BOTH : FLIP_TYPE_VERTICAL);
|
FLIP_TYPE_BOTH : FLIP_TYPE_VERTICAL);
|
||||||
|
|||||||
Reference in New Issue
Block a user