@SuppressLint("NewApi") @Override public void onSurfaceCreated(GL10 unused, EGLConfig config) { Logging.d(TAG, "VideoRendererGui.onSurfaceCreated"); // Store render EGL context. if (CURRENT_SDK_VERSION >= EGL14_SDK_VERSION) { synchronized (VideoRendererGui.class) { eglContext = EGL14.eglGetCurrentContext(); Logging.d(TAG, "VideoRendererGui EGL Context: " + eglContext); } } synchronized (yuvImageRenderers) { // Create drawer for YUV/OES frames. drawer = new GlRectDrawer(); // Create textures for all images. for (YuvImageRenderer yuvImageRenderer : yuvImageRenderers) { yuvImageRenderer.createTextures(); } onSurfaceCreatedCalled = true; } GlUtil.checkNoGLES2Error("onSurfaceCreated done"); GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1); GLES20.glClearColor(0.15f, 0.15f, 0.15f, 1.0f); // Fire EGL context ready event. synchronized (VideoRendererGui.class) { if (eglContextReady != null) { eglContextReady.run(); } } }
@Override public void onDrawFrame(GL10 unused) { GLES20.glViewport(0, 0, screenWidth, screenHeight); GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); synchronized (yuvImageRenderers) { for (YuvImageRenderer yuvImageRenderer : yuvImageRenderers) { yuvImageRenderer.draw(drawer); } } }
@Override public void onSurfaceChanged(GL10 unused, int width, int height) { Logging.d(TAG, "VideoRendererGui.onSurfaceChanged: " + width + " x " + height + " "); screenWidth = width; screenHeight = height; synchronized (yuvImageRenderers) { for (YuvImageRenderer yuvImageRenderer : yuvImageRenderers) { yuvImageRenderer.setScreenSize(screenWidth, screenHeight); } } }
public static synchronized void reset(VideoRenderer.Callbacks renderer) { Logging.d(TAG, "VideoRendererGui.reset"); if (instance == null) { throw new RuntimeException("Attempt to reset renderer before setting GLSurfaceView"); } synchronized (instance.yuvImageRenderers) { for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) { if (yuvImageRenderer == renderer) { yuvImageRenderer.reset(); } } } }
public static synchronized void setRendererEvents( VideoRenderer.Callbacks renderer, RendererCommon.RendererEvents rendererEvents) { Logging.d(TAG, "VideoRendererGui.setRendererEvents"); if (instance == null) { throw new RuntimeException("Attempt to set renderer events before setting GLSurfaceView"); } synchronized (instance.yuvImageRenderers) { for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) { if (yuvImageRenderer == renderer) { yuvImageRenderer.rendererEvents = rendererEvents; } } } }
/** Releases GLSurfaceView video renderer. */ public static synchronized void dispose() { if (instance == null) { return; } Logging.d(TAG, "VideoRendererGui.dispose"); synchronized (instance.yuvImageRenderers) { for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) { yuvImageRenderer.release(); } instance.yuvImageRenderers.clear(); } instance.surface = null; eglContext = null; eglContextReady = null; instance = null; }
public static synchronized void update( VideoRenderer.Callbacks renderer, int x, int y, int width, int height, RendererCommon.ScalingType scalingType, boolean mirror) { Logging.d(TAG, "VideoRendererGui.update"); if (instance == null) { throw new RuntimeException("Attempt to update yuv renderer before setting GLSurfaceView"); } synchronized (instance.yuvImageRenderers) { for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) { if (yuvImageRenderer == renderer) { yuvImageRenderer.setPosition(x, y, width, height, scalingType, mirror); } } } }