1 /* 2 * Copyright (C) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FRAMEWORKS_INNERKITSIMPL_COMMON_INCLUDE_IMAGE_FORMAT_CONVERT_EXT_UTILS_H 17 #define FRAMEWORKS_INNERKITSIMPL_COMMON_INCLUDE_IMAGE_FORMAT_CONVERT_EXT_UTILS_H 18 19 #include <cinttypes> 20 #include <image_type.h> 21 22 namespace OHOS { 23 namespace Media { 24 struct I420Info { 25 uint32_t width; 26 uint32_t height; 27 uint8_t *I420Y; 28 uint32_t yStride; 29 uint8_t *I420U; 30 uint32_t uStride; 31 uint8_t *I420V; 32 uint32_t vStride; 33 uint32_t uvHeight; 34 }; 35 36 struct I010Info { 37 uint32_t width; 38 uint32_t height; 39 uint16_t *I010Y; 40 uint32_t yStride; 41 uint16_t *I010U; 42 uint32_t uStride; 43 uint16_t *I010V; 44 uint32_t vStride; 45 uint32_t uvHeight; 46 }; 47 48 class ImageFormatConvertExtUtils { 49 public: 50 static bool RGB565ToNV12P010(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 51 [[maybe_unused]]ColorSpace colorSpace); 52 static bool RGB565ToNV21P010(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 53 [[maybe_unused]]ColorSpace colorSpace); 54 static bool RGBAToNV12P010(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 55 [[maybe_unused]]ColorSpace colorSpace); 56 static bool RGBAToNV21P010(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 57 [[maybe_unused]]ColorSpace colorSpace); 58 static bool BGRAToNV12P010(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 59 [[maybe_unused]]ColorSpace colorSpace); 60 static bool BGRAToNV21P010(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 61 [[maybe_unused]]ColorSpace colorSpace); 62 static bool RGBToNV12P010(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 63 [[maybe_unused]]ColorSpace colorSpace); 64 static bool RGBToNV21P010(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 65 [[maybe_unused]]ColorSpace colorSpace); 66 static bool RGBA1010102ToNV12(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 67 [[maybe_unused]]ColorSpace colorSpace); 68 static bool RGBA1010102ToNV21(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 69 [[maybe_unused]]ColorSpace colorSpace); 70 static bool NV12ToRGBA1010102(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 71 [[maybe_unused]]ColorSpace colorSpace); 72 static bool NV21ToRGBA1010102(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 73 [[maybe_unused]]ColorSpace colorSpace); 74 static bool NV12ToNV12P010(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 75 [[maybe_unused]]ColorSpace colorSpace); 76 static bool NV12ToNV21P010(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 77 [[maybe_unused]]ColorSpace colorSpace); 78 static bool NV21ToNV12P010(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 79 [[maybe_unused]]ColorSpace colorSpace); 80 static bool NV21ToNV21P010(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 81 [[maybe_unused]]ColorSpace colorSpace); 82 static bool NV12P010ToNV12(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 83 [[maybe_unused]]ColorSpace colorSpace); 84 static bool NV12P010ToNV21(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 85 [[maybe_unused]]ColorSpace colorSpace); 86 static bool NV12P010ToRGB565(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 87 [[maybe_unused]]ColorSpace colorSpace); 88 static bool NV12P010ToRGBA8888(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 89 [[maybe_unused]]ColorSpace colorSpace); 90 static bool NV12P010ToBGRA8888(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 91 [[maybe_unused]]ColorSpace colorSpace); 92 static bool NV12P010ToRGB888(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 93 [[maybe_unused]]ColorSpace colorSpace); 94 static bool NV21P010ToNV12(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 95 [[maybe_unused]]ColorSpace colorSpace); 96 static bool NV21P010ToNV21(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 97 [[maybe_unused]]ColorSpace colorSpace); 98 static bool NV12P010ToRGBA1010102(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 99 [[maybe_unused]]ColorSpace colorSpace); 100 static bool NV21P010ToRGB565(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 101 [[maybe_unused]]ColorSpace colorSpace); 102 static bool NV21P010ToRGBA8888(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 103 [[maybe_unused]]ColorSpace colorSpace); 104 static bool NV21P010ToBGRA8888(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 105 [[maybe_unused]]ColorSpace colorSpace); 106 static bool NV21P010ToRGB888(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 107 [[maybe_unused]]ColorSpace colorSpace); 108 static bool NV21P010ToRGBA1010102(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 109 [[maybe_unused]]ColorSpace colorSpace); 110 static bool RGB565ToNV12(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 111 [[maybe_unused]]ColorSpace colorSpace); 112 static bool RGB565ToNV21(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 113 [[maybe_unused]]ColorSpace colorSpace); 114 static bool BGRAToNV21(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 115 [[maybe_unused]]ColorSpace colorSpace); 116 static bool RGBAToNV21(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 117 [[maybe_unused]]ColorSpace colorSpace); 118 static bool RGBAToNV12(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 119 [[maybe_unused]]ColorSpace colorSpace); 120 static bool RGBToNV21(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 121 [[maybe_unused]]ColorSpace colorSpace); 122 static bool RGBToNV12(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 123 [[maybe_unused]]ColorSpace colorSpace); 124 static bool BGRAToNV12(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, DestConvertInfo &destInfo, 125 [[maybe_unused]]ColorSpace colorSpace); 126 static bool NV21ToRGB(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 127 [[maybe_unused]]ColorSpace colorSpace); 128 static bool NV21ToRGBA(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 129 [[maybe_unused]]ColorSpace colorSpace); 130 static bool NV21ToBGRA(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 131 [[maybe_unused]]ColorSpace colorSpace); 132 static bool NV21ToRGB565(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 133 [[maybe_unused]]ColorSpace colorSpace); 134 static bool NV12ToRGB565(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 135 [[maybe_unused]]ColorSpace colorSpace); 136 static bool NV12ToRGBA(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 137 [[maybe_unused]]ColorSpace colorSpace); 138 static bool NV12ToBGRA(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 139 [[maybe_unused]]ColorSpace colorSpace); 140 static bool NV12ToRGB(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, DestConvertInfo &destInfo, 141 [[maybe_unused]]ColorSpace colorSpace); 142 }; 143 } // namespace Media 144 } // namespace OHOS 145 146 #endif // FRAMEWORKS_INNERKITSIMPL_COMMON_INCLUDE_IMAGE_FORMAT_CONVERT_EXT_UTILS_H