1 #include <android/hardware_buffer.h>
2 #include <dvr/dvr_buffer.h>
3 #include <dvr/dvr_display_manager.h>
4 #include <dvr/dvr_surface.h>
5 #include <system/graphics.h>
6
7 #include <base/logging.h>
8 #include <gtest/gtest.h>
9
10 namespace android {
11 namespace dvr {
12
13 namespace {
14
15 class DvrNamedBufferTest : public ::testing::Test {
16 protected:
SetUp()17 void SetUp() override {
18 const int ret = dvrDisplayManagerCreate(&client_);
19 ASSERT_EQ(0, ret);
20 ASSERT_NE(nullptr, client_);
21 }
22
TearDown()23 void TearDown() override {
24 dvrDisplayManagerDestroy(client_);
25 client_ = nullptr;
26 }
27
28 DvrDisplayManager* client_ = nullptr;
29 };
30
TEST_F(DvrNamedBufferTest,TestNamedBuffersSameName)31 TEST_F(DvrNamedBufferTest, TestNamedBuffersSameName) {
32 const char* buffer_name = "same_name";
33 DvrBuffer* buffer1 = nullptr;
34 int ret1 =
35 dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, 0, &buffer1);
36 ASSERT_EQ(0, ret1);
37 ASSERT_NE(nullptr, buffer1);
38
39 DvrBuffer* buffer2 = nullptr;
40 int ret2 =
41 dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, 0, &buffer2);
42 ASSERT_EQ(0, ret1);
43 ASSERT_NE(nullptr, buffer2);
44
45 AHardwareBuffer* hardware_buffer1 = nullptr;
46 int e1 = dvrBufferGetAHardwareBuffer(buffer1, &hardware_buffer1);
47 ASSERT_EQ(0, e1);
48 ASSERT_NE(nullptr, hardware_buffer1);
49
50 AHardwareBuffer* hardware_buffer2 = nullptr;
51 int e2 = dvrBufferGetAHardwareBuffer(buffer2, &hardware_buffer2);
52 ASSERT_EQ(0, e2);
53 ASSERT_NE(nullptr, hardware_buffer2);
54
55 AHardwareBuffer_Desc desc1 = {};
56 AHardwareBuffer_describe(hardware_buffer1, &desc1);
57 AHardwareBuffer_Desc desc2 = {};
58 AHardwareBuffer_describe(hardware_buffer2, &desc2);
59 ASSERT_EQ(desc1.width, 10u);
60 ASSERT_EQ(desc1.height, 1u);
61 ASSERT_EQ(desc1.layers, 1u);
62 ASSERT_EQ(desc1.format, HAL_PIXEL_FORMAT_BLOB);
63 ASSERT_EQ(desc1.usage, 0u);
64 ASSERT_EQ(desc2.width, 10u);
65 ASSERT_EQ(desc2.height, 1u);
66 ASSERT_EQ(desc2.layers, 1u);
67 ASSERT_EQ(desc2.format, HAL_PIXEL_FORMAT_BLOB);
68 ASSERT_EQ(desc2.usage, 0u);
69
70 dvrBufferDestroy(buffer1);
71 dvrBufferDestroy(buffer2);
72
73 DvrBuffer* buffer3 = nullptr;
74 int e3 = dvrGetNamedBuffer(buffer_name, &buffer3);
75 ASSERT_NE(nullptr, buffer3);
76 ASSERT_EQ(0, e3);
77
78 AHardwareBuffer* hardware_buffer3 = nullptr;
79 int e4 = dvrBufferGetAHardwareBuffer(buffer3, &hardware_buffer3);
80 ASSERT_EQ(0, e4);
81 ASSERT_NE(nullptr, hardware_buffer3);
82
83 AHardwareBuffer_Desc desc3 = {};
84 AHardwareBuffer_describe(hardware_buffer3, &desc3);
85 ASSERT_EQ(desc3.width, 10u);
86 ASSERT_EQ(desc3.height, 1u);
87 ASSERT_EQ(desc3.layers, 1u);
88 ASSERT_EQ(desc3.format, HAL_PIXEL_FORMAT_BLOB);
89 ASSERT_EQ(desc3.usage, 0u);
90
91 dvrBufferDestroy(buffer3);
92
93 AHardwareBuffer_release(hardware_buffer1);
94 AHardwareBuffer_release(hardware_buffer2);
95 AHardwareBuffer_release(hardware_buffer3);
96 }
97
TEST_F(DvrNamedBufferTest,TestMultipleNamedBuffers)98 TEST_F(DvrNamedBufferTest, TestMultipleNamedBuffers) {
99 const char* buffer_name1 = "test1";
100 const char* buffer_name2 = "test2";
101 DvrBuffer* setup_buffer1 = nullptr;
102 int ret1 = dvrDisplayManagerSetupNamedBuffer(client_, buffer_name1, 10, 0,
103 &setup_buffer1);
104 ASSERT_EQ(0, ret1);
105 ASSERT_NE(nullptr, setup_buffer1);
106 dvrBufferDestroy(setup_buffer1);
107
108 DvrBuffer* setup_buffer2 = nullptr;
109 int ret2 = dvrDisplayManagerSetupNamedBuffer(client_, buffer_name2, 10, 0,
110 &setup_buffer2);
111 ASSERT_EQ(0, ret2);
112 ASSERT_NE(nullptr, setup_buffer2);
113 dvrBufferDestroy(setup_buffer2);
114
115 DvrBuffer* buffer1 = nullptr;
116 int e1 = dvrGetNamedBuffer(buffer_name1, &buffer1);
117 ASSERT_NE(nullptr, buffer1);
118 ASSERT_EQ(0, e1);
119 dvrBufferDestroy(buffer1);
120
121 DvrBuffer* buffer2 = nullptr;
122 int e2 = dvrGetNamedBuffer(buffer_name2, &buffer2);
123 ASSERT_NE(nullptr, buffer2);
124 ASSERT_EQ(0, e2);
125 dvrBufferDestroy(buffer2);
126 }
127
TEST_F(DvrNamedBufferTest,TestNamedBufferUsage)128 TEST_F(DvrNamedBufferTest, TestNamedBufferUsage) {
129 const char* buffer_name = "buffer_usage";
130
131 // Set usage to AHARDWAREBUFFER_USAGE_VIDEO_ENCODE. We use this because
132 // internally AHARDWAREBUFFER_USAGE_VIDEO_ENCODE is converted to
133 // GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER, and these two values are different.
134 // If all is good, when we get the AHardwareBuffer, it should be converted
135 // back to AHARDWAREBUFFER_USAGE_VIDEO_ENCODE.
136 const uint64_t usage = AHARDWAREBUFFER_USAGE_VIDEO_ENCODE;
137
138 DvrBuffer* setup_buffer = nullptr;
139 int e1 = dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, usage,
140 &setup_buffer);
141 ASSERT_NE(nullptr, setup_buffer);
142 ASSERT_EQ(0, e1);
143
144 AHardwareBuffer* hardware_buffer = nullptr;
145 int e2 = dvrBufferGetAHardwareBuffer(setup_buffer, &hardware_buffer);
146 ASSERT_EQ(0, e2);
147 ASSERT_NE(nullptr, hardware_buffer);
148
149 AHardwareBuffer_Desc desc = {};
150 AHardwareBuffer_describe(hardware_buffer, &desc);
151 ASSERT_EQ(usage, desc.usage);
152
153 dvrBufferDestroy(setup_buffer);
154 AHardwareBuffer_release(hardware_buffer);
155 }
156
157 } // namespace
158
159 } // namespace dvr
160 } // namespace android
161