Loading libs/vr/libbufferhubqueue/include/private/dvr/buffer_hub_queue_client.h +1 −0 Original line number Diff line number Diff line Loading @@ -381,6 +381,7 @@ extern "C" { struct DvrWriteBufferQueue { std::shared_ptr<android::dvr::ProducerQueue> producer_queue_; ANativeWindow* native_window_{nullptr}; }; struct DvrReadBufferQueue { Loading libs/vr/libdvr/Android.mk +0 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,6 @@ LOCAL_STATIC_LIBRARIES := \ LOCAL_SHARED_LIBRARIES := \ android.hardware.graphics.bufferqueue@1.0 \ android.hidl.token@1.0-utils \ libandroid_runtime \ libbase \ libnativewindow \ Loading libs/vr/libdvr/dvr_buffer_queue.cpp +26 −10 Original line number Diff line number Diff line #include "include/dvr/dvr_buffer_queue.h" #include <android/native_window.h> #include <gui/Surface.h> #include <private/dvr/buffer_hub_queue_client.h> #include <private/dvr/buffer_hub_queue_producer.h> #include <android_runtime/android_view_Surface.h> #define CHECK_PARAM(param) \ LOG_ALWAYS_FATAL_IF(param == nullptr, "%s: " #param "cannot be NULL.", \ __FUNCTION__) Loading @@ -15,6 +14,9 @@ using namespace android; extern "C" { void dvrWriteBufferQueueDestroy(DvrWriteBufferQueue* write_queue) { if (write_queue != nullptr && write_queue->native_window_ != nullptr) { ANativeWindow_release(write_queue->native_window_); } delete write_queue; } Loading @@ -23,16 +25,30 @@ size_t dvrWriteBufferQueueGetCapacity(DvrWriteBufferQueue* write_queue) { return write_queue->producer_queue_->capacity(); } jobject dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, JNIEnv* env) { CHECK_PARAM(env); int dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, ANativeWindow** out_window) { CHECK_PARAM(write_queue); CHECK_PARAM(out_window); // Lazy creation of |native_window_|. if (write_queue->native_window_ == nullptr) { std::shared_ptr<dvr::BufferHubQueueCore> core = dvr::BufferHubQueueCore::Create(write_queue->producer_queue_); if (core == nullptr) { ALOGE( "dvrWriteBufferQueueGetExternalSurface: Failed to create native " "window."); return -ENOMEM; } sp<IGraphicBufferProducer> gbp = new dvr::BufferHubQueueProducer(core); sp<Surface> surface = new Surface(gbp, true); write_queue->native_window_ = static_cast<ANativeWindow*>(surface.get()); ANativeWindow_acquire(write_queue->native_window_); } return android_view_Surface_createFromIGraphicBufferProducer( env, new dvr::BufferHubQueueProducer(core)); *out_window = write_queue->native_window_; return 0; } int dvrWriteBufferQueueCreateReadQueue(DvrWriteBufferQueue* write_queue, Loading libs/vr/libdvr/include/dvr/dvr_api.h +4 −3 Original line number Diff line number Diff line Loading @@ -6,12 +6,13 @@ #include <stdint.h> #include <dvr/dvr_hardware_composer_defs.h> #include <jni.h> #ifdef __cplusplus extern "C" { #endif typedef struct ANativeWindow ANativeWindow; typedef struct DvrPoseAsync DvrPoseAsync; typedef struct DvrDisplayManagerClient DvrDisplayManagerClient; Loading Loading @@ -89,8 +90,8 @@ typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* client); typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue); typedef size_t (*DvrWriteBufferQueueGetCapacityPtr)( DvrWriteBufferQueue* write_queue); typedef jobject (*DvrWriteBufferQueueGetExternalSurfacePtr)( DvrWriteBufferQueue* write_queue, JNIEnv* env); typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)( DvrWriteBufferQueue* write_queue, ANativeWindow** out_window); typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)( DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue); typedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue, Loading libs/vr/libdvr/include/dvr/dvr_buffer_queue.h +8 −5 Original line number Diff line number Diff line Loading @@ -2,12 +2,13 @@ #define ANDROID_DVR_BUFFER_QUEUE_H_ #include <dvr/dvr_buffer.h> #include <jni.h> #ifdef __cplusplus extern "C" { #endif typedef struct ANativeWindow ANativeWindow; typedef struct DvrWriteBufferQueue DvrWriteBufferQueue; typedef struct DvrReadBufferQueue DvrReadBufferQueue; Loading @@ -15,10 +16,12 @@ typedef struct DvrReadBufferQueue DvrReadBufferQueue; void dvrWriteBufferQueueDestroy(DvrWriteBufferQueue* write_queue); size_t dvrWriteBufferQueueGetCapacity(DvrWriteBufferQueue* write_queue); // Returns ANativeWindow in the form of jobject. Can be casted to ANativeWindow // using ANativeWindow_fromSurface NDK API. jobject dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, JNIEnv* env); // Returns ANativeWindow. Can be casted to a Java Surface using // ANativeWindow_toSurface NDK API. Note that this method does not acquire an // additional reference to the ANativeWindow returned, don't call // ANativeWindow_release on it. int dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, ANativeWindow** out_window); int dvrWriteBufferQueueCreateReadQueue(DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue); Loading Loading
libs/vr/libbufferhubqueue/include/private/dvr/buffer_hub_queue_client.h +1 −0 Original line number Diff line number Diff line Loading @@ -381,6 +381,7 @@ extern "C" { struct DvrWriteBufferQueue { std::shared_ptr<android::dvr::ProducerQueue> producer_queue_; ANativeWindow* native_window_{nullptr}; }; struct DvrReadBufferQueue { Loading
libs/vr/libdvr/Android.mk +0 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,6 @@ LOCAL_STATIC_LIBRARIES := \ LOCAL_SHARED_LIBRARIES := \ android.hardware.graphics.bufferqueue@1.0 \ android.hidl.token@1.0-utils \ libandroid_runtime \ libbase \ libnativewindow \ Loading
libs/vr/libdvr/dvr_buffer_queue.cpp +26 −10 Original line number Diff line number Diff line #include "include/dvr/dvr_buffer_queue.h" #include <android/native_window.h> #include <gui/Surface.h> #include <private/dvr/buffer_hub_queue_client.h> #include <private/dvr/buffer_hub_queue_producer.h> #include <android_runtime/android_view_Surface.h> #define CHECK_PARAM(param) \ LOG_ALWAYS_FATAL_IF(param == nullptr, "%s: " #param "cannot be NULL.", \ __FUNCTION__) Loading @@ -15,6 +14,9 @@ using namespace android; extern "C" { void dvrWriteBufferQueueDestroy(DvrWriteBufferQueue* write_queue) { if (write_queue != nullptr && write_queue->native_window_ != nullptr) { ANativeWindow_release(write_queue->native_window_); } delete write_queue; } Loading @@ -23,16 +25,30 @@ size_t dvrWriteBufferQueueGetCapacity(DvrWriteBufferQueue* write_queue) { return write_queue->producer_queue_->capacity(); } jobject dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, JNIEnv* env) { CHECK_PARAM(env); int dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, ANativeWindow** out_window) { CHECK_PARAM(write_queue); CHECK_PARAM(out_window); // Lazy creation of |native_window_|. if (write_queue->native_window_ == nullptr) { std::shared_ptr<dvr::BufferHubQueueCore> core = dvr::BufferHubQueueCore::Create(write_queue->producer_queue_); if (core == nullptr) { ALOGE( "dvrWriteBufferQueueGetExternalSurface: Failed to create native " "window."); return -ENOMEM; } sp<IGraphicBufferProducer> gbp = new dvr::BufferHubQueueProducer(core); sp<Surface> surface = new Surface(gbp, true); write_queue->native_window_ = static_cast<ANativeWindow*>(surface.get()); ANativeWindow_acquire(write_queue->native_window_); } return android_view_Surface_createFromIGraphicBufferProducer( env, new dvr::BufferHubQueueProducer(core)); *out_window = write_queue->native_window_; return 0; } int dvrWriteBufferQueueCreateReadQueue(DvrWriteBufferQueue* write_queue, Loading
libs/vr/libdvr/include/dvr/dvr_api.h +4 −3 Original line number Diff line number Diff line Loading @@ -6,12 +6,13 @@ #include <stdint.h> #include <dvr/dvr_hardware_composer_defs.h> #include <jni.h> #ifdef __cplusplus extern "C" { #endif typedef struct ANativeWindow ANativeWindow; typedef struct DvrPoseAsync DvrPoseAsync; typedef struct DvrDisplayManagerClient DvrDisplayManagerClient; Loading Loading @@ -89,8 +90,8 @@ typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* client); typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue); typedef size_t (*DvrWriteBufferQueueGetCapacityPtr)( DvrWriteBufferQueue* write_queue); typedef jobject (*DvrWriteBufferQueueGetExternalSurfacePtr)( DvrWriteBufferQueue* write_queue, JNIEnv* env); typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)( DvrWriteBufferQueue* write_queue, ANativeWindow** out_window); typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)( DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue); typedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue, Loading
libs/vr/libdvr/include/dvr/dvr_buffer_queue.h +8 −5 Original line number Diff line number Diff line Loading @@ -2,12 +2,13 @@ #define ANDROID_DVR_BUFFER_QUEUE_H_ #include <dvr/dvr_buffer.h> #include <jni.h> #ifdef __cplusplus extern "C" { #endif typedef struct ANativeWindow ANativeWindow; typedef struct DvrWriteBufferQueue DvrWriteBufferQueue; typedef struct DvrReadBufferQueue DvrReadBufferQueue; Loading @@ -15,10 +16,12 @@ typedef struct DvrReadBufferQueue DvrReadBufferQueue; void dvrWriteBufferQueueDestroy(DvrWriteBufferQueue* write_queue); size_t dvrWriteBufferQueueGetCapacity(DvrWriteBufferQueue* write_queue); // Returns ANativeWindow in the form of jobject. Can be casted to ANativeWindow // using ANativeWindow_fromSurface NDK API. jobject dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, JNIEnv* env); // Returns ANativeWindow. Can be casted to a Java Surface using // ANativeWindow_toSurface NDK API. Note that this method does not acquire an // additional reference to the ANativeWindow returned, don't call // ANativeWindow_release on it. int dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, ANativeWindow** out_window); int dvrWriteBufferQueueCreateReadQueue(DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue); Loading