267 lines
8.9 KiB
Java
267 lines
8.9 KiB
Java
package com.ubt.jimu.widgets.player.widget;
|
|
|
|
import android.annotation.TargetApi;
|
|
import android.content.Context;
|
|
import android.graphics.SurfaceTexture;
|
|
import android.util.Log;
|
|
import android.view.Surface;
|
|
import android.view.TextureView;
|
|
import android.view.View;
|
|
import android.view.accessibility.AccessibilityEvent;
|
|
import android.view.accessibility.AccessibilityNodeInfo;
|
|
import com.baidu.cloud.media.player.IMediaPlayer;
|
|
import com.ubt.jimu.widgets.player.widget.IRenderView;
|
|
import java.lang.ref.WeakReference;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
@TargetApi(14)
|
|
/* loaded from: classes2.dex */
|
|
public class TextureRenderView extends TextureView implements IRenderView {
|
|
private MeasureHelper a;
|
|
private int b;
|
|
private SurfaceTexture c;
|
|
private SurfaceCallback d;
|
|
|
|
private static final class SurfaceCallback implements TextureView.SurfaceTextureListener {
|
|
private SurfaceTexture a;
|
|
private boolean b;
|
|
private int c;
|
|
private int d;
|
|
private WeakReference<TextureRenderView> f;
|
|
private volatile boolean e = false;
|
|
private Map<IRenderView.IRenderCallback, Object> g = new ConcurrentHashMap();
|
|
|
|
public SurfaceCallback(TextureRenderView textureRenderView) {
|
|
this.f = new WeakReference<>(textureRenderView);
|
|
}
|
|
|
|
public void a(boolean z) {
|
|
this.e = z;
|
|
}
|
|
|
|
public void b(IRenderView.IRenderCallback iRenderCallback) {
|
|
this.g.remove(iRenderCallback);
|
|
}
|
|
|
|
@Override // android.view.TextureView.SurfaceTextureListener
|
|
@TargetApi(16)
|
|
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) {
|
|
this.a = surfaceTexture;
|
|
if (this.f.get() == null) {
|
|
Log.e("TextureRenderView", "!!!!!Too bad, textureview in callback is released. function will not work normally");
|
|
} else if (this.f.get().getLastSurfaceTexture() == null) {
|
|
this.f.get().setLastSurfaceTexture(surfaceTexture);
|
|
}
|
|
this.b = false;
|
|
this.c = 0;
|
|
this.d = 0;
|
|
InternalSurfaceHolder internalSurfaceHolder = new InternalSurfaceHolder(this.f.get());
|
|
Iterator<IRenderView.IRenderCallback> it = this.g.keySet().iterator();
|
|
while (it.hasNext()) {
|
|
it.next().a(internalSurfaceHolder, 0, 0);
|
|
}
|
|
}
|
|
|
|
@Override // android.view.TextureView.SurfaceTextureListener
|
|
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
|
|
this.a = surfaceTexture;
|
|
this.b = false;
|
|
this.c = 0;
|
|
this.d = 0;
|
|
InternalSurfaceHolder internalSurfaceHolder = new InternalSurfaceHolder(this.f.get());
|
|
Iterator<IRenderView.IRenderCallback> it = this.g.keySet().iterator();
|
|
while (it.hasNext()) {
|
|
it.next().a(internalSurfaceHolder);
|
|
}
|
|
return this.e;
|
|
}
|
|
|
|
@Override // android.view.TextureView.SurfaceTextureListener
|
|
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i2) {
|
|
this.a = surfaceTexture;
|
|
this.b = true;
|
|
this.c = i;
|
|
this.d = i2;
|
|
InternalSurfaceHolder internalSurfaceHolder = new InternalSurfaceHolder(this.f.get());
|
|
Iterator<IRenderView.IRenderCallback> it = this.g.keySet().iterator();
|
|
while (it.hasNext()) {
|
|
it.next().a(internalSurfaceHolder, 0, i, i2);
|
|
}
|
|
}
|
|
|
|
@Override // android.view.TextureView.SurfaceTextureListener
|
|
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
|
|
}
|
|
|
|
public void a(IRenderView.IRenderCallback iRenderCallback) {
|
|
InternalSurfaceHolder internalSurfaceHolder;
|
|
this.g.put(iRenderCallback, iRenderCallback);
|
|
if (this.a != null) {
|
|
internalSurfaceHolder = new InternalSurfaceHolder(this.f.get());
|
|
iRenderCallback.a(internalSurfaceHolder, this.c, this.d);
|
|
} else {
|
|
internalSurfaceHolder = null;
|
|
}
|
|
if (this.b) {
|
|
if (internalSurfaceHolder == null) {
|
|
internalSurfaceHolder = new InternalSurfaceHolder(this.f.get());
|
|
}
|
|
iRenderCallback.a(internalSurfaceHolder, 0, this.c, this.d);
|
|
}
|
|
}
|
|
}
|
|
|
|
public TextureRenderView(Context context) {
|
|
super(context);
|
|
this.b = 0;
|
|
a(context);
|
|
}
|
|
|
|
private void a(Context context) {
|
|
this.a = new MeasureHelper(this);
|
|
this.d = new SurfaceCallback(this);
|
|
setSurfaceTextureListener(this.d);
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
public boolean a() {
|
|
return false;
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
public void b(int i, int i2) {
|
|
if (i <= 0 || i2 <= 0) {
|
|
return;
|
|
}
|
|
this.a.b(i, i2);
|
|
requestLayout();
|
|
}
|
|
|
|
public int getCurrentMediaPlayerCode() {
|
|
return this.b;
|
|
}
|
|
|
|
public SurfaceTexture getLastSurfaceTexture() {
|
|
return this.c;
|
|
}
|
|
|
|
public IRenderView.ISurfaceHolder getSurfaceHolder() {
|
|
return new InternalSurfaceHolder(this);
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
public View getView() {
|
|
return this;
|
|
}
|
|
|
|
@Override // android.view.View
|
|
protected void onDetachedFromWindow() {
|
|
super.onDetachedFromWindow();
|
|
Log.d("TextureRenderView", "onDetachedFromWindow");
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onInitializeAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
|
|
super.onInitializeAccessibilityEvent(accessibilityEvent);
|
|
accessibilityEvent.setClassName(TextureRenderView.class.getName());
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
|
|
super.onInitializeAccessibilityNodeInfo(accessibilityNodeInfo);
|
|
accessibilityNodeInfo.setClassName(TextureRenderView.class.getName());
|
|
}
|
|
|
|
@Override // android.view.View
|
|
protected void onMeasure(int i, int i2) {
|
|
this.a.a(i, i2);
|
|
setMeasuredDimension(this.a.b(), this.a.a());
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
@TargetApi(16)
|
|
public void release() {
|
|
if (this.c != null) {
|
|
if (isAvailable()) {
|
|
this.d.a(true);
|
|
} else {
|
|
this.c.release();
|
|
this.c = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
public void setAspectRatio(int i) {
|
|
this.a.a(i);
|
|
requestLayout();
|
|
}
|
|
|
|
public void setCurrentMediaPlayerCode(int i) {
|
|
this.b = i;
|
|
}
|
|
|
|
public void setLastSurfaceTexture(SurfaceTexture surfaceTexture) {
|
|
this.c = surfaceTexture;
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
public void setVideoRotation(int i) {
|
|
this.a.b(i);
|
|
setRotation(i);
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
public void b(IRenderView.IRenderCallback iRenderCallback) {
|
|
this.d.a(iRenderCallback);
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
public void a(int i, int i2) {
|
|
if (i <= 0 || i2 <= 0) {
|
|
return;
|
|
}
|
|
this.a.c(i, i2);
|
|
requestLayout();
|
|
}
|
|
|
|
private static final class InternalSurfaceHolder implements IRenderView.ISurfaceHolder {
|
|
private TextureRenderView a;
|
|
|
|
public InternalSurfaceHolder(TextureRenderView textureRenderView) {
|
|
this.a = textureRenderView;
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView.ISurfaceHolder
|
|
@TargetApi(16)
|
|
public void a(IMediaPlayer iMediaPlayer) {
|
|
if (iMediaPlayer == null || this.a.getSurfaceTexture() == null) {
|
|
return;
|
|
}
|
|
if (iMediaPlayer.hashCode() != this.a.getCurrentMediaPlayerCode()) {
|
|
iMediaPlayer.setSurface(b());
|
|
} else if (!this.a.getLastSurfaceTexture().equals(this.a.getSurfaceTexture())) {
|
|
TextureRenderView textureRenderView = this.a;
|
|
textureRenderView.setSurfaceTexture(textureRenderView.getLastSurfaceTexture());
|
|
}
|
|
this.a.setCurrentMediaPlayerCode(iMediaPlayer.hashCode());
|
|
}
|
|
|
|
public Surface b() {
|
|
return new Surface(this.a.getSurfaceTexture());
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView.ISurfaceHolder
|
|
public IRenderView a() {
|
|
return this.a;
|
|
}
|
|
}
|
|
|
|
@Override // com.ubt.jimu.widgets.player.widget.IRenderView
|
|
public void a(IRenderView.IRenderCallback iRenderCallback) {
|
|
this.d.b(iRenderCallback);
|
|
}
|
|
}
|