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

Commit b1325574 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "DVRBuffer functions should acquire AHardwareBuffer" into oc-dev

parents fc333972 a5d404d8
Loading
Loading
Loading
Loading
+17 −13
Original line number Diff line number Diff line
#include "include/dvr/dvr_buffer.h"

#include <android/hardware_buffer.h>
#include <private/dvr/buffer_hub_client.h>
#include <ui/GraphicBuffer.h>

@@ -54,6 +55,16 @@ void InitializeGraphicBuffer(const dvr::BufferHubBuffer* buffer,
      false /* keep ownership */));
}

int ConvertToAHardwareBuffer(GraphicBuffer* graphic_buffer,
                             AHardwareBuffer** hardware_buffer) {
  if (!hardware_buffer || !graphic_buffer) {
    return -EINVAL;
  }
  *hardware_buffer = reinterpret_cast<AHardwareBuffer*>(graphic_buffer);
  AHardwareBuffer_acquire(*hardware_buffer);
  return 0;
}

}  // anonymous namespace

extern "C" {
@@ -68,9 +79,8 @@ int dvrWriteBufferGetId(DvrWriteBuffer* write_buffer) {

int dvrWriteBufferGetAHardwareBuffer(DvrWriteBuffer* write_buffer,
                                     AHardwareBuffer** hardware_buffer) {
  *hardware_buffer = reinterpret_cast<AHardwareBuffer*>(
      write_buffer->write_buffer->buffer()->buffer().get());
  return 0;
  return ConvertToAHardwareBuffer(
      write_buffer->write_buffer->buffer()->buffer().get(), hardware_buffer);
}

int dvrWriteBufferPost(DvrWriteBuffer* write_buffer, int ready_fence_fd,
@@ -99,9 +109,8 @@ int dvrReadBufferGetId(DvrReadBuffer* read_buffer) {

int dvrReadBufferGetAHardwareBuffer(DvrReadBuffer* read_buffer,
                                    AHardwareBuffer** hardware_buffer) {
  *hardware_buffer = reinterpret_cast<AHardwareBuffer*>(
      read_buffer->read_buffer->buffer()->buffer().get());
  return 0;
  return ConvertToAHardwareBuffer(
      read_buffer->read_buffer->buffer()->buffer().get(), hardware_buffer);
}

int dvrReadBufferAcquire(DvrReadBuffer* read_buffer, int* ready_fence_fd,
@@ -127,13 +136,8 @@ void dvrBufferDestroy(DvrBuffer* buffer) { delete buffer; }

int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer,
                                AHardwareBuffer** hardware_buffer) {
  if (!hardware_buffer) {
    return -EINVAL;
  }

  *hardware_buffer =
      reinterpret_cast<AHardwareBuffer*>(buffer->buffer->buffer().get());
  return 0;
  return ConvertToAHardwareBuffer(buffer->buffer->buffer().get(),
                                  hardware_buffer);
}

const struct native_handle* dvrWriteBufferGetNativeHandle(
+3 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ struct native_handle;
// Write buffer
void dvrWriteBufferDestroy(DvrWriteBuffer* write_buffer);
int dvrWriteBufferGetId(DvrWriteBuffer* write_buffer);
// Caller must call AHardwareBuffer_release on hardware_buffer.
int dvrWriteBufferGetAHardwareBuffer(DvrWriteBuffer* write_buffer,
                                     AHardwareBuffer** hardware_buffer);
int dvrWriteBufferPost(DvrWriteBuffer* write_buffer, int ready_fence_fd,
@@ -30,6 +31,7 @@ const struct native_handle* dvrWriteBufferGetNativeHandle(
// Read buffer
void dvrReadBufferDestroy(DvrReadBuffer* read_buffer);
int dvrReadBufferGetId(DvrReadBuffer* read_buffer);
// Caller must call AHardwareBuffer_release on hardware_buffer.
int dvrReadBufferGetAHardwareBuffer(DvrReadBuffer* read_buffer,
                                    AHardwareBuffer** hardware_buffer);
int dvrReadBufferAcquire(DvrReadBuffer* read_buffer, int* ready_fence_fd,
@@ -41,6 +43,7 @@ const struct native_handle* dvrReadBufferGetNativeHandle(

// Buffer
void dvrBufferDestroy(DvrBuffer* buffer);
// Caller must call AHardwareBuffer_release on hardware_buffer.
int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer,
                                AHardwareBuffer** hardware_buffer);
const struct native_handle* dvrBufferGetNativeHandle(DvrBuffer* buffer);
+7 −1
Original line number Diff line number Diff line
@@ -42,11 +42,12 @@ TEST_F(DvrNamedBufferTest, TestNamedBuffersSameName) {
  AHardwareBuffer* hardware_buffer1 = nullptr;
  int e1 = dvrBufferGetAHardwareBuffer(buffer1, &hardware_buffer1);
  ASSERT_EQ(0, e1);
  ASSERT_NE(nullptr, hardware_buffer1);

  AHardwareBuffer* hardware_buffer2 = nullptr;
  int e2 = dvrBufferGetAHardwareBuffer(buffer2, &hardware_buffer2);
  ASSERT_EQ(0, e2);
  ASSERT_NE(nullptr, hardware_buffer1);
  ASSERT_NE(nullptr, hardware_buffer2);

  AHardwareBuffer_Desc desc1 = {};
  AHardwareBuffer_describe(hardware_buffer1, &desc1);
@@ -88,6 +89,10 @@ TEST_F(DvrNamedBufferTest, TestNamedBuffersSameName) {
  ASSERT_EQ(desc3.usage1, 0u);

  dvrBufferDestroy(buffer3);

  AHardwareBuffer_release(hardware_buffer1);
  AHardwareBuffer_release(hardware_buffer2);
  AHardwareBuffer_release(hardware_buffer3);
}

TEST_F(DvrNamedBufferTest, TestMultipleNamedBuffers) {
@@ -141,6 +146,7 @@ TEST_F(DvrNamedBufferTest, TestNamedBufferUsage) {
  ASSERT_EQ(desc.usage0, AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE);

  dvrBufferDestroy(setup_buffer);
  AHardwareBuffer_release(hardware_buffer);
}