summaryrefslogtreecommitdiff
path: root/media/jni/android_media_ImageReader.cpp
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2016-07-21 17:04:19 -0700
committerEino-Ville Talvala <etalvala@google.com>2016-07-21 17:04:19 -0700
commit2e2aaf6e0497302bc03c218949d29b01f469316e (patch)
tree6ca3ffc5494249812b53ed42163050b26d5813fb /media/jni/android_media_ImageReader.cpp
parent736a5af5044440f5abf67a822a20763ccc2da1b6 (diff)
ImageReader: Add discardFreeBuffers method
This method (currently @hide) discards all cached buffers for the ImageReader, which can be useful to free up memory at the cost of reallocationt time if more buffers are needed later. It has no effect on acquired Images, filled Images waiting to be acquired, or buffers being actively used by the source rendering to the Surface. Bug: 28695173 Change-Id: I427a8ba4ad73a267083f843dbf228bfc53a730d9
Diffstat (limited to 'media/jni/android_media_ImageReader.cpp')
-rw-r--r--media/jni/android_media_ImageReader.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index c3993ae20183..724fc02271e3 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -611,6 +611,23 @@ static jint ImageReader_detachImage(JNIEnv* env, jobject thiz, jobject image) {
return OK;
}
+static void ImageReader_discardFreeBuffers(JNIEnv* env, jobject thiz) {
+ ALOGV("%s:", __FUNCTION__);
+ JNIImageReaderContext* ctx = ImageReader_getContext(env, thiz);
+ if (ctx == NULL) {
+ jniThrowException(env, "java/lang/IllegalStateException", "ImageReader was already closed");
+ return;
+ }
+
+ BufferItemConsumer* bufferConsumer = ctx->getBufferConsumer();
+ status_t res = bufferConsumer->discardFreeBuffers();
+ if (res != OK) {
+ ALOGE("Buffer discard failed: %s (%d)", strerror(-res), res);
+ jniThrowRuntimeException(env,
+ "nativeDicardFreebuffers failed");
+ }
+}
+
static jobject ImageReader_getSurface(JNIEnv* env, jobject thiz)
{
ALOGV("%s: ", __FUNCTION__);
@@ -773,6 +790,7 @@ static const JNINativeMethod gImageReaderMethods[] = {
{"nativeImageSetup", "(Landroid/media/Image;)I", (void*)ImageReader_imageSetup },
{"nativeGetSurface", "()Landroid/view/Surface;", (void*)ImageReader_getSurface },
{"nativeDetachImage", "(Landroid/media/Image;)I", (void*)ImageReader_detachImage },
+ {"nativeDiscardFreeBuffers", "()V", (void*)ImageReader_discardFreeBuffers }
};
static const JNINativeMethod gImageMethods[] = {