1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include "display_test.h" 17094332d3Sopenharmony_ci#include <stdio.h> 18094332d3Sopenharmony_ci#include "securec.h" 19094332d3Sopenharmony_ci#include "hdf_log.h" 20094332d3Sopenharmony_ci#include "loadbmp_test.h" 21094332d3Sopenharmony_ci 22094332d3Sopenharmony_ciDisplayTest g_displayTest; 23094332d3Sopenharmony_cistatic BufferHandle* g_buffer; 24094332d3Sopenharmony_ci 25094332d3Sopenharmony_cistatic int32_t LoadBmp(const int8_t *fileName, BufferHandle **buffer) 26094332d3Sopenharmony_ci{ 27094332d3Sopenharmony_ci int32_t ret; 28094332d3Sopenharmony_ci uint8_t *pBuf = NULL; 29094332d3Sopenharmony_ci OsdSurface surface; 30094332d3Sopenharmony_ci OsdBitMapFileHeader bmpFileHeader = {0}; 31094332d3Sopenharmony_ci OsdBitMapInfo bmpInfo = {0}; 32094332d3Sopenharmony_ci 33094332d3Sopenharmony_ci if (fileName == NULL) { 34094332d3Sopenharmony_ci HDF_LOGE("%s: fileName is null", __func__); 35094332d3Sopenharmony_ci return DISPLAY_FAILURE; 36094332d3Sopenharmony_ci } 37094332d3Sopenharmony_ci if (GetBmpInfo(fileName, &bmpFileHeader, &bmpInfo) < 0) { 38094332d3Sopenharmony_ci HDF_LOGE("%s: GetBmpInfo err", __func__); 39094332d3Sopenharmony_ci return DISPLAY_FAILURE; 40094332d3Sopenharmony_ci } 41094332d3Sopenharmony_ci AllocInfo info = { 42094332d3Sopenharmony_ci .width = bmpInfo.header.width + 1, 43094332d3Sopenharmony_ci .height = bmpInfo.header.height + 1, 44094332d3Sopenharmony_ci .format = PIXEL_FMT_RGBA_8888, 45094332d3Sopenharmony_ci .usage = HBM_USE_MEM_MMZ 46094332d3Sopenharmony_ci }; 47094332d3Sopenharmony_ci // alloc picture buffer 48094332d3Sopenharmony_ci if (g_displayTest.grallocFuncs->AllocMem != NULL) { 49094332d3Sopenharmony_ci ret = g_displayTest.grallocFuncs->AllocMem(&info, buffer); 50094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 51094332d3Sopenharmony_ci HDF_LOGE("%s: pictureBuf alloc failure", __func__); 52094332d3Sopenharmony_ci return DISPLAY_FAILURE; 53094332d3Sopenharmony_ci } 54094332d3Sopenharmony_ci } 55094332d3Sopenharmony_ci // load bmp picture 56094332d3Sopenharmony_ci pBuf = (uint8_t *)(*buffer)->virAddr; 57094332d3Sopenharmony_ci surface.colorFmt = OSD_COLOR_FMT_RGB1555; 58094332d3Sopenharmony_ci CreateSurfaceByBitMap(fileName, &surface, pBuf, (*buffer)->size); 59094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 60094332d3Sopenharmony_ci} 61094332d3Sopenharmony_ci 62094332d3Sopenharmony_cistatic void GetLayerInfo(LayerInfo *layInfo) 63094332d3Sopenharmony_ci{ 64094332d3Sopenharmony_ci layInfo->width = (uint32_t)g_displayTest.displayInfo.width; 65094332d3Sopenharmony_ci layInfo->height = (uint32_t)g_displayTest.displayInfo.height; 66094332d3Sopenharmony_ci layInfo->bpp = LAYER_BPP; 67094332d3Sopenharmony_ci layInfo->pixFormat = PIXEL_FMT_RGBA_5551; 68094332d3Sopenharmony_ci layInfo->type = LAYER_TYPE_GRAPHIC; 69094332d3Sopenharmony_ci} 70094332d3Sopenharmony_ci 71094332d3Sopenharmony_cistatic void WriteDataToBuf(int32_t width, int32_t height, uint16_t *pBuf) 72094332d3Sopenharmony_ci{ 73094332d3Sopenharmony_ci int32_t x; 74094332d3Sopenharmony_ci int32_t y; 75094332d3Sopenharmony_ci 76094332d3Sopenharmony_ci for (y = ((height / LINE_WIDTH) - LINE_WIDTH); y < ((height / LINE_WIDTH) + LINE_WIDTH); y++) { 77094332d3Sopenharmony_ci for (x = 0; x < width; x++) { 78094332d3Sopenharmony_ci *((uint16_t*)pBuf + y * width + x) = HIFB_RED_1555; 79094332d3Sopenharmony_ci } 80094332d3Sopenharmony_ci } 81094332d3Sopenharmony_ci for (y = 0; y < height; y++) { 82094332d3Sopenharmony_ci for (x = ((width / LINE_WIDTH) - LINE_WIDTH); x < ((width / LINE_WIDTH) + LINE_WIDTH); x++) { 83094332d3Sopenharmony_ci *((uint16_t*)pBuf + y * width + x) = HIFB_RED_1555; 84094332d3Sopenharmony_ci } 85094332d3Sopenharmony_ci } 86094332d3Sopenharmony_ci} 87094332d3Sopenharmony_ci 88094332d3Sopenharmony_cistatic void PicSourceSurfaceInit(ISurface *surface, uint64_t phyAddr, int32_t bpp) 89094332d3Sopenharmony_ci{ 90094332d3Sopenharmony_ci surface->width = SAMPLE_IMAGE_WIDTH; 91094332d3Sopenharmony_ci surface->height = SAMPLE_IMAGE_HEIGHT; 92094332d3Sopenharmony_ci surface->phyAddr = phyAddr; 93094332d3Sopenharmony_ci surface->enColorFmt = PIXEL_FMT_RGBA_5551; 94094332d3Sopenharmony_ci surface->stride = SAMPLE_IMAGE_WIDTH * bpp / BITS_PER_BYTE; 95094332d3Sopenharmony_ci surface->bAlphaExt1555 = true; 96094332d3Sopenharmony_ci surface->bAlphaMax255 = true; 97094332d3Sopenharmony_ci surface->alpha0 = 0XFF; 98094332d3Sopenharmony_ci surface->alpha1 = 0XFF; 99094332d3Sopenharmony_ci} 100094332d3Sopenharmony_ci 101094332d3Sopenharmony_cistatic void DestSurfaceInit(ISurface *surface, uint64_t phyAddr, int32_t bpp) 102094332d3Sopenharmony_ci{ 103094332d3Sopenharmony_ci surface->width = (uint32_t)g_displayTest.displayInfo.width; 104094332d3Sopenharmony_ci surface->height = (uint32_t)g_displayTest.displayInfo.height; 105094332d3Sopenharmony_ci surface->phyAddr = phyAddr; 106094332d3Sopenharmony_ci surface->enColorFmt = PIXEL_FMT_RGBA_5551; 107094332d3Sopenharmony_ci surface->stride = g_displayTest.displayInfo.width * bpp / BITS_PER_BYTE; 108094332d3Sopenharmony_ci surface->bAlphaExt1555 = true; 109094332d3Sopenharmony_ci surface->bAlphaMax255 = true; 110094332d3Sopenharmony_ci surface->alpha0 = 0XFF; 111094332d3Sopenharmony_ci surface->alpha1 = 0XFF; 112094332d3Sopenharmony_ci surface->bYCbCrClut = 0; 113094332d3Sopenharmony_ci} 114094332d3Sopenharmony_ci 115094332d3Sopenharmony_ciint32_t DisplayInit(void) 116094332d3Sopenharmony_ci{ 117094332d3Sopenharmony_ci int32_t ret; 118094332d3Sopenharmony_ci 119094332d3Sopenharmony_ci ret = LayerInitialize(&g_displayTest.layerFuncs); 120094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS || g_displayTest.layerFuncs == NULL) { 121094332d3Sopenharmony_ci HDF_LOGE("%s: layer initialize failure", __func__); 122094332d3Sopenharmony_ci return DISPLAY_FAILURE; 123094332d3Sopenharmony_ci } 124094332d3Sopenharmony_ci ret = GrallocInitialize(&g_displayTest.grallocFuncs); 125094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS || g_displayTest.layerFuncs == NULL) { 126094332d3Sopenharmony_ci HDF_LOGE("%s: gralloc initialize failure", __func__); 127094332d3Sopenharmony_ci return DISPLAY_FAILURE; 128094332d3Sopenharmony_ci } 129094332d3Sopenharmony_ci ret = GfxInitialize(&g_displayTest.gfxFuncs); 130094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS || g_displayTest.gfxFuncs == NULL) { 131094332d3Sopenharmony_ci HDF_LOGE("%s: gfx initialize failure", __func__); 132094332d3Sopenharmony_ci return DISPLAY_FAILURE; 133094332d3Sopenharmony_ci } 134094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 135094332d3Sopenharmony_ci} 136094332d3Sopenharmony_ci 137094332d3Sopenharmony_ciint32_t DisplayUninit(void) 138094332d3Sopenharmony_ci{ 139094332d3Sopenharmony_ci LayerUninitialize(g_displayTest.layerFuncs); 140094332d3Sopenharmony_ci GrallocUninitialize(g_displayTest.grallocFuncs); 141094332d3Sopenharmony_ci GfxUninitialize(g_displayTest.gfxFuncs); 142094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 143094332d3Sopenharmony_ci} 144094332d3Sopenharmony_ci 145094332d3Sopenharmony_ciint32_t InitDisplayTest(void) 146094332d3Sopenharmony_ci{ 147094332d3Sopenharmony_ci int32_t ret; 148094332d3Sopenharmony_ci 149094332d3Sopenharmony_ci g_displayTest.devId = 0; 150094332d3Sopenharmony_ci // init display 151094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->InitDisplay != NULL) { 152094332d3Sopenharmony_ci ret = g_displayTest.layerFuncs->InitDisplay(g_displayTest.devId); 153094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 154094332d3Sopenharmony_ci HDF_LOGE("%s: MPI VO can't be opened repeatedly, so here bypass ret check", __func__); 155094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 156094332d3Sopenharmony_ci } 157094332d3Sopenharmony_ci } 158094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 159094332d3Sopenharmony_ci} 160094332d3Sopenharmony_ci 161094332d3Sopenharmony_ciint32_t DeinitDisplayTest(void) 162094332d3Sopenharmony_ci{ 163094332d3Sopenharmony_ci int32_t ret = DISPLAY_SUCCESS; 164094332d3Sopenharmony_ci 165094332d3Sopenharmony_ci g_displayTest.devId = 0; 166094332d3Sopenharmony_ci // deinit display 167094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->DeinitDisplay != NULL) { 168094332d3Sopenharmony_ci HDF_LOGE("%s: Here bypass call DeinitDisplay func for keep test environment continuable", __func__); 169094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 170094332d3Sopenharmony_ci HDF_LOGE("%s: deinit display failed", __func__); 171094332d3Sopenharmony_ci return DISPLAY_FAILURE; 172094332d3Sopenharmony_ci } 173094332d3Sopenharmony_ci } 174094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 175094332d3Sopenharmony_ci} 176094332d3Sopenharmony_ci 177094332d3Sopenharmony_ciint32_t GetDisplayInfoTest(void) 178094332d3Sopenharmony_ci{ 179094332d3Sopenharmony_ci int32_t ret; 180094332d3Sopenharmony_ci 181094332d3Sopenharmony_ci g_displayTest.devId = 0; 182094332d3Sopenharmony_ci // get display info 183094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->GetDisplayInfo != NULL) { 184094332d3Sopenharmony_ci ret = g_displayTest.layerFuncs->GetDisplayInfo(g_displayTest.devId, &g_displayTest.displayInfo); 185094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 186094332d3Sopenharmony_ci HDF_LOGE("%s: get disp info failed", __func__); 187094332d3Sopenharmony_ci return DISPLAY_FAILURE; 188094332d3Sopenharmony_ci } 189094332d3Sopenharmony_ci } 190094332d3Sopenharmony_ci HDF_LOGI("%s: dispInfo width = %d", __func__, g_displayTest.displayInfo.width); 191094332d3Sopenharmony_ci HDF_LOGI("%s: dispInfo height = %d", __func__, g_displayTest.displayInfo.height); 192094332d3Sopenharmony_ci HDF_LOGI("%s: dispInfo rotAngle = %d", __func__, g_displayTest.displayInfo.rotAngle); 193094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 194094332d3Sopenharmony_ci} 195094332d3Sopenharmony_ci 196094332d3Sopenharmony_ciint32_t CreateLayerTest(void) 197094332d3Sopenharmony_ci{ 198094332d3Sopenharmony_ci int32_t ret; 199094332d3Sopenharmony_ci LayerInfo layInfo; 200094332d3Sopenharmony_ci 201094332d3Sopenharmony_ci g_displayTest.devId = 0; 202094332d3Sopenharmony_ci // create layer 203094332d3Sopenharmony_ci GetLayerInfo(&layInfo); 204094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->CreateLayer != NULL) { 205094332d3Sopenharmony_ci ret = g_displayTest.layerFuncs->CreateLayer(g_displayTest.devId, &layInfo, &g_displayTest.layerId); 206094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 207094332d3Sopenharmony_ci HDF_LOGE("%s: CreateLayer fail", __func__); 208094332d3Sopenharmony_ci return DISPLAY_FAILURE; 209094332d3Sopenharmony_ci } 210094332d3Sopenharmony_ci } 211094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 212094332d3Sopenharmony_ci} 213094332d3Sopenharmony_ci 214094332d3Sopenharmony_ciint32_t CloseLayerTest(void) 215094332d3Sopenharmony_ci{ 216094332d3Sopenharmony_ci int32_t ret; 217094332d3Sopenharmony_ci 218094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->CloseLayer != NULL) { 219094332d3Sopenharmony_ci ret = g_displayTest.layerFuncs->CloseLayer(g_displayTest.devId, g_displayTest.layerId); 220094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 221094332d3Sopenharmony_ci HDF_LOGE("%s: CloseLayer fail", __func__); 222094332d3Sopenharmony_ci return DISPLAY_FAILURE; 223094332d3Sopenharmony_ci } 224094332d3Sopenharmony_ci } 225094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 226094332d3Sopenharmony_ci} 227094332d3Sopenharmony_ci 228094332d3Sopenharmony_ciint32_t SetLayerVisibleTest(void) 229094332d3Sopenharmony_ci{ 230094332d3Sopenharmony_ci int32_t ret; 231094332d3Sopenharmony_ci 232094332d3Sopenharmony_ci // set layer visible 233094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->SetLayerVisible != NULL) { 234094332d3Sopenharmony_ci ret = g_displayTest.layerFuncs->SetLayerVisible(g_displayTest.devId, g_displayTest.layerId, true); 235094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 236094332d3Sopenharmony_ci HDF_LOGE("%s: SetLayerVisible fail", __func__); 237094332d3Sopenharmony_ci return DISPLAY_FAILURE; 238094332d3Sopenharmony_ci } 239094332d3Sopenharmony_ci } 240094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 241094332d3Sopenharmony_ci} 242094332d3Sopenharmony_ci 243094332d3Sopenharmony_ciint32_t SetLayerDirtyRegionTest(void) 244094332d3Sopenharmony_ci{ 245094332d3Sopenharmony_ci int32_t ret; 246094332d3Sopenharmony_ci IRect rect = {0, 0, g_displayTest.displayInfo.width, g_displayTest.displayInfo.height}; 247094332d3Sopenharmony_ci 248094332d3Sopenharmony_ci // set refresh region 249094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->SetLayerDirtyRegion != NULL) { 250094332d3Sopenharmony_ci ret = g_displayTest.layerFuncs->SetLayerDirtyRegion(g_displayTest.devId, g_displayTest.layerId, &rect); 251094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 252094332d3Sopenharmony_ci HDF_LOGE("%s: SetLayerDirtyRegion fail", __func__); 253094332d3Sopenharmony_ci return DISPLAY_FAILURE; 254094332d3Sopenharmony_ci } 255094332d3Sopenharmony_ci } 256094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 257094332d3Sopenharmony_ci} 258094332d3Sopenharmony_ci 259094332d3Sopenharmony_ciint32_t GetLayerBufferTest(void) 260094332d3Sopenharmony_ci{ 261094332d3Sopenharmony_ci int32_t ret; 262094332d3Sopenharmony_ci 263094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->GetLayerBuffer != NULL) { 264094332d3Sopenharmony_ci ret = g_displayTest.layerFuncs->GetLayerBuffer(g_displayTest.devId, g_displayTest.layerId, 265094332d3Sopenharmony_ci &g_displayTest.buffer); 266094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 267094332d3Sopenharmony_ci HDF_LOGE("%s: GetLayerBuffer fail", __func__); 268094332d3Sopenharmony_ci return DISPLAY_FAILURE; 269094332d3Sopenharmony_ci } 270094332d3Sopenharmony_ci } 271094332d3Sopenharmony_ci // write buffer data 272094332d3Sopenharmony_ci uint16_t *pBuf = (uint16_t *)g_displayTest.buffer.data.virAddr; 273094332d3Sopenharmony_ci WriteDataToBuf(g_displayTest.displayInfo.width, g_displayTest.displayInfo.height, pBuf); 274094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 275094332d3Sopenharmony_ci} 276094332d3Sopenharmony_ci 277094332d3Sopenharmony_ciint32_t FlushTest(void) 278094332d3Sopenharmony_ci{ 279094332d3Sopenharmony_ci int32_t ret; 280094332d3Sopenharmony_ci 281094332d3Sopenharmony_ci // refresh layer to display 282094332d3Sopenharmony_ci if (g_displayTest.layerFuncs->Flush != NULL) { 283094332d3Sopenharmony_ci ret = g_displayTest.layerFuncs->Flush(g_displayTest.devId, g_displayTest.layerId, &g_displayTest.buffer); 284094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 285094332d3Sopenharmony_ci HDF_LOGE("%s: flush fail", __func__); 286094332d3Sopenharmony_ci return DISPLAY_FAILURE; 287094332d3Sopenharmony_ci } 288094332d3Sopenharmony_ci } 289094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 290094332d3Sopenharmony_ci} 291094332d3Sopenharmony_ci 292094332d3Sopenharmony_ciint32_t InitGfxTest(void) 293094332d3Sopenharmony_ci{ 294094332d3Sopenharmony_ci int32_t ret; 295094332d3Sopenharmony_ci // init gfx 296094332d3Sopenharmony_ci if (g_displayTest.gfxFuncs->InitGfx != NULL) { 297094332d3Sopenharmony_ci ret = g_displayTest.gfxFuncs->InitGfx(); 298094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 299094332d3Sopenharmony_ci HDF_LOGE("%s: init gfx fail", __func__); 300094332d3Sopenharmony_ci return DISPLAY_FAILURE; 301094332d3Sopenharmony_ci } 302094332d3Sopenharmony_ci } 303094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 304094332d3Sopenharmony_ci} 305094332d3Sopenharmony_ci 306094332d3Sopenharmony_ciint32_t DeinitGfxTest(void) 307094332d3Sopenharmony_ci{ 308094332d3Sopenharmony_ci int32_t ret; 309094332d3Sopenharmony_ci // deinit gfx 310094332d3Sopenharmony_ci if (g_displayTest.gfxFuncs->DeinitGfx != NULL) { 311094332d3Sopenharmony_ci ret = g_displayTest.gfxFuncs->DeinitGfx(); 312094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 313094332d3Sopenharmony_ci HDF_LOGE("%s: deinit gfx fail", __func__); 314094332d3Sopenharmony_ci return DISPLAY_FAILURE; 315094332d3Sopenharmony_ci } 316094332d3Sopenharmony_ci } 317094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 318094332d3Sopenharmony_ci} 319094332d3Sopenharmony_ci 320094332d3Sopenharmony_ciint32_t BlitTest(void) 321094332d3Sopenharmony_ci{ 322094332d3Sopenharmony_ci int32_t ret; 323094332d3Sopenharmony_ci ISurface srcSurface = {0}; 324094332d3Sopenharmony_ci ISurface dstSurface = {0}; 325094332d3Sopenharmony_ci BufferHandle* pictureBuf = NULL; 326094332d3Sopenharmony_ci uint32_t layerBufSize = g_displayTest.displayInfo.width * g_displayTest.displayInfo.height * PIXEL_BYTE; 327094332d3Sopenharmony_ci 328094332d3Sopenharmony_ci // clean the layer buffer 329094332d3Sopenharmony_ci (void)memset_s(g_displayTest.buffer.data.virAddr, layerBufSize, 0, layerBufSize); 330094332d3Sopenharmony_ci // load bmp test picture 331094332d3Sopenharmony_ci ret = LoadBmp((const int8_t *)PIC_RES_PATH, &pictureBuf); 332094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 333094332d3Sopenharmony_ci HDF_LOGE("%s: LoadBmp fail", __func__); 334094332d3Sopenharmony_ci return DISPLAY_FAILURE; 335094332d3Sopenharmony_ci } 336094332d3Sopenharmony_ci // use picture buffer to create source surface 337094332d3Sopenharmony_ci IRect srcRect = {0, 0, SAMPLE_IMAGE_WIDTH, SAMPLE_IMAGE_HEIGHT}; 338094332d3Sopenharmony_ci PicSourceSurfaceInit(&srcSurface, pictureBuf->phyAddr, LAYER_BPP); 339094332d3Sopenharmony_ci // use layer buffer to create dest surface 340094332d3Sopenharmony_ci IRect dstRect = srcRect; 341094332d3Sopenharmony_ci DestSurfaceInit(&dstSurface, g_displayTest.buffer.data.phyAddr, LAYER_BPP); 342094332d3Sopenharmony_ci // TDE: copy bmp picture buffer to layer buffer 343094332d3Sopenharmony_ci if (g_displayTest.gfxFuncs->Blit != NULL) { 344094332d3Sopenharmony_ci ret = g_displayTest.gfxFuncs->Blit(&srcSurface, &srcRect, &dstSurface, &dstRect, NULL); 345094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 346094332d3Sopenharmony_ci HDF_LOGE("%s: Blit fail", __func__); 347094332d3Sopenharmony_ci goto EXIT; 348094332d3Sopenharmony_ci } 349094332d3Sopenharmony_ci } 350094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 351094332d3Sopenharmony_ci 352094332d3Sopenharmony_ciEXIT: 353094332d3Sopenharmony_ci /* free picture buffer */ 354094332d3Sopenharmony_ci if (g_displayTest.grallocFuncs->FreeMem != NULL) { 355094332d3Sopenharmony_ci g_displayTest.grallocFuncs->FreeMem(pictureBuf); 356094332d3Sopenharmony_ci } 357094332d3Sopenharmony_ci return ret; 358094332d3Sopenharmony_ci} 359094332d3Sopenharmony_ci 360094332d3Sopenharmony_ciint32_t FillRectTest(void) 361094332d3Sopenharmony_ci{ 362094332d3Sopenharmony_ci int32_t ret; 363094332d3Sopenharmony_ci ISurface dstSurface = {0}; 364094332d3Sopenharmony_ci GfxOpt opt = {0}; 365094332d3Sopenharmony_ci IRect rect = {0, 0, SAMPLE_RECT_WIDTH, SAMPLE_RECT_HEIGHT}; 366094332d3Sopenharmony_ci uint32_t layerBufSize = g_displayTest.displayInfo.width * g_displayTest.displayInfo.height * PIXEL_BYTE; 367094332d3Sopenharmony_ci 368094332d3Sopenharmony_ci opt.enGlobalAlpha = true; 369094332d3Sopenharmony_ci opt.globalAlpha = MAX_GLOBLE_ALPHA; 370094332d3Sopenharmony_ci // clean the layer buffer 371094332d3Sopenharmony_ci (void)memset_s(g_displayTest.buffer.data.virAddr, layerBufSize, 0, layerBufSize); 372094332d3Sopenharmony_ci DestSurfaceInit(&dstSurface, g_displayTest.buffer.data.phyAddr, LAYER_BPP); 373094332d3Sopenharmony_ci // TDE: copy bmp picture buffer to layer buffer 374094332d3Sopenharmony_ci if (g_displayTest.gfxFuncs->FillRect != NULL) { 375094332d3Sopenharmony_ci ret = g_displayTest.gfxFuncs->FillRect(&dstSurface, &rect, HIFB_RED_1555, &opt); 376094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 377094332d3Sopenharmony_ci HDF_LOGE("%s: FillRect fail", __func__); 378094332d3Sopenharmony_ci return ret; 379094332d3Sopenharmony_ci } 380094332d3Sopenharmony_ci } 381094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 382094332d3Sopenharmony_ci} 383094332d3Sopenharmony_ci 384094332d3Sopenharmony_ciint32_t AllocMemTest1(void) 385094332d3Sopenharmony_ci{ 386094332d3Sopenharmony_ci int32_t ret = DISPLAY_FAILURE; 387094332d3Sopenharmony_ci 388094332d3Sopenharmony_ci AllocInfo info = { 389094332d3Sopenharmony_ci .width = SAMPLE_IMAGE_WIDTH, 390094332d3Sopenharmony_ci .height = SAMPLE_IMAGE_HEIGHT, 391094332d3Sopenharmony_ci .format = PIXEL_FMT_RGBA_8888, 392094332d3Sopenharmony_ci .usage = HBM_USE_MEM_MMZ 393094332d3Sopenharmony_ci }; 394094332d3Sopenharmony_ci if (g_displayTest.grallocFuncs->AllocMem != NULL) { 395094332d3Sopenharmony_ci ret = g_displayTest.grallocFuncs->AllocMem(&info, &g_buffer); 396094332d3Sopenharmony_ci } 397094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 398094332d3Sopenharmony_ci HDF_LOGE("%s: normal memory allocMem failed", __func__); 399094332d3Sopenharmony_ci return ret; 400094332d3Sopenharmony_ci } 401094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 402094332d3Sopenharmony_ci} 403094332d3Sopenharmony_ci 404094332d3Sopenharmony_ciint32_t MmapCacheTest(void) 405094332d3Sopenharmony_ci{ 406094332d3Sopenharmony_ci int32_t ret = DISPLAY_FAILURE; 407094332d3Sopenharmony_ci void *mapCacheAddr = NULL; 408094332d3Sopenharmony_ci AllocInfo info = { 409094332d3Sopenharmony_ci .width = SAMPLE_RECT_WIDTH, 410094332d3Sopenharmony_ci .height = SAMPLE_RECT_HEIGHT, 411094332d3Sopenharmony_ci .format = PIXEL_FMT_RGBA_8888, 412094332d3Sopenharmony_ci .usage = HBM_USE_MEM_MMZ_CACHE 413094332d3Sopenharmony_ci }; 414094332d3Sopenharmony_ci 415094332d3Sopenharmony_ci if (g_displayTest.grallocFuncs->AllocMem != NULL) { 416094332d3Sopenharmony_ci ret = g_displayTest.grallocFuncs->AllocMem(&info, &g_buffer); 417094332d3Sopenharmony_ci } 418094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 419094332d3Sopenharmony_ci HDF_LOGE("%s: normal memory allocMem failed", __func__); 420094332d3Sopenharmony_ci return ret; 421094332d3Sopenharmony_ci } 422094332d3Sopenharmony_ci 423094332d3Sopenharmony_ci if (g_displayTest.grallocFuncs->MmapCache != NULL) { 424094332d3Sopenharmony_ci mapCacheAddr = g_displayTest.grallocFuncs->MmapCache(g_buffer); 425094332d3Sopenharmony_ci if (mapCacheAddr == NULL) { 426094332d3Sopenharmony_ci return DISPLAY_FAILURE; 427094332d3Sopenharmony_ci } 428094332d3Sopenharmony_ci } 429094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 430094332d3Sopenharmony_ci} 431094332d3Sopenharmony_ci 432094332d3Sopenharmony_ciint32_t FreeMemTest(void) 433094332d3Sopenharmony_ci{ 434094332d3Sopenharmony_ci if (g_displayTest.grallocFuncs->FreeMem != NULL) { 435094332d3Sopenharmony_ci g_displayTest.grallocFuncs->FreeMem(g_buffer); 436094332d3Sopenharmony_ci } 437094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 438094332d3Sopenharmony_ci} 439094332d3Sopenharmony_ci 440094332d3Sopenharmony_ciint32_t AllocMemTest2(void) 441094332d3Sopenharmony_ci{ 442094332d3Sopenharmony_ci int32_t ret = DISPLAY_FAILURE; 443094332d3Sopenharmony_ci AllocInfo info = { 444094332d3Sopenharmony_ci .width = SAMPLE_IMAGE_WIDTH, 445094332d3Sopenharmony_ci .height = SAMPLE_IMAGE_HEIGHT, 446094332d3Sopenharmony_ci .format = PIXEL_FMT_RGBA_8888, 447094332d3Sopenharmony_ci .usage = HBM_USE_MEM_MMZ 448094332d3Sopenharmony_ci }; 449094332d3Sopenharmony_ci 450094332d3Sopenharmony_ci if (g_displayTest.grallocFuncs->AllocMem != NULL) { 451094332d3Sopenharmony_ci ret = g_displayTest.grallocFuncs->AllocMem(&info, &g_buffer); 452094332d3Sopenharmony_ci } 453094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 454094332d3Sopenharmony_ci HDF_LOGE("%s: cache memory allocMem failed", __func__); 455094332d3Sopenharmony_ci return ret; 456094332d3Sopenharmony_ci } 457094332d3Sopenharmony_ci 458094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 459094332d3Sopenharmony_ci} 460094332d3Sopenharmony_ci 461094332d3Sopenharmony_ciint32_t FlushMCacheTest(void) 462094332d3Sopenharmony_ci{ 463094332d3Sopenharmony_ci int32_t ret; 464094332d3Sopenharmony_ci 465094332d3Sopenharmony_ci if (g_displayTest.grallocFuncs->FlushMCache != NULL) { 466094332d3Sopenharmony_ci ret = g_displayTest.grallocFuncs->FlushMCache(g_buffer); 467094332d3Sopenharmony_ci if (ret != DISPLAY_SUCCESS) { 468094332d3Sopenharmony_ci return ret; 469094332d3Sopenharmony_ci } 470094332d3Sopenharmony_ci } 471094332d3Sopenharmony_ci return DISPLAY_SUCCESS; 472094332d3Sopenharmony_ci} 473