diff --git a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp index 1894cf1d9609d52e1932867dd9313ab69d05510b..d4f52297da2cf8bfc48d728c98d33ccaa67423dd 100644 --- a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp +++ b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp @@ -1216,8 +1216,8 @@ static bool RGBToYuv(const uint8_t *srcBuffer, const RGBDataInfo &rgbInfo, Pixel } srcParam.buffer = copySrcBuffer.get(); } - srcParam.width = copyWidth; - srcParam.height = copyHeight; + srcParam.width = static_cast(copyWidth); + srcParam.height = static_cast(copyHeight); srcParam.format = srcFormat; DestConvertParam destParam = {destInfo.width, destInfo.height}; diff --git a/plugins/common/libs/image/libextplugin/include/heif_impl/HeifDecoderImpl.h b/plugins/common/libs/image/libextplugin/include/heif_impl/HeifDecoderImpl.h index 7c9860cad5a470169a7dd5da48d742de379e07eb..b888c8c029c1d48d43966f166937e70ddac90b3a 100644 --- a/plugins/common/libs/image/libextplugin/include/heif_impl/HeifDecoderImpl.h +++ b/plugins/common/libs/image/libextplugin/include/heif_impl/HeifDecoderImpl.h @@ -151,7 +151,7 @@ private: void SetColorSpaceInfo(HeifFrameInfo* info, const std::shared_ptr& image); - void GetGainmapColorSpace(ColorManager::ColorSpaceName &gainmapColor); + void GetAuxiliaryColorSpace(ColorManager::ColorSpaceName &auxiliaryColor); void SetHardwareDecodeErrMsg(const uint32_t width, const uint32_t height); diff --git a/plugins/common/libs/image/libextplugin/include/heif_impl/hevc_sw_decode_param.h b/plugins/common/libs/image/libextplugin/include/heif_impl/hevc_sw_decode_param.h index 6376d42e60c23111d06cf41d6c018165de12cdce..edd48324c3017d298df7c1b5d8eeaf3a8738ce00 100644 --- a/plugins/common/libs/image/libextplugin/include/heif_impl/hevc_sw_decode_param.h +++ b/plugins/common/libs/image/libextplugin/include/heif_impl/hevc_sw_decode_param.h @@ -16,11 +16,21 @@ #ifndef PLUGINS_COMMON_LIBS_IMAGE_LIBEXTPLUGIN_INCLUDE_HEVC_SW_DECODE_PARAM_H #define PLUGINS_COMMON_LIBS_IMAGE_LIBEXTPLUGIN_INCLUDE_HEVC_SW_DECODE_PARAM_H -#include "hardware/imagecodec/grid_info.h" #include "image_type.h" namespace OHOS { namespace ImagePlugin { +struct GridInfo { + uint32_t displayWidth = 0; + uint32_t displayHeight = 0; + bool enableGrid = false; + uint32_t cols = 0; + uint32_t rows = 0; + uint32_t tileWidth = 0; + uint32_t tileHeight = 0; + uint8_t colorRangeflag = 1; // 0 -> limitRange:[16,235], 1 -> fullRange:[0, 255] +}; + struct HevcSoftDecodeParam { GridInfo gridInfo {}; Media::PixelFormat srcpixFmt = Media::PixelFormat::UNKNOWN; diff --git a/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp b/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp index 0c61644d17627e6c9d02dc3b919c66ea10db5522..f9cfacc19752ebb18ecc1a22e3cd9476632798e6 100644 --- a/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp +++ b/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp @@ -51,7 +51,6 @@ #ifdef HEIF_HW_DECODE_ENABLE #include "heif_impl/HeifDecoder.h" #include "heif_impl/HeifDecoderImpl.h" -#include "hardware/heif_hw_decoder.h" #endif #include "color_utils.h" #include "heif_parser.h" @@ -2799,7 +2798,7 @@ bool ExtDecoder::DecodeHeifAuxiliaryMap(DecodeContext& context, AuxiliaryPicture if (SkImageInfo::ByteSizeOverflowed(tempByteCount)) { IMAGE_LOGE("Image too large, dstInfo_height: %{public}d, dstInfo_width: %{public}d", dstInfo.height(), dstInfo.width()); - return ERR_IMAGE_TOO_LARGE; + return false; } uint64_t byteCount = tempByteCount; context.info.size.width = width; diff --git a/plugins/common/libs/image/libextplugin/src/ext_encoder.cpp b/plugins/common/libs/image/libextplugin/src/ext_encoder.cpp index c01fb3b4f55ed0a246e1dbbccd25c607c50d3796..32d13221211074bdc3972e19284459cc8b88552f 100644 --- a/plugins/common/libs/image/libextplugin/src/ext_encoder.cpp +++ b/plugins/common/libs/image/libextplugin/src/ext_encoder.cpp @@ -1381,26 +1381,26 @@ uint32_t ExtEncoder::AssembleHeifFragmentMap(std::vector& inputImgs) HeifEncodeItemInfo itemInfo = GetHeifEncodeItemInfo(AuxiliaryPictureType::FRAGMENT_MAP); auto item = InitAuxiliaryImageItem(itemInfo.itemId, itemInfo.itemName); bool sdrIsSRGB = fragmentMap->GetContentPixel()->GetToSdrColorSpaceIsSRGB(); - SkImageInfo fragmentInfo = GetSkInfo(fragmentMap->GetContentPixel().get(), false, sdrIsSRGB); -#ifdef USE_M133_SKIA - sk_sp iccProfile = icc_from_color_space(fragmentInfo, nullptr, nullptr); -#else - sk_sp iccProfile = icc_from_color_space(fragmentInfo); -#endif - cond = !AssembleICCImageProperty(iccProfile, item.sharedProperties); - CHECK_ERROR_RETURN_RET_LOG(cond, ERR_IMAGE_INVALID_PARAMETER, - "%{public}s AssembleICCImageProperty failed", __func__); item.pixelBuffer = sptr::MakeSptr(fragmentMapSptr->GetBufferHandle()); + ColorManager::ColorSpaceName colorSpaceName = + sdrIsSRGB ? ColorManager::ColorSpaceName::SRGB_LIMIT : ColorManager::ColorSpaceName::DISPLAY_P3_LIMIT; + ColourInfo colorInfo; + GetColourInfo(colorSpaceName, colorInfo); std::string auxTypeStr = itemInfo.itemType; uint32_t litePropertiesSize = sizeof(PropertyType::AUX_TYPE) + UINT32_BYTES_NUM + auxTypeStr.length() + PLACE_HOLDER_LENGTH; litePropertiesSize += (sizeof(PropertyType::COLOR_TYPE) + sizeof(ColorType)); + litePropertiesSize += (sizeof(PropertyType::COLOR_INFO) + sizeof(ColourInfo)); litePropertiesSize += (sizeof(PropertyType::RLOC_INFO) + sizeof(RelativeLocation)); item.liteProperties.resize(litePropertiesSize); size_t offset = 0; - ColorType colorType = ColorType::RICC; - cond = !FillLitePropertyItem(item.liteProperties, offset, PropertyType::COLOR_TYPE, &colorType, sizeof(ColorType)); + ColorType colorType = ColorType::NCLX; + cond = !FillLitePropertyItem(item.liteProperties, offset, + PropertyType::COLOR_TYPE, &colorType, sizeof(ColorType)); CHECK_ERROR_RETURN_RET_LOG(cond, ERR_IMAGE_INVALID_PARAMETER, "%{public}s Fill color type failed", __func__); + cond = !FillLitePropertyItem(item.liteProperties, offset, + PropertyType::COLOR_INFO, &colorInfo, sizeof(ColourInfo)); + CHECK_ERROR_RETURN_RET_LOG(cond, ERR_IMAGE_INVALID_PARAMETER, "%{public}s Fill colorInfo failed", __func__); cond = !FillLitePropertyItemByString(item.liteProperties, offset, PropertyType::AUX_TYPE, auxTypeStr); CHECK_ERROR_RETURN_RET_LOG(cond, ERR_IMAGE_INVALID_PARAMETER, "%{public}s Fill auxiliary type failed", __func__); RelativeLocation loc = GetFragmentRelLocation(fragmentMap); diff --git a/plugins/common/libs/image/libextplugin/src/heif_impl/HeifDecoderImpl.cpp b/plugins/common/libs/image/libextplugin/src/heif_impl/HeifDecoderImpl.cpp index 3bb8f0ed64bcaa30dc4f083f842af4189222e431..37fda2b2dce0d2522c1df9a67d603112251a500a 100644 --- a/plugins/common/libs/image/libextplugin/src/heif_impl/HeifDecoderImpl.cpp +++ b/plugins/common/libs/image/libextplugin/src/heif_impl/HeifDecoderImpl.cpp @@ -424,7 +424,7 @@ GSError HeifDecoderImpl::HwSetColorSpaceData(sptr& buffer, GridIn return GSERROR_NO_BUFFER; } if (isGainmapDecode_ || isAuxiliaryDecode_) { - GetGainmapColorSpace(colorSpaceName_); + GetAuxiliaryColorSpace(colorSpaceName_); } auto colorSpaceSearch = ColorUtils::COLORSPACE_NAME_TO_COLORINFO_MAP.find(colorSpaceName_); CM_ColorSpaceInfo colorSpaceInfo = @@ -1134,13 +1134,18 @@ void HeifDecoderImpl::SetSampleFormat(uint32_t sampleSize, ColorManager::ColorSp colorSpaceName_ = colorSpaceName; } -void HeifDecoderImpl::GetGainmapColorSpace(ColorManager::ColorSpaceName &gainmapColor) +void HeifDecoderImpl::GetAuxiliaryColorSpace(ColorManager::ColorSpaceName &auxiliaryColor) { if (gainmapImageInfo_.hasNclxColor) { - gainmapColor = ColorUtils::CicpToColorSpace(gainmapImageInfo_.nclxColor.colorPrimaries, + auxiliaryColor = ColorUtils::CicpToColorSpace(gainmapImageInfo_.nclxColor.colorPrimaries, gainmapImageInfo_.nclxColor.transferCharacteristics, gainmapImageInfo_.nclxColor.matrixCoefficients, gainmapImageInfo_.nclxColor.fullRangeFlag); } + if (auxiliaryImageInfo_.hasNclxColor) { + auxiliaryColor = ColorUtils::CicpToColorSpace(auxiliaryImageInfo_.nclxColor.colorPrimaries, + auxiliaryImageInfo_.nclxColor.transferCharacteristics, auxiliaryImageInfo_.nclxColor.matrixCoefficients, + auxiliaryImageInfo_.nclxColor.fullRangeFlag); + } } void HeifDecoderImpl::setDstBuffer(uint8_t *dstBuffer, size_t rowStride, void *context)