From 91a6826d6794c19cdedfa58c42f8820c5cf5fe2b Mon Sep 17 00:00:00 2001 From: Jamie Gennis Date: Mon, 16 Apr 2012 13:41:05 -0700 Subject: [PATCH 1/2] SurfaceTexture: shrink all sides when cropping This change makes SurfaceTexture include an offset for all sides of the crop region when cropping. This keeps the image centered, to minimize the visual changes when switching between the texture transform matrix-based cropping and something that does proper cropping (e.g. HWComposer). Change-Id: I541d3046fd92e49221b488444df36d490924d1c5 --- libs/gui/SurfaceTexture.cpp | 32 ++++++-------------- libs/gui/tests/SurfaceTextureClient_test.cpp | 6 ++-- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp index 0fa9ca1ed..ed1ea4ec5 100644 --- a/libs/gui/SurfaceTexture.cpp +++ b/libs/gui/SurfaceTexture.cpp @@ -542,28 +542,16 @@ void SurfaceTexture::computeCurrentTransformMatrix() { // decoder, camera, etc.) would simply not use a crop rectangle (or at // least not tell the framework about it) so that the GPU can do the // correct edge behavior. - int xshrink = 0, yshrink = 0; - if (mCurrentCrop.left > 0) { - tx = float(mCurrentCrop.left + 1) / float(buf->getWidth()); - xshrink++; - } else { - tx = 0.0f; - } - if (mCurrentCrop.right < int32_t(buf->getWidth())) { - xshrink++; - } - if (mCurrentCrop.bottom < int32_t(buf->getHeight())) { - ty = (float(buf->getHeight() - mCurrentCrop.bottom) + 1.0f) / - float(buf->getHeight()); - yshrink++; - } else { - ty = 0.0f; - } - if (mCurrentCrop.top > 0) { - yshrink++; - } - sx = float(mCurrentCrop.width() - xshrink) / float(buf->getWidth()); - sy = float(mCurrentCrop.height() - yshrink) / float(buf->getHeight()); + const float shrinkAmount = 1.0f; // the amount that each edge is shrunk + + tx = (float(mCurrentCrop.left) + shrinkAmount) / + float(buf->getWidth()); + ty = (float(buf->getHeight() - mCurrentCrop.bottom) + + shrinkAmount) / float(buf->getHeight()); + sx = (float(mCurrentCrop.width()) - (2.0f * shrinkAmount)) / + float(buf->getWidth()); + sy = (float(mCurrentCrop.height()) - (2.0f * shrinkAmount)) / + float(buf->getHeight()); } else { tx = 0.0f; ty = 0.0f; diff --git a/libs/gui/tests/SurfaceTextureClient_test.cpp b/libs/gui/tests/SurfaceTextureClient_test.cpp index aa1f94e65..b576ca573 100644 --- a/libs/gui/tests/SurfaceTextureClient_test.cpp +++ b/libs/gui/tests/SurfaceTextureClient_test.cpp @@ -580,13 +580,13 @@ TEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffersWi // This accounts for the 1 texel shrink for each edge that's included in the // transform matrix to avoid texturing outside the crop region. - EXPECT_EQ(.5f, mtx[0]); + EXPECT_EQ(.375f, mtx[0]); EXPECT_EQ(0.f, mtx[1]); EXPECT_EQ(0.f, mtx[2]); EXPECT_EQ(0.f, mtx[3]); EXPECT_EQ(0.f, mtx[4]); - EXPECT_EQ(-.5f, mtx[5]); + EXPECT_EQ(-.375f, mtx[5]); EXPECT_EQ(0.f, mtx[6]); EXPECT_EQ(0.f, mtx[7]); @@ -595,7 +595,7 @@ TEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffersWi EXPECT_EQ(1.f, mtx[10]); EXPECT_EQ(0.f, mtx[11]); - EXPECT_EQ(0.f, mtx[12]); + EXPECT_EQ(.125f, mtx[12]); EXPECT_EQ(.5f, mtx[13]); EXPECT_EQ(0.f, mtx[14]); EXPECT_EQ(1.f, mtx[15]); From 695e331f01b136155b1559b3c878b7c5bb631bc1 Mon Sep 17 00:00:00 2001 From: Jamie Gennis Date: Mon, 16 Apr 2012 20:34:58 -0700 Subject: [PATCH 2/2] BufferQueue: check before tracing buffer index This change adds a check on ATRACE_ENABLED before calling snprintf to trace the buffer index. Change-Id: Id79430f9c69706393efd3d10780a4cc97055e9e0 --- libs/gui/BufferQueue.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp index 01d08b70d..ece04944b 100644 --- a/libs/gui/BufferQueue.cpp +++ b/libs/gui/BufferQueue.cpp @@ -57,9 +57,12 @@ #define ST_LOGE(x, ...) ALOGE("[%s] "x, mConsumerName.string(), ##__VA_ARGS__) #define ATRACE_BUFFER_INDEX(index) \ - char ___traceBuf[1024]; \ - snprintf(___traceBuf, 1024, "%s: %d", mConsumerName.string(), (index)); \ - android::ScopedTrace ___bufTracer(ATRACE_TAG, ___traceBuf); + if (ATRACE_ENABLED()) { \ + char ___traceBuf[1024]; \ + snprintf(___traceBuf, 1024, "%s: %d", mConsumerName.string(), \ + (index)); \ + android::ScopedTrace ___bufTracer(ATRACE_TAG, ___traceBuf); \ + } namespace android {