Loading core/jni/android_graphics_SurfaceTexture.cpp +33 −4 Original line number Diff line number Diff line Loading @@ -256,9 +256,21 @@ static void SurfaceTexture_classInit(JNIEnv* env, jclass clazz) } } static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jboolean isDetached, jint texName, jboolean singleBufferMode, jobject weakThiz) { static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jboolean isDetached, jint texName, jboolean singleBufferMode, jobject weakThiz) { #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) sp<SurfaceTexture> surfaceTexture; if (isDetached) { surfaceTexture = new SurfaceTexture(GL_TEXTURE_EXTERNAL_OES, true, !singleBufferMode); } else { surfaceTexture = new SurfaceTexture(texName, GL_TEXTURE_EXTERNAL_OES, true, !singleBufferMode); } if (singleBufferMode) { surfaceTexture->setMaxBufferCount(1); } #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -275,6 +287,7 @@ static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jboolean isDetached, surfaceTexture = new SurfaceTexture(consumer, texName, GL_TEXTURE_EXTERNAL_OES, true, !singleBufferMode); } #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) if (surfaceTexture == 0) { jniThrowException(env, OutOfResourcesException, Loading @@ -287,11 +300,27 @@ static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jboolean isDetached, createProcessUniqueId())); // If the current context is protected, inform the producer. #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) surfaceTexture->setConsumerIsProtected(isProtectedContext()); SurfaceTexture_setSurfaceTexture(env, thiz, surfaceTexture); sp<Surface> surface = surfaceTexture->getSurface(); if (nullptr == surface) { jniThrowException(env, IllegalStateException, "Unable to get surface from SurfaceTexture"); return; } sp<IGraphicBufferProducer> igbp = surface->getIGraphicBufferProducer(); if (nullptr == igbp) { jniThrowException(env, IllegalStateException, "Unable to get IGBP from Surface"); return; } SurfaceTexture_setProducer(env, thiz, igbp); #else consumer->setConsumerIsProtected(isProtectedContext()); SurfaceTexture_setSurfaceTexture(env, thiz, surfaceTexture); SurfaceTexture_setProducer(env, thiz, producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) jclass clazz = env->GetObjectClass(thiz); if (clazz == NULL) { jniThrowRuntimeException(env, Loading libs/hwui/tests/common/TestContext.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include "tests/common/TestContext.h" #include <com_android_graphics_libgui_flags.h> #include <cutils/trace.h> namespace android { Loading Loading @@ -101,6 +102,14 @@ void TestContext::createWindowSurface() { } void TestContext::createOffscreenSurface() { #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mConsumer = new BufferItemConsumer(GRALLOC_USAGE_HW_COMPOSER, 4); const ui::Size& resolution = getActiveDisplayResolution(); mConsumer->setDefaultBufferSize(resolution.getWidth(), resolution.getHeight()); mSurface = mConsumer->getSurface(); mSurface->setMaxDequeuedBufferCount(3); mSurface->setAsyncMode(true); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -110,6 +119,7 @@ void TestContext::createOffscreenSurface() { const ui::Size& resolution = getActiveDisplayResolution(); mConsumer->setDefaultBufferSize(resolution.getWidth(), resolution.getHeight()); mSurface = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } void TestContext::waitForVsync() { Loading media/jni/android_media_ImageReader.cpp +32 −25 Original line number Diff line number Diff line Loading @@ -17,35 +17,31 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "ImageReader_JNI" #define ATRACE_TAG ATRACE_TAG_CAMERA #include "android_media_Utils.h" #include <cutils/atomic.h> #include <utils/Log.h> #include <utils/misc.h> #include <utils/List.h> #include <utils/Trace.h> #include <utils/String8.h> #include <cstdio> #include <gui/BufferItemConsumer.h> #include <gui/Surface.h> #include <android/hardware_buffer_jni.h> #include <android_runtime/AndroidRuntime.h> #include <android_runtime/android_view_Surface.h> #include <android_runtime/android_graphics_GraphicBuffer.h> #include <android_runtime/android_hardware_HardwareBuffer.h> #include <android_runtime/android_view_Surface.h> #include <com_android_graphics_libgui_flags.h> #include <cutils/atomic.h> #include <grallocusage/GrallocUsageConversion.h> #include <private/android/AHardwareBufferHelpers.h> #include <gui/BufferItemConsumer.h> #include <gui/Surface.h> #include <inttypes.h> #include <jni.h> #include <nativehelper/JNIHelp.h> #include <private/android/AHardwareBufferHelpers.h> #include <stdint.h> #include <inttypes.h> #include <android/hardware_buffer_jni.h> #include <ui/Rect.h> #include <utils/List.h> #include <utils/Log.h> #include <utils/String8.h> #include <utils/Trace.h> #include <utils/misc.h> #include <cstdio> #include "android_media_Utils.h" #define ANDROID_MEDIA_IMAGEREADER_CTX_JNI_ID "mNativeContext" #define ANDROID_MEDIA_SURFACEIMAGE_BUFFER_JNI_ID "mNativeBuffer" Loading Loading @@ -393,18 +389,25 @@ static void ImageReader_init(JNIEnv* env, jobject thiz, jobject weakThiz, jint w } sp<JNIImageReaderContext> ctx(new JNIImageReaderContext(env, weakThiz, clazz, maxImages)); sp<IGraphicBufferProducer> gbProducer; sp<IGraphicBufferConsumer> gbConsumer; BufferQueue::createBufferQueue(&gbProducer, &gbConsumer); sp<BufferItemConsumer> bufferConsumer; String8 consumerName = String8::format("ImageReader-%dx%df%xm%d-%d-%d", width, height, nativeHalFormat, maxImages, getpid(), createProcessUniqueId()); uint64_t consumerUsage = android_hardware_HardwareBuffer_convertToGrallocUsageBits(ndkUsage); #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) sp<BufferItemConsumer> bufferConsumer = new BufferItemConsumer(consumerUsage, maxImages, /*controlledByApp*/ true); sp<IGraphicBufferProducer> gbProducer = bufferConsumer->getSurface()->getIGraphicBufferProducer(); #else sp<IGraphicBufferProducer> gbProducer; sp<IGraphicBufferConsumer> gbConsumer; BufferQueue::createBufferQueue(&gbProducer, &gbConsumer); sp<BufferItemConsumer> bufferConsumer; bufferConsumer = new BufferItemConsumer(gbConsumer, consumerUsage, maxImages, /*controlledByApp*/true); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) if (bufferConsumer == nullptr) { jniThrowExceptionFmt(env, "java/lang/RuntimeException", "Failed to allocate native buffer consumer for hal format 0x%x and usage 0x%x", Loading @@ -413,7 +416,11 @@ static void ImageReader_init(JNIEnv* env, jobject thiz, jobject weakThiz, jint w } if (consumerUsage & GRALLOC_USAGE_PROTECTED) { #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) bufferConsumer->setConsumerIsProtected(true); #else gbConsumer->setConsumerIsProtected(true); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } ctx->setBufferConsumer(bufferConsumer); Loading media/mca/filterfw/native/core/gl_env.cpp +17 −9 Original line number Diff line number Diff line Loading @@ -15,21 +15,23 @@ */ // #define LOG_NDEBUG 0 #include "base/logging.h" #include "base/utilities.h" #include "core/gl_env.h" #include "core/shader_program.h" #include "core/vertex_frame.h" #include "system/window.h" #include <map> #include <string> #include <EGL/eglext.h> #include <com_android_graphics_libgui_flags.h> #include <gui/BufferQueue.h> #include <gui/Surface.h> #include <gui/GLConsumer.h> #include <gui/IGraphicBufferProducer.h> #include <gui/Surface.h> #include <map> #include <string> #include "base/logging.h" #include "base/utilities.h" #include "core/shader_program.h" #include "core/vertex_frame.h" #include "system/window.h" namespace android { namespace filterfw { Loading Loading @@ -165,12 +167,18 @@ bool GLEnv::InitWithNewContext() { } // Create dummy surface using a GLConsumer #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) surfaceTexture_ = new GLConsumer(0, GLConsumer::TEXTURE_EXTERNAL, /*useFenceSync=*/true, /*isControlledByApp=*/false); window_ = surfaceTexture_->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); surfaceTexture_ = new GLConsumer(consumer, 0, GLConsumer::TEXTURE_EXTERNAL, true, false); window_ = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) surfaces_[0] = SurfaceWindowPair(eglCreateWindowSurface(display(), config, window_.get(), NULL), NULL); if (CheckEGLError("eglCreateWindowSurface")) return false; Loading Loading
core/jni/android_graphics_SurfaceTexture.cpp +33 −4 Original line number Diff line number Diff line Loading @@ -256,9 +256,21 @@ static void SurfaceTexture_classInit(JNIEnv* env, jclass clazz) } } static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jboolean isDetached, jint texName, jboolean singleBufferMode, jobject weakThiz) { static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jboolean isDetached, jint texName, jboolean singleBufferMode, jobject weakThiz) { #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) sp<SurfaceTexture> surfaceTexture; if (isDetached) { surfaceTexture = new SurfaceTexture(GL_TEXTURE_EXTERNAL_OES, true, !singleBufferMode); } else { surfaceTexture = new SurfaceTexture(texName, GL_TEXTURE_EXTERNAL_OES, true, !singleBufferMode); } if (singleBufferMode) { surfaceTexture->setMaxBufferCount(1); } #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -275,6 +287,7 @@ static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jboolean isDetached, surfaceTexture = new SurfaceTexture(consumer, texName, GL_TEXTURE_EXTERNAL_OES, true, !singleBufferMode); } #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) if (surfaceTexture == 0) { jniThrowException(env, OutOfResourcesException, Loading @@ -287,11 +300,27 @@ static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jboolean isDetached, createProcessUniqueId())); // If the current context is protected, inform the producer. #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) surfaceTexture->setConsumerIsProtected(isProtectedContext()); SurfaceTexture_setSurfaceTexture(env, thiz, surfaceTexture); sp<Surface> surface = surfaceTexture->getSurface(); if (nullptr == surface) { jniThrowException(env, IllegalStateException, "Unable to get surface from SurfaceTexture"); return; } sp<IGraphicBufferProducer> igbp = surface->getIGraphicBufferProducer(); if (nullptr == igbp) { jniThrowException(env, IllegalStateException, "Unable to get IGBP from Surface"); return; } SurfaceTexture_setProducer(env, thiz, igbp); #else consumer->setConsumerIsProtected(isProtectedContext()); SurfaceTexture_setSurfaceTexture(env, thiz, surfaceTexture); SurfaceTexture_setProducer(env, thiz, producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) jclass clazz = env->GetObjectClass(thiz); if (clazz == NULL) { jniThrowRuntimeException(env, Loading
libs/hwui/tests/common/TestContext.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include "tests/common/TestContext.h" #include <com_android_graphics_libgui_flags.h> #include <cutils/trace.h> namespace android { Loading Loading @@ -101,6 +102,14 @@ void TestContext::createWindowSurface() { } void TestContext::createOffscreenSurface() { #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mConsumer = new BufferItemConsumer(GRALLOC_USAGE_HW_COMPOSER, 4); const ui::Size& resolution = getActiveDisplayResolution(); mConsumer->setDefaultBufferSize(resolution.getWidth(), resolution.getHeight()); mSurface = mConsumer->getSurface(); mSurface->setMaxDequeuedBufferCount(3); mSurface->setAsyncMode(true); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -110,6 +119,7 @@ void TestContext::createOffscreenSurface() { const ui::Size& resolution = getActiveDisplayResolution(); mConsumer->setDefaultBufferSize(resolution.getWidth(), resolution.getHeight()); mSurface = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } void TestContext::waitForVsync() { Loading
media/jni/android_media_ImageReader.cpp +32 −25 Original line number Diff line number Diff line Loading @@ -17,35 +17,31 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "ImageReader_JNI" #define ATRACE_TAG ATRACE_TAG_CAMERA #include "android_media_Utils.h" #include <cutils/atomic.h> #include <utils/Log.h> #include <utils/misc.h> #include <utils/List.h> #include <utils/Trace.h> #include <utils/String8.h> #include <cstdio> #include <gui/BufferItemConsumer.h> #include <gui/Surface.h> #include <android/hardware_buffer_jni.h> #include <android_runtime/AndroidRuntime.h> #include <android_runtime/android_view_Surface.h> #include <android_runtime/android_graphics_GraphicBuffer.h> #include <android_runtime/android_hardware_HardwareBuffer.h> #include <android_runtime/android_view_Surface.h> #include <com_android_graphics_libgui_flags.h> #include <cutils/atomic.h> #include <grallocusage/GrallocUsageConversion.h> #include <private/android/AHardwareBufferHelpers.h> #include <gui/BufferItemConsumer.h> #include <gui/Surface.h> #include <inttypes.h> #include <jni.h> #include <nativehelper/JNIHelp.h> #include <private/android/AHardwareBufferHelpers.h> #include <stdint.h> #include <inttypes.h> #include <android/hardware_buffer_jni.h> #include <ui/Rect.h> #include <utils/List.h> #include <utils/Log.h> #include <utils/String8.h> #include <utils/Trace.h> #include <utils/misc.h> #include <cstdio> #include "android_media_Utils.h" #define ANDROID_MEDIA_IMAGEREADER_CTX_JNI_ID "mNativeContext" #define ANDROID_MEDIA_SURFACEIMAGE_BUFFER_JNI_ID "mNativeBuffer" Loading Loading @@ -393,18 +389,25 @@ static void ImageReader_init(JNIEnv* env, jobject thiz, jobject weakThiz, jint w } sp<JNIImageReaderContext> ctx(new JNIImageReaderContext(env, weakThiz, clazz, maxImages)); sp<IGraphicBufferProducer> gbProducer; sp<IGraphicBufferConsumer> gbConsumer; BufferQueue::createBufferQueue(&gbProducer, &gbConsumer); sp<BufferItemConsumer> bufferConsumer; String8 consumerName = String8::format("ImageReader-%dx%df%xm%d-%d-%d", width, height, nativeHalFormat, maxImages, getpid(), createProcessUniqueId()); uint64_t consumerUsage = android_hardware_HardwareBuffer_convertToGrallocUsageBits(ndkUsage); #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) sp<BufferItemConsumer> bufferConsumer = new BufferItemConsumer(consumerUsage, maxImages, /*controlledByApp*/ true); sp<IGraphicBufferProducer> gbProducer = bufferConsumer->getSurface()->getIGraphicBufferProducer(); #else sp<IGraphicBufferProducer> gbProducer; sp<IGraphicBufferConsumer> gbConsumer; BufferQueue::createBufferQueue(&gbProducer, &gbConsumer); sp<BufferItemConsumer> bufferConsumer; bufferConsumer = new BufferItemConsumer(gbConsumer, consumerUsage, maxImages, /*controlledByApp*/true); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) if (bufferConsumer == nullptr) { jniThrowExceptionFmt(env, "java/lang/RuntimeException", "Failed to allocate native buffer consumer for hal format 0x%x and usage 0x%x", Loading @@ -413,7 +416,11 @@ static void ImageReader_init(JNIEnv* env, jobject thiz, jobject weakThiz, jint w } if (consumerUsage & GRALLOC_USAGE_PROTECTED) { #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) bufferConsumer->setConsumerIsProtected(true); #else gbConsumer->setConsumerIsProtected(true); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } ctx->setBufferConsumer(bufferConsumer); Loading
media/mca/filterfw/native/core/gl_env.cpp +17 −9 Original line number Diff line number Diff line Loading @@ -15,21 +15,23 @@ */ // #define LOG_NDEBUG 0 #include "base/logging.h" #include "base/utilities.h" #include "core/gl_env.h" #include "core/shader_program.h" #include "core/vertex_frame.h" #include "system/window.h" #include <map> #include <string> #include <EGL/eglext.h> #include <com_android_graphics_libgui_flags.h> #include <gui/BufferQueue.h> #include <gui/Surface.h> #include <gui/GLConsumer.h> #include <gui/IGraphicBufferProducer.h> #include <gui/Surface.h> #include <map> #include <string> #include "base/logging.h" #include "base/utilities.h" #include "core/shader_program.h" #include "core/vertex_frame.h" #include "system/window.h" namespace android { namespace filterfw { Loading Loading @@ -165,12 +167,18 @@ bool GLEnv::InitWithNewContext() { } // Create dummy surface using a GLConsumer #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) surfaceTexture_ = new GLConsumer(0, GLConsumer::TEXTURE_EXTERNAL, /*useFenceSync=*/true, /*isControlledByApp=*/false); window_ = surfaceTexture_->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); surfaceTexture_ = new GLConsumer(consumer, 0, GLConsumer::TEXTURE_EXTERNAL, true, false); window_ = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) surfaces_[0] = SurfaceWindowPair(eglCreateWindowSurface(display(), config, window_.get(), NULL), NULL); if (CheckEGLError("eglCreateWindowSurface")) return false; Loading