blob: c11706fc7ff406d0cef99650a61e5188e2e89aee [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>
Tianyu Jiang49642322018-12-18 11:08:03 -08005#include <private/dvr/consumer_buffer.h>
6#include <private/dvr/producer_buffer.h>
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -07007#include <ui/GraphicBuffer.h>
8
Corey Tabaka2251d822017-04-20 16:04:07 -07009#include "dvr_internal.h"
10
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070011using namespace android;
12
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070013namespace android {
14namespace dvr {
15
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070016DvrBuffer* CreateDvrBufferFromIonBuffer(
17 const std::shared_ptr<IonBuffer>& ion_buffer) {
18 if (!ion_buffer)
19 return nullptr;
20 return new DvrBuffer{std::move(ion_buffer)};
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070021}
22
23} // namespace dvr
24} // namespace android
25
26namespace {
27
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -070028int ConvertToAHardwareBuffer(GraphicBuffer* graphic_buffer,
29 AHardwareBuffer** hardware_buffer) {
30 if (!hardware_buffer || !graphic_buffer) {
31 return -EINVAL;
32 }
33 *hardware_buffer = reinterpret_cast<AHardwareBuffer*>(graphic_buffer);
34 AHardwareBuffer_acquire(*hardware_buffer);
35 return 0;
36}
37
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070038} // anonymous namespace
39
40extern "C" {
41
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070042void dvrWriteBufferDestroy(DvrWriteBuffer* write_buffer) {
Jiwen 'Steve' Cai638b7f72017-09-08 11:10:29 -070043 if (write_buffer != nullptr) {
44 ALOGW_IF(
45 write_buffer->slot != -1,
46 "dvrWriteBufferDestroy: Destroying a buffer associated with a valid "
Jiwen 'Steve' Caib53da4f2018-04-12 18:05:00 -070047 "buffer queue slot. This may indicate possible leaks, buffer_id=%d.",
48 dvrWriteBufferGetId(write_buffer));
Jiwen 'Steve' Cai638b7f72017-09-08 11:10:29 -070049 delete write_buffer;
50 }
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070051}
52
Corey Tabaka2251d822017-04-20 16:04:07 -070053int dvrWriteBufferIsValid(DvrWriteBuffer* write_buffer) {
54 return write_buffer && write_buffer->write_buffer;
55}
56
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070057int dvrWriteBufferGetId(DvrWriteBuffer* write_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -070058 if (!write_buffer || !write_buffer->write_buffer)
59 return -EINVAL;
60
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070061 return write_buffer->write_buffer->id();
62}
63
64int dvrWriteBufferGetAHardwareBuffer(DvrWriteBuffer* write_buffer,
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070065 AHardwareBuffer** hardware_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -070066 if (!write_buffer || !write_buffer->write_buffer)
67 return -EINVAL;
68
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -070069 return ConvertToAHardwareBuffer(
70 write_buffer->write_buffer->buffer()->buffer().get(), hardware_buffer);
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070071}
72
Jiwen 'Steve' Cai638b7f72017-09-08 11:10:29 -070073void dvrReadBufferDestroy(DvrReadBuffer* read_buffer) {
74 if (read_buffer != nullptr) {
75 ALOGW_IF(
76 read_buffer->slot != -1,
77 "dvrReadBufferDestroy: Destroying a buffer associated with a valid "
Jiwen 'Steve' Caib53da4f2018-04-12 18:05:00 -070078 "buffer queue slot. This may indicate possible leaks, buffer_id=%d.",
79 dvrReadBufferGetId(read_buffer));
Jiwen 'Steve' Cai638b7f72017-09-08 11:10:29 -070080 delete read_buffer;
81 }
82}
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -070083
Corey Tabaka2251d822017-04-20 16:04:07 -070084int dvrReadBufferIsValid(DvrReadBuffer* read_buffer) {
85 return read_buffer && read_buffer->read_buffer;
86}
87
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070088int dvrReadBufferGetId(DvrReadBuffer* read_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -070089 if (!read_buffer || !read_buffer->read_buffer)
90 return -EINVAL;
91
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070092 return read_buffer->read_buffer->id();
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070093}
94
Hendrik Wagenaareaa55222017-04-06 10:56:23 -070095int dvrReadBufferGetAHardwareBuffer(DvrReadBuffer* read_buffer,
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -070096 AHardwareBuffer** hardware_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -070097 if (!read_buffer || !read_buffer->read_buffer)
98 return -EINVAL;
99
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -0700100 return ConvertToAHardwareBuffer(
101 read_buffer->read_buffer->buffer()->buffer().get(), hardware_buffer);
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -0700102}
103
Hendrik Wagenaareaa55222017-04-06 10:56:23 -0700104void dvrBufferDestroy(DvrBuffer* buffer) { delete buffer; }
105
106int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer,
107 AHardwareBuffer** hardware_buffer) {
Corey Tabaka2251d822017-04-20 16:04:07 -0700108 if (!buffer || !buffer->buffer || !hardware_buffer) {
109 return -EINVAL;
110 }
111
Hendrik Wagenaara5d404d2017-04-18 22:03:09 -0700112 return ConvertToAHardwareBuffer(buffer->buffer->buffer().get(),
113 hardware_buffer);
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -0700114}
115
Okan Arikan0cb04d32017-05-31 14:25:51 -0700116// Retrieve the shared buffer layout version defined in dvr_shared_buffers.h.
117int dvrBufferGlobalLayoutVersionGet() {
118 return android::dvr::kSharedBufferLayoutVersion;
119}
120
Hendrik Wagenaar10e68eb2017-03-15 13:29:02 -0700121} // extern "C"