19762338dSopenharmony_ci/* 29762338dSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49762338dSopenharmony_ci * you may not use this file except in compliance with the License. 59762338dSopenharmony_ci * You may obtain a copy of the License at 69762338dSopenharmony_ci * 79762338dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89762338dSopenharmony_ci * 99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129762338dSopenharmony_ci * See the License for the specific language governing permissions and 139762338dSopenharmony_ci * limitations under the License. 149762338dSopenharmony_ci */ 159762338dSopenharmony_ci 169762338dSopenharmony_ci#include "loadbmp_test.h" 179762338dSopenharmony_ci#include <stdio.h> 189762338dSopenharmony_ci#include <stdint.h> 199762338dSopenharmony_ci#include <stdlib.h> 209762338dSopenharmony_ci#include <string.h> 219762338dSopenharmony_ci#include <limits.h> 229762338dSopenharmony_ci#include <sys/types.h> 239762338dSopenharmony_ci#include <unistd.h> 249762338dSopenharmony_ci#include "securec.h" 259762338dSopenharmony_ci#include "hdf_log.h" 269762338dSopenharmony_ci#include "display_type.h" 279762338dSopenharmony_ci 289762338dSopenharmony_ci#define EOK 0 299762338dSopenharmony_ci 309762338dSopenharmony_ciOsdCompInfo g_osdCompInfo[OSD_COLOR_FMT_BUTT] = { 319762338dSopenharmony_ci {0, 4, 4, 4}, /* RGB444 */ 329762338dSopenharmony_ci {4, 4, 4, 4}, /* ARGB4444 */ 339762338dSopenharmony_ci {0, 5, 5, 5}, /* RGB555 */ 349762338dSopenharmony_ci {0, 5, 6, 5}, /* RGB565 */ 359762338dSopenharmony_ci {1, 5, 5, 5}, /* ARGB1555 */ 369762338dSopenharmony_ci {0, 0, 0, 0}, /* RESERVED */ 379762338dSopenharmony_ci {0, 8, 8, 8}, /* RGB888 */ 389762338dSopenharmony_ci {8, 8, 8, 8} /* ARGB8888 */ 399762338dSopenharmony_ci}; 409762338dSopenharmony_ci 419762338dSopenharmony_cistatic uint16_t OsdMakeColorU16(uint8_t r, uint8_t g, uint8_t b, OsdCompInfo compinfo) 429762338dSopenharmony_ci{ 439762338dSopenharmony_ci uint8_t r1; 449762338dSopenharmony_ci uint8_t g1; 459762338dSopenharmony_ci uint8_t b1; 469762338dSopenharmony_ci uint16_t pixel = 0; 479762338dSopenharmony_ci uint32_t tmp = 15; // 16bit color 489762338dSopenharmony_ci 499762338dSopenharmony_ci r1 = g1 = b1 = 0; 509762338dSopenharmony_ci r1 = r >> (EIGHT_BITS_PER_PIXEL - compinfo.rLen); 519762338dSopenharmony_ci g1 = g >> (EIGHT_BITS_PER_PIXEL - compinfo.gLen); 529762338dSopenharmony_ci b1 = b >> (EIGHT_BITS_PER_PIXEL - compinfo.bLen); 539762338dSopenharmony_ci while (compinfo.aLen != 0) { 549762338dSopenharmony_ci pixel |= (1 << tmp); 559762338dSopenharmony_ci tmp--; 569762338dSopenharmony_ci compinfo.aLen--; 579762338dSopenharmony_ci } 589762338dSopenharmony_ci 599762338dSopenharmony_ci pixel |= (r1 | (g1 << compinfo.bLen) | (b1 << (compinfo.bLen + compinfo.gLen))); 609762338dSopenharmony_ci return pixel; 619762338dSopenharmony_ci} 629762338dSopenharmony_ci 639762338dSopenharmony_ciint32_t GetBmpInfo(const int8_t *fileName, OsdBitMapFileHeader *bmpFileHeader, OsdBitMapInfo *bmpInfo) 649762338dSopenharmony_ci{ 659762338dSopenharmony_ci FILE *file = NULL; 669762338dSopenharmony_ci uint16_t bfType = 0; 679762338dSopenharmony_ci char realPath[PATH_MAX] = {0}; 689762338dSopenharmony_ci 699762338dSopenharmony_ci if (realpath((char*)fileName, realPath) == NULL) { 709762338dSopenharmony_ci printf("%s: file %s does not exist\n", __func__, fileName); 719762338dSopenharmony_ci return DISPLAY_FAILURE; 729762338dSopenharmony_ci } 739762338dSopenharmony_ci if ((file = fopen((const char*)realPath, "rb")) == NULL) { 749762338dSopenharmony_ci HDF_LOGE("%s: Open file failure: %s", __func__, fileName); 759762338dSopenharmony_ci return DISPLAY_FAILURE; 769762338dSopenharmony_ci } 779762338dSopenharmony_ci 789762338dSopenharmony_ci (void)fread(&bfType, 1, sizeof(bfType), file); 799762338dSopenharmony_ci if (bfType != BITMAP_FILE) { 809762338dSopenharmony_ci HDF_LOGE("%s: not bitmap file", __func__); 819762338dSopenharmony_ci fclose(file); 829762338dSopenharmony_ci return DISPLAY_FAILURE; 839762338dSopenharmony_ci } 849762338dSopenharmony_ci 859762338dSopenharmony_ci (void)fread(bmpFileHeader, 1, sizeof(OsdBitMapFileHeader), file); 869762338dSopenharmony_ci (void)fread(bmpInfo, 1, sizeof(OsdBitMapInfo), file); 879762338dSopenharmony_ci fclose(file); 889762338dSopenharmony_ci 899762338dSopenharmony_ci return DISPLAY_SUCCESS; 909762338dSopenharmony_ci} 919762338dSopenharmony_ci 929762338dSopenharmony_cistatic int32_t CheckBmpInfo(const OsdBitMapInfo *bmpInfo) 939762338dSopenharmony_ci{ 949762338dSopenharmony_ci uint16_t bpp; 959762338dSopenharmony_ci 969762338dSopenharmony_ci bpp = bmpInfo->header.bitCnt / EIGHT_BITS_PER_PIXEL; 979762338dSopenharmony_ci if (bpp < INVALID_BITS) { 989762338dSopenharmony_ci /* only support 1555.8888 888 bitmap */ 999762338dSopenharmony_ci HDF_LOGE("%s: bitmap format not supported", __func__); 1009762338dSopenharmony_ci return DISPLAY_FAILURE; 1019762338dSopenharmony_ci } 1029762338dSopenharmony_ci 1039762338dSopenharmony_ci if (bmpInfo->header.compress != 0) { 1049762338dSopenharmony_ci HDF_LOGE("%s: not support compressed bitmap file", __func__); 1059762338dSopenharmony_ci return DISPLAY_FAILURE; 1069762338dSopenharmony_ci } 1079762338dSopenharmony_ci if (bmpInfo->header.height == 0) { 1089762338dSopenharmony_ci HDF_LOGE("%s: bmpInfo.header.height is 0", __func__); 1099762338dSopenharmony_ci return DISPLAY_FAILURE; 1109762338dSopenharmony_ci } 1119762338dSopenharmony_ci return DISPLAY_SUCCESS; 1129762338dSopenharmony_ci} 1139762338dSopenharmony_ci 1149762338dSopenharmony_cistatic int32_t LoadPicToBuffer(const int8_t *fileName, OsdLogo *videoLogo, OsdColorFmt enFmt, 1159762338dSopenharmony_ci uint8_t **outBuf, uint32_t *stride) 1169762338dSopenharmony_ci{ 1179762338dSopenharmony_ci FILE *file = NULL; 1189762338dSopenharmony_ci OsdBitMapFileHeader bmpFileHeader; 1199762338dSopenharmony_ci OsdBitMapInfo bmpInfo; 1209762338dSopenharmony_ci uint32_t h; 1219762338dSopenharmony_ci uint64_t byteNum; 1229762338dSopenharmony_ci char realPath[PATH_MAX] = {0}; 1239762338dSopenharmony_ci 1249762338dSopenharmony_ci if (GetBmpInfo(fileName, &bmpFileHeader, &bmpInfo) < 0) { 1259762338dSopenharmony_ci return DISPLAY_FAILURE; 1269762338dSopenharmony_ci } 1279762338dSopenharmony_ci if (CheckBmpInfo(&bmpInfo) != DISPLAY_SUCCESS) { 1289762338dSopenharmony_ci /* only support 1555.8888 888 bitmap */ 1299762338dSopenharmony_ci HDF_LOGE("%s: bitmap format not supported", __func__); 1309762338dSopenharmony_ci return DISPLAY_FAILURE; 1319762338dSopenharmony_ci } 1329762338dSopenharmony_ci videoLogo->bpp = bmpInfo.header.bitCnt / EIGHT_BITS_PER_PIXEL; 1339762338dSopenharmony_ci if (realpath((char*)fileName, realPath) == NULL) { 1349762338dSopenharmony_ci printf("%s: file %s does not exist\n", __func__, fileName); 1359762338dSopenharmony_ci return DISPLAY_FAILURE; 1369762338dSopenharmony_ci } 1379762338dSopenharmony_ci if ((file = fopen((const char*)realPath, "rb")) == NULL) { 1389762338dSopenharmony_ci HDF_LOGE("%s: Open file failure: %s", __func__, fileName); 1399762338dSopenharmony_ci return DISPLAY_FAILURE; 1409762338dSopenharmony_ci } 1419762338dSopenharmony_ci videoLogo->width = bmpInfo.header.width; 1429762338dSopenharmony_ci videoLogo->height = ((bmpInfo.header.height > 0) ? bmpInfo.header.height : 1439762338dSopenharmony_ci (-bmpInfo.header.height)); 1449762338dSopenharmony_ci *stride = videoLogo->width * videoLogo->bpp; 1459762338dSopenharmony_ci h = videoLogo->height; 1469762338dSopenharmony_ci if ((*stride % FOUR_BITS_PER_PIXEL) != 0) { 1479762338dSopenharmony_ci *stride = (*stride & 0xfffc) + FOUR_BITS_PER_PIXEL; 1489762338dSopenharmony_ci } 1499762338dSopenharmony_ci /* RGB8888 or RGB1555 */ 1509762338dSopenharmony_ci *outBuf = (uint8_t*)malloc(videoLogo->height * (*stride)); 1519762338dSopenharmony_ci if (*outBuf == NULL) { 1529762338dSopenharmony_ci HDF_LOGE("%s: not enough memory to malloc", __func__); 1539762338dSopenharmony_ci fclose(file); 1549762338dSopenharmony_ci return DISPLAY_FAILURE; 1559762338dSopenharmony_ci } 1569762338dSopenharmony_ci fseek(file, bmpFileHeader.offBits, 0); 1579762338dSopenharmony_ci byteNum = h * (*stride); 1589762338dSopenharmony_ci if (byteNum > UINT32_MAX) { 1599762338dSopenharmony_ci HDF_LOGE("%s: buffer size is beyond param's limit", __func__); 1609762338dSopenharmony_ci fclose(file); 1619762338dSopenharmony_ci free(*outBuf); 1629762338dSopenharmony_ci *outBuf = NULL; 1639762338dSopenharmony_ci return DISPLAY_FAILURE; 1649762338dSopenharmony_ci } 1659762338dSopenharmony_ci if (fread((*outBuf), 1, byteNum, file) != byteNum) { 1669762338dSopenharmony_ci HDF_LOGE("%s: fread %u*%u error", __func__, h, *stride); 1679762338dSopenharmony_ci fclose(file); 1689762338dSopenharmony_ci free(*outBuf); 1699762338dSopenharmony_ci *outBuf = NULL; 1709762338dSopenharmony_ci return DISPLAY_FAILURE; 1719762338dSopenharmony_ci } 1729762338dSopenharmony_ci if (enFmt >= OSD_COLOR_FMT_RGB888) { 1739762338dSopenharmony_ci videoLogo->stride = videoLogo->width * FOUR_BITS_PER_PIXEL; 1749762338dSopenharmony_ci } else { 1759762338dSopenharmony_ci videoLogo->stride = videoLogo->width * TWO_BITS_PER_PIXEL; 1769762338dSopenharmony_ci } 1779762338dSopenharmony_ci fclose(file); 1789762338dSopenharmony_ci return DISPLAY_SUCCESS; 1799762338dSopenharmony_ci} 1809762338dSopenharmony_ci 1819762338dSopenharmony_cistatic void LoadRgbData(OsdLogo *videoLogo, OsdColorFmt enFmt, uint32_t stride, uint8_t *origBuf) 1829762338dSopenharmony_ci{ 1839762338dSopenharmony_ci uint16_t i; 1849762338dSopenharmony_ci uint16_t j; 1859762338dSopenharmony_ci uint8_t *start = NULL; 1869762338dSopenharmony_ci uint16_t *dst = NULL; 1879762338dSopenharmony_ci uint32_t h; 1889762338dSopenharmony_ci OsdColor c; 1899762338dSopenharmony_ci 1909762338dSopenharmony_ci h = videoLogo->height; 1919762338dSopenharmony_ci for (i = 0; i < videoLogo->height; i++) { 1929762338dSopenharmony_ci for (j = 0; j < videoLogo->width; j++) { 1939762338dSopenharmony_ci /* start color convert */ 1949762338dSopenharmony_ci start = origBuf + ((h - 1) - i) * stride + j * videoLogo->bpp; 1959762338dSopenharmony_ci dst = (uint16_t*)(videoLogo->picBuffer + i * videoLogo->stride + j * TWO_OFFSET); 1969762338dSopenharmony_ci c.r = *(start); 1979762338dSopenharmony_ci c.g = *(start + ONE_OFFSET); 1989762338dSopenharmony_ci c.b = *(start + TWO_OFFSET); 1999762338dSopenharmony_ci *dst = OsdMakeColorU16(c.r, c.g, c.b, g_osdCompInfo[enFmt]); 2009762338dSopenharmony_ci } 2019762338dSopenharmony_ci } 2029762338dSopenharmony_ci} 2039762338dSopenharmony_ci 2049762338dSopenharmony_cistatic int32_t LoadData(OsdLogo *videoLogo, OsdColorFmt enFmt, uint32_t stride, uint8_t *origBuf) 2059762338dSopenharmony_ci{ 2069762338dSopenharmony_ci int32_t ret; 2079762338dSopenharmony_ci uint16_t i; 2089762338dSopenharmony_ci uint16_t j; 2099762338dSopenharmony_ci uint32_t h; 2109762338dSopenharmony_ci 2119762338dSopenharmony_ci (void)enFmt; 2129762338dSopenharmony_ci h = videoLogo->height; 2139762338dSopenharmony_ci for (i = 0; i < videoLogo->height; i++) { 2149762338dSopenharmony_ci for (j = 0; j < videoLogo->width; j++) { 2159762338dSopenharmony_ci ret = memcpy_s((videoLogo->picBuffer + i * videoLogo->stride + j * FOUR_BITS_PER_PIXEL), videoLogo->len, 2169762338dSopenharmony_ci (origBuf + ((h - 1) - i) * stride + j * videoLogo->bpp), videoLogo->bpp); 2179762338dSopenharmony_ci if (ret != EOK) { 2189762338dSopenharmony_ci HDF_LOGE("%s: file: %s, line: %d, memcpy_s failure", __func__, __FILE__, __LINE__); 2199762338dSopenharmony_ci return DISPLAY_FAILURE; 2209762338dSopenharmony_ci } 2219762338dSopenharmony_ci *(videoLogo->picBuffer + i * videoLogo->stride + j * FOUR_BITS_PER_PIXEL + THREE_BITS_PER_PIXEL) = 0xff; 2229762338dSopenharmony_ci } 2239762338dSopenharmony_ci } 2249762338dSopenharmony_ci return DISPLAY_SUCCESS; 2259762338dSopenharmony_ci} 2269762338dSopenharmony_ci 2279762338dSopenharmony_cistatic int32_t Copy3BitsByFmt(OsdLogo *videoLogo, OsdColorFmt enFmt, uint32_t stride, uint8_t *origBuf) 2289762338dSopenharmony_ci{ 2299762338dSopenharmony_ci int32_t ret = DISPLAY_SUCCESS; 2309762338dSopenharmony_ci 2319762338dSopenharmony_ci switch (enFmt) { 2329762338dSopenharmony_ci case OSD_COLOR_FMT_RGB444: 2339762338dSopenharmony_ci case OSD_COLOR_FMT_RGB555: 2349762338dSopenharmony_ci case OSD_COLOR_FMT_RGB565: 2359762338dSopenharmony_ci case OSD_COLOR_FMT_RGB1555: 2369762338dSopenharmony_ci case OSD_COLOR_FMT_RGB4444: 2379762338dSopenharmony_ci /* start color convert */ 2389762338dSopenharmony_ci LoadRgbData(videoLogo, enFmt, stride, origBuf); 2399762338dSopenharmony_ci break; 2409762338dSopenharmony_ci case OSD_COLOR_FMT_RGB888: 2419762338dSopenharmony_ci case OSD_COLOR_FMT_RGB8888: 2429762338dSopenharmony_ci ret = LoadData(videoLogo, enFmt, stride, origBuf); 2439762338dSopenharmony_ci break; 2449762338dSopenharmony_ci default: 2459762338dSopenharmony_ci HDF_LOGE("%s: file: %s, line: %d, no such format", __func__, __FILE__, __LINE__); 2469762338dSopenharmony_ci return DISPLAY_FAILURE; 2479762338dSopenharmony_ci } 2489762338dSopenharmony_ci return ret; 2499762338dSopenharmony_ci} 2509762338dSopenharmony_ci 2519762338dSopenharmony_cistatic int32_t Copy2BitsAnd4Bits(OsdLogo *videoLogo, uint32_t stride, uint8_t *origBuf) 2529762338dSopenharmony_ci{ 2539762338dSopenharmony_ci int32_t ret; 2549762338dSopenharmony_ci uint16_t i; 2559762338dSopenharmony_ci uint16_t j; 2569762338dSopenharmony_ci uint8_t *pRGBBuf; 2579762338dSopenharmony_ci 2589762338dSopenharmony_ci pRGBBuf = videoLogo->picBuffer; 2599762338dSopenharmony_ci for (i = 0; i < videoLogo->height; i++) { 2609762338dSopenharmony_ci for (j = 0; j < videoLogo->width; j++) { 2619762338dSopenharmony_ci ret = memcpy_s((pRGBBuf + i * videoLogo->stride + j * videoLogo->bpp), videoLogo->len, 2629762338dSopenharmony_ci (origBuf + ((videoLogo->height - 1) - i) * stride + j * videoLogo->bpp), videoLogo->bpp); 2639762338dSopenharmony_ci if (ret != EOK) { 2649762338dSopenharmony_ci HDF_LOGE("%s: file: %s, line: %d, memcpy_s failure", __func__, __FILE__, __LINE__); 2659762338dSopenharmony_ci return DISPLAY_FAILURE; 2669762338dSopenharmony_ci } 2679762338dSopenharmony_ci } 2689762338dSopenharmony_ci } 2699762338dSopenharmony_ci return DISPLAY_SUCCESS; 2709762338dSopenharmony_ci} 2719762338dSopenharmony_ci 2729762338dSopenharmony_cistatic int32_t LoadBMPEx(const int8_t *fileName, OsdLogo *videoLogo, OsdColorFmt enFmt) 2739762338dSopenharmony_ci{ 2749762338dSopenharmony_ci int32_t ret; 2759762338dSopenharmony_ci uint32_t stride; 2769762338dSopenharmony_ci uint8_t *origBmpBuf = NULL; 2779762338dSopenharmony_ci 2789762338dSopenharmony_ci ret = LoadPicToBuffer(fileName, videoLogo, enFmt, &origBmpBuf, &stride); 2799762338dSopenharmony_ci if (ret != DISPLAY_SUCCESS) { 2809762338dSopenharmony_ci HDF_LOGE("%s: LoadPicToBuffer failure", __func__); 2819762338dSopenharmony_ci return DISPLAY_FAILURE; 2829762338dSopenharmony_ci } 2839762338dSopenharmony_ci if (videoLogo->bpp == THREE_BITS_PER_PIXEL) { 2849762338dSopenharmony_ci ret = Copy3BitsByFmt(videoLogo, enFmt, stride, origBmpBuf); 2859762338dSopenharmony_ci if (ret != DISPLAY_SUCCESS) { 2869762338dSopenharmony_ci HDF_LOGE("%s: Copy3BitsByFmt failure", __func__); 2879762338dSopenharmony_ci } 2889762338dSopenharmony_ci } else if ((videoLogo->bpp == TWO_BITS_PER_PIXEL) || (videoLogo->bpp == FOUR_BITS_PER_PIXEL)) { 2899762338dSopenharmony_ci ret = Copy2BitsAnd4Bits(videoLogo, stride, origBmpBuf); 2909762338dSopenharmony_ci if (ret != DISPLAY_SUCCESS) { 2919762338dSopenharmony_ci HDF_LOGE("%s: Copy2BitsAnd4Bits failure", __func__); 2929762338dSopenharmony_ci free(origBmpBuf); 2939762338dSopenharmony_ci return ret; 2949762338dSopenharmony_ci } 2959762338dSopenharmony_ci } 2969762338dSopenharmony_ci free(origBmpBuf); 2979762338dSopenharmony_ci return DISPLAY_SUCCESS; 2989762338dSopenharmony_ci} 2999762338dSopenharmony_ci 3009762338dSopenharmony_cistatic int32_t LoadImageEx(const int8_t *fileName, OsdLogo *videoLogo, OsdColorFmt enFmt) 3019762338dSopenharmony_ci{ 3029762338dSopenharmony_ci char *ext = strrchr((const char *)fileName, '.'); 3039762338dSopenharmony_ci 3049762338dSopenharmony_ci if (ext == NULL) { 3059762338dSopenharmony_ci HDF_LOGE("%s: LoadImageEx error", __func__); 3069762338dSopenharmony_ci return DISPLAY_FAILURE; 3079762338dSopenharmony_ci } 3089762338dSopenharmony_ci 3099762338dSopenharmony_ci ext = ext + 1; 3109762338dSopenharmony_ci if (strcmp(ext, "bmp") == 0) { 3119762338dSopenharmony_ci if (LoadBMPEx(fileName, videoLogo, enFmt) != 0) { 3129762338dSopenharmony_ci HDF_LOGE("%s: LoadBMPEx error", __func__); 3139762338dSopenharmony_ci return DISPLAY_FAILURE; 3149762338dSopenharmony_ci } 3159762338dSopenharmony_ci } else { 3169762338dSopenharmony_ci HDF_LOGE("%s: not supported image file", __func__); 3179762338dSopenharmony_ci return DISPLAY_FAILURE; 3189762338dSopenharmony_ci } 3199762338dSopenharmony_ci 3209762338dSopenharmony_ci return DISPLAY_SUCCESS; 3219762338dSopenharmony_ci} 3229762338dSopenharmony_ci 3239762338dSopenharmony_ciint32_t CreateSurfaceByBitMap(const int8_t *fileName, OsdSurface *pstSurface, uint8_t *virAddr, uint32_t len) 3249762338dSopenharmony_ci{ 3259762338dSopenharmony_ci OsdLogo stLogo; 3269762338dSopenharmony_ci 3279762338dSopenharmony_ci if (fileName == NULL) { 3289762338dSopenharmony_ci HDF_LOGE("%s: fileName is null", __func__); 3299762338dSopenharmony_ci return DISPLAY_FAILURE; 3309762338dSopenharmony_ci } 3319762338dSopenharmony_ci if (pstSurface == NULL) { 3329762338dSopenharmony_ci HDF_LOGE("%s: pstSurface is null", __func__); 3339762338dSopenharmony_ci return DISPLAY_FAILURE; 3349762338dSopenharmony_ci } 3359762338dSopenharmony_ci if (virAddr == NULL) { 3369762338dSopenharmony_ci HDF_LOGE("%s: virAddr is null", __func__); 3379762338dSopenharmony_ci return DISPLAY_FAILURE; 3389762338dSopenharmony_ci } 3399762338dSopenharmony_ci (void)memset_s(&stLogo, sizeof(OsdLogo), 0, sizeof(OsdLogo)); 3409762338dSopenharmony_ci stLogo.picBuffer = virAddr; 3419762338dSopenharmony_ci stLogo.len = len; 3429762338dSopenharmony_ci if (LoadImageEx(fileName, &stLogo, pstSurface->colorFmt) < 0) { 3439762338dSopenharmony_ci HDF_LOGE("%s: load bmp error", __func__); 3449762338dSopenharmony_ci return DISPLAY_FAILURE; 3459762338dSopenharmony_ci } 3469762338dSopenharmony_ci pstSurface->height = stLogo.height; 3479762338dSopenharmony_ci pstSurface->width = stLogo.width; 3489762338dSopenharmony_ci pstSurface->stride = stLogo.stride; 3499762338dSopenharmony_ci return DISPLAY_SUCCESS; 3509762338dSopenharmony_ci} 351