From b5af71f2b108607149032ce9817c5897b67b4032 Mon Sep 17 00:00:00 2001 From: Pannag Sanketi Date: Thu, 17 May 2012 19:29:33 -0700 Subject: [PATCH] Fixing the weird preview size w/ effects on camera The aspect ratio sent from the camera app to the SurfaceTextureTarget filter does not really matter now since the camera app handles the re-sizing. Hence, the SurfaceTextureTarget filter needs to be render in "stretch" mode all the time even though the aspect ratio sent to the filter might indicate otherwise. The filter still needs the correct frame size for things other than determining aspect ratio. Fix b/6430124 Change-Id: Ie7fa5cd2adf2a8d41e6e005418f6c6fd738ed85d --- .../videosink/MediaEncoderFilter.java | 2 -- .../videosrc/SurfaceTextureTarget.java | 18 +++++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java b/media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java index 3657d8a41c53d..d8aa40f928894 100644 --- a/media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java +++ b/media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java @@ -376,8 +376,6 @@ public class MediaEncoderFilter extends Filter { @Override public void process(FilterContext context) { - if (mLogVerbose) Log.v(TAG, "Starting frame processing"); - GLEnvironment glEnv = context.getGLEnvironment(); // Get input frame Frame input = pullInput("videoframe"); diff --git a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java index b023e4295ec0f..674a2bdcb5392 100644 --- a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java +++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java @@ -121,6 +121,7 @@ public class SurfaceTextureTarget extends Filter { } public void updateRenderMode() { + if (mLogVerbose) Log.v(TAG, "updateRenderMode. Thread: " + Thread.currentThread()); if (mRenderModeString != null) { if (mRenderModeString.equals("stretch")) { mRenderMode = RENDERMODE_STRETCH; @@ -139,6 +140,7 @@ public class SurfaceTextureTarget extends Filter { @Override public void prepare(FilterContext context) { + if (mLogVerbose) Log.v(TAG, "Prepare. Thread: " + Thread.currentThread()); // Create identity shader to render, and make sure to render upside-down, as textures // are stored internally bottom-to-top. mProgram = ShaderProgram.createIdentity(context); @@ -214,8 +216,10 @@ public class SurfaceTextureTarget extends Filter { float currentAspectRatio = (float)input.getFormat().getWidth() / input.getFormat().getHeight(); if (currentAspectRatio != mAspectRatio) { - if (mLogVerbose) Log.v(TAG, "New aspect ratio: " + currentAspectRatio + - ", previously: " + mAspectRatio); + if (mLogVerbose) { + Log.v(TAG, "Process. New aspect ratio: " + currentAspectRatio + + ", previously: " + mAspectRatio + ". Thread: " + Thread.currentThread()); + } mAspectRatio = currentAspectRatio; updateTargetRect(); } @@ -249,6 +253,7 @@ public class SurfaceTextureTarget extends Filter { @Override public void fieldPortValueUpdated(String name, FilterContext context) { + if (mLogVerbose) Log.v(TAG, "FPVU. Thread: " + Thread.currentThread()); updateRenderMode(); } @@ -260,16 +265,22 @@ public class SurfaceTextureTarget extends Filter { } private void updateTargetRect() { + if (mLogVerbose) Log.v(TAG, "updateTargetRect. Thread: " + Thread.currentThread()); if (mScreenWidth > 0 && mScreenHeight > 0 && mProgram != null) { float screenAspectRatio = (float)mScreenWidth / mScreenHeight; float relativeAspectRatio = screenAspectRatio / mAspectRatio; + if (mLogVerbose) { + Log.v(TAG, "UTR. screen w = " + (float)mScreenWidth + " x screen h = " + + (float)mScreenHeight + " Screen AR: " + screenAspectRatio + + ", frame AR: " + mAspectRatio + ", relative AR: " + relativeAspectRatio); + } if (relativeAspectRatio == 1.0f && mRenderMode != RENDERMODE_CUSTOMIZE) { + mProgram.setTargetRect(0, 0, 1, 1); mProgram.setClearsOutput(false); } else { switch (mRenderMode) { case RENDERMODE_STRETCH: - mProgram.setTargetRect(0, 0, 1, 1); mTargetQuad.p0.set(0f, 0.0f); mTargetQuad.p1.set(1f, 0.0f); mTargetQuad.p2.set(0f, 1.0f); @@ -313,6 +324,7 @@ public class SurfaceTextureTarget extends Filter { ((ShaderProgram) mProgram).setSourceRegion(mSourceQuad); break; } + if (mLogVerbose) Log.v(TAG, "UTR. quad: " + mTargetQuad); ((ShaderProgram) mProgram).setTargetRegion(mTargetQuad); } }