summaryrefslogtreecommitdiffstats
path: root/libs/surfaceflinger_client
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2010-05-21 14:19:50 -0700
committerMathias Agopian <mathias@google.com>2010-05-21 14:34:32 -0700
commit25f0bdaea6d1a34aae3faf6688cad4fbebcca969 (patch)
tree8600372f2cb6f54254d2c7e0f7018c039e07c4b6 /libs/surfaceflinger_client
parent4f5f2786b2c850ad0d772c7707ddbe55c3b7adf6 (diff)
downloadframeworks_base-25f0bdaea6d1a34aae3faf6688cad4fbebcca969.zip
frameworks_base-25f0bdaea6d1a34aae3faf6688cad4fbebcca969.tar.gz
frameworks_base-25f0bdaea6d1a34aae3faf6688cad4fbebcca969.tar.bz2
added native_window_set_buffer_count()
this method can be used to change the number of buffers associated to a native window. the default is two. Change-Id: I608b959e6b29d77f95edb23c31dc9b099a758f2f
Diffstat (limited to 'libs/surfaceflinger_client')
-rw-r--r--libs/surfaceflinger_client/SharedBufferStack.cpp3
-rw-r--r--libs/surfaceflinger_client/Surface.cpp9
2 files changed, 11 insertions, 1 deletions
diff --git a/libs/surfaceflinger_client/SharedBufferStack.cpp b/libs/surfaceflinger_client/SharedBufferStack.cpp
index 5deeabb..e2e1591 100644
--- a/libs/surfaceflinger_client/SharedBufferStack.cpp
+++ b/libs/surfaceflinger_client/SharedBufferStack.cpp
@@ -463,6 +463,9 @@ status_t SharedBufferClient::setBufferCount(
if (uint32_t(bufferCount) >= SharedBufferStack::NUM_BUFFER_MAX)
return BAD_VALUE;
+ if (uint32_t(bufferCount) < SharedBufferStack::NUM_BUFFER_MIN)
+ return BAD_VALUE;
+
RWLock::AutoWLock _wr(mLock);
status_t err = ipc(bufferCount);
diff --git a/libs/surfaceflinger_client/Surface.cpp b/libs/surfaceflinger_client/Surface.cpp
index 4d5c0b6..5f42af0 100644
--- a/libs/surfaceflinger_client/Surface.cpp
+++ b/libs/surfaceflinger_client/Surface.cpp
@@ -584,6 +584,9 @@ int Surface::perform(int operation, va_list args)
case NATIVE_WINDOW_SET_CROP:
res = dispatch_crop( args );
break;
+ case NATIVE_WINDOW_SET_BUFFER_COUNT:
+ res = dispatch_set_buffer_count( args );
+ break;
default:
res = NAME_NOT_FOUND;
break;
@@ -607,6 +610,10 @@ int Surface::dispatch_crop(va_list args) {
android_native_rect_t const* rect = va_arg(args, android_native_rect_t*);
return crop( reinterpret_cast<Rect const*>(rect) );
}
+int Surface::dispatch_set_buffer_count(va_list args) {
+ size_t bufferCount = va_arg(args, size_t);
+ return setBufferCount(bufferCount);
+}
void Surface::setUsage(uint32_t reqUsage)
@@ -856,7 +863,7 @@ status_t Surface::getBufferLocked(int index, int usage)
currentBuffer->setIndex(index);
}
} else {
- err = err<0 ? err : NO_MEMORY;
+ err = err<0 ? err : status_t(NO_MEMORY);
}
}
return err;