mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Only recreate output EGLSurface when Surface changed.
PiperOrigin-RevId: 463193768
This commit is contained in:
parent
6288182113
commit
4ac177c337
1 changed files with 21 additions and 7 deletions
|
|
@ -75,6 +75,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
@Nullable private SurfaceViewWrapper debugSurfaceViewWrapper;
|
@Nullable private SurfaceViewWrapper debugSurfaceViewWrapper;
|
||||||
private @MonotonicNonNull Listener listener;
|
private @MonotonicNonNull Listener listener;
|
||||||
private @MonotonicNonNull Size outputSizeBeforeSurfaceTransformation;
|
private @MonotonicNonNull Size outputSizeBeforeSurfaceTransformation;
|
||||||
|
private @MonotonicNonNull SurfaceView debugSurfaceView;
|
||||||
|
|
||||||
|
private volatile boolean outputSizeOrRotationChanged;
|
||||||
|
|
||||||
@GuardedBy("this")
|
@GuardedBy("this")
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
@ -207,7 +210,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
|
|
||||||
SurfaceInfo outputSurfaceInfo = this.outputSurfaceInfo;
|
SurfaceInfo outputSurfaceInfo = this.outputSurfaceInfo;
|
||||||
@Nullable EGLSurface outputEglSurface = this.outputEglSurface;
|
@Nullable EGLSurface outputEglSurface = this.outputEglSurface;
|
||||||
if (outputEglSurface == null) { // This means that outputSurfaceInfo changed.
|
if (outputEglSurface == null) {
|
||||||
if (useHdr) {
|
if (useHdr) {
|
||||||
outputEglSurface = GlUtil.getEglSurfaceRgba1010102(eglDisplay, outputSurfaceInfo.surface);
|
outputEglSurface = GlUtil.getEglSurfaceRgba1010102(eglDisplay, outputSurfaceInfo.surface);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -218,16 +221,17 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
SurfaceView debugSurfaceView =
|
SurfaceView debugSurfaceView =
|
||||||
debugViewProvider.getDebugPreviewSurfaceView(
|
debugViewProvider.getDebugPreviewSurfaceView(
|
||||||
outputSurfaceInfo.width, outputSurfaceInfo.height);
|
outputSurfaceInfo.width, outputSurfaceInfo.height);
|
||||||
if (debugSurfaceView != null) {
|
if (debugSurfaceView != null && !Util.areEqual(this.debugSurfaceView, debugSurfaceView)) {
|
||||||
debugSurfaceViewWrapper =
|
debugSurfaceViewWrapper =
|
||||||
new SurfaceViewWrapper(eglDisplay, eglContext, useHdr, debugSurfaceView);
|
new SurfaceViewWrapper(eglDisplay, eglContext, useHdr, debugSurfaceView);
|
||||||
}
|
}
|
||||||
if (matrixTransformationProcessor != null) {
|
|
||||||
matrixTransformationProcessor.release();
|
|
||||||
matrixTransformationProcessor = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (matrixTransformationProcessor != null && outputSizeOrRotationChanged) {
|
||||||
|
matrixTransformationProcessor.release();
|
||||||
|
matrixTransformationProcessor = null;
|
||||||
|
outputSizeOrRotationChanged = false;
|
||||||
|
}
|
||||||
if (matrixTransformationProcessor == null) {
|
if (matrixTransformationProcessor == null) {
|
||||||
matrixTransformationProcessor =
|
matrixTransformationProcessor =
|
||||||
createMatrixTransformationProcessorForOutputSurface(outputSurfaceInfo);
|
createMatrixTransformationProcessorForOutputSurface(outputSurfaceInfo);
|
||||||
|
|
@ -316,8 +320,18 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
|
|
||||||
public synchronized void setOutputSurfaceInfo(@Nullable SurfaceInfo outputSurfaceInfo) {
|
public synchronized void setOutputSurfaceInfo(@Nullable SurfaceInfo outputSurfaceInfo) {
|
||||||
if (!Util.areEqual(this.outputSurfaceInfo, outputSurfaceInfo)) {
|
if (!Util.areEqual(this.outputSurfaceInfo, outputSurfaceInfo)) {
|
||||||
|
if (outputSurfaceInfo != null
|
||||||
|
&& this.outputSurfaceInfo != null
|
||||||
|
&& !this.outputSurfaceInfo.surface.equals(outputSurfaceInfo.surface)) {
|
||||||
|
this.outputEglSurface = null;
|
||||||
|
}
|
||||||
|
outputSizeOrRotationChanged =
|
||||||
|
this.outputSurfaceInfo == null
|
||||||
|
|| outputSurfaceInfo == null
|
||||||
|
|| this.outputSurfaceInfo.width != outputSurfaceInfo.width
|
||||||
|
|| this.outputSurfaceInfo.height != outputSurfaceInfo.height
|
||||||
|
|| this.outputSurfaceInfo.orientationDegrees != outputSurfaceInfo.orientationDegrees;
|
||||||
this.outputSurfaceInfo = outputSurfaceInfo;
|
this.outputSurfaceInfo = outputSurfaceInfo;
|
||||||
this.outputEglSurface = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue