diff --git a/frameworks/kits/taihe/include/image_creator_taihe.h b/frameworks/kits/taihe/include/image_creator_taihe.h index f77e3195b31672a5eba0f1386cc40731778aeea8..ae8fe812ae04d2dd5005b2967077161be6b31387 100644 --- a/frameworks/kits/taihe/include/image_creator_taihe.h +++ b/frameworks/kits/taihe/include/image_creator_taihe.h @@ -73,7 +73,7 @@ struct ImageCreatorTaiheContext { struct ImageCreatorCommonArgs { const std::string name; - CompleteCreatorCallback callBack; + CompleteCreatorCallback callBack = nullptr; }; class ImageCreatorReleaseListener : public OHOS::Media::SurfaceBufferReleaseListener { diff --git a/frameworks/kits/taihe/include/transfer_taihe.h b/frameworks/kits/taihe/include/transfer_taihe.h index 83e6b660ecf8feb90878b958fcd2fa2a38ec7e3b..3702ec67860c1d4a0f3cef257c40a7c8e9c7edbb 100644 --- a/frameworks/kits/taihe/include/transfer_taihe.h +++ b/frameworks/kits/taihe/include/transfer_taihe.h @@ -27,22 +27,22 @@ using namespace ohos::multimedia::image::image; void* GetNapiFunction(const char* name); ImageSource ImageSourceTransferStaticImpl(uintptr_t input); -uintptr_t ImageSourceTransferDynamicImpl(ImageSource input); +uintptr_t ImageSourceTransferDynamicImpl(weak::ImageSource input); ImagePacker ImagePackerTransferStaticImpl(uintptr_t input); -uintptr_t ImagePackerTransferDynamicImpl(ImagePacker input); +uintptr_t ImagePackerTransferDynamicImpl(weak::ImagePacker input); Picture PictureTransferStaticImpl(uintptr_t input); -uintptr_t PictureTransferDynamicImpl(Picture input); +uintptr_t PictureTransferDynamicImpl(weak::Picture input); AuxiliaryPicture AuxiliaryPictureTransferStaticImpl(uintptr_t input); -uintptr_t AuxiliaryPictureTransferDynamicImpl(AuxiliaryPicture input); +uintptr_t AuxiliaryPictureTransferDynamicImpl(weak::AuxiliaryPicture input); ImageReceiver ImageReceiverTransferStaticImpl(uintptr_t input); -uintptr_t ImageReceiverTransferDynamicImpl(ImageReceiver input); +uintptr_t ImageReceiverTransferDynamicImpl(weak::ImageReceiver input); ImageCreator ImageCreatorTransferStaticImpl(uintptr_t input); -uintptr_t ImageCreatorTransferDynamicImpl(ImageCreator input); +uintptr_t ImageCreatorTransferDynamicImpl(weak::ImageCreator input); PixelMap PixelMapTransferStaticImpl(uintptr_t input); uintptr_t PixelMapTransferDynamicImpl(weak::PixelMap input); diff --git a/frameworks/kits/taihe/src/transfer_taihe.cpp b/frameworks/kits/taihe/src/transfer_taihe.cpp index 556084d2a1bd75aa73d67770da16e469a4537594..01e22a2da09e3a4c1d3a9cfdbb212049a4dcd20d 100644 --- a/frameworks/kits/taihe/src/transfer_taihe.cpp +++ b/frameworks/kits/taihe/src/transfer_taihe.cpp @@ -63,7 +63,7 @@ using UniqueDlHandle = std::unique_ptr; namespace ANI::Image { -void* GetNapiFunction(const char* name) +void* GetNapiFunction(const char *name) { static std::once_flag flag; static UniqueDlHandle handle(nullptr); @@ -92,42 +92,38 @@ void* GetNapiFunction(const char* name) return symbol; } -ImageSource ImageSourceTransferStaticImpl(uintptr_t input) +template +bool TransferStaticImplCommon(uintptr_t input, const char *getNativeFuncName, std::shared_ptr &nativePtr) { IMAGE_LOGD("[%{public}s] IN", __func__); ani_object esValue = reinterpret_cast(input); - void *nativePtr = nullptr; - if (!arkts_esvalue_unwrap(get_env(), esValue, &nativePtr) || nativePtr == nullptr) { + void *napiPtr = nullptr; + if (!arkts_esvalue_unwrap(get_env(), esValue, &napiPtr) || napiPtr == nullptr) { IMAGE_LOGE("%{public}s unwrap esValue failed", __func__); - return make_holder(); + return false; } - void* napiFunc = GetNapiFunction("GetNativeImageSource"); + void* napiFunc = GetNapiFunction(getNativeFuncName); if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - return make_holder(); + IMAGE_LOGE("%{public}s GetNapiFunction failed, funcName: %{public}s", __func__, getNativeFuncName); + return false; } - std::shared_ptr nativeImageSource = nullptr; - bool ret = (*reinterpret_cast(napiFunc))(nativePtr, nativeImageSource); - if (!ret || nativeImageSource == nullptr) { - IMAGE_LOGE("%{public}s GetNativeImageSource failed", __func__); - return make_holder(); + bool ret = (*reinterpret_cast(napiFunc))(napiPtr, nativePtr); + if (!ret || nativePtr == nullptr) { + IMAGE_LOGE("%{public}s %{public}s failed", __func__, getNativeFuncName); + return false; } IMAGE_LOGD("[%{public}s] OUT", __func__); - return make_holder(nativeImageSource); + return true; } -uintptr_t ImageSourceTransferDynamicImpl(ImageSource input) +template +uintptr_t TransferDynamicImplCommon(const char *getNapiFuncName, std::shared_ptr &nativePtr) { IMAGE_LOGD("[%{public}s] IN", __func__); - if (input.is_error()) { - IMAGE_LOGE("%{public}s input is error", __func__); - return 0; - } - ImageSourceImpl* thisPtr = reinterpret_cast(input->GetImplPtr()); - if (thisPtr == nullptr) { - IMAGE_LOGE("%{public}s thisPtr is nullptr", __func__); + if (nativePtr == nullptr) { + IMAGE_LOGE("%{public}s nativePtr is nullptr", __func__); return 0; } @@ -137,15 +133,16 @@ uintptr_t ImageSourceTransferDynamicImpl(ImageSource input) return 0; } - void* napiFunc = GetNapiFunction("GetImageSourceNapi"); + void* napiFunc = GetNapiFunction(getNapiFuncName); if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); + IMAGE_LOGE("%{public}s GetNapiFunction failed, funcName: %{public}s", __func__, getNapiFuncName); arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); return 0; } - napi_value result = (*reinterpret_cast(napiFunc))(jsEnv, thisPtr->nativeImgSrc); + + napi_value result = (*reinterpret_cast(napiFunc))(jsEnv, nativePtr); if (result == nullptr) { - IMAGE_LOGE("%{public}s GetImageSourceNapi failed, result is nullptr", __func__); + IMAGE_LOGE("%{public}s %{public}s failed, result is nullptr", __func__, getNapiFuncName); arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); return 0; } @@ -156,328 +153,148 @@ uintptr_t ImageSourceTransferDynamicImpl(ImageSource input) return ref; } -ImagePacker ImagePackerTransferStaticImpl(uintptr_t input) +ImageSource ImageSourceTransferStaticImpl(uintptr_t input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - ani_object esValue = reinterpret_cast(input); - void *nativePtr = nullptr; - if (!arkts_esvalue_unwrap(get_env(), esValue, &nativePtr) || nativePtr == nullptr) { - IMAGE_LOGE("%{public}s unwrap esValue failed", __func__); - return make_holder(); + std::shared_ptr nativeImageSource = nullptr; + bool ret = TransferStaticImplCommon( + input, "GetNativeImageSource", nativeImageSource); + if (!ret || nativeImageSource == nullptr) { + IMAGE_LOGE("%{public}s GetNativeImageSource failed", __func__); + return make_holder(); } + return make_holder(nativeImageSource); +} - void* napiFunc = GetNapiFunction("GetNativeImagePacker"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - return make_holder(); - } +uintptr_t ImageSourceTransferDynamicImpl(weak::ImageSource input) +{ + CHECK_ERROR_RETURN_RET_LOG(input.is_error(), 0, "%{public}s input is error", __func__); + std::shared_ptr nativeImageSource = nullptr; + ImageSourceImpl* thisPtr = reinterpret_cast(input->GetImplPtr()); + CHECK_ERROR_RETURN_RET_LOG(thisPtr == nullptr, 0, "%{public}s thisPtr is nullptr", __func__); + nativeImageSource = thisPtr->nativeImgSrc; + return TransferDynamicImplCommon( + "GetImageSourceNapi", nativeImageSource); +} + +ImagePacker ImagePackerTransferStaticImpl(uintptr_t input) +{ std::shared_ptr nativeImagePacker = nullptr; - bool ret = (*reinterpret_cast(napiFunc))(nativePtr, nativeImagePacker); + bool ret = TransferStaticImplCommon( + input, "GetNativeImagePacker", nativeImagePacker); if (!ret || nativeImagePacker == nullptr) { IMAGE_LOGE("%{public}s GetNativeImagePacker failed", __func__); return make_holder(); } - IMAGE_LOGD("[%{public}s] OUT", __func__); return make_holder(nativeImagePacker); } -uintptr_t ImagePackerTransferDynamicImpl(ImagePacker input) +uintptr_t ImagePackerTransferDynamicImpl(weak::ImagePacker input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - if (input.is_error()) { - IMAGE_LOGE("%{public}s input is error", __func__); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(input.is_error(), 0, "%{public}s input is error", __func__); + std::shared_ptr nativeImagePacker = nullptr; ImagePackerImpl* thisPtr = reinterpret_cast(input->GetImplPtr()); - if (thisPtr == nullptr) { - IMAGE_LOGE("%{public}s thisPtr is nullptr", __func__); - return 0; - } - - napi_env jsEnv; - if (!arkts_napi_scope_open(get_env(), &jsEnv)) { - IMAGE_LOGE("%{public}s arkts_napi_scope_open failed", __func__); - return 0; - } - - void* napiFunc = GetNapiFunction("GetImagePackerNapi"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } - napi_value result = (*reinterpret_cast(napiFunc))(jsEnv, thisPtr->GetNativeImagePacker()); - if (result == nullptr) { - IMAGE_LOGE("%{public}s GetImagePackerNapi failed, result is nullptr", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(thisPtr == nullptr, 0, "%{public}s thisPtr is nullptr", __func__); + nativeImagePacker = thisPtr->GetNativeImagePacker(); - uintptr_t ref = 0; - arkts_napi_scope_close_n(jsEnv, 1, &result, reinterpret_cast(&ref)); - IMAGE_LOGD("[%{public}s] OUT", __func__); - return ref; + return TransferDynamicImplCommon( + "GetImagePackerNapi", nativeImagePacker); } Picture PictureTransferStaticImpl(uintptr_t input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - ani_object esValue = reinterpret_cast(input); - void *nativePtr = nullptr; - if (!arkts_esvalue_unwrap(get_env(), esValue, &nativePtr) || nativePtr == nullptr) { - IMAGE_LOGE("%{public}s unwrap esValue failed", __func__); - return make_holder(); - } - - void* napiFunc = GetNapiFunction("GetNativePicture"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - return make_holder(); - } - std::shared_ptr nativePicture = nullptr; - bool ret = (*reinterpret_cast(napiFunc))(nativePtr, nativePicture); + bool ret = TransferStaticImplCommon( + input, "GetNativePicture", nativePicture); if (!ret || nativePicture == nullptr) { IMAGE_LOGE("%{public}s GetNativePicture failed", __func__); return make_holder(); } - IMAGE_LOGD("[%{public}s] OUT", __func__); return make_holder(nativePicture); } -uintptr_t PictureTransferDynamicImpl(Picture input) +uintptr_t PictureTransferDynamicImpl(weak::Picture input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - if (input.is_error()) { - IMAGE_LOGE("%{public}s input is error", __func__); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(input.is_error(), 0, "%{public}s input is error", __func__); + std::shared_ptr nativePicture = nullptr; PictureImpl* thisPtr = reinterpret_cast(input->GetImplPtr()); - if (thisPtr == nullptr) { - IMAGE_LOGE("%{public}s thisPtr is nullptr", __func__); - return 0; - } - - napi_env jsEnv; - if (!arkts_napi_scope_open(get_env(), &jsEnv)) { - IMAGE_LOGE("%{public}s arkts_napi_scope_open failed", __func__); - return 0; - } - - void* napiFunc = GetNapiFunction("GetPictureNapi"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(thisPtr == nullptr, 0, "%{public}s thisPtr is nullptr", __func__); + nativePicture = thisPtr->GetNativePtr(); - std::shared_ptr nativePicture = thisPtr->GetNativePtr(); - napi_value result = (*reinterpret_cast(napiFunc))(jsEnv, nativePicture); - if (result == nullptr) { - IMAGE_LOGE("%{public}s GetPictureNapi failed, result is nullptr", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } - - uintptr_t ref = 0; - arkts_napi_scope_close_n(jsEnv, 1, &result, reinterpret_cast(&ref)); - IMAGE_LOGD("[%{public}s] OUT", __func__); - return ref; + return TransferDynamicImplCommon( + "GetPictureNapi", nativePicture); } AuxiliaryPicture AuxiliaryPictureTransferStaticImpl(uintptr_t input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - ani_object esValue = reinterpret_cast(input); - void *nativePtr = nullptr; - if (!arkts_esvalue_unwrap(get_env(), esValue, &nativePtr) || nativePtr == nullptr) { - IMAGE_LOGE("%{public}s unwrap esValue failed", __func__); - return make_holder(); - } - - void* napiFunc = GetNapiFunction("GetNativeAuxiliaryPicture"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - return make_holder(); - } - std::shared_ptr nativeAuxiliaryPicture = nullptr; - bool ret = (*reinterpret_cast(napiFunc))(nativePtr, nativeAuxiliaryPicture); + bool ret = TransferStaticImplCommon( + input, "GetNativeAuxiliaryPicture", nativeAuxiliaryPicture); if (!ret || nativeAuxiliaryPicture == nullptr) { IMAGE_LOGE("%{public}s GetNativeAuxiliaryPicture failed", __func__); return make_holder(); } - IMAGE_LOGD("[%{public}s] OUT", __func__); return make_holder(nativeAuxiliaryPicture); } -uintptr_t AuxiliaryPictureTransferDynamicImpl(AuxiliaryPicture input) +uintptr_t AuxiliaryPictureTransferDynamicImpl(weak::AuxiliaryPicture input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - if (input.is_error()) { - IMAGE_LOGE("%{public}s input is error", __func__); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(input.is_error(), 0, "%{public}s input is error", __func__); + std::shared_ptr nativeAuxiliaryPicture = nullptr; AuxiliaryPictureImpl* thisPtr = reinterpret_cast(input->GetImplPtr()); - if (thisPtr == nullptr) { - IMAGE_LOGE("%{public}s thisPtr is nullptr", __func__); - return 0; - } - - napi_env jsEnv; - if (!arkts_napi_scope_open(get_env(), &jsEnv)) { - IMAGE_LOGE("%{public}s arkts_napi_scope_open failed", __func__); - return 0; - } - - void* napiFunc = GetNapiFunction("GetAuxiliaryPictureNapi"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } - napi_value result = (*reinterpret_cast(napiFunc))(jsEnv, - thisPtr->GetNativeAuxiliaryPic()); - if (result == nullptr) { - IMAGE_LOGE("%{public}s GetAuxiliaryPictureNapi failed, result is nullptr", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(thisPtr == nullptr, 0, "%{public}s thisPtr is nullptr", __func__); + nativeAuxiliaryPicture = thisPtr->GetNativeAuxiliaryPic(); - uintptr_t ref = 0; - arkts_napi_scope_close_n(jsEnv, 1, &result, reinterpret_cast(&ref)); - IMAGE_LOGD("[%{public}s] OUT", __func__); - return ref; + return TransferDynamicImplCommon( + "GetAuxiliaryPictureNapi", nativeAuxiliaryPicture); } ImageReceiver ImageReceiverTransferStaticImpl(uintptr_t input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - ani_object esValue = reinterpret_cast(input); - void *nativePtr = nullptr; - if (!arkts_esvalue_unwrap(get_env(), esValue, &nativePtr) || nativePtr == nullptr) { - IMAGE_LOGE("%{public}s unwrap esValue failed", __func__); - return make_holder(); - } - - void* napiFunc = GetNapiFunction("GetNativeImageReceiver"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - return make_holder(); - } - std::shared_ptr nativeImageReceiver = nullptr; - bool ret = (*reinterpret_cast(napiFunc))(nativePtr, nativeImageReceiver); + bool ret = TransferStaticImplCommon( + input, "GetNativeImageReceiver", nativeImageReceiver); if (!ret || nativeImageReceiver == nullptr) { IMAGE_LOGE("%{public}s GetNativeImageReceiver failed", __func__); return make_holder(); } - IMAGE_LOGD("[%{public}s] OUT", __func__); return make_holder(nativeImageReceiver); } -uintptr_t ImageReceiverTransferDynamicImpl(ImageReceiver input) +uintptr_t ImageReceiverTransferDynamicImpl(weak::ImageReceiver input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - if (input.is_error()) { - IMAGE_LOGE("%{public}s input is error", __func__); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(input.is_error(), 0, "%{public}s input is error", __func__); + std::shared_ptr nativeImageReceiver = nullptr; ImageReceiverImpl* thisPtr = reinterpret_cast(input->GetImplPtr()); - if (thisPtr == nullptr) { - IMAGE_LOGE("%{public}s thisPtr is nullptr", __func__); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(thisPtr == nullptr, 0, "%{public}s thisPtr is nullptr", __func__); + nativeImageReceiver = thisPtr->GetNativeImageReceiver(); - napi_env jsEnv; - if (!arkts_napi_scope_open(get_env(), &jsEnv)) { - IMAGE_LOGE("%{public}s arkts_napi_scope_open failed", __func__); - return 0; - } - - void* napiFunc = GetNapiFunction("GetImageReceiverNapi"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } - napi_value result = (*reinterpret_cast(napiFunc))(jsEnv, - thisPtr->GetNativeImageReceiver()); - if (result == nullptr) { - IMAGE_LOGE("%{public}s GetImageReceiverNapi failed, result is nullptr", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } - - uintptr_t ref = 0; - arkts_napi_scope_close_n(jsEnv, 1, &result, reinterpret_cast(&ref)); - IMAGE_LOGD("[%{public}s] OUT", __func__); - return ref; + return TransferDynamicImplCommon( + "GetImageReceiverNapi", nativeImageReceiver); } ImageCreator ImageCreatorTransferStaticImpl(uintptr_t input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - ani_object esValue = reinterpret_cast(input); - void *nativePtr = nullptr; - if (!arkts_esvalue_unwrap(get_env(), esValue, &nativePtr) || nativePtr == nullptr) { - IMAGE_LOGE("%{public}s unwrap esValue failed", __func__); - return make_holder(); - } - - void* napiFunc = GetNapiFunction("GetNativeImageCreator"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - return make_holder(); - } - std::shared_ptr nativeImageCreator = nullptr; - bool ret = (*reinterpret_cast(napiFunc))(nativePtr, nativeImageCreator); + bool ret = TransferStaticImplCommon( + input, "GetNativeImageCreator", nativeImageCreator); if (!ret || nativeImageCreator == nullptr) { IMAGE_LOGE("%{public}s GetNativeImageCreator failed", __func__); return make_holder(); } - IMAGE_LOGD("[%{public}s] OUT", __func__); return make_holder(nativeImageCreator); } -uintptr_t ImageCreatorTransferDynamicImpl(ImageCreator input) +uintptr_t ImageCreatorTransferDynamicImpl(weak::ImageCreator input) { - IMAGE_LOGD("[%{public}s] IN", __func__); - if (input.is_error()) { - IMAGE_LOGE("%{public}s input is error", __func__); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(input.is_error(), 0, "%{public}s input is error", __func__); + std::shared_ptr nativeImageCreator = nullptr; ImageCreatorImpl* thisPtr = reinterpret_cast(input->GetImplPtr()); - if (thisPtr == nullptr) { - IMAGE_LOGE("%{public}s thisPtr is nullptr", __func__); - return 0; - } - - napi_env jsEnv; - if (!arkts_napi_scope_open(get_env(), &jsEnv)) { - IMAGE_LOGE("%{public}s arkts_napi_scope_open failed", __func__); - return 0; - } + CHECK_ERROR_RETURN_RET_LOG(thisPtr == nullptr, 0, "%{public}s thisPtr is nullptr", __func__); + nativeImageCreator = thisPtr->GetNativeImageCreator(); - void* napiFunc = GetNapiFunction("GetImageCreatorNapi"); - if (napiFunc == nullptr) { - IMAGE_LOGE("%{public}s GetNapiFunction failed", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } - napi_value result = (*reinterpret_cast(napiFunc))(jsEnv, thisPtr->GetNativeImageCreator()); - if (result == nullptr) { - IMAGE_LOGE("%{public}s GetImageCreatorNapi failed, result is nullptr", __func__); - arkts_napi_scope_close_n(jsEnv, 0, nullptr, nullptr); - return 0; - } - - uintptr_t ref = 0; - arkts_napi_scope_close_n(jsEnv, 1, &result, reinterpret_cast(&ref)); - IMAGE_LOGD("[%{public}s] OUT", __func__); - return ref; + return TransferDynamicImplCommon( + "GetImageCreatorNapi", nativeImageCreator); } PixelMap PixelMapTransferStaticImpl(uintptr_t input)