summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPannag Sanketi <psanketi@google.com>2012-05-17 19:29:33 -0700
committerPannag Sanketi <psanketi@google.com>2012-05-17 19:29:33 -0700
commitb5af71f2b108607149032ce9817c5897b67b4032 (patch)
tree1f4ddf2e038592280f8f4bc6aeaecf6a4adddc7b
parent2411c3361eb2c15b09a8bfadf5c7c4a3de092ea0 (diff)
downloadframeworks_base-b5af71f2b108607149032ce9817c5897b67b4032.zip
frameworks_base-b5af71f2b108607149032ce9817c5897b67b4032.tar.gz
frameworks_base-b5af71f2b108607149032ce9817c5897b67b4032.tar.bz2
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
-rw-r--r--media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java2
-rw-r--r--media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java18
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 3657d8a..d8aa40f 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 b023e42..674a2bd 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);
}
}