From 5fdea8d5b0a015433e01849a6c862c147e16346c Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Wed, 20 Jan 2010 14:31:53 -0800 Subject: 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. --- libs/surfaceflinger/LayerBuffer.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libs/surfaceflinger/LayerBuffer.cpp') diff --git a/libs/surfaceflinger/LayerBuffer.cpp b/libs/surfaceflinger/LayerBuffer.cpp index 1dbfe34892..091856f9dc 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) { -- cgit v1.2.3-59-g8ed1b