package org.webrtc; import android.content.Context; import android.content.res.Resources; import android.graphics.Point; import android.os.Looper; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; import c.d.b.a.a; import h0.c.y; import org.webrtc.EglBase; import org.webrtc.EglRenderer; import org.webrtc.RendererCommon; public class SurfaceViewRenderer extends SurfaceView implements SurfaceHolder.Callback, VideoSink, RendererCommon.RendererEvents { private static final String TAG = "SurfaceViewRenderer"; private final SurfaceEglRenderer eglRenderer; private boolean enableFixedSize; private RendererCommon.RendererEvents rendererEvents; private final String resourceName; private int rotatedFrameHeight; private int rotatedFrameWidth; private int surfaceHeight; private int surfaceWidth; private final RendererCommon.VideoLayoutMeasure videoLayoutMeasure = new RendererCommon.VideoLayoutMeasure(); public SurfaceViewRenderer(Context context) { super(context); String resourceName = getResourceName(); this.resourceName = resourceName; SurfaceEglRenderer surfaceEglRenderer = new SurfaceEglRenderer(resourceName); this.eglRenderer = surfaceEglRenderer; getHolder().addCallback(this); getHolder().addCallback(surfaceEglRenderer); } public SurfaceViewRenderer(Context context, AttributeSet attributeSet) { super(context, attributeSet); String resourceName = getResourceName(); this.resourceName = resourceName; SurfaceEglRenderer surfaceEglRenderer = new SurfaceEglRenderer(resourceName); this.eglRenderer = surfaceEglRenderer; getHolder().addCallback(this); getHolder().addCallback(surfaceEglRenderer); } private String getResourceName() { try { return getResources().getResourceEntryName(getId()); } catch (Resources.NotFoundException unused) { return ""; } } private void logD(String str) { Logging.d("SurfaceViewRenderer", this.resourceName + ": " + str); } private void postOrRun(Runnable runnable) { if (Thread.currentThread() == Looper.getMainLooper().getThread()) { runnable.run(); } else { post(runnable); } } private void updateSurfaceSize() { ThreadUtils.checkIsOnMainThread(); if (!this.enableFixedSize || this.rotatedFrameWidth == 0 || this.rotatedFrameHeight == 0 || getWidth() == 0 || getHeight() == 0) { this.surfaceHeight = 0; this.surfaceWidth = 0; getHolder().setSizeFromLayout(); return; } float width = ((float) getWidth()) / ((float) getHeight()); int i = this.rotatedFrameWidth; int i2 = this.rotatedFrameHeight; if (((float) i) / ((float) i2) > width) { i = (int) (((float) i2) * width); } else { i2 = (int) (((float) i) / width); } int min = Math.min(getWidth(), i); int min2 = Math.min(getHeight(), i2); StringBuilder K = a.K("updateSurfaceSize. Layout size: "); K.append(getWidth()); K.append("x"); K.append(getHeight()); K.append(", frame size: "); K.append(this.rotatedFrameWidth); K.append("x"); K.append(this.rotatedFrameHeight); K.append(", requested surface size: "); K.append(min); K.append("x"); K.append(min2); K.append(", old surface size: "); K.append(this.surfaceWidth); K.append("x"); K.append(this.surfaceHeight); logD(K.toString()); if (min != this.surfaceWidth || min2 != this.surfaceHeight) { this.surfaceWidth = min; this.surfaceHeight = min2; getHolder().setFixedSize(min, min2); } } public /* synthetic */ void a(int i, int i2) { this.rotatedFrameWidth = i; this.rotatedFrameHeight = i2; updateSurfaceSize(); requestLayout(); } public void addFrameListener(EglRenderer.FrameListener frameListener, float f) { this.eglRenderer.addFrameListener(frameListener, f); } public void addFrameListener(EglRenderer.FrameListener frameListener, float f, RendererCommon.GlDrawer glDrawer) { this.eglRenderer.addFrameListener(frameListener, f, glDrawer); } public void clearImage() { this.eglRenderer.clearImage(); } public void disableFpsReduction() { this.eglRenderer.disableFpsReduction(); } public void init(EglBase.Context context, RendererCommon.RendererEvents rendererEvents) { init(context, rendererEvents, EglBase.CONFIG_PLAIN, new GlRectDrawer()); } public void init(EglBase.Context context, RendererCommon.RendererEvents rendererEvents, int[] iArr, RendererCommon.GlDrawer glDrawer) { ThreadUtils.checkIsOnMainThread(); this.rendererEvents = rendererEvents; this.rotatedFrameWidth = 0; this.rotatedFrameHeight = 0; this.eglRenderer.init(context, this, iArr, glDrawer); } @Override // org.webrtc.RendererCommon.RendererEvents public void onFirstFrameRendered() { RendererCommon.RendererEvents rendererEvents = this.rendererEvents; if (rendererEvents != null) { rendererEvents.onFirstFrameRendered(); } } @Override // org.webrtc.VideoSink public void onFrame(VideoFrame videoFrame) { this.eglRenderer.onFrame(videoFrame); } @Override // org.webrtc.RendererCommon.RendererEvents public void onFrameResolutionChanged(int i, int i2, int i3) { RendererCommon.RendererEvents rendererEvents = this.rendererEvents; if (rendererEvents != null) { rendererEvents.onFrameResolutionChanged(i, i2, i3); } int i4 = (i3 == 0 || i3 == 180) ? i : i2; if (i3 == 0 || i3 == 180) { i = i2; } postOrRun(new y(this, i4, i)); } @Override // android.view.View public void onLayout(boolean z2, int i, int i2, int i3, int i4) { ThreadUtils.checkIsOnMainThread(); this.eglRenderer.setLayoutAspectRatio(((float) (i3 - i)) / ((float) (i4 - i2))); updateSurfaceSize(); } @Override // android.view.SurfaceView, android.view.View public void onMeasure(int i, int i2) { ThreadUtils.checkIsOnMainThread(); Point measure = this.videoLayoutMeasure.measure(i, i2, this.rotatedFrameWidth, this.rotatedFrameHeight); setMeasuredDimension(measure.x, measure.y); StringBuilder K = a.K("onMeasure(). New size: "); K.append(measure.x); K.append("x"); K.append(measure.y); logD(K.toString()); } public void pauseVideo() { this.eglRenderer.pauseVideo(); } public void release() { this.eglRenderer.release(); } public void removeFrameListener(EglRenderer.FrameListener frameListener) { this.eglRenderer.removeFrameListener(frameListener); } public void setEnableHardwareScaler(boolean z2) { ThreadUtils.checkIsOnMainThread(); this.enableFixedSize = z2; updateSurfaceSize(); } public void setFpsReduction(float f) { this.eglRenderer.setFpsReduction(f); } public void setMirror(boolean z2) { this.eglRenderer.setMirror(z2); } public void setScalingType(RendererCommon.ScalingType scalingType) { ThreadUtils.checkIsOnMainThread(); this.videoLayoutMeasure.setScalingType(scalingType); requestLayout(); } public void setScalingType(RendererCommon.ScalingType scalingType, RendererCommon.ScalingType scalingType2) { ThreadUtils.checkIsOnMainThread(); this.videoLayoutMeasure.setScalingType(scalingType, scalingType2); requestLayout(); } @Override // android.view.SurfaceHolder.Callback public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) { } @Override // android.view.SurfaceHolder.Callback public void surfaceCreated(SurfaceHolder surfaceHolder) { ThreadUtils.checkIsOnMainThread(); this.surfaceHeight = 0; this.surfaceWidth = 0; updateSurfaceSize(); } @Override // android.view.SurfaceHolder.Callback public void surfaceDestroyed(SurfaceHolder surfaceHolder) { } }