Commit 40f1bd34 by leonwind Committed by Marc Baechinger

Rename MatrixTransformationProcessor to MatrixTextureProcessor.

PiperOrigin-RevId: 473283967
parent 8f9c9d0f
Showing with 119 additions and 142 deletions
...@@ -36,7 +36,7 @@ import org.junit.Test; ...@@ -36,7 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
/** /**
* Pixel test for texture processing via {@link MatrixTransformationProcessor}. * Pixel test for texture processing via {@link MatrixTextureProcessor}.
* *
* <p>Expected images are taken from an emulator, so tests on different emulators or physical * <p>Expected images are taken from an emulator, so tests on different emulators or physical
* devices may fail. To test on other devices, please increase the {@link * devices may fail. To test on other devices, please increase the {@link
...@@ -44,7 +44,7 @@ import org.junit.runner.RunWith; ...@@ -44,7 +44,7 @@ import org.junit.runner.RunWith;
* as recommended in {@link GlEffectsFrameProcessorPixelTest}. * as recommended in {@link GlEffectsFrameProcessorPixelTest}.
*/ */
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public final class MatrixTransformationProcessorPixelTest { public final class MatrixTextureProcessorPixelTest {
public static final String ORIGINAL_PNG_ASSET_PATH = public static final String ORIGINAL_PNG_ASSET_PATH =
"media/bitmap/sample_mp4_first_frame/original.png"; "media/bitmap/sample_mp4_first_frame/original.png";
public static final String TRANSLATE_RIGHT_PNG_ASSET_PATH = public static final String TRANSLATE_RIGHT_PNG_ASSET_PATH =
...@@ -58,7 +58,7 @@ public final class MatrixTransformationProcessorPixelTest { ...@@ -58,7 +58,7 @@ public final class MatrixTransformationProcessorPixelTest {
private @MonotonicNonNull EGLDisplay eglDisplay; private @MonotonicNonNull EGLDisplay eglDisplay;
private @MonotonicNonNull EGLContext eglContext; private @MonotonicNonNull EGLContext eglContext;
private @MonotonicNonNull SingleFrameGlTextureProcessor matrixTransformationFrameProcessor; private @MonotonicNonNull SingleFrameGlTextureProcessor matrixTextureProcessor;
private int inputTexId; private int inputTexId;
private int outputTexId; private int outputTexId;
private int width; private int width;
...@@ -82,8 +82,8 @@ public final class MatrixTransformationProcessorPixelTest { ...@@ -82,8 +82,8 @@ public final class MatrixTransformationProcessorPixelTest {
@After @After
public void release() throws GlUtil.GlException, FrameProcessingException { public void release() throws GlUtil.GlException, FrameProcessingException {
if (matrixTransformationFrameProcessor != null) { if (matrixTextureProcessor != null) {
matrixTransformationFrameProcessor.release(); matrixTextureProcessor.release();
} }
if (eglContext != null && eglDisplay != null) { if (eglContext != null && eglDisplay != null) {
GlUtil.destroyEglContext(eglDisplay, eglContext); GlUtil.destroyEglContext(eglDisplay, eglContext);
...@@ -95,12 +95,12 @@ public final class MatrixTransformationProcessorPixelTest { ...@@ -95,12 +95,12 @@ public final class MatrixTransformationProcessorPixelTest {
String testId = "drawFrame_noEdits"; String testId = "drawFrame_noEdits";
Matrix identityMatrix = new Matrix(); Matrix identityMatrix = new Matrix();
MatrixTransformation noEditsTransformation = (long presentationTimeUs) -> identityMatrix; MatrixTransformation noEditsTransformation = (long presentationTimeUs) -> identityMatrix;
matrixTransformationFrameProcessor = matrixTextureProcessor =
noEditsTransformation.toGlTextureProcessor(context, /* useHdr= */ false); noEditsTransformation.toGlTextureProcessor(context, /* useHdr= */ false);
matrixTransformationFrameProcessor.configure(width, height); matrixTextureProcessor.configure(width, height);
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH);
matrixTransformationFrameProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0); matrixTextureProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0);
Bitmap actualBitmap = Bitmap actualBitmap =
BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(width, height); BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(width, height);
...@@ -120,12 +120,12 @@ public final class MatrixTransformationProcessorPixelTest { ...@@ -120,12 +120,12 @@ public final class MatrixTransformationProcessorPixelTest {
translateRightMatrix.postTranslate(/* dx= */ 1, /* dy= */ 0); translateRightMatrix.postTranslate(/* dx= */ 1, /* dy= */ 0);
MatrixTransformation translateRightTransformation = MatrixTransformation translateRightTransformation =
(long presentationTimeUs) -> translateRightMatrix; (long presentationTimeUs) -> translateRightMatrix;
matrixTransformationFrameProcessor = matrixTextureProcessor =
translateRightTransformation.toGlTextureProcessor(context, /* useHdr= */ false); translateRightTransformation.toGlTextureProcessor(context, /* useHdr= */ false);
matrixTransformationFrameProcessor.configure(width, height); matrixTextureProcessor.configure(width, height);
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(TRANSLATE_RIGHT_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(TRANSLATE_RIGHT_PNG_ASSET_PATH);
matrixTransformationFrameProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0); matrixTextureProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0);
Bitmap actualBitmap = Bitmap actualBitmap =
BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(width, height); BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(width, height);
...@@ -144,12 +144,12 @@ public final class MatrixTransformationProcessorPixelTest { ...@@ -144,12 +144,12 @@ public final class MatrixTransformationProcessorPixelTest {
Matrix scaleNarrowMatrix = new Matrix(); Matrix scaleNarrowMatrix = new Matrix();
scaleNarrowMatrix.postScale(.5f, 1.2f); scaleNarrowMatrix.postScale(.5f, 1.2f);
MatrixTransformation scaleNarrowTransformation = (long presentationTimeUs) -> scaleNarrowMatrix; MatrixTransformation scaleNarrowTransformation = (long presentationTimeUs) -> scaleNarrowMatrix;
matrixTransformationFrameProcessor = matrixTextureProcessor =
scaleNarrowTransformation.toGlTextureProcessor(context, /* useHdr= */ false); scaleNarrowTransformation.toGlTextureProcessor(context, /* useHdr= */ false);
matrixTransformationFrameProcessor.configure(width, height); matrixTextureProcessor.configure(width, height);
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(SCALE_NARROW_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(SCALE_NARROW_PNG_ASSET_PATH);
matrixTransformationFrameProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0); matrixTextureProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0);
Bitmap actualBitmap = Bitmap actualBitmap =
BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(width, height); BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(width, height);
...@@ -168,12 +168,12 @@ public final class MatrixTransformationProcessorPixelTest { ...@@ -168,12 +168,12 @@ public final class MatrixTransformationProcessorPixelTest {
Matrix rotate90Matrix = new Matrix(); Matrix rotate90Matrix = new Matrix();
rotate90Matrix.postRotate(/* degrees= */ 90); rotate90Matrix.postRotate(/* degrees= */ 90);
MatrixTransformation rotate90Transformation = (long presentationTimeUs) -> rotate90Matrix; MatrixTransformation rotate90Transformation = (long presentationTimeUs) -> rotate90Matrix;
matrixTransformationFrameProcessor = matrixTextureProcessor =
rotate90Transformation.toGlTextureProcessor(context, /* useHdr= */ false); rotate90Transformation.toGlTextureProcessor(context, /* useHdr= */ false);
matrixTransformationFrameProcessor.configure(width, height); matrixTextureProcessor.configure(width, height);
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ROTATE_90_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ROTATE_90_PNG_ASSET_PATH);
matrixTransformationFrameProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0); matrixTextureProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0);
Bitmap actualBitmap = Bitmap actualBitmap =
BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(width, height); BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(width, height);
......
...@@ -58,7 +58,7 @@ public final class RgbFilterPixelTest { ...@@ -58,7 +58,7 @@ public final class RgbFilterPixelTest {
private @MonotonicNonNull EGLDisplay eglDisplay; private @MonotonicNonNull EGLDisplay eglDisplay;
private @MonotonicNonNull EGLContext eglContext; private @MonotonicNonNull EGLContext eglContext;
private @MonotonicNonNull SingleFrameGlTextureProcessor matrixTransformationProcessor; private @MonotonicNonNull SingleFrameGlTextureProcessor matrixTextureProcessor;
private @MonotonicNonNull EGLSurface placeholderEglSurface; private @MonotonicNonNull EGLSurface placeholderEglSurface;
private int inputTexId; private int inputTexId;
private int outputTexId; private int outputTexId;
...@@ -90,8 +90,8 @@ public final class RgbFilterPixelTest { ...@@ -90,8 +90,8 @@ public final class RgbFilterPixelTest {
@After @After
public void release() throws GlUtil.GlException, FrameProcessingException { public void release() throws GlUtil.GlException, FrameProcessingException {
if (matrixTransformationProcessor != null) { if (matrixTextureProcessor != null) {
matrixTransformationProcessor.release(); matrixTextureProcessor.release();
} }
GlUtil.destroyEglContext(eglDisplay, eglContext); GlUtil.destroyEglContext(eglDisplay, eglContext);
} }
...@@ -100,13 +100,11 @@ public final class RgbFilterPixelTest { ...@@ -100,13 +100,11 @@ public final class RgbFilterPixelTest {
public void drawFrame_grayscale_producesGrayscaleImage() throws Exception { public void drawFrame_grayscale_producesGrayscaleImage() throws Exception {
String testId = "drawFrame_grayscale"; String testId = "drawFrame_grayscale";
RgbMatrix grayscaleMatrix = RgbFilter.createGrayscaleFilter(); RgbMatrix grayscaleMatrix = RgbFilter.createGrayscaleFilter();
matrixTransformationProcessor = matrixTextureProcessor = grayscaleMatrix.toGlTextureProcessor(context, /* useHdr= */ false);
grayscaleMatrix.toGlTextureProcessor(context, /* useHdr= */ false); Pair<Integer, Integer> outputSize = matrixTextureProcessor.configure(inputWidth, inputHeight);
Pair<Integer, Integer> outputSize =
matrixTransformationProcessor.configure(inputWidth, inputHeight);
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(GRAYSCALE_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(GRAYSCALE_PNG_ASSET_PATH);
matrixTransformationProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0); matrixTextureProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0);
Bitmap actualBitmap = Bitmap actualBitmap =
BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer( BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(
outputSize.first, outputSize.second); outputSize.first, outputSize.second);
...@@ -123,13 +121,11 @@ public final class RgbFilterPixelTest { ...@@ -123,13 +121,11 @@ public final class RgbFilterPixelTest {
public void drawFrame_inverted_producesInvertedFrame() throws Exception { public void drawFrame_inverted_producesInvertedFrame() throws Exception {
String testId = "drawFrame_inverted"; String testId = "drawFrame_inverted";
RgbMatrix invertedMatrix = RgbFilter.createInvertedFilter(); RgbMatrix invertedMatrix = RgbFilter.createInvertedFilter();
matrixTransformationProcessor = matrixTextureProcessor = invertedMatrix.toGlTextureProcessor(context, /* useHdr= */ false);
invertedMatrix.toGlTextureProcessor(context, /* useHdr= */ false); Pair<Integer, Integer> outputSize = matrixTextureProcessor.configure(inputWidth, inputHeight);
Pair<Integer, Integer> outputSize =
matrixTransformationProcessor.configure(inputWidth, inputHeight);
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(INVERT_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(INVERT_PNG_ASSET_PATH);
matrixTransformationProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0); matrixTextureProcessor.drawFrame(inputTexId, /* presentationTimeUs= */ 0);
Bitmap actualBitmap = Bitmap actualBitmap =
BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer( BitmapTestUtil.createArgb8888BitmapFromCurrentGlFramebuffer(
outputSize.first, outputSize.second); outputSize.first, outputSize.second);
......
...@@ -52,15 +52,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -52,15 +52,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
* Wrapper around a {@link GlTextureProcessor} that writes to the provided output surface and * Wrapper around a {@link GlTextureProcessor} that writes to the provided output surface and
* optional debug surface view. * optional debug surface view.
* *
* <p>The wrapped {@link GlTextureProcessor} applies the {@link GlMatrixTransformation} instances * <p>The wrapped {@link GlTextureProcessor} applies the {@link GlMatrixTransformation} and {@link
* passed to the constructor, followed by any transformations needed to convert the frames to the * RgbMatrix} instances passed to the constructor, followed by any transformations needed to convert
* dimensions specified by the provided {@link SurfaceInfo}. * the frames to the dimensions specified by the provided {@link SurfaceInfo}.
* *
* <p>This wrapper is used for the final {@link GlTextureProcessor} instance in the chain of {@link * <p>This wrapper is used for the final {@link GlTextureProcessor} instance in the chain of {@link
* GlTextureProcessor} instances used by {@link FrameProcessor}. * GlTextureProcessor} instances used by {@link FrameProcessor}.
*/ */
/* package */ final class FinalMatrixTransformationProcessorWrapper /* package */ final class FinalMatrixTextureProcessorWrapper implements ExternalTextureProcessor {
implements ExternalTextureProcessor {
private static final String TAG = "FinalProcessorWrapper"; private static final String TAG = "FinalProcessorWrapper";
...@@ -80,7 +79,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -80,7 +79,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private int inputWidth; private int inputWidth;
private int inputHeight; private int inputHeight;
@Nullable private MatrixTransformationProcessor matrixTransformationProcessor; @Nullable private MatrixTextureProcessor matrixTextureProcessor;
@Nullable private SurfaceViewWrapper debugSurfaceViewWrapper; @Nullable private SurfaceViewWrapper debugSurfaceViewWrapper;
private InputListener inputListener; private InputListener inputListener;
private @MonotonicNonNull Pair<Integer, Integer> outputSizeBeforeSurfaceTransformation; private @MonotonicNonNull Pair<Integer, Integer> outputSizeBeforeSurfaceTransformation;
...@@ -96,7 +95,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -96,7 +95,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@Nullable @Nullable
private EGLSurface outputEglSurface; private EGLSurface outputEglSurface;
public FinalMatrixTransformationProcessorWrapper( public FinalMatrixTextureProcessorWrapper(
Context context, Context context,
EGLDisplay eglDisplay, EGLDisplay eglDisplay,
EGLContext eglContext, EGLContext eglContext,
...@@ -192,8 +191,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -192,8 +191,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@Override @Override
@WorkerThread @WorkerThread
public void release() throws FrameProcessingException { public void release() throws FrameProcessingException {
if (matrixTransformationProcessor != null) { if (matrixTextureProcessor != null) {
matrixTransformationProcessor.release(); matrixTextureProcessor.release();
} }
} }
...@@ -206,8 +205,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -206,8 +205,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* destPost= */ 0, /* destPost= */ 0,
/* length= */ textureTransformMatrix.length); /* length= */ textureTransformMatrix.length);
if (matrixTransformationProcessor != null) { if (matrixTextureProcessor != null) {
matrixTransformationProcessor.setTextureTransformMatrix(textureTransformMatrix); matrixTextureProcessor.setTextureTransformMatrix(textureTransformMatrix);
} }
} }
...@@ -271,8 +270,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -271,8 +270,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
EGLSurface outputEglSurface = this.outputEglSurface; EGLSurface outputEglSurface = this.outputEglSurface;
SurfaceInfo outputSurfaceInfo = this.outputSurfaceInfo; SurfaceInfo outputSurfaceInfo = this.outputSurfaceInfo;
MatrixTransformationProcessor matrixTransformationProcessor = MatrixTextureProcessor matrixTextureProcessor = this.matrixTextureProcessor;
this.matrixTransformationProcessor;
GlUtil.focusEglSurface( GlUtil.focusEglSurface(
eglDisplay, eglDisplay,
...@@ -281,7 +279,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -281,7 +279,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
outputSurfaceInfo.width, outputSurfaceInfo.width,
outputSurfaceInfo.height); outputSurfaceInfo.height);
GlUtil.clearOutputFrame(); GlUtil.clearOutputFrame();
matrixTransformationProcessor.drawFrame(inputTexture.texId, presentationTimeUs); matrixTextureProcessor.drawFrame(inputTexture.texId, presentationTimeUs);
if (dropLateFrame && System.nanoTime() > releaseTimeNs) { if (dropLateFrame && System.nanoTime() > releaseTimeNs) {
return; return;
...@@ -291,7 +289,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -291,7 +289,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
} }
@EnsuresNonNullIf( @EnsuresNonNullIf(
expression = {"outputSurfaceInfo", "outputEglSurface", "matrixTransformationProcessor"}, expression = {"outputSurfaceInfo", "outputEglSurface", "matrixTextureProcessor"},
result = true) result = true)
private synchronized boolean ensureConfigured(int inputWidth, int inputHeight) private synchronized boolean ensureConfigured(int inputWidth, int inputHeight)
throws FrameProcessingException, GlUtil.GlException { throws FrameProcessingException, GlUtil.GlException {
...@@ -313,9 +311,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -313,9 +311,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
} }
if (outputSurfaceInfo == null) { if (outputSurfaceInfo == null) {
if (matrixTransformationProcessor != null) { if (matrixTextureProcessor != null) {
matrixTransformationProcessor.release(); matrixTextureProcessor.release();
matrixTransformationProcessor = null; matrixTextureProcessor = null;
} }
outputEglSurface = null; outputEglSurface = null;
return false; return false;
...@@ -342,14 +340,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -342,14 +340,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
this.debugSurfaceView = debugSurfaceView; this.debugSurfaceView = debugSurfaceView;
} }
if (matrixTransformationProcessor != null && outputSizeOrRotationChanged) { if (matrixTextureProcessor != null && outputSizeOrRotationChanged) {
matrixTransformationProcessor.release(); matrixTextureProcessor.release();
matrixTransformationProcessor = null; matrixTextureProcessor = null;
outputSizeOrRotationChanged = false; outputSizeOrRotationChanged = false;
} }
if (matrixTransformationProcessor == null) { if (matrixTextureProcessor == null) {
matrixTransformationProcessor = matrixTextureProcessor = createMatrixTextureProcessorForOutputSurface(outputSurfaceInfo);
createMatrixTransformationProcessorForOutputSurface(outputSurfaceInfo);
} }
this.outputSurfaceInfo = outputSurfaceInfo; this.outputSurfaceInfo = outputSurfaceInfo;
...@@ -357,7 +354,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -357,7 +354,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
return true; return true;
} }
private MatrixTransformationProcessor createMatrixTransformationProcessorForOutputSurface( private MatrixTextureProcessor createMatrixTextureProcessorForOutputSurface(
SurfaceInfo outputSurfaceInfo) throws FrameProcessingException { SurfaceInfo outputSurfaceInfo) throws FrameProcessingException {
ImmutableList.Builder<GlMatrixTransformation> matrixTransformationListBuilder = ImmutableList.Builder<GlMatrixTransformation> matrixTransformationListBuilder =
new ImmutableList.Builder<GlMatrixTransformation>().addAll(matrixTransformations); new ImmutableList.Builder<GlMatrixTransformation>().addAll(matrixTransformations);
...@@ -371,39 +368,37 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -371,39 +368,37 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
Presentation.createForWidthAndHeight( Presentation.createForWidthAndHeight(
outputSurfaceInfo.width, outputSurfaceInfo.height, Presentation.LAYOUT_SCALE_TO_FIT)); outputSurfaceInfo.width, outputSurfaceInfo.height, Presentation.LAYOUT_SCALE_TO_FIT));
MatrixTransformationProcessor matrixTransformationProcessor; MatrixTextureProcessor matrixTextureProcessor;
ImmutableList<GlMatrixTransformation> expandedMatrixTransformations = ImmutableList<GlMatrixTransformation> expandedMatrixTransformations =
matrixTransformationListBuilder.build(); matrixTransformationListBuilder.build();
if (sampleFromExternalTexture) { if (sampleFromExternalTexture) {
matrixTransformationProcessor = matrixTextureProcessor =
MatrixTransformationProcessor.createWithExternalSamplerApplyingEotfThenOetf( MatrixTextureProcessor.createWithExternalSamplerApplyingEotfThenOetf(
context, expandedMatrixTransformations, rgbMatrices, colorInfo); context, expandedMatrixTransformations, rgbMatrices, colorInfo);
} else { } else {
matrixTransformationProcessor = matrixTextureProcessor =
MatrixTransformationProcessor.createApplyingOetf( MatrixTextureProcessor.createApplyingOetf(
context, expandedMatrixTransformations, rgbMatrices, colorInfo); context, expandedMatrixTransformations, rgbMatrices, colorInfo);
} }
matrixTransformationProcessor.setTextureTransformMatrix(textureTransformMatrix); matrixTextureProcessor.setTextureTransformMatrix(textureTransformMatrix);
Pair<Integer, Integer> outputSize = Pair<Integer, Integer> outputSize = matrixTextureProcessor.configure(inputWidth, inputHeight);
matrixTransformationProcessor.configure(inputWidth, inputHeight);
checkState(outputSize.first == outputSurfaceInfo.width); checkState(outputSize.first == outputSurfaceInfo.width);
checkState(outputSize.second == outputSurfaceInfo.height); checkState(outputSize.second == outputSurfaceInfo.height);
return matrixTransformationProcessor; return matrixTextureProcessor;
} }
private void maybeRenderFrameToDebugSurface(TextureInfo inputTexture, long presentationTimeUs) { private void maybeRenderFrameToDebugSurface(TextureInfo inputTexture, long presentationTimeUs) {
if (debugSurfaceViewWrapper == null || matrixTransformationProcessor == null) { if (debugSurfaceViewWrapper == null || this.matrixTextureProcessor == null) {
return; return;
} }
MatrixTransformationProcessor matrixTransformationProcessor = MatrixTextureProcessor matrixTextureProcessor = this.matrixTextureProcessor;
this.matrixTransformationProcessor;
try { try {
debugSurfaceViewWrapper.maybeRenderToSurfaceView( debugSurfaceViewWrapper.maybeRenderToSurfaceView(
() -> { () -> {
GlUtil.clearOutputFrame(); GlUtil.clearOutputFrame();
matrixTransformationProcessor.drawFrame(inputTexture.texId, presentationTimeUs); matrixTextureProcessor.drawFrame(inputTexture.texId, presentationTimeUs);
}); });
} catch (FrameProcessingException | GlUtil.GlException e) { } catch (FrameProcessingException | GlUtil.GlException e) {
Log.d(TAG, "Error rendering to debug preview", e); Log.d(TAG, "Error rendering to debug preview", e);
......
...@@ -157,15 +157,15 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { ...@@ -157,15 +157,15 @@ public final class GlEffectsFrameProcessor implements FrameProcessor {
} }
/** /**
* Combines consecutive {@link GlMatrixTransformation} instances into a single {@link * Combines consecutive {@link GlMatrixTransformation} and {@link RgbMatrix} instances into a
* MatrixTransformationProcessor} and converts all other {@link GlEffect} instances to separate * single {@link MatrixTextureProcessor} and converts all other {@link GlEffect} instances to
* {@link GlTextureProcessor} instances. * separate {@link GlTextureProcessor} instances.
* *
* <p>All {@link Effect} instances must be {@link GlEffect} instances. * <p>All {@link Effect} instances must be {@link GlEffect} instances.
* *
* @return A non-empty list of {@link GlTextureProcessor} instances to apply in the given order. * @return A non-empty list of {@link GlTextureProcessor} instances to apply in the given order.
* The first is an {@link ExternalTextureProcessor} and the last is a {@link * The first is an {@link ExternalTextureProcessor} and the last is a {@link
* FinalMatrixTransformationProcessorWrapper}. * FinalMatrixTextureProcessorWrapper}.
*/ */
// TODO(b/239757183): Squash GlMatrixTransformation and RgbMatrix together. // TODO(b/239757183): Squash GlMatrixTransformation and RgbMatrix together.
private static ImmutableList<GlTextureProcessor> getGlTextureProcessorsForGlEffects( private static ImmutableList<GlTextureProcessor> getGlTextureProcessorsForGlEffects(
...@@ -204,17 +204,17 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { ...@@ -204,17 +204,17 @@ public final class GlEffectsFrameProcessor implements FrameProcessor {
matrixTransformationListBuilder.build(); matrixTransformationListBuilder.build();
ImmutableList<RgbMatrix> rgbMatrices = rgbMatrixListBuilder.build(); ImmutableList<RgbMatrix> rgbMatrices = rgbMatrixListBuilder.build();
if (!matrixTransformations.isEmpty() || !rgbMatrices.isEmpty() || sampleFromExternalTexture) { if (!matrixTransformations.isEmpty() || !rgbMatrices.isEmpty() || sampleFromExternalTexture) {
MatrixTransformationProcessor matrixTransformationProcessor; MatrixTextureProcessor matrixTextureProcessor;
if (sampleFromExternalTexture) { if (sampleFromExternalTexture) {
matrixTransformationProcessor = matrixTextureProcessor =
MatrixTransformationProcessor.createWithExternalSamplerApplyingEotf( MatrixTextureProcessor.createWithExternalSamplerApplyingEotf(
context, matrixTransformations, rgbMatrices, colorInfo); context, matrixTransformations, rgbMatrices, colorInfo);
} else { } else {
matrixTransformationProcessor = matrixTextureProcessor =
MatrixTransformationProcessor.create( MatrixTextureProcessor.create(
context, matrixTransformations, rgbMatrices, ColorInfo.isTransferHdr(colorInfo)); context, matrixTransformations, rgbMatrices, ColorInfo.isTransferHdr(colorInfo));
} }
textureProcessorListBuilder.add(matrixTransformationProcessor); textureProcessorListBuilder.add(matrixTextureProcessor);
matrixTransformationListBuilder = new ImmutableList.Builder<>(); matrixTransformationListBuilder = new ImmutableList.Builder<>();
rgbMatrixListBuilder = new ImmutableList.Builder<>(); rgbMatrixListBuilder = new ImmutableList.Builder<>();
sampleFromExternalTexture = false; sampleFromExternalTexture = false;
...@@ -224,7 +224,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { ...@@ -224,7 +224,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor {
} }
textureProcessorListBuilder.add( textureProcessorListBuilder.add(
new FinalMatrixTransformationProcessorWrapper( new FinalMatrixTextureProcessorWrapper(
context, context,
eglDisplay, eglDisplay,
eglContext, eglContext,
...@@ -269,7 +269,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { ...@@ -269,7 +269,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor {
private final ExternalTextureManager inputExternalTextureManager; private final ExternalTextureManager inputExternalTextureManager;
private final Surface inputSurface; private final Surface inputSurface;
private final boolean releaseFramesAutomatically; private final boolean releaseFramesAutomatically;
private final FinalMatrixTransformationProcessorWrapper finalTextureProcessorWrapper; private final FinalMatrixTextureProcessorWrapper finalTextureProcessorWrapper;
private final ImmutableList<GlTextureProcessor> allTextureProcessors; private final ImmutableList<GlTextureProcessor> allTextureProcessors;
private @MonotonicNonNull FrameInfo nextInputFrameInfo; private @MonotonicNonNull FrameInfo nextInputFrameInfo;
...@@ -295,15 +295,14 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { ...@@ -295,15 +295,14 @@ public final class GlEffectsFrameProcessor implements FrameProcessor {
checkState(!textureProcessors.isEmpty()); checkState(!textureProcessors.isEmpty());
checkState(textureProcessors.get(0) instanceof ExternalTextureProcessor); checkState(textureProcessors.get(0) instanceof ExternalTextureProcessor);
checkState(getLast(textureProcessors) instanceof FinalMatrixTransformationProcessorWrapper); checkState(getLast(textureProcessors) instanceof FinalMatrixTextureProcessorWrapper);
ExternalTextureProcessor inputExternalTextureProcessor = ExternalTextureProcessor inputExternalTextureProcessor =
(ExternalTextureProcessor) textureProcessors.get(0); (ExternalTextureProcessor) textureProcessors.get(0);
inputExternalTextureManager = inputExternalTextureManager =
new ExternalTextureManager(inputExternalTextureProcessor, frameProcessingTaskExecutor); new ExternalTextureManager(inputExternalTextureProcessor, frameProcessingTaskExecutor);
inputExternalTextureProcessor.setInputListener(inputExternalTextureManager); inputExternalTextureProcessor.setInputListener(inputExternalTextureManager);
inputSurface = new Surface(inputExternalTextureManager.getSurfaceTexture()); inputSurface = new Surface(inputExternalTextureManager.getSurfaceTexture());
finalTextureProcessorWrapper = finalTextureProcessorWrapper = (FinalMatrixTextureProcessorWrapper) getLast(textureProcessors);
(FinalMatrixTransformationProcessorWrapper) getLast(textureProcessors);
allTextureProcessors = textureProcessors; allTextureProcessors = textureProcessors;
previousStreamOffsetUs = C.TIME_UNSET; previousStreamOffsetUs = C.TIME_UNSET;
} }
......
...@@ -53,7 +53,7 @@ public interface GlMatrixTransformation extends GlEffect { ...@@ -53,7 +53,7 @@ public interface GlMatrixTransformation extends GlEffect {
@Override @Override
default SingleFrameGlTextureProcessor toGlTextureProcessor(Context context, boolean useHdr) default SingleFrameGlTextureProcessor toGlTextureProcessor(Context context, boolean useHdr)
throws FrameProcessingException { throws FrameProcessingException {
return MatrixTransformationProcessor.create( return MatrixTextureProcessor.create(
context, context,
/* matrixTransformations= */ ImmutableList.of(this), /* matrixTransformations= */ ImmutableList.of(this),
/* rgbMatrices= */ ImmutableList.of(), /* rgbMatrices= */ ImmutableList.of(),
......
...@@ -49,9 +49,8 @@ import java.util.List; ...@@ -49,9 +49,8 @@ import java.util.List;
* *
* <p>Can copy frames from an external texture and apply color transformations for HDR if needed. * <p>Can copy frames from an external texture and apply color transformations for HDR if needed.
*/ */
// TODO(b/239757183): Rename Matrix to a more generic name.
@SuppressWarnings("FunctionalInterfaceClash") // b/228192298 @SuppressWarnings("FunctionalInterfaceClash") // b/228192298
/* package */ final class MatrixTransformationProcessor extends SingleFrameGlTextureProcessor /* package */ final class MatrixTextureProcessor extends SingleFrameGlTextureProcessor
implements ExternalTextureProcessor { implements ExternalTextureProcessor {
private static final String VERTEX_SHADER_TRANSFORMATION_PATH = private static final String VERTEX_SHADER_TRANSFORMATION_PATH =
...@@ -140,7 +139,7 @@ import java.util.List; ...@@ -140,7 +139,7 @@ import java.util.List;
* @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL * @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL
* operation fails or is unsupported. * operation fails or is unsupported.
*/ */
public static MatrixTransformationProcessor create( public static MatrixTextureProcessor create(
Context context, Context context,
List<GlMatrixTransformation> matrixTransformations, List<GlMatrixTransformation> matrixTransformations,
List<RgbMatrix> rgbMatrices, List<RgbMatrix> rgbMatrices,
...@@ -151,7 +150,7 @@ import java.util.List; ...@@ -151,7 +150,7 @@ import java.util.List;
context, VERTEX_SHADER_TRANSFORMATION_PATH, FRAGMENT_SHADER_TRANSFORMATION_PATH); context, VERTEX_SHADER_TRANSFORMATION_PATH, FRAGMENT_SHADER_TRANSFORMATION_PATH);
// No transfer functions needed, because input and output are both optical colors. // No transfer functions needed, because input and output are both optical colors.
return new MatrixTransformationProcessor( return new MatrixTextureProcessor(
glProgram, glProgram,
ImmutableList.copyOf(matrixTransformations), ImmutableList.copyOf(matrixTransformations),
ImmutableList.copyOf(rgbMatrices), ImmutableList.copyOf(rgbMatrices),
...@@ -181,7 +180,7 @@ import java.util.List; ...@@ -181,7 +180,7 @@ import java.util.List;
* @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL * @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL
* operation fails or is unsupported. * operation fails or is unsupported.
*/ */
public static MatrixTransformationProcessor createWithExternalSamplerApplyingEotf( public static MatrixTextureProcessor createWithExternalSamplerApplyingEotf(
Context context, Context context,
List<GlMatrixTransformation> matrixTransformations, List<GlMatrixTransformation> matrixTransformations,
List<RgbMatrix> rgbMatrices, List<RgbMatrix> rgbMatrices,
...@@ -215,7 +214,7 @@ import java.util.List; ...@@ -215,7 +214,7 @@ import java.util.List;
glProgram.setIntUniform("uEotfColorTransfer", colorTransfer); glProgram.setIntUniform("uEotfColorTransfer", colorTransfer);
} }
return new MatrixTransformationProcessor( return new MatrixTextureProcessor(
glProgram, glProgram,
ImmutableList.copyOf(matrixTransformations), ImmutableList.copyOf(matrixTransformations),
ImmutableList.copyOf(rgbMatrices), ImmutableList.copyOf(rgbMatrices),
...@@ -241,7 +240,7 @@ import java.util.List; ...@@ -241,7 +240,7 @@ import java.util.List;
* @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL * @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL
* operation fails or is unsupported. * operation fails or is unsupported.
*/ */
public static MatrixTransformationProcessor createApplyingOetf( public static MatrixTextureProcessor createApplyingOetf(
Context context, Context context,
List<GlMatrixTransformation> matrixTransformations, List<GlMatrixTransformation> matrixTransformations,
List<RgbMatrix> rgbMatrices, List<RgbMatrix> rgbMatrices,
...@@ -262,7 +261,7 @@ import java.util.List; ...@@ -262,7 +261,7 @@ import java.util.List;
glProgram.setIntUniform("uOetfColorTransfer", colorTransfer); glProgram.setIntUniform("uOetfColorTransfer", colorTransfer);
} }
return new MatrixTransformationProcessor( return new MatrixTextureProcessor(
glProgram, glProgram,
ImmutableList.copyOf(matrixTransformations), ImmutableList.copyOf(matrixTransformations),
ImmutableList.copyOf(rgbMatrices), ImmutableList.copyOf(rgbMatrices),
...@@ -288,7 +287,7 @@ import java.util.List; ...@@ -288,7 +287,7 @@ import java.util.List;
* @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL * @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL
* operation fails or is unsupported. * operation fails or is unsupported.
*/ */
public static MatrixTransformationProcessor createWithExternalSamplerApplyingEotfThenOetf( public static MatrixTextureProcessor createWithExternalSamplerApplyingEotfThenOetf(
Context context, Context context,
List<GlMatrixTransformation> matrixTransformations, List<GlMatrixTransformation> matrixTransformations,
List<RgbMatrix> rgbMatrices, List<RgbMatrix> rgbMatrices,
...@@ -320,7 +319,7 @@ import java.util.List; ...@@ -320,7 +319,7 @@ import java.util.List;
glProgram.setIntUniform("uEotfColorTransfer", Format.NO_VALUE); glProgram.setIntUniform("uEotfColorTransfer", Format.NO_VALUE);
} }
return new MatrixTransformationProcessor( return new MatrixTextureProcessor(
glProgram, glProgram,
ImmutableList.copyOf(matrixTransformations), ImmutableList.copyOf(matrixTransformations),
ImmutableList.copyOf(rgbMatrices), ImmutableList.copyOf(rgbMatrices),
...@@ -338,7 +337,7 @@ import java.util.List; ...@@ -338,7 +337,7 @@ import java.util.List;
* @param useHdr Whether to process the input as an HDR signal. Using HDR requires the {@code * @param useHdr Whether to process the input as an HDR signal. Using HDR requires the {@code
* EXT_YUV_target} OpenGL extension. * EXT_YUV_target} OpenGL extension.
*/ */
private MatrixTransformationProcessor( private MatrixTextureProcessor(
GlProgram glProgram, GlProgram glProgram,
ImmutableList<GlMatrixTransformation> matrixTransformations, ImmutableList<GlMatrixTransformation> matrixTransformations,
ImmutableList<RgbMatrix> rgbMatrices, ImmutableList<RgbMatrix> rgbMatrices,
......
...@@ -89,7 +89,7 @@ public class RgbFilter implements RgbMatrix { ...@@ -89,7 +89,7 @@ public class RgbFilter implements RgbMatrix {
} }
@Override @Override
public MatrixTransformationProcessor toGlTextureProcessor(Context context, boolean useHdr) public MatrixTextureProcessor toGlTextureProcessor(Context context, boolean useHdr)
throws FrameProcessingException { throws FrameProcessingException {
checkForConsistentHdrSetting(useHdr); checkForConsistentHdrSetting(useHdr);
return RgbMatrix.super.toGlTextureProcessor(context, useHdr); return RgbMatrix.super.toGlTextureProcessor(context, useHdr);
......
...@@ -38,9 +38,9 @@ public interface RgbMatrix extends GlEffect { ...@@ -38,9 +38,9 @@ public interface RgbMatrix extends GlEffect {
float[] getMatrix(long presentationTimeUs, boolean useHdr); float[] getMatrix(long presentationTimeUs, boolean useHdr);
@Override @Override
default MatrixTransformationProcessor toGlTextureProcessor(Context context, boolean useHdr) default MatrixTextureProcessor toGlTextureProcessor(Context context, boolean useHdr)
throws FrameProcessingException { throws FrameProcessingException {
return MatrixTransformationProcessor.create( return MatrixTextureProcessor.create(
context, context,
/* matrixTransformations= */ ImmutableList.of(), /* matrixTransformations= */ ImmutableList.of(),
/* rgbMatrices= */ ImmutableList.of(this), /* rgbMatrices= */ ImmutableList.of(this),
......
...@@ -25,8 +25,8 @@ import org.junit.runner.RunWith; ...@@ -25,8 +25,8 @@ import org.junit.runner.RunWith;
/** /**
* Unit tests for {@link ScaleToFitTransformation}. * Unit tests for {@link ScaleToFitTransformation}.
* *
* <p>See {@code MatrixTransformationPixelTest} for pixel tests testing {@link * <p>See {@code MatrixTextureProcessorPixelTest} for pixel tests testing {@link
* MatrixTransformationProcessor} given a transformation matrix. * MatrixTextureProcessor} given a transformation matrix.
*/ */
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public final class ScaleToFitTransformationTest { public final class ScaleToFitTransformationTest {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment