summaryrefslogtreecommitdiffstats
path: root/libs/gui/Surface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/gui/Surface.cpp')
-rw-r--r--libs/gui/Surface.cpp119
1 files changed, 61 insertions, 58 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index aa4aee4..ab984de 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -193,17 +193,17 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) {
ATRACE_CALL();
ALOGV("Surface::dequeueBuffer");
- uint32_t reqWidth;
- uint32_t reqHeight;
+ int reqW;
+ int reqH;
bool swapIntervalZero;
- PixelFormat reqFormat;
+ uint32_t reqFormat;
uint32_t reqUsage;
{
Mutex::Autolock lock(mMutex);
- reqWidth = mReqWidth ? mReqWidth : mUserWidth;
- reqHeight = mReqHeight ? mReqHeight : mUserHeight;
+ reqW = mReqWidth ? mReqWidth : mUserWidth;
+ reqH = mReqHeight ? mReqHeight : mUserHeight;
swapIntervalZero = mSwapIntervalZero;
reqFormat = mReqFormat;
@@ -213,12 +213,12 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) {
int buf = -1;
sp<Fence> fence;
status_t result = mGraphicBufferProducer->dequeueBuffer(&buf, &fence, swapIntervalZero,
- reqWidth, reqHeight, reqFormat, reqUsage);
+ reqW, reqH, reqFormat, reqUsage);
if (result < 0) {
ALOGV("dequeueBuffer: IGraphicBufferProducer::dequeueBuffer(%d, %d, %d, %d, %d)"
- "failed: %d", swapIntervalZero, reqWidth, reqHeight, reqFormat,
- reqUsage, result);
+ "failed: %d", swapIntervalZero, reqW, reqH, reqFormat, reqUsage,
+ result);
return result;
}
@@ -346,7 +346,7 @@ int Surface::query(int what, int* value) const {
switch (what) {
case NATIVE_WINDOW_FORMAT:
if (mReqFormat) {
- *value = static_cast<int>(mReqFormat);
+ *value = mReqFormat;
return NO_ERROR;
}
break;
@@ -364,15 +364,13 @@ int Surface::query(int what, int* value) const {
*value = NATIVE_WINDOW_SURFACE;
return NO_ERROR;
case NATIVE_WINDOW_DEFAULT_WIDTH:
- *value = static_cast<int>(
- mUserWidth ? mUserWidth : mDefaultWidth);
+ *value = mUserWidth ? mUserWidth : mDefaultWidth;
return NO_ERROR;
case NATIVE_WINDOW_DEFAULT_HEIGHT:
- *value = static_cast<int>(
- mUserHeight ? mUserHeight : mDefaultHeight);
+ *value = mUserHeight ? mUserHeight : mDefaultHeight;
return NO_ERROR;
case NATIVE_WINDOW_TRANSFORM_HINT:
- *value = static_cast<int>(mTransformHint);
+ *value = mTransformHint;
return NO_ERROR;
case NATIVE_WINDOW_CONSUMER_RUNNING_BEHIND: {
status_t err = NO_ERROR;
@@ -468,7 +466,7 @@ int Surface::dispatchDisconnect(va_list args) {
int Surface::dispatchSetUsage(va_list args) {
int usage = va_arg(args, int);
- return setUsage(static_cast<uint32_t>(usage));
+ return setUsage(usage);
}
int Surface::dispatchSetCrop(va_list args) {
@@ -478,49 +476,49 @@ int Surface::dispatchSetCrop(va_list args) {
int Surface::dispatchSetBufferCount(va_list args) {
size_t bufferCount = va_arg(args, size_t);
- return setBufferCount(static_cast<int32_t>(bufferCount));
+ return setBufferCount(bufferCount);
}
int Surface::dispatchSetBuffersGeometry(va_list args) {
- uint32_t width = va_arg(args, uint32_t);
- uint32_t height = va_arg(args, uint32_t);
- PixelFormat format = va_arg(args, PixelFormat);
- int err = setBuffersDimensions(width, height);
+ int w = va_arg(args, int);
+ int h = va_arg(args, int);
+ int f = va_arg(args, int);
+ int err = setBuffersDimensions(w, h);
if (err != 0) {
return err;
}
- return setBuffersFormat(format);
+ return setBuffersFormat(f);
}
int Surface::dispatchSetBuffersDimensions(va_list args) {
- uint32_t width = va_arg(args, uint32_t);
- uint32_t height = va_arg(args, uint32_t);
- return setBuffersDimensions(width, height);
+ int w = va_arg(args, int);
+ int h = va_arg(args, int);
+ return setBuffersDimensions(w, h);
}
int Surface::dispatchSetBuffersUserDimensions(va_list args) {
- uint32_t width = va_arg(args, uint32_t);
- uint32_t height = va_arg(args, uint32_t);
- return setBuffersUserDimensions(width, height);
+ int w = va_arg(args, int);
+ int h = va_arg(args, int);
+ return setBuffersUserDimensions(w, h);
}
int Surface::dispatchSetBuffersFormat(va_list args) {
- PixelFormat format = va_arg(args, PixelFormat);
- return setBuffersFormat(format);
+ int f = va_arg(args, int);
+ return setBuffersFormat(f);
}
int Surface::dispatchSetScalingMode(va_list args) {
- int mode = va_arg(args, int);
- return setScalingMode(mode);
+ int m = va_arg(args, int);
+ return setScalingMode(m);
}
int Surface::dispatchSetBuffersTransform(va_list args) {
- uint32_t transform = va_arg(args, uint32_t);
+ int transform = va_arg(args, int);
return setBuffersTransform(transform);
}
int Surface::dispatchSetBuffersStickyTransform(va_list args) {
- uint32_t transform = va_arg(args, uint32_t);
+ int transform = va_arg(args, int);
return setBuffersStickyTransform(transform);
}
@@ -640,38 +638,47 @@ int Surface::setBufferCount(int bufferCount)
return err;
}
-int Surface::setBuffersDimensions(uint32_t width, uint32_t height)
+int Surface::setBuffersDimensions(int w, int h)
{
ATRACE_CALL();
ALOGV("Surface::setBuffersDimensions");
- if ((width && !height) || (!width && height))
+ if (w<0 || h<0)
+ return BAD_VALUE;
+
+ if ((w && !h) || (!w && h))
return BAD_VALUE;
Mutex::Autolock lock(mMutex);
- mReqWidth = width;
- mReqHeight = height;
+ mReqWidth = w;
+ mReqHeight = h;
return NO_ERROR;
}
-int Surface::setBuffersUserDimensions(uint32_t width, uint32_t height)
+int Surface::setBuffersUserDimensions(int w, int h)
{
ATRACE_CALL();
ALOGV("Surface::setBuffersUserDimensions");
- if ((width && !height) || (!width && height))
+ if (w<0 || h<0)
+ return BAD_VALUE;
+
+ if ((w && !h) || (!w && h))
return BAD_VALUE;
Mutex::Autolock lock(mMutex);
- mUserWidth = width;
- mUserHeight = height;
+ mUserWidth = w;
+ mUserHeight = h;
return NO_ERROR;
}
-int Surface::setBuffersFormat(PixelFormat format)
+int Surface::setBuffersFormat(int format)
{
ALOGV("Surface::setBuffersFormat");
+ if (format<0)
+ return BAD_VALUE;
+
Mutex::Autolock lock(mMutex);
mReqFormat = format;
return NO_ERROR;
@@ -697,7 +704,7 @@ int Surface::setScalingMode(int mode)
return NO_ERROR;
}
-int Surface::setBuffersTransform(uint32_t transform)
+int Surface::setBuffersTransform(int transform)
{
ATRACE_CALL();
ALOGV("Surface::setBuffersTransform");
@@ -706,7 +713,7 @@ int Surface::setBuffersTransform(uint32_t transform)
return NO_ERROR;
}
-int Surface::setBuffersStickyTransform(uint32_t transform)
+int Surface::setBuffersStickyTransform(int transform)
{
ATRACE_CALL();
ALOGV("Surface::setBuffersStickyTransform");
@@ -740,34 +747,30 @@ static status_t copyBlt(
// src and dst with, height and format must be identical. no verification
// is done here.
status_t err;
- uint8_t* src_bits = NULL;
- err = src->lock(GRALLOC_USAGE_SW_READ_OFTEN, reg.bounds(),
- reinterpret_cast<void**>(&src_bits));
+ uint8_t const * src_bits = NULL;
+ err = src->lock(GRALLOC_USAGE_SW_READ_OFTEN, reg.bounds(), (void**)&src_bits);
ALOGE_IF(err, "error locking src buffer %s", strerror(-err));
uint8_t* dst_bits = NULL;
- err = dst->lock(GRALLOC_USAGE_SW_WRITE_OFTEN, reg.bounds(),
- reinterpret_cast<void**>(&dst_bits));
+ err = dst->lock(GRALLOC_USAGE_SW_WRITE_OFTEN, reg.bounds(), (void**)&dst_bits);
ALOGE_IF(err, "error locking dst buffer %s", strerror(-err));
Region::const_iterator head(reg.begin());
Region::const_iterator tail(reg.end());
if (head != tail && src_bits && dst_bits) {
const size_t bpp = bytesPerPixel(src->format);
- const size_t dbpr = static_cast<uint32_t>(dst->stride) * bpp;
- const size_t sbpr = static_cast<uint32_t>(src->stride) * bpp;
+ const size_t dbpr = dst->stride * bpp;
+ const size_t sbpr = src->stride * bpp;
while (head != tail) {
const Rect& r(*head++);
- int32_t h = r.height();
+ ssize_t h = r.height();
if (h <= 0) continue;
- size_t size = static_cast<uint32_t>(r.width()) * bpp;
- uint8_t const * s = src_bits +
- static_cast<uint32_t>(r.left + src->stride * r.top) * bpp;
- uint8_t * d = dst_bits +
- static_cast<uint32_t>(r.left + dst->stride * r.top) * bpp;
+ size_t size = r.width() * bpp;
+ uint8_t const * s = src_bits + (r.left + src->stride * r.top) * bpp;
+ uint8_t * d = dst_bits + (r.left + dst->stride * r.top) * bpp;
if (dbpr==sbpr && size==sbpr) {
- size *= static_cast<size_t>(h);
+ size *= h;
h = 1;
}
do {