• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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