1eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar#include <android/hardware_buffer.h>
2eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar#include <dvr/dvr_buffer.h>
32251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <dvr/dvr_display_manager.h>
4eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar#include <dvr/dvr_surface.h>
5eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar#include <system/graphics.h>
6eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
7eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar#include <base/logging.h>
8eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar#include <gtest/gtest.h>
9eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
10eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaarnamespace android {
11eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaarnamespace dvr {
12eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
13eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaarnamespace {
14eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
15eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaarclass DvrNamedBufferTest : public ::testing::Test {
16eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar protected:
17eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  void SetUp() override {
182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    const int ret = dvrDisplayManagerCreate(&client_);
192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    ASSERT_EQ(0, ret);
20eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar    ASSERT_NE(nullptr, client_);
21eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  }
22eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
23eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  void TearDown() override {
242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    dvrDisplayManagerDestroy(client_);
252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    client_ = nullptr;
26eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  }
27eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
282251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  DvrDisplayManager* client_ = nullptr;
29eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar};
30eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
31eaa5522feac452703a0836310047d4b15702487dHendrik WagenaarTEST_F(DvrNamedBufferTest, TestNamedBuffersSameName) {
32eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  const char* buffer_name = "same_name";
332251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  DvrBuffer* buffer1 = nullptr;
342251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  int ret1 =
352251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, 0, &buffer1);
362251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  ASSERT_EQ(0, ret1);
37eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_NE(nullptr, buffer1);
38eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  DvrBuffer* buffer2 = nullptr;
402251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  int ret2 =
412251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, 0, &buffer2);
422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  ASSERT_EQ(0, ret1);
43eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_NE(nullptr, buffer2);
44eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
45eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer* hardware_buffer1 = nullptr;
46eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  int e1 = dvrBufferGetAHardwareBuffer(buffer1, &hardware_buffer1);
47eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(0, e1);
48a5d404d8d4f6bb4efa95eaf6d857bc03224606fbHendrik Wagenaar  ASSERT_NE(nullptr, hardware_buffer1);
49eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
50eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer* hardware_buffer2 = nullptr;
51eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  int e2 = dvrBufferGetAHardwareBuffer(buffer2, &hardware_buffer2);
52eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(0, e2);
53a5d404d8d4f6bb4efa95eaf6d857bc03224606fbHendrik Wagenaar  ASSERT_NE(nullptr, hardware_buffer2);
54eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
55eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer_Desc desc1 = {};
56eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer_describe(hardware_buffer1, &desc1);
57eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer_Desc desc2 = {};
58eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer_describe(hardware_buffer2, &desc2);
59eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc1.width, 10u);
60eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc1.height, 1u);
61eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc1.layers, 1u);
62eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc1.format, HAL_PIXEL_FORMAT_BLOB);
632c38b56d19f464142e32030b99ac56afd47ab7cdMathias Agopian  ASSERT_EQ(desc1.usage, 0u);
64eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc2.width, 10u);
65eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc2.height, 1u);
66eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc2.layers, 1u);
67eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc2.format, HAL_PIXEL_FORMAT_BLOB);
682c38b56d19f464142e32030b99ac56afd47ab7cdMathias Agopian  ASSERT_EQ(desc2.usage, 0u);
69eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
70eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  dvrBufferDestroy(buffer1);
71eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  dvrBufferDestroy(buffer2);
72eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
73eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  DvrBuffer* buffer3 = nullptr;
74eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  int e3 = dvrGetNamedBuffer(buffer_name, &buffer3);
75eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_NE(nullptr, buffer3);
76eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(0, e3);
77eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
78eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer* hardware_buffer3 = nullptr;
790057fddc71d1c3c3de8f9d0bd45a51bb293bfa3cJiwen 'Steve' Cai  int e4 = dvrBufferGetAHardwareBuffer(buffer3, &hardware_buffer3);
80eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(0, e4);
81eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_NE(nullptr, hardware_buffer3);
82eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
83eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer_Desc desc3 = {};
84eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  AHardwareBuffer_describe(hardware_buffer3, &desc3);
85eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc3.width, 10u);
86eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc3.height, 1u);
87eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc3.layers, 1u);
88eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(desc3.format, HAL_PIXEL_FORMAT_BLOB);
892c38b56d19f464142e32030b99ac56afd47ab7cdMathias Agopian  ASSERT_EQ(desc3.usage, 0u);
90eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
91eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  dvrBufferDestroy(buffer3);
92a5d404d8d4f6bb4efa95eaf6d857bc03224606fbHendrik Wagenaar
93a5d404d8d4f6bb4efa95eaf6d857bc03224606fbHendrik Wagenaar  AHardwareBuffer_release(hardware_buffer1);
94a5d404d8d4f6bb4efa95eaf6d857bc03224606fbHendrik Wagenaar  AHardwareBuffer_release(hardware_buffer2);
95a5d404d8d4f6bb4efa95eaf6d857bc03224606fbHendrik Wagenaar  AHardwareBuffer_release(hardware_buffer3);
96eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar}
97eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
98eaa5522feac452703a0836310047d4b15702487dHendrik WagenaarTEST_F(DvrNamedBufferTest, TestMultipleNamedBuffers) {
99eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  const char* buffer_name1 = "test1";
100eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  const char* buffer_name2 = "test2";
1012251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  DvrBuffer* setup_buffer1 = nullptr;
1022251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  int ret1 = dvrDisplayManagerSetupNamedBuffer(client_, buffer_name1, 10, 0,
1032251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                               &setup_buffer1);
1042251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  ASSERT_EQ(0, ret1);
105eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_NE(nullptr, setup_buffer1);
106eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  dvrBufferDestroy(setup_buffer1);
107eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
1082251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  DvrBuffer* setup_buffer2 = nullptr;
1092251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  int ret2 = dvrDisplayManagerSetupNamedBuffer(client_, buffer_name2, 10, 0,
1102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                               &setup_buffer2);
1112251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  ASSERT_EQ(0, ret2);
112eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_NE(nullptr, setup_buffer2);
113eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  dvrBufferDestroy(setup_buffer2);
114eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
115eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  DvrBuffer* buffer1 = nullptr;
116eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  int e1 = dvrGetNamedBuffer(buffer_name1, &buffer1);
117eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_NE(nullptr, buffer1);
118eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(0, e1);
119eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  dvrBufferDestroy(buffer1);
120eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
121eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  DvrBuffer* buffer2 = nullptr;
122eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  int e2 = dvrGetNamedBuffer(buffer_name2, &buffer2);
123eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_NE(nullptr, buffer2);
124eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  ASSERT_EQ(0, e2);
125eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar  dvrBufferDestroy(buffer2);
126eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar}
127eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
128db5763834df1b6a1a3aef9442982451f7505f402Hendrik WagenaarTEST_F(DvrNamedBufferTest, TestNamedBufferUsage) {
129db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  const char* buffer_name = "buffer_usage";
130db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar
1312c38b56d19f464142e32030b99ac56afd47ab7cdMathias Agopian  // Set usage to AHARDWAREBUFFER_USAGE_VIDEO_ENCODE. We use this because
1322c38b56d19f464142e32030b99ac56afd47ab7cdMathias Agopian  // internally AHARDWAREBUFFER_USAGE_VIDEO_ENCODE is converted to
133db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  // GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER, and these two values are different.
134db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  // If all is good, when we get the AHardwareBuffer, it should be converted
1352c38b56d19f464142e32030b99ac56afd47ab7cdMathias Agopian  // back to AHARDWAREBUFFER_USAGE_VIDEO_ENCODE.
1362251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  const uint64_t usage = AHARDWAREBUFFER_USAGE_VIDEO_ENCODE;
137db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar
1382251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  DvrBuffer* setup_buffer = nullptr;
1392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  int e1 = dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, usage,
1402251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                             &setup_buffer);
141db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  ASSERT_NE(nullptr, setup_buffer);
1422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  ASSERT_EQ(0, e1);
143db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar
144db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  AHardwareBuffer* hardware_buffer = nullptr;
145db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  int e2 = dvrBufferGetAHardwareBuffer(setup_buffer, &hardware_buffer);
146db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  ASSERT_EQ(0, e2);
147db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  ASSERT_NE(nullptr, hardware_buffer);
148db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar
149db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  AHardwareBuffer_Desc desc = {};
150db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  AHardwareBuffer_describe(hardware_buffer, &desc);
1512251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka  ASSERT_EQ(usage, desc.usage);
152db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar
153db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar  dvrBufferDestroy(setup_buffer);
154a5d404d8d4f6bb4efa95eaf6d857bc03224606fbHendrik Wagenaar  AHardwareBuffer_release(hardware_buffer);
155db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar}
156db5763834df1b6a1a3aef9442982451f7505f402Hendrik Wagenaar
157eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar}  // namespace
158eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar
159eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar}  // namespace dvr
160eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar}  // namespace android
161