mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-26 17:12:31 -06:00
176 lines
6.2 KiB
Java
176 lines
6.2 KiB
Java
package androidx.media3.exoplayer.video;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.SurfaceTexture;
|
|
import android.os.Handler;
|
|
import android.os.HandlerThread;
|
|
import android.os.Message;
|
|
import android.view.Surface;
|
|
import androidx.media3.common.util.Assertions;
|
|
import androidx.media3.common.util.EGLSurfaceTexture;
|
|
import androidx.media3.common.util.GlUtil;
|
|
import androidx.media3.common.util.Log;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class PlaceholderSurface extends Surface {
|
|
private static final String TAG = "PlaceholderSurface";
|
|
private static int secureMode;
|
|
private static boolean secureModeInitialized;
|
|
public final boolean secure;
|
|
private final PlaceholderSurfaceThread thread;
|
|
private boolean threadReleased;
|
|
|
|
public static synchronized boolean isSecureSupported(Context context) {
|
|
boolean z;
|
|
synchronized (PlaceholderSurface.class) {
|
|
if (!secureModeInitialized) {
|
|
secureMode = getSecureMode(context);
|
|
secureModeInitialized = true;
|
|
}
|
|
z = secureMode != 0;
|
|
}
|
|
return z;
|
|
}
|
|
|
|
public static PlaceholderSurface newInstanceV17(Context context, boolean z) {
|
|
Assertions.checkState(!z || isSecureSupported(context));
|
|
return new PlaceholderSurfaceThread().init(z ? secureMode : 0);
|
|
}
|
|
|
|
private PlaceholderSurface(PlaceholderSurfaceThread placeholderSurfaceThread, SurfaceTexture surfaceTexture, boolean z) {
|
|
super(surfaceTexture);
|
|
this.thread = placeholderSurfaceThread;
|
|
this.secure = z;
|
|
}
|
|
|
|
@Override // android.view.Surface
|
|
public void release() {
|
|
super.release();
|
|
synchronized (this.thread) {
|
|
if (!this.threadReleased) {
|
|
this.thread.release();
|
|
this.threadReleased = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static int getSecureMode(Context context) {
|
|
if (GlUtil.isProtectedContentExtensionSupported(context)) {
|
|
return GlUtil.isSurfacelessContextExtensionSupported() ? 1 : 2;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* loaded from: classes2.dex */
|
|
public static class PlaceholderSurfaceThread extends HandlerThread implements Handler.Callback {
|
|
private static final int MSG_INIT = 1;
|
|
private static final int MSG_RELEASE = 2;
|
|
private EGLSurfaceTexture eglSurfaceTexture;
|
|
private Handler handler;
|
|
private Error initError;
|
|
private RuntimeException initException;
|
|
private PlaceholderSurface surface;
|
|
|
|
public PlaceholderSurfaceThread() {
|
|
super("ExoPlayer:PlaceholderSurface");
|
|
}
|
|
|
|
public PlaceholderSurface init(int i) {
|
|
boolean z;
|
|
start();
|
|
this.handler = new Handler(getLooper(), this);
|
|
this.eglSurfaceTexture = new EGLSurfaceTexture(this.handler);
|
|
synchronized (this) {
|
|
z = false;
|
|
this.handler.obtainMessage(1, i, 0).sendToTarget();
|
|
while (this.surface == null && this.initException == null && this.initError == null) {
|
|
try {
|
|
wait();
|
|
} catch (InterruptedException unused) {
|
|
z = true;
|
|
}
|
|
}
|
|
}
|
|
if (z) {
|
|
Thread.currentThread().interrupt();
|
|
}
|
|
RuntimeException runtimeException = this.initException;
|
|
if (runtimeException != null) {
|
|
throw runtimeException;
|
|
}
|
|
Error error = this.initError;
|
|
if (error != null) {
|
|
throw error;
|
|
}
|
|
return (PlaceholderSurface) Assertions.checkNotNull(this.surface);
|
|
}
|
|
|
|
public void release() {
|
|
Assertions.checkNotNull(this.handler);
|
|
this.handler.sendEmptyMessage(2);
|
|
}
|
|
|
|
@Override // android.os.Handler.Callback
|
|
public boolean handleMessage(Message message) {
|
|
int i = message.what;
|
|
try {
|
|
if (i != 1) {
|
|
if (i != 2) {
|
|
return true;
|
|
}
|
|
try {
|
|
releaseInternal();
|
|
} finally {
|
|
try {
|
|
return true;
|
|
} finally {
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
try {
|
|
initInternal(message.arg1);
|
|
synchronized (this) {
|
|
notify();
|
|
}
|
|
} catch (GlUtil.GlException e) {
|
|
Log.e(PlaceholderSurface.TAG, "Failed to initialize placeholder surface", e);
|
|
this.initException = new IllegalStateException(e);
|
|
synchronized (this) {
|
|
notify();
|
|
}
|
|
} catch (Error e2) {
|
|
Log.e(PlaceholderSurface.TAG, "Failed to initialize placeholder surface", e2);
|
|
this.initError = e2;
|
|
synchronized (this) {
|
|
notify();
|
|
}
|
|
} catch (RuntimeException e3) {
|
|
Log.e(PlaceholderSurface.TAG, "Failed to initialize placeholder surface", e3);
|
|
this.initException = e3;
|
|
synchronized (this) {
|
|
notify();
|
|
}
|
|
}
|
|
return true;
|
|
} catch (Throwable th) {
|
|
synchronized (this) {
|
|
notify();
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void initInternal(int i) throws GlUtil.GlException {
|
|
Assertions.checkNotNull(this.eglSurfaceTexture);
|
|
this.eglSurfaceTexture.init(i);
|
|
this.surface = new PlaceholderSurface(this, this.eglSurfaceTexture.getSurfaceTexture(), i != 0);
|
|
}
|
|
|
|
private void releaseInternal() {
|
|
Assertions.checkNotNull(this.eglSurfaceTexture);
|
|
this.eglSurfaceTexture.release();
|
|
}
|
|
}
|
|
}
|