mirror of
https://github.com/androidx/media.git
synced 2025-05-08 08:00:49 +08:00
Only recreate output EGLSurface when Surface changed.
PiperOrigin-RevId: 463193768 (cherry picked from commit 5db7778ca322676a6e6445c473184dc1055d4c22)
This commit is contained in:
parent
7b969e8df0
commit
bb7db5a13c
@ -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…
x
Reference in New Issue
Block a user