blob: baf1f2f5da1bef4f48c5758b1f3c97122b67f8fe [file] [log] [blame]
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -07001#include "include/dvr/dvr_buffer.h"
2
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -07003#include <android/hardware_buffer.h>
Okan Arikan0cb04d32017-05-31 14:25:51 -07004#include <dvr/dvr_shared_buffers.h>
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -07005#include <private/dvr/buffer_hub_client.h>
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -07006#include <ui/GraphicBuffer.h>
7
Corey Tabaka2251d822017-04-20 16:04:07 -07008#include "dvr_internal.h"
9
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070010using namespace android;
11
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070012namespace android {
13namespace dvr {
14
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070015DvrBuffer* CreateDvrBufferFromIonBuffer(
16 const std::shared_ptr<IonBuffer>& ion_buffer) {
17 if (!ion_buffer)
18 return nullptr;
19 return new DvrBuffer{std::move(ion_buffer)};
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070020}
21
22} // namespace dvr
23} // namespace android
24
25namespace {
26
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -070027int ConvertToAHardwareBuffer(GraphicBuffer* graphic_buffer,
28 AHardwareBuffer** hardware_buffer) {
29 if (!hardware_buffer || !graphic_buffer) {
30 return -EINVAL;
31 }
32 *hardware_buffer = reinterpret_cast<AHardwareBuffer*>(graphic_buffer);
33 AHardwareBuffer_acquire(*hardware_buffer);
34 return 0;
35}
36
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070037} // anonymous namespace
38
39extern "C" {
40
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070041void dvrWriteBufferDestroy(DvrWriteBuffer* write_buffer) {
Jiwen 'Steve' Cai638b7f72017-09-08 11:10:29 -070042 if (write_buffer != nullptr) {
43 ALOGW_IF(
44 write_buffer->slot != -1,
45 "dvrWriteBufferDestroy: Destroying a buffer associated with a valid "
Jiwen 'Steve' Caib53da4f2018-04-12 18:05:00 -070046 "buffer queue slot. This may indicate possible leaks, buffer_id=%d.",
47 dvrWriteBufferGetId(write_buffer));
Jiwen 'Steve' Cai638b7f72017-09-08 11:10:29 -070048 delete write_buffer;
49 }
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070050}
51
Corey Tabaka2251d822017-04-20 16:04:07 -070052int dvrWriteBufferIsValid(DvrWriteBuffer* write_buffer) {
53 return write_buffer && write_buffer->write_buffer;
54}
55
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070056int dvrWriteBufferGetId(DvrWriteBuffer* write_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -070057 if (!write_buffer || !write_buffer->write_buffer)
58 return -EINVAL;
59
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070060 return write_buffer->write_buffer->id();
61}
62
63int dvrWriteBufferGetAHardwareBuffer(DvrWriteBuffer* write_buffer,
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070064 AHardwareBuffer** hardware_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -070065 if (!write_buffer || !write_buffer->write_buffer)
66 return -EINVAL;
67
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -070068 return ConvertToAHardwareBuffer(
69 write_buffer->write_buffer->buffer()->buffer().get(), hardware_buffer);
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070070}
71
Jiwen 'Steve' Cai638b7f72017-09-08 11:10:29 -070072void dvrReadBufferDestroy(DvrReadBuffer* read_buffer) {
73 if (read_buffer != nullptr) {
74 ALOGW_IF(
75 read_buffer->slot != -1,
76 "dvrReadBufferDestroy: Destroying a buffer associated with a valid "
Jiwen 'Steve' Caib53da4f2018-04-12 18:05:00 -070077 "buffer queue slot. This may indicate possible leaks, buffer_id=%d.",
78 dvrReadBufferGetId(read_buffer));
Jiwen 'Steve' Cai638b7f72017-09-08 11:10:29 -070079 delete read_buffer;
80 }
81}
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -070082
Corey Tabaka2251d822017-04-20 16:04:07 -070083int dvrReadBufferIsValid(DvrReadBuffer* read_buffer) {
84 return read_buffer && read_buffer->read_buffer;
85}
86
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070087int dvrReadBufferGetId(DvrReadBuffer* read_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -070088 if (!read_buffer || !read_buffer->read_buffer)
89 return -EINVAL;
90
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070091 return read_buffer->read_buffer->id();
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070092}
93
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070094int dvrReadBufferGetAHardwareBuffer(DvrReadBuffer* read_buffer,
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070095 AHardwareBuffer** hardware_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -070096 if (!read_buffer || !read_buffer->read_buffer)
97 return -EINVAL;
98
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -070099 return ConvertToAHardwareBuffer(
100 read_buffer->read_buffer->buffer()->buffer().get(), hardware_buffer);
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -0700101}
102
Hendrik Wagenaareaa55222017-04-06 10:56:23 -0700103void dvrBufferDestroy(DvrBuffer* buffer) { delete buffer; }
104
105int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer,
106 AHardwareBuffer** hardware_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -0700107 if (!buffer || !buffer->buffer || !hardware_buffer) {
108 return -EINVAL;
109 }
110
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -0700111 return ConvertToAHardwareBuffer(buffer->buffer->buffer().get(),
112 hardware_buffer);
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -0700113}
114
Okan Arikan0cb04d32017-05-31 14:25:51 -0700115// Retrieve the shared buffer layout version defined in dvr_shared_buffers.h.
116int dvrBufferGlobalLayoutVersionGet() {
117 return android::dvr::kSharedBufferLayoutVersion;
118}
119
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -0700120} // extern "C"