132a6e48fSopenharmony_ci/* 232a6e48fSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 332a6e48fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 432a6e48fSopenharmony_ci * you may not use this file except in compliance with the License. 532a6e48fSopenharmony_ci * You may obtain a copy of the License at 632a6e48fSopenharmony_ci * 732a6e48fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 832a6e48fSopenharmony_ci * 932a6e48fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1032a6e48fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1132a6e48fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1232a6e48fSopenharmony_ci * See the License for the specific language governing permissions and 1332a6e48fSopenharmony_ci * limitations under the License. 1432a6e48fSopenharmony_ci */ 1532a6e48fSopenharmony_ci#include <gtest/gtest.h> 1632a6e48fSopenharmony_ci#include "iconsumer_surface.h" 1732a6e48fSopenharmony_ci#include <iservice_registry.h> 1832a6e48fSopenharmony_ci#include <ctime> 1932a6e48fSopenharmony_ci#include "native_buffer.h" 2032a6e48fSopenharmony_ci#include "native_buffer_inner.h" 2132a6e48fSopenharmony_ci#include "native_window.h" 2232a6e48fSopenharmony_ci#include "surface_type.h" 2332a6e48fSopenharmony_ci#include "graphic_common_c.h" 2432a6e48fSopenharmony_ci 2532a6e48fSopenharmony_ciusing namespace std; 2632a6e48fSopenharmony_ciusing namespace testing; 2732a6e48fSopenharmony_ciusing namespace testing::ext; 2832a6e48fSopenharmony_ci 2932a6e48fSopenharmony_cinamespace OHOS::Rosen { 3032a6e48fSopenharmony_ciclass BufferConsumerListener : public IBufferConsumerListener { 3132a6e48fSopenharmony_cipublic: 3232a6e48fSopenharmony_ci void OnBufferAvailable() override 3332a6e48fSopenharmony_ci { 3432a6e48fSopenharmony_ci } 3532a6e48fSopenharmony_ci}; 3632a6e48fSopenharmony_ci 3732a6e48fSopenharmony_ciclass NativeBufferTest : public testing::Test { 3832a6e48fSopenharmony_cipublic: 3932a6e48fSopenharmony_ci static void SetUpTestCase(); 4032a6e48fSopenharmony_ci static void TearDownTestCase(); 4132a6e48fSopenharmony_ci 4232a6e48fSopenharmony_ci static inline OH_NativeBuffer_Config config = { 4332a6e48fSopenharmony_ci .width = 0x100, 4432a6e48fSopenharmony_ci .height = 0x100, 4532a6e48fSopenharmony_ci .format = GRAPHIC_PIXEL_FMT_RGBA_8888, 4632a6e48fSopenharmony_ci .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA, 4732a6e48fSopenharmony_ci }; 4832a6e48fSopenharmony_ci static inline OH_NativeBuffer_Config checkConfig = {}; 4932a6e48fSopenharmony_ci static inline OH_NativeBuffer* buffer = nullptr; 5032a6e48fSopenharmony_ci}; 5132a6e48fSopenharmony_ci 5232a6e48fSopenharmony_civoid NativeBufferTest::SetUpTestCase() 5332a6e48fSopenharmony_ci{ 5432a6e48fSopenharmony_ci buffer = nullptr; 5532a6e48fSopenharmony_ci} 5632a6e48fSopenharmony_ci 5732a6e48fSopenharmony_civoid NativeBufferTest::TearDownTestCase() 5832a6e48fSopenharmony_ci{ 5932a6e48fSopenharmony_ci buffer = nullptr; 6032a6e48fSopenharmony_ci} 6132a6e48fSopenharmony_ci 6232a6e48fSopenharmony_ci/* 6332a6e48fSopenharmony_ci* Function: OH_NativeBufferFromSurfaceBuffer 6432a6e48fSopenharmony_ci* Type: Function 6532a6e48fSopenharmony_ci* Rank: Important(2) 6632a6e48fSopenharmony_ci* EnvConditions: N/A 6732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBufferFromSurfaceBuffer by abnormal input 6832a6e48fSopenharmony_ci* 2. check ret 6932a6e48fSopenharmony_ci*/ 7032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBufferFromSurfaceBuffer001, Function | MediumTest | Level2) 7132a6e48fSopenharmony_ci{ 7232a6e48fSopenharmony_ci sptr<OHOS::SurfaceBuffer> surfaceBuffer = OHOS::SurfaceBuffer::Create(); 7332a6e48fSopenharmony_ci NativeWindowBuffer* nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&surfaceBuffer); 7432a6e48fSopenharmony_ci ASSERT_NE(nativeWindowBuffer, nullptr); 7532a6e48fSopenharmony_ci nativeWindowBuffer->sfbuffer = nullptr; 7632a6e48fSopenharmony_ci OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer); 7732a6e48fSopenharmony_ci ASSERT_EQ(nativeBuffer, nullptr); 7832a6e48fSopenharmony_ci} 7932a6e48fSopenharmony_ci 8032a6e48fSopenharmony_ci/* 8132a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Alloc 8232a6e48fSopenharmony_ci* Type: Function 8332a6e48fSopenharmony_ci* Rank: Important(2) 8432a6e48fSopenharmony_ci* EnvConditions: N/A 8532a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Alloc by abnormal input 8632a6e48fSopenharmony_ci* 2. check ret 8732a6e48fSopenharmony_ci*/ 8832a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferAlloc001, Function | MediumTest | Level2) 8932a6e48fSopenharmony_ci{ 9032a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(nullptr); 9132a6e48fSopenharmony_ci ASSERT_EQ(buffer, nullptr); 9232a6e48fSopenharmony_ci} 9332a6e48fSopenharmony_ci 9432a6e48fSopenharmony_ci/* 9532a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Alloc 9632a6e48fSopenharmony_ci* Type: Function 9732a6e48fSopenharmony_ci* Rank: Important(2) 9832a6e48fSopenharmony_ci* EnvConditions: N/A 9932a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Alloc 10032a6e48fSopenharmony_ci* 2. check ret 10132a6e48fSopenharmony_ci*/ 10232a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferAlloc002, Function | MediumTest | Level2) 10332a6e48fSopenharmony_ci{ 10432a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(&config); 10532a6e48fSopenharmony_ci ASSERT_NE(buffer, nullptr); 10632a6e48fSopenharmony_ci} 10732a6e48fSopenharmony_ci 10832a6e48fSopenharmony_ci/* 10932a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetSeqNum 11032a6e48fSopenharmony_ci* Type: Function 11132a6e48fSopenharmony_ci* Rank: Important(2) 11232a6e48fSopenharmony_ci* EnvConditions: N/A 11332a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetSeqNum by abnormal input 11432a6e48fSopenharmony_ci* 2. check ret 11532a6e48fSopenharmony_ci*/ 11632a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum001, Function | MediumTest | Level2) 11732a6e48fSopenharmony_ci{ 11832a6e48fSopenharmony_ci uint32_t id = OH_NativeBuffer_GetSeqNum(nullptr); 11932a6e48fSopenharmony_ci ASSERT_EQ(id, UINT_MAX); 12032a6e48fSopenharmony_ci} 12132a6e48fSopenharmony_ci 12232a6e48fSopenharmony_ci/* 12332a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetSeqNum 12432a6e48fSopenharmony_ci* Type: Function 12532a6e48fSopenharmony_ci* Rank: Important(2) 12632a6e48fSopenharmony_ci* EnvConditions: N/A 12732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetSeqNum 12832a6e48fSopenharmony_ci* 2. check ret 12932a6e48fSopenharmony_ci*/ 13032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum002, Function | MediumTest | Level2) 13132a6e48fSopenharmony_ci{ 13232a6e48fSopenharmony_ci uint32_t id = OH_NativeBuffer_GetSeqNum(buffer); 13332a6e48fSopenharmony_ci ASSERT_NE(id, GSERROR_INVALID_ARGUMENTS); 13432a6e48fSopenharmony_ci} 13532a6e48fSopenharmony_ci 13632a6e48fSopenharmony_ci/* 13732a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetConfig 13832a6e48fSopenharmony_ci* Type: Function 13932a6e48fSopenharmony_ci* Rank: Important(2) 14032a6e48fSopenharmony_ci* EnvConditions: N/A 14132a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetConfig 14232a6e48fSopenharmony_ci* 2. check ret 14332a6e48fSopenharmony_ci */ 14432a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetConfig001, Function | MediumTest | Level2) 14532a6e48fSopenharmony_ci{ 14632a6e48fSopenharmony_ci OH_NativeBuffer_GetConfig(buffer, &checkConfig); 14732a6e48fSopenharmony_ci ASSERT_NE(&checkConfig, nullptr); 14832a6e48fSopenharmony_ci} 14932a6e48fSopenharmony_ci 15032a6e48fSopenharmony_ci/* 15132a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetConfig 15232a6e48fSopenharmony_ci* Type: Function 15332a6e48fSopenharmony_ci* Rank: Important(2) 15432a6e48fSopenharmony_ci* EnvConditions: N/A 15532a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetConfig by abnormal input 15632a6e48fSopenharmony_ci* 2. check ret 15732a6e48fSopenharmony_ci*/ 15832a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetConfig002, Function | MediumTest | Level2) 15932a6e48fSopenharmony_ci{ 16032a6e48fSopenharmony_ci checkConfig.width = 0x0; 16132a6e48fSopenharmony_ci checkConfig.height = 0x0; 16232a6e48fSopenharmony_ci checkConfig.format = 0x0; 16332a6e48fSopenharmony_ci checkConfig.usage = 0x0; 16432a6e48fSopenharmony_ci OH_NativeBuffer_GetConfig(nullptr, &checkConfig); 16532a6e48fSopenharmony_ci ASSERT_EQ(checkConfig.width, 0x0); 16632a6e48fSopenharmony_ci ASSERT_EQ(checkConfig.height, 0x0); 16732a6e48fSopenharmony_ci ASSERT_EQ(checkConfig.format, 0x0); 16832a6e48fSopenharmony_ci ASSERT_EQ(checkConfig.usage, 0x0); 16932a6e48fSopenharmony_ci} 17032a6e48fSopenharmony_ci 17132a6e48fSopenharmony_ci/* 17232a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Reference 17332a6e48fSopenharmony_ci* Type: Function 17432a6e48fSopenharmony_ci* Rank: Important(2) 17532a6e48fSopenharmony_ci* EnvConditions: N/A 17632a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Reference by abnormal input 17732a6e48fSopenharmony_ci* 2. check ret 17832a6e48fSopenharmony_ci*/ 17932a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferReference001, Function | MediumTest | Level2) 18032a6e48fSopenharmony_ci{ 18132a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Reference(nullptr); 18232a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 18332a6e48fSopenharmony_ci} 18432a6e48fSopenharmony_ci 18532a6e48fSopenharmony_ci/* 18632a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Reference 18732a6e48fSopenharmony_ci* Type: Function 18832a6e48fSopenharmony_ci* Rank: Important(2) 18932a6e48fSopenharmony_ci* EnvConditions: N/A 19032a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Reference 19132a6e48fSopenharmony_ci* 2. check ret 19232a6e48fSopenharmony_ci*/ 19332a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferReference002, Function | MediumTest | Level2) 19432a6e48fSopenharmony_ci{ 19532a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Reference(buffer); 19632a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 19732a6e48fSopenharmony_ci} 19832a6e48fSopenharmony_ci 19932a6e48fSopenharmony_ci/* 20032a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Unreference 20132a6e48fSopenharmony_ci* Type: Function 20232a6e48fSopenharmony_ci* Rank: Important(2) 20332a6e48fSopenharmony_ci* EnvConditions: N/A 20432a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Unreference by abnormal input 20532a6e48fSopenharmony_ci* 2. check ret 20632a6e48fSopenharmony_ci*/ 20732a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferUnreference001, Function | MediumTest | Level2) 20832a6e48fSopenharmony_ci{ 20932a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Unreference(nullptr); 21032a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 21132a6e48fSopenharmony_ci} 21232a6e48fSopenharmony_ci 21332a6e48fSopenharmony_ci/* 21432a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Unreference 21532a6e48fSopenharmony_ci* Type: Function 21632a6e48fSopenharmony_ci* Rank: Important(2) 21732a6e48fSopenharmony_ci* EnvConditions: N/A 21832a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Unreference 21932a6e48fSopenharmony_ci* 2. check ret 22032a6e48fSopenharmony_ci*/ 22132a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferUnreference002, Function | MediumTest | Level2) 22232a6e48fSopenharmony_ci{ 22332a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Unreference(buffer); 22432a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 22532a6e48fSopenharmony_ci} 22632a6e48fSopenharmony_ci 22732a6e48fSopenharmony_ci/* 22832a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetSeqNum and OH_NativeBuffer_Unreference 22932a6e48fSopenharmony_ci* Type: Function 23032a6e48fSopenharmony_ci* Rank: Important(2) 23132a6e48fSopenharmony_ci* EnvConditions: N/A 23232a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetSeqNum 23332a6e48fSopenharmony_ci* 2. call OH_NativeBuffer_Unreference 23432a6e48fSopenharmony_ci* 3. OH_NativeBuffer_Alloc again 23532a6e48fSopenharmony_ci* 4. check OH_NativeBuffer_GetSeqNum = oldSeq + 1 23632a6e48fSopenharmony_ci*/ 23732a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetSeqNum003, Function | MediumTest | Level2) 23832a6e48fSopenharmony_ci{ 23932a6e48fSopenharmony_ci uint32_t oldSeq = OH_NativeBuffer_GetSeqNum(buffer); 24032a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Unreference(buffer); 24132a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 24232a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(&config); 24332a6e48fSopenharmony_ci ASSERT_EQ(oldSeq + 1, OH_NativeBuffer_GetSeqNum(buffer)); 24432a6e48fSopenharmony_ci} 24532a6e48fSopenharmony_ci 24632a6e48fSopenharmony_ci/* 24732a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetNativeBufferConfig 24832a6e48fSopenharmony_ci* Type: Function 24932a6e48fSopenharmony_ci* Rank: Important(2) 25032a6e48fSopenharmony_ci* EnvConditions: N/A 25132a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetNativeBufferConfig 25232a6e48fSopenharmony_ci* 2. check result 25332a6e48fSopenharmony_ci*/ 25432a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetNativeBufferConfig001, Function | MediumTest | Level2) 25532a6e48fSopenharmony_ci{ 25632a6e48fSopenharmony_ci OH_NativeBuffer_Config testConfig = {}; 25732a6e48fSopenharmony_ci OH_NativeBuffer_GetNativeBufferConfig(buffer, &testConfig); 25832a6e48fSopenharmony_ci ASSERT_EQ(testConfig.width, config.width); 25932a6e48fSopenharmony_ci ASSERT_EQ(testConfig.height, config.height); 26032a6e48fSopenharmony_ci ASSERT_EQ(testConfig.format, config.format); 26132a6e48fSopenharmony_ci ASSERT_EQ(testConfig.usage, config.usage); 26232a6e48fSopenharmony_ci} 26332a6e48fSopenharmony_ci 26432a6e48fSopenharmony_ci/* 26532a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetColorSpace 26632a6e48fSopenharmony_ci* Type: Function 26732a6e48fSopenharmony_ci* Rank: Important(2) 26832a6e48fSopenharmony_ci* EnvConditions: N/A 26932a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetColorSpace by abnormal input 27032a6e48fSopenharmony_ci* 2. check ret 27132a6e48fSopenharmony_ci*/ 27232a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferSetColorSpace001, Function | MediumTest | Level2) 27332a6e48fSopenharmony_ci{ 27432a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_SetColorSpace(nullptr, OH_COLORSPACE_DISPLAY_BT2020_PQ); 27532a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 27632a6e48fSopenharmony_ci} 27732a6e48fSopenharmony_ci 27832a6e48fSopenharmony_ci/* 27932a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetColorSpace 28032a6e48fSopenharmony_ci* Type: Function 28132a6e48fSopenharmony_ci* Rank: Important(2) 28232a6e48fSopenharmony_ci* EnvConditions: N/A 28332a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetColorSpace 28432a6e48fSopenharmony_ci* 2. check ret 28532a6e48fSopenharmony_ci*/ 28632a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferSetColorSpace002, Function | MediumTest | Level2) 28732a6e48fSopenharmony_ci{ 28832a6e48fSopenharmony_ci if (buffer == nullptr) { 28932a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(&config); 29032a6e48fSopenharmony_ci ASSERT_NE(buffer, nullptr); 29132a6e48fSopenharmony_ci } 29232a6e48fSopenharmony_ci 29332a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT); 29432a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 29532a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 29632a6e48fSopenharmony_ci } 29732a6e48fSopenharmony_ci} 29832a6e48fSopenharmony_ci 29932a6e48fSopenharmony_ci/* 30032a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetColorSpace 30132a6e48fSopenharmony_ci* Type: Function 30232a6e48fSopenharmony_ci* Rank: Important(2) 30332a6e48fSopenharmony_ci* EnvConditions: N/A 30432a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetColorSpace by abnormal input 30532a6e48fSopenharmony_ci* 2. check ret 30632a6e48fSopenharmony_ci*/ 30732a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace001, Function | MediumTest | Level2) 30832a6e48fSopenharmony_ci{ 30932a6e48fSopenharmony_ci OH_NativeBuffer_ColorSpace *colorSpace = nullptr; 31032a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_GetColorSpace(nullptr, colorSpace); 31132a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 31232a6e48fSopenharmony_ci} 31332a6e48fSopenharmony_ci 31432a6e48fSopenharmony_ci/* 31532a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetColorSpace 31632a6e48fSopenharmony_ci* Type: Function 31732a6e48fSopenharmony_ci* Rank: Important(2) 31832a6e48fSopenharmony_ci* EnvConditions: N/A 31932a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetColorSpace 32032a6e48fSopenharmony_ci* 2. check ret 32132a6e48fSopenharmony_ci*/ 32232a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace002, Function | MediumTest | Level2) 32332a6e48fSopenharmony_ci{ 32432a6e48fSopenharmony_ci if (buffer == nullptr) { 32532a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(&config); 32632a6e48fSopenharmony_ci ASSERT_NE(buffer, nullptr); 32732a6e48fSopenharmony_ci } 32832a6e48fSopenharmony_ci OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE; 32932a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT); 33032a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 33132a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 33232a6e48fSopenharmony_ci } 33332a6e48fSopenharmony_ci ret = OH_NativeBuffer_GetColorSpace(buffer, &colorSpace); 33432a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 33532a6e48fSopenharmony_ci ASSERT_EQ(colorSpace, OH_COLORSPACE_BT709_LIMIT); 33632a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 33732a6e48fSopenharmony_ci } 33832a6e48fSopenharmony_ci} 33932a6e48fSopenharmony_ci 34032a6e48fSopenharmony_ci/* 34132a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetColorSpace 34232a6e48fSopenharmony_ci* Type: Function 34332a6e48fSopenharmony_ci* Rank: Important(2) 34432a6e48fSopenharmony_ci* EnvConditions: N/A 34532a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetColorSpace 34632a6e48fSopenharmony_ci* 2. check ret 34732a6e48fSopenharmony_ci*/ 34832a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferGetColorSpace003, Function | MediumTest | Level2) 34932a6e48fSopenharmony_ci{ 35032a6e48fSopenharmony_ci if (buffer == nullptr) { 35132a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(&config); 35232a6e48fSopenharmony_ci ASSERT_NE(buffer, nullptr); 35332a6e48fSopenharmony_ci } 35432a6e48fSopenharmony_ci OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE; 35532a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_GetColorSpace(buffer, &colorSpace); 35632a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 35732a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 35832a6e48fSopenharmony_ci } 35932a6e48fSopenharmony_ci ret = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT); 36032a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 36132a6e48fSopenharmony_ci ASSERT_EQ(colorSpace, OH_COLORSPACE_BT709_LIMIT); 36232a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 36332a6e48fSopenharmony_ci } 36432a6e48fSopenharmony_ci} 36532a6e48fSopenharmony_ci 36632a6e48fSopenharmony_ci/* 36732a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetMetadataValue 36832a6e48fSopenharmony_ci* Type: Function 36932a6e48fSopenharmony_ci* Rank: Important(2) 37032a6e48fSopenharmony_ci* EnvConditions: N/A 37132a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue by abnormal input 37232a6e48fSopenharmony_ci* 2. check ret 37332a6e48fSopenharmony_ci*/ 37432a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue001, Function | MediumTest | Level2) 37532a6e48fSopenharmony_ci{ 37632a6e48fSopenharmony_ci int32_t size = 1024; 37732a6e48fSopenharmony_ci uint8_t buff[size]; 37832a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, size, buff); 37932a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 38032a6e48fSopenharmony_ci} 38132a6e48fSopenharmony_ci 38232a6e48fSopenharmony_ci/* 38332a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetMetadataValue 38432a6e48fSopenharmony_ci* Type: Function 38532a6e48fSopenharmony_ci* Rank: Important(2) 38632a6e48fSopenharmony_ci* EnvConditions: N/A 38732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue 38832a6e48fSopenharmony_ci* 2. check ret 38932a6e48fSopenharmony_ci*/ 39032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue002, Function | MediumTest | Level2) 39132a6e48fSopenharmony_ci{ 39232a6e48fSopenharmony_ci if (buffer == nullptr) { 39332a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(&config); 39432a6e48fSopenharmony_ci ASSERT_NE(buffer, nullptr); 39532a6e48fSopenharmony_ci } 39632a6e48fSopenharmony_ci int32_t len = 60; 39732a6e48fSopenharmony_ci uint8_t outbuff[len]; 39832a6e48fSopenharmony_ci for (int i = 0; i < 60; ++i) { 39932a6e48fSopenharmony_ci outbuff[i] = static_cast<uint8_t>(i); 40032a6e48fSopenharmony_ci } 40132a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_STATIC_METADATA, len, outbuff); 40232a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 40332a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 40432a6e48fSopenharmony_ci } 40532a6e48fSopenharmony_ci ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, len, outbuff); 40632a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 40732a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 40832a6e48fSopenharmony_ci } 40932a6e48fSopenharmony_ci} 41032a6e48fSopenharmony_ci 41132a6e48fSopenharmony_ci/* 41232a6e48fSopenharmony_ci* Function: OH_NativeBuffer_SetMetadataValue 41332a6e48fSopenharmony_ci* Type: Function 41432a6e48fSopenharmony_ci* Rank: Important(2) 41532a6e48fSopenharmony_ci* EnvConditions: N/A 41632a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_SetMetadataValue by abnormal input 41732a6e48fSopenharmony_ci* 2. check ret 41832a6e48fSopenharmony_ci*/ 41932a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_SetMetadataValue003, Function | MediumTest | Level2) 42032a6e48fSopenharmony_ci{ 42132a6e48fSopenharmony_ci int32_t max_size = -1; 42232a6e48fSopenharmony_ci int32_t size = 60; 42332a6e48fSopenharmony_ci uint8_t buff[size]; 42432a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, max_size, buff); 42532a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 42632a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 42732a6e48fSopenharmony_ci } 42832a6e48fSopenharmony_ci} 42932a6e48fSopenharmony_ci 43032a6e48fSopenharmony_ci/* 43132a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetMetadataValue 43232a6e48fSopenharmony_ci* Type: Function 43332a6e48fSopenharmony_ci* Rank: Important(2) 43432a6e48fSopenharmony_ci* EnvConditions: N/A 43532a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue by abnormal input 43632a6e48fSopenharmony_ci* 2. check ret 43732a6e48fSopenharmony_ci*/ 43832a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue001, Function | MediumTest | Level2) 43932a6e48fSopenharmony_ci{ 44032a6e48fSopenharmony_ci int32_t size = 1024; 44132a6e48fSopenharmony_ci uint8_t *buff; 44232a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_GetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, &size, &buff); 44332a6e48fSopenharmony_ci if (buff != nullptr) { 44432a6e48fSopenharmony_ci delete[] buff; 44532a6e48fSopenharmony_ci buff = nullptr; 44632a6e48fSopenharmony_ci } 44732a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 44832a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 44932a6e48fSopenharmony_ci } 45032a6e48fSopenharmony_ci} 45132a6e48fSopenharmony_ci 45232a6e48fSopenharmony_ci/* 45332a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetMetadataValue 45432a6e48fSopenharmony_ci* Type: Function 45532a6e48fSopenharmony_ci* Rank: Important(2) 45632a6e48fSopenharmony_ci* EnvConditions: N/A 45732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue 45832a6e48fSopenharmony_ci* 2. check ret 45932a6e48fSopenharmony_ci*/ 46032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue002, Function | MediumTest | Level2) 46132a6e48fSopenharmony_ci{ 46232a6e48fSopenharmony_ci if (buffer == nullptr) { 46332a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(&config); 46432a6e48fSopenharmony_ci ASSERT_NE(buffer, nullptr); 46532a6e48fSopenharmony_ci } 46632a6e48fSopenharmony_ci int32_t len = 60; 46732a6e48fSopenharmony_ci uint8_t outbuff[len]; 46832a6e48fSopenharmony_ci for (int i = 0; i < 60; ++i) { 46932a6e48fSopenharmony_ci outbuff[i] = static_cast<uint8_t>(i); 47032a6e48fSopenharmony_ci } 47132a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_STATIC_METADATA, len, outbuff); 47232a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 47332a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 47432a6e48fSopenharmony_ci } 47532a6e48fSopenharmony_ci int32_t buffSize = 0; 47632a6e48fSopenharmony_ci uint8_t *buff; 47732a6e48fSopenharmony_ci ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_STATIC_METADATA, &buffSize, &buff); 47832a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 47932a6e48fSopenharmony_ci if (buff != nullptr) { 48032a6e48fSopenharmony_ci ASSERT_EQ(memcmp(outbuff, buff, 60), 0); 48132a6e48fSopenharmony_ci delete[] buff; 48232a6e48fSopenharmony_ci buff = nullptr; 48332a6e48fSopenharmony_ci } 48432a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 48532a6e48fSopenharmony_ci } 48632a6e48fSopenharmony_ci ret = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, len, outbuff); 48732a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 48832a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 48932a6e48fSopenharmony_ci } 49032a6e48fSopenharmony_ci ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_DYNAMIC_METADATA, &buffSize, &buff); 49132a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 49232a6e48fSopenharmony_ci if (buff != nullptr) { 49332a6e48fSopenharmony_ci ASSERT_EQ(memcmp(outbuff, buff, 60), 0); 49432a6e48fSopenharmony_ci delete[] buff; 49532a6e48fSopenharmony_ci buff = nullptr; 49632a6e48fSopenharmony_ci } 49732a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 49832a6e48fSopenharmony_ci } 49932a6e48fSopenharmony_ci} 50032a6e48fSopenharmony_ci 50132a6e48fSopenharmony_ci/* 50232a6e48fSopenharmony_ci* Function: OH_NativeBuffer_GetMetadataValue 50332a6e48fSopenharmony_ci* Type: Function 50432a6e48fSopenharmony_ci* Rank: Important(2) 50532a6e48fSopenharmony_ci* EnvConditions: N/A 50632a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_GetMetadataValue 50732a6e48fSopenharmony_ci* 2. check ret 50832a6e48fSopenharmony_ci*/ 50932a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OH_NativeBuffer_GetMetadataValue003, Function | MediumTest | Level2) 51032a6e48fSopenharmony_ci{ 51132a6e48fSopenharmony_ci if (buffer == nullptr) { 51232a6e48fSopenharmony_ci buffer = OH_NativeBuffer_Alloc(&config); 51332a6e48fSopenharmony_ci ASSERT_NE(buffer, nullptr); 51432a6e48fSopenharmony_ci } 51532a6e48fSopenharmony_ci uint8_t *buff; 51632a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_STATIC_METADATA, nullptr, &buff); 51732a6e48fSopenharmony_ci if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace 51832a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 51932a6e48fSopenharmony_ci } 52032a6e48fSopenharmony_ci} 52132a6e48fSopenharmony_ci 52232a6e48fSopenharmony_ci/* 52332a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Map 52432a6e48fSopenharmony_ci* Type: Function 52532a6e48fSopenharmony_ci* Rank: Important(2) 52632a6e48fSopenharmony_ci* EnvConditions: N/A 52732a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Map by abnormal input 52832a6e48fSopenharmony_ci* 2. check ret 52932a6e48fSopenharmony_ci*/ 53032a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMap001, Function | MediumTest | Level2) 53132a6e48fSopenharmony_ci{ 53232a6e48fSopenharmony_ci void *virAddr = nullptr; 53332a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Map(nullptr, &virAddr); 53432a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 53532a6e48fSopenharmony_ci} 53632a6e48fSopenharmony_ci 53732a6e48fSopenharmony_ci/* 53832a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Map 53932a6e48fSopenharmony_ci* Type: Function 54032a6e48fSopenharmony_ci* Rank: Important(2) 54132a6e48fSopenharmony_ci* EnvConditions: N/A 54232a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Map 54332a6e48fSopenharmony_ci* 2. check ret 54432a6e48fSopenharmony_ci*/ 54532a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMap002, Function | MediumTest | Level2) 54632a6e48fSopenharmony_ci{ 54732a6e48fSopenharmony_ci void *virAddr = nullptr; 54832a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Map(buffer, &virAddr); 54932a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 55032a6e48fSopenharmony_ci ASSERT_NE(virAddr, nullptr); 55132a6e48fSopenharmony_ci} 55232a6e48fSopenharmony_ci 55332a6e48fSopenharmony_ci/* 55432a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Unmap 55532a6e48fSopenharmony_ci* Type: Function 55632a6e48fSopenharmony_ci* Rank: Important(2) 55732a6e48fSopenharmony_ci* EnvConditions: N/A 55832a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Unmap by abnormal input 55932a6e48fSopenharmony_ci* 2. check ret 56032a6e48fSopenharmony_ci*/ 56132a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferUnmap001, Function | MediumTest | Level2) 56232a6e48fSopenharmony_ci{ 56332a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Unmap(nullptr); 56432a6e48fSopenharmony_ci ASSERT_NE(ret, GSERROR_OK); 56532a6e48fSopenharmony_ci} 56632a6e48fSopenharmony_ci 56732a6e48fSopenharmony_ci/* 56832a6e48fSopenharmony_ci* Function: OH_NativeBuffer_Unmap and OH_NativeBuffer_Unreference 56932a6e48fSopenharmony_ci* Type: Function 57032a6e48fSopenharmony_ci* Rank: Important(2) 57132a6e48fSopenharmony_ci* EnvConditions: N/A 57232a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_Unmap 57332a6e48fSopenharmony_ci* 2. check ret 57432a6e48fSopenharmony_ci* 3. call OH_NativeBuffer_Unreference 57532a6e48fSopenharmony_ci*/ 57632a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferUnmap002, Function | MediumTest | Level2) 57732a6e48fSopenharmony_ci{ 57832a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_Unmap(buffer); 57932a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 58032a6e48fSopenharmony_ci ret = OH_NativeBuffer_Unreference(buffer); 58132a6e48fSopenharmony_ci ASSERT_EQ(ret, GSERROR_OK); 58232a6e48fSopenharmony_ci} 58332a6e48fSopenharmony_ci 58432a6e48fSopenharmony_ci/* 58532a6e48fSopenharmony_ci* Function: OH_NativeBufferFromNativeWindowBuffer 58632a6e48fSopenharmony_ci* Type: Function 58732a6e48fSopenharmony_ci* Rank: Important(2) 58832a6e48fSopenharmony_ci* EnvConditions: N/A 58932a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBufferFromNativeWindowBuffer by abnormal input 59032a6e48fSopenharmony_ci* 2. check ret 59132a6e48fSopenharmony_ci*/ 59232a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer001, Function | MediumTest | Level2) 59332a6e48fSopenharmony_ci{ 59432a6e48fSopenharmony_ci OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nullptr); 59532a6e48fSopenharmony_ci ASSERT_EQ(nativeBuffer, nullptr); 59632a6e48fSopenharmony_ci} 59732a6e48fSopenharmony_ci 59832a6e48fSopenharmony_ci/* 59932a6e48fSopenharmony_ci* Function: OH_NativeBufferFromNativeWindowBuffer 60032a6e48fSopenharmony_ci* Type: Function 60132a6e48fSopenharmony_ci* Rank: Important(2) 60232a6e48fSopenharmony_ci* EnvConditions: N/A 60332a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBufferFromNativeWindowBuffer 60432a6e48fSopenharmony_ci* 2. check ret 60532a6e48fSopenharmony_ci*/ 60632a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer002, Function | MediumTest | Level2) 60732a6e48fSopenharmony_ci{ 60832a6e48fSopenharmony_ci sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create(); 60932a6e48fSopenharmony_ci sptr<IBufferConsumerListener> listener = new BufferConsumerListener(); 61032a6e48fSopenharmony_ci cSurface->RegisterConsumerListener(listener); 61132a6e48fSopenharmony_ci sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer(); 61232a6e48fSopenharmony_ci sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer); 61332a6e48fSopenharmony_ci int32_t fence; 61432a6e48fSopenharmony_ci sptr<OHOS::SurfaceBuffer> sBuffer = nullptr; 61532a6e48fSopenharmony_ci BufferRequestConfig requestConfig = { 61632a6e48fSopenharmony_ci .width = 0x100, // small 61732a6e48fSopenharmony_ci .height = 0x100, // small 61832a6e48fSopenharmony_ci .strideAlignment = 0x8, 61932a6e48fSopenharmony_ci .format = GRAPHIC_PIXEL_FMT_RGBA_8888, 62032a6e48fSopenharmony_ci .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA, 62132a6e48fSopenharmony_ci .timeout = 0, 62232a6e48fSopenharmony_ci }; 62332a6e48fSopenharmony_ci pSurface->RequestBuffer(sBuffer, fence, requestConfig); 62432a6e48fSopenharmony_ci NativeWindow* nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface); 62532a6e48fSopenharmony_ci ASSERT_NE(nativeWindow, nullptr); 62632a6e48fSopenharmony_ci NativeWindowBuffer* nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer); 62732a6e48fSopenharmony_ci ASSERT_NE(nativeWindowBuffer, nullptr); 62832a6e48fSopenharmony_ci OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer); 62932a6e48fSopenharmony_ci ASSERT_NE(nativeBuffer, nullptr); 63032a6e48fSopenharmony_ci 63132a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, nullptr); 63232a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS); 63332a6e48fSopenharmony_ci OH_NativeBuffer* nativeBufferTmp = nullptr; 63432a6e48fSopenharmony_ci ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, &nativeBufferTmp); 63532a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_OK); 63632a6e48fSopenharmony_ci ASSERT_EQ(nativeBuffer, nativeBufferTmp); 63732a6e48fSopenharmony_ci 63832a6e48fSopenharmony_ci void *virAddr = nullptr; 63932a6e48fSopenharmony_ci OH_NativeBuffer_Planes outPlanes; 64032a6e48fSopenharmony_ci ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes); 64132a6e48fSopenharmony_ci if (ret != GSERROR_HDI_ERROR) { 64232a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_OK); 64332a6e48fSopenharmony_ci } 64432a6e48fSopenharmony_ci 64532a6e48fSopenharmony_ci sBuffer = nullptr; 64632a6e48fSopenharmony_ci cSurface = nullptr; 64732a6e48fSopenharmony_ci producer = nullptr; 64832a6e48fSopenharmony_ci pSurface = nullptr; 64932a6e48fSopenharmony_ci nativeWindow = nullptr; 65032a6e48fSopenharmony_ci nativeWindowBuffer = nullptr; 65132a6e48fSopenharmony_ci} 65232a6e48fSopenharmony_ci 65332a6e48fSopenharmony_ci/* 65432a6e48fSopenharmony_ci* Function: OH_NativeBuffer_FromNativeWindowBuffer 65532a6e48fSopenharmony_ci* Type: Function 65632a6e48fSopenharmony_ci* Rank: Important(2) 65732a6e48fSopenharmony_ci* EnvConditions: N/A 65832a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_FromNativeWindowBuffer by abnormal input 65932a6e48fSopenharmony_ci* 2. check ret 66032a6e48fSopenharmony_ci*/ 66132a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, NativeBufferFromNativeWindowBuffer003, Function | MediumTest | Level2) 66232a6e48fSopenharmony_ci{ 66332a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nullptr, nullptr); 66432a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS); 66532a6e48fSopenharmony_ci 66632a6e48fSopenharmony_ci NativeWindowBuffer nativeWindowBuffer; 66732a6e48fSopenharmony_ci ret = OH_NativeBuffer_FromNativeWindowBuffer(&nativeWindowBuffer, nullptr); 66832a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS); 66932a6e48fSopenharmony_ci 67032a6e48fSopenharmony_ci OH_NativeBuffer_GetNativeBufferConfig(nullptr, nullptr); 67132a6e48fSopenharmony_ci OH_NativeBuffer_GetNativeBufferConfig(buffer, nullptr); 67232a6e48fSopenharmony_ci ASSERT_EQ(OH_NativeBuffer_GetBufferHandle(nullptr), nullptr); 67332a6e48fSopenharmony_ci} 67432a6e48fSopenharmony_ci 67532a6e48fSopenharmony_ci/* 67632a6e48fSopenharmony_ci* Function: OH_NativeBuffer_MapPlanes 67732a6e48fSopenharmony_ci* Type: Function 67832a6e48fSopenharmony_ci* Rank: Important(2) 67932a6e48fSopenharmony_ci* EnvConditions: N/A 68032a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_MapPlanes by abnormal input 68132a6e48fSopenharmony_ci* 2. check ret 68232a6e48fSopenharmony_ci*/ 68332a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes001, Function | MediumTest | Level2) 68432a6e48fSopenharmony_ci{ 68532a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_MapPlanes(nullptr, nullptr, nullptr); 68632a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS); 68732a6e48fSopenharmony_ci 68832a6e48fSopenharmony_ci OH_NativeBuffer *buffer = (OH_NativeBuffer *)0xFFFFFFFF; 68932a6e48fSopenharmony_ci ret = OH_NativeBuffer_MapPlanes(buffer, nullptr, nullptr); 69032a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS); 69132a6e48fSopenharmony_ci 69232a6e48fSopenharmony_ci void *virAddr = nullptr; 69332a6e48fSopenharmony_ci ret = OH_NativeBuffer_MapPlanes(buffer, &virAddr, nullptr); 69432a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS); 69532a6e48fSopenharmony_ci} 69632a6e48fSopenharmony_ci 69732a6e48fSopenharmony_ci/* 69832a6e48fSopenharmony_ci* Function: OH_NativeBuffer_MapPlanes 69932a6e48fSopenharmony_ci* Type: Function 70032a6e48fSopenharmony_ci* Rank: Important(2) 70132a6e48fSopenharmony_ci* EnvConditions: N/A 70232a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_MapPlanes 70332a6e48fSopenharmony_ci* 2. check ret 70432a6e48fSopenharmony_ci*/ 70532a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes002, Function | MediumTest | Level2) 70632a6e48fSopenharmony_ci{ 70732a6e48fSopenharmony_ci sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create(); 70832a6e48fSopenharmony_ci sptr<IBufferConsumerListener> listener = new BufferConsumerListener(); 70932a6e48fSopenharmony_ci cSurface->RegisterConsumerListener(listener); 71032a6e48fSopenharmony_ci sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer(); 71132a6e48fSopenharmony_ci sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer); 71232a6e48fSopenharmony_ci int32_t fence; 71332a6e48fSopenharmony_ci sptr<OHOS::SurfaceBuffer> sBuffer = nullptr; 71432a6e48fSopenharmony_ci BufferRequestConfig requestConfig = {.width = 0x100, .height = 0x100, .strideAlignment = 0x8, 71532a6e48fSopenharmony_ci .format = GRAPHIC_PIXEL_FMT_YCBCR_420_SP, 71632a6e48fSopenharmony_ci .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA, .timeout = 0}; 71732a6e48fSopenharmony_ci pSurface->SetQueueSize(4); 71832a6e48fSopenharmony_ci int32_t formatType[] = {GRAPHIC_PIXEL_FMT_YCBCR_420_SP, GRAPHIC_PIXEL_FMT_YCRCB_420_SP, 71932a6e48fSopenharmony_ci GRAPHIC_PIXEL_FMT_YCBCR_420_P, GRAPHIC_PIXEL_FMT_YCRCB_420_P}; 72032a6e48fSopenharmony_ci NativeWindow* nativeWindow; 72132a6e48fSopenharmony_ci NativeWindowBuffer* nativeWindowBuffer; 72232a6e48fSopenharmony_ci for (int32_t i = 0; i < sizeof(formatType) / sizeof(int32_t); i++) { 72332a6e48fSopenharmony_ci requestConfig.format = formatType[i]; 72432a6e48fSopenharmony_ci pSurface->RequestBuffer(sBuffer, fence, requestConfig); 72532a6e48fSopenharmony_ci nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface); 72632a6e48fSopenharmony_ci ASSERT_NE(nativeWindow, nullptr); 72732a6e48fSopenharmony_ci nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer); 72832a6e48fSopenharmony_ci ASSERT_NE(nativeWindowBuffer, nullptr); 72932a6e48fSopenharmony_ci OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer); 73032a6e48fSopenharmony_ci ASSERT_NE(nativeBuffer, nullptr); 73132a6e48fSopenharmony_ci 73232a6e48fSopenharmony_ci void *virAddr = nullptr; 73332a6e48fSopenharmony_ci OH_NativeBuffer_Planes outPlanes; 73432a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes); 73532a6e48fSopenharmony_ci if (ret != GSERROR_HDI_ERROR) { 73632a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_OK); 73732a6e48fSopenharmony_ci ASSERT_NE(virAddr, nullptr); 73832a6e48fSopenharmony_ci } 73932a6e48fSopenharmony_ci } 74032a6e48fSopenharmony_ci 74132a6e48fSopenharmony_ci sBuffer = nullptr; 74232a6e48fSopenharmony_ci cSurface = nullptr; 74332a6e48fSopenharmony_ci producer = nullptr; 74432a6e48fSopenharmony_ci pSurface = nullptr; 74532a6e48fSopenharmony_ci nativeWindow = nullptr; 74632a6e48fSopenharmony_ci nativeWindowBuffer = nullptr; 74732a6e48fSopenharmony_ci} 74832a6e48fSopenharmony_ci 74932a6e48fSopenharmony_ci/* 75032a6e48fSopenharmony_ci* Function: OH_NativeBuffer_MapPlanes 75132a6e48fSopenharmony_ci* Type: Function 75232a6e48fSopenharmony_ci* Rank: Important(2) 75332a6e48fSopenharmony_ci* EnvConditions: N/A 75432a6e48fSopenharmony_ci* CaseDescription: 1. call OH_NativeBuffer_MapPlanes 75532a6e48fSopenharmony_ci* 2. check ret 75632a6e48fSopenharmony_ci*/ 75732a6e48fSopenharmony_ciHWTEST_F(NativeBufferTest, OHNativeBufferMapPlanes003, Function | MediumTest | Level2) 75832a6e48fSopenharmony_ci{ 75932a6e48fSopenharmony_ci sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create(); 76032a6e48fSopenharmony_ci sptr<IBufferConsumerListener> listener = new BufferConsumerListener(); 76132a6e48fSopenharmony_ci cSurface->RegisterConsumerListener(listener); 76232a6e48fSopenharmony_ci sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer(); 76332a6e48fSopenharmony_ci sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer); 76432a6e48fSopenharmony_ci int32_t fence; 76532a6e48fSopenharmony_ci sptr<OHOS::SurfaceBuffer> sBuffer = nullptr; 76632a6e48fSopenharmony_ci BufferRequestConfig requestConfig = {.width = 0x100, .height = 0x100, .strideAlignment = 0x8, 76732a6e48fSopenharmony_ci .format = GRAPHIC_PIXEL_FMT_YCBCR_420_SP, 76832a6e48fSopenharmony_ci .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA, .timeout = 0}; 76932a6e48fSopenharmony_ci pSurface->SetQueueSize(4); 77032a6e48fSopenharmony_ci int32_t formatType = GRAPHIC_PIXEL_FMT_YCBCR_420_SP; 77132a6e48fSopenharmony_ci NativeWindow* nativeWindow; 77232a6e48fSopenharmony_ci NativeWindowBuffer* nativeWindowBuffer; 77332a6e48fSopenharmony_ci requestConfig.format = formatType; 77432a6e48fSopenharmony_ci pSurface->RequestBuffer(sBuffer, fence, requestConfig); 77532a6e48fSopenharmony_ci nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface); 77632a6e48fSopenharmony_ci ASSERT_NE(nativeWindow, nullptr); 77732a6e48fSopenharmony_ci nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer); 77832a6e48fSopenharmony_ci ASSERT_NE(nativeWindowBuffer, nullptr); 77932a6e48fSopenharmony_ci OH_NativeBuffer* nativeBuffer = OH_NativeBufferFromNativeWindowBuffer(nativeWindowBuffer); 78032a6e48fSopenharmony_ci ASSERT_NE(nativeBuffer, nullptr); 78132a6e48fSopenharmony_ci OH_NativeBuffer* nativeBufferTmp = nullptr; 78232a6e48fSopenharmony_ci for (int32_t i = 0; i < 1000; i++) { 78332a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, &nativeBufferTmp); 78432a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_OK); 78532a6e48fSopenharmony_ci ASSERT_EQ(nativeBuffer, nativeBufferTmp); 78632a6e48fSopenharmony_ci } 78732a6e48fSopenharmony_ci void *virAddr = nullptr; 78832a6e48fSopenharmony_ci OH_NativeBuffer_Planes outPlanes; 78932a6e48fSopenharmony_ci clock_t startTime, endTime; 79032a6e48fSopenharmony_ci startTime = clock(); 79132a6e48fSopenharmony_ci for (int32_t i = 0; i < 1000; i++) { 79232a6e48fSopenharmony_ci int32_t ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes); 79332a6e48fSopenharmony_ci if (ret != GSERROR_HDI_ERROR) { 79432a6e48fSopenharmony_ci ASSERT_EQ(ret, OHOS::GSERROR_OK); 79532a6e48fSopenharmony_ci ASSERT_NE(virAddr, nullptr); 79632a6e48fSopenharmony_ci } 79732a6e48fSopenharmony_ci } 79832a6e48fSopenharmony_ci endTime = clock(); 79932a6e48fSopenharmony_ci cout << "OH_NativeBuffer_MapPlanes 1000 times cost time: " << (endTime - startTime) << "ms" << endl; 80032a6e48fSopenharmony_ci sBuffer = nullptr; 80132a6e48fSopenharmony_ci cSurface = nullptr; 80232a6e48fSopenharmony_ci producer = nullptr; 80332a6e48fSopenharmony_ci pSurface = nullptr; 80432a6e48fSopenharmony_ci nativeWindow = nullptr; 80532a6e48fSopenharmony_ci nativeWindowBuffer = nullptr; 80632a6e48fSopenharmony_ci} 80732a6e48fSopenharmony_ci}