Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d82ceb8 authored by Jiwen 'Steve' Cai's avatar Jiwen 'Steve' Cai
Browse files

Add dvr_buffer_queue C API

Bug: 36401767
Bug: 32213274
Bug: 36266201
Test: build and ran dvr_buffer_queue-test
Change-Id: Icd8d063bd8b7adb15bf67f7e543b87dad1c32a68
parent bdcee79b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ sharedLibraries = [
cc_library {
    name: "libbufferhubqueue",
    cflags = [
        "-DLOGTAG=\"libbufferhubqueue\"",
        "-DLOG_TAG=\"libbufferhubqueue\"",
        "-DTRACE=0",
    ],
    srcs: sourceFiles,
+21 −4
Original line number Diff line number Diff line
@@ -329,6 +329,9 @@ class ConsumerQueue : public pdx::ClientBase<ConsumerQueue, BufferHubQueue> {
    return Dequeue(timeout, slot, meta, sizeof(*meta), acquire_fence);
  }

  std::shared_ptr<BufferConsumer> Dequeue(int timeout, size_t* slot, void* meta,
                                          size_t meta_size,
                                          LocalHandle* acquire_fence);
 private:
  friend BASE;

@@ -344,13 +347,27 @@ class ConsumerQueue : public pdx::ClientBase<ConsumerQueue, BufferHubQueue> {
                    LocalHandle* acquire_fence) override;

  int OnBufferAllocated() override;

  std::shared_ptr<BufferConsumer> Dequeue(int timeout, size_t* slot, void* meta,
                                          size_t meta_size,
                                          LocalHandle* acquire_fence);
};

}  // namespace dvr
}  // namespace android

// Concrete C type definition for DVR API.

#ifdef __cplusplus
extern "C" {
#endif

struct DvrWriteBufferQueue {
  std::shared_ptr<android::dvr::ProducerQueue> producer_queue_;
};

struct DvrReadBufferQueue {
  std::shared_ptr<android::dvr::ConsumerQueue> consumer_queue_;
};

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // ANDROID_DVR_BUFFER_HUB_QUEUE_CLIENT_H_
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ cc_test {
    static_libs: static_libraries,
    shared_libs: shared_libraries,
    cflags: [
        "-DLOG_TAG=\"buffer_hub_queue-test\"",
        "-DTRACE=0",
        "-O0",
        "-g",
@@ -37,6 +38,7 @@ cc_test {
    static_libs: static_libraries,
    shared_libs: shared_libraries,
    cflags: [
        "-DLOG_TAG=\"buffer_hub_queue_producer-test\"",
        "-DTRACE=0",
        "-O0",
        "-g",
+3 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ LOCAL_SRC_FILES := \
    display_manager_client.cpp \
    dvr_api.cpp \
    dvr_buffer.cpp \
    dvr_buffer_queue.cpp \
    dvr_surface.cpp \
    vsync_client_api.cpp \

@@ -49,3 +50,5 @@ LOCAL_SHARED_LIBRARIES := \
    libbase \

include $(BUILD_STATIC_LIBRARY)

include $(call all-makefiles-under,$(LOCAL_PATH))
+16 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
// Headers from libdvr
#include <dvr/display_manager_client.h>
#include <dvr/dvr_buffer.h>
#include <dvr/dvr_buffer_queue.h>
#include <dvr/dvr_surface.h>
#include <dvr/vsync_client_api.h>

@@ -53,12 +54,27 @@ DVR_EXPORT int dvrGetApi(void* api, size_t struct_size, int version) {
    dvr_api->write_buffer_gain_ = dvrWriteBufferGain;
    dvr_api->write_buffer_gain_async_ = dvrWriteBufferGainAsync;

    dvr_api->read_buffer_destroy_ = dvrReadBufferDestroy;
    dvr_api->read_buffer_get_blob_fds_ = dvrReadBufferGetBlobFds;
    dvr_api->read_buffer_get_AHardwareBuffer_ = dvrReadBufferGetAHardwareBuffer;
    dvr_api->read_buffer_acquire_ = dvrReadBufferAcquire;
    dvr_api->read_buffer_release_ = dvrReadBufferRelease;
    dvr_api->read_buffer_release_async_ = dvrReadBufferReleaseAsync;

    // dvr_buffer_queue.h
    dvr_api->write_buffer_queue_destroy_ = dvrWriteBufferQueueDestroy;
    dvr_api->write_buffer_queue_get_capacity_ = dvrWriteBufferQueueGetCapacity;
    dvr_api->write_buffer_queue_get_external_surface_ =
        dvrWriteBufferQueueGetExternalSurface;
    dvr_api->write_buffer_queue_create_read_queue_ =
        dvrWriteBufferQueueCreateReadQueue;
    dvr_api->write_buffer_queue_dequeue_ = dvrWriteBufferQueueDequeue;
    dvr_api->read_buffer_queue_destroy_ = dvrReadBufferQueueDestroy;
    dvr_api->read_buffer_queue_get_capacity_ = dvrReadBufferQueueGetCapacity;
    dvr_api->read_buffer_queue_create_read_queue_ =
        dvrReadBufferQueueCreateReadQueue;
    dvr_api->read_buffer_queue_dequeue = dvrReadBufferQueueDequeue;

    // dvr_surface.h
    dvr_api->get_pose_buffer_ = dvrGetPoseBuffer;

Loading