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