| #include "include/dvr/dvr_buffer.h" | 
 |  | 
 | #include <android/hardware_buffer.h> | 
 | #include <dvr/dvr_shared_buffers.h> | 
 | #include <private/dvr/consumer_buffer.h> | 
 | #include <private/dvr/producer_buffer.h> | 
 | #include <ui/GraphicBuffer.h> | 
 |  | 
 | #include "dvr_internal.h" | 
 |  | 
 | using namespace android; | 
 |  | 
 | namespace android { | 
 | namespace dvr { | 
 |  | 
 | DvrBuffer* CreateDvrBufferFromIonBuffer( | 
 |     const std::shared_ptr<IonBuffer>& ion_buffer) { | 
 |   if (!ion_buffer) | 
 |     return nullptr; | 
 |   return new DvrBuffer{std::move(ion_buffer)}; | 
 | } | 
 |  | 
 | }  // namespace dvr | 
 | }  // namespace android | 
 |  | 
 | namespace { | 
 |  | 
 | 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" { | 
 |  | 
 | void dvrWriteBufferDestroy(DvrWriteBuffer* write_buffer) { | 
 |   if (write_buffer != nullptr) { | 
 |     ALOGW_IF( | 
 |         write_buffer->slot != -1, | 
 |         "dvrWriteBufferDestroy: Destroying a buffer associated with a valid " | 
 |         "buffer queue slot. This may indicate possible leaks, buffer_id=%d.", | 
 |         dvrWriteBufferGetId(write_buffer)); | 
 |     delete write_buffer; | 
 |   } | 
 | } | 
 |  | 
 | int dvrWriteBufferIsValid(DvrWriteBuffer* write_buffer) { | 
 |   return write_buffer && write_buffer->write_buffer; | 
 | } | 
 |  | 
 | int dvrWriteBufferGetId(DvrWriteBuffer* write_buffer) { | 
 |   if (!write_buffer || !write_buffer->write_buffer) | 
 |     return -EINVAL; | 
 |  | 
 |   return write_buffer->write_buffer->id(); | 
 | } | 
 |  | 
 | int dvrWriteBufferGetAHardwareBuffer(DvrWriteBuffer* write_buffer, | 
 |                                      AHardwareBuffer** hardware_buffer) { | 
 |   if (!write_buffer || !write_buffer->write_buffer) | 
 |     return -EINVAL; | 
 |  | 
 |   return ConvertToAHardwareBuffer( | 
 |       write_buffer->write_buffer->buffer()->buffer().get(), hardware_buffer); | 
 | } | 
 |  | 
 | void dvrReadBufferDestroy(DvrReadBuffer* read_buffer) { | 
 |   if (read_buffer != nullptr) { | 
 |     ALOGW_IF( | 
 |         read_buffer->slot != -1, | 
 |         "dvrReadBufferDestroy: Destroying a buffer associated with a valid " | 
 |         "buffer queue slot. This may indicate possible leaks, buffer_id=%d.", | 
 |         dvrReadBufferGetId(read_buffer)); | 
 |     delete read_buffer; | 
 |   } | 
 | } | 
 |  | 
 | int dvrReadBufferIsValid(DvrReadBuffer* read_buffer) { | 
 |   return read_buffer && read_buffer->read_buffer; | 
 | } | 
 |  | 
 | int dvrReadBufferGetId(DvrReadBuffer* read_buffer) { | 
 |   if (!read_buffer || !read_buffer->read_buffer) | 
 |     return -EINVAL; | 
 |  | 
 |   return read_buffer->read_buffer->id(); | 
 | } | 
 |  | 
 | int dvrReadBufferGetAHardwareBuffer(DvrReadBuffer* read_buffer, | 
 |                                     AHardwareBuffer** hardware_buffer) { | 
 |   if (!read_buffer || !read_buffer->read_buffer) | 
 |     return -EINVAL; | 
 |  | 
 |   return ConvertToAHardwareBuffer( | 
 |       read_buffer->read_buffer->buffer()->buffer().get(), hardware_buffer); | 
 | } | 
 |  | 
 | void dvrBufferDestroy(DvrBuffer* buffer) { delete buffer; } | 
 |  | 
 | int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer, | 
 |                                 AHardwareBuffer** hardware_buffer) { | 
 |   if (!buffer || !buffer->buffer || !hardware_buffer) { | 
 |     return -EINVAL; | 
 |   } | 
 |  | 
 |   return ConvertToAHardwareBuffer(buffer->buffer->buffer().get(), | 
 |                                   hardware_buffer); | 
 | } | 
 |  | 
 | // Retrieve the shared buffer layout version defined in dvr_shared_buffers.h. | 
 | int dvrBufferGlobalLayoutVersionGet() { | 
 |   return android::dvr::kSharedBufferLayoutVersion; | 
 | } | 
 |  | 
 | }  // extern "C" |