summaryrefslogtreecommitdiffstats
path: root/libs/surfaceflinger/LayerBuffer.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2010-01-20 14:31:53 -0800
committerMathias Agopian <mathias@google.com>2010-01-20 14:31:53 -0800
commit5fdea8d5b0a015433e01849a6c862c147e16346c (patch)
treeaa64093317df178cde7b8252e600039826e7f7bd /libs/surfaceflinger/LayerBuffer.cpp
parentecc99c003b4aca7d7d2f268f927558db4cbddfe1 (diff)
downloadframeworks_native-5fdea8d5b0a015433e01849a6c862c147e16346c.zip
frameworks_native-5fdea8d5b0a015433e01849a6c862c147e16346c.tar.gz
frameworks_native-5fdea8d5b0a015433e01849a6c862c147e16346c.tar.bz2
fix [2363362] [Sapphire] Corrupted raw picture displayed during snapshot
handled all cases where the scale factor of a video is out of bounds of supported scale factors in copybit.
Diffstat (limited to 'libs/surfaceflinger/LayerBuffer.cpp')
-rw-r--r--libs/surfaceflinger/LayerBuffer.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/libs/surfaceflinger/LayerBuffer.cpp b/libs/surfaceflinger/LayerBuffer.cpp
index 1dbfe34..091856f 100644
--- a/libs/surfaceflinger/LayerBuffer.cpp
+++ b/libs/surfaceflinger/LayerBuffer.cpp
@@ -503,6 +503,16 @@ status_t LayerBuffer::BufferSource::initTempBuffer() const
int t = w; w = h; h = t;
}
+ // we're in the copybit case, so make sure we can handle this blit
+ // we don't have to keep the aspect ratio here
+ copybit_device_t* copybit = mLayer.mBlitEngine;
+ const int down = copybit->get(copybit, COPYBIT_MINIFICATION_LIMIT);
+ const int up = copybit->get(copybit, COPYBIT_MAGNIFICATION_LIMIT);
+ if (buffers.w > w*down) w = buffers.w / down;
+ else if (w > buffers.w*up) w = buffers.w*up;
+ if (buffers.h > h*down) h = buffers.h / down;
+ else if (h > buffers.h*up) h = buffers.h*up;
+
if (mTexture.image != EGL_NO_IMAGE_KHR) {
// we have an EGLImage, make sure the needed size didn't change
if (w!=mTexture.width || h!= mTexture.height) {