discord-jadx/app/src/main/java/org/webrtc/SurfaceEglRenderer.java

118 lines
4.6 KiB
Java

package org.webrtc;
import android.view.SurfaceHolder;
import h0.c.k0;
import java.util.concurrent.CountDownLatch;
import org.webrtc.EglBase;
import org.webrtc.RendererCommon;
public class SurfaceEglRenderer extends EglRenderer implements SurfaceHolder.Callback {
private static final String TAG = "SurfaceEglRenderer";
private int frameRotation;
private boolean isFirstFrameRendered;
private boolean isRenderingPaused;
private final Object layoutLock = new Object();
private RendererCommon.RendererEvents rendererEvents;
private int rotatedFrameHeight;
private int rotatedFrameWidth;
public SurfaceEglRenderer(String str) {
super(str);
}
private void logD(String str) {
Logging.d("SurfaceEglRenderer", this.name + ": " + str);
}
private void updateFrameDimensionsAndReportEvents(VideoFrame videoFrame) {
synchronized (this.layoutLock) {
if (!this.isRenderingPaused) {
if (!this.isFirstFrameRendered) {
this.isFirstFrameRendered = true;
logD("Reporting first rendered frame.");
RendererCommon.RendererEvents rendererEvents = this.rendererEvents;
if (rendererEvents != null) {
rendererEvents.onFirstFrameRendered();
}
}
if (!(this.rotatedFrameWidth == videoFrame.getRotatedWidth() && this.rotatedFrameHeight == videoFrame.getRotatedHeight() && this.frameRotation == videoFrame.getRotation())) {
logD("Reporting frame resolution changed to " + videoFrame.getBuffer().getWidth() + "x" + videoFrame.getBuffer().getHeight() + " with rotation " + videoFrame.getRotation());
RendererCommon.RendererEvents rendererEvents2 = this.rendererEvents;
if (rendererEvents2 != null) {
rendererEvents2.onFrameResolutionChanged(videoFrame.getBuffer().getWidth(), videoFrame.getBuffer().getHeight(), videoFrame.getRotation());
}
this.rotatedFrameWidth = videoFrame.getRotatedWidth();
this.rotatedFrameHeight = videoFrame.getRotatedHeight();
this.frameRotation = videoFrame.getRotation();
}
}
}
}
@Override // org.webrtc.EglRenderer
public void disableFpsReduction() {
synchronized (this.layoutLock) {
this.isRenderingPaused = false;
}
super.disableFpsReduction();
}
public void init(EglBase.Context context, RendererCommon.RendererEvents rendererEvents, int[] iArr, RendererCommon.GlDrawer glDrawer) {
ThreadUtils.checkIsOnMainThread();
this.rendererEvents = rendererEvents;
synchronized (this.layoutLock) {
this.isFirstFrameRendered = false;
this.rotatedFrameWidth = 0;
this.rotatedFrameHeight = 0;
this.frameRotation = 0;
}
super.init(context, iArr, glDrawer);
}
@Override // org.webrtc.EglRenderer
public void init(EglBase.Context context, int[] iArr, RendererCommon.GlDrawer glDrawer) {
init(context, (RendererCommon.RendererEvents) null, iArr, glDrawer);
}
@Override // org.webrtc.EglRenderer, org.webrtc.VideoSink
public void onFrame(VideoFrame videoFrame) {
updateFrameDimensionsAndReportEvents(videoFrame);
super.onFrame(videoFrame);
}
@Override // org.webrtc.EglRenderer
public void pauseVideo() {
synchronized (this.layoutLock) {
this.isRenderingPaused = true;
}
super.pauseVideo();
}
@Override // org.webrtc.EglRenderer
public void setFpsReduction(float f) {
synchronized (this.layoutLock) {
this.isRenderingPaused = f == 0.0f;
}
super.setFpsReduction(f);
}
@Override // android.view.SurfaceHolder.Callback
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {
ThreadUtils.checkIsOnMainThread();
logD("surfaceChanged: format: " + i + " size: " + i2 + "x" + i3);
}
@Override // android.view.SurfaceHolder.Callback
public void surfaceCreated(SurfaceHolder surfaceHolder) {
ThreadUtils.checkIsOnMainThread();
createEglSurface(surfaceHolder.getSurface());
}
@Override // android.view.SurfaceHolder.Callback
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
ThreadUtils.checkIsOnMainThread();
CountDownLatch countDownLatch = new CountDownLatch(1);
releaseEglSurface(new k0(countDownLatch));
ThreadUtils.awaitUninterruptibly(countDownLatch);
}
}