From 04aeb4a2e4865367992dbd65919fa3ceea0a2fdb Mon Sep 17 00:00:00 2001 From: zhanglei Date: Mon, 28 Jul 2025 10:22:26 +0800 Subject: [PATCH] camera transfer code Signed-off-by: zhanglei --- .../src/input/camera_input_napi.cpp | 23 +++ frameworks/taihe/BUILD.gn | 10 ++ .../taihe/idl/ohos.multimedia.camera.taihe | 24 ++- .../transfer/camera_picker_transfer_taihe.h | 31 ++++ .../include/transfer/camera_transfer_taihe.h | 34 ++++ .../transfer/camera_picker_transfer_taihe.cpp | 25 +++ .../src/transfer/camera_transfer_taihe.cpp | 61 +++++++ interfaces/kits/js/camera_napi/BUILD.gn | 164 +++++++++++++----- .../include/input/camera_input_napi.h | 2 + .../kits/js/camera_napi/libcamera_napi.map | 2 +- .../js/camera_napi/libcamera_napi_base.map | 54 ++++++ 11 files changed, 380 insertions(+), 50 deletions(-) create mode 100644 frameworks/taihe/include/transfer/camera_picker_transfer_taihe.h create mode 100644 frameworks/taihe/include/transfer/camera_transfer_taihe.h create mode 100644 frameworks/taihe/src/transfer/camera_picker_transfer_taihe.cpp create mode 100644 frameworks/taihe/src/transfer/camera_transfer_taihe.cpp create mode 100644 interfaces/kits/js/camera_napi/libcamera_napi_base.map diff --git a/frameworks/js/camera_napi/src/input/camera_input_napi.cpp b/frameworks/js/camera_napi/src/input/camera_input_napi.cpp index 8ad034ae8..e629683ed 100644 --- a/frameworks/js/camera_napi/src/input/camera_input_napi.cpp +++ b/frameworks/js/camera_napi/src/input/camera_input_napi.cpp @@ -249,6 +249,29 @@ napi_value CameraInputNapi::CameraInputNapiConstructor(napi_env env, napi_callba return result; } +napi_value CameraInputNapi::CreateCameraInputNapiForTransfer(napi_env env, sptr cameraInput) +{ + MEDIA_INFO_LOG("CreateCameraInputNapiForTransfer is called"); + napi_status status; + napi_value result = nullptr; + napi_value thisVar = nullptr; + napi_get_undefined(env, &result); + CHECK_ERROR_RETURN_RET_LOG(cameraInput == nullptr, result, "%{public}s cameraInput is nullptr", __func__); + std::unique_ptr obj = std::make_unique(); + CHECK_ERROR_RETURN_RET_LOG(obj == nullptr, result, "%{public}s CameraInputNapi make_unique failed", __func__); + obj->cameraInput_ = cameraInput; + status = napi_wrap(env, thisVar, reinterpret_cast(obj.get()), + CameraInputNapi::CameraInputNapiDestructor, nullptr, nullptr); + if (status == napi_ok) { + obj.release(); + return thisVar; + } else { + MEDIA_ERR_LOG("%{public}s napi_wrap failed", __func__); + } + MEDIA_ERR_LOG("CreateCameraInputNapiForTransfer call Failed!"); + return result; +} + napi_value CameraInputNapi::CreateCameraInput(napi_env env, sptr cameraInput) { MEDIA_INFO_LOG("CreateCameraInput is called"); diff --git a/frameworks/taihe/BUILD.gn b/frameworks/taihe/BUILD.gn index cc28a49b4..235cf456b 100644 --- a/frameworks/taihe/BUILD.gn +++ b/frameworks/taihe/BUILD.gn @@ -52,6 +52,7 @@ taihe_shared_library("camera_taihe") { "include/session", "include/mode", "include/picker", + "include/transfer", "${multimedia_camera_framework_path}/interfaces/inner_api/native/camera/include", ] @@ -84,12 +85,14 @@ taihe_shared_library("camera_taihe") { "src/mode/night_photo_session_taihe.cpp", "src/mode/slow_motion_video_session_taihe.cpp", "src/photo_taihe.cpp", + "src/transfer/camera_transfer_taihe.cpp", ] deps = [ ":camera_run_taihe", "${multimedia_camera_framework_path}/common:camera_utils", "${multimedia_camera_framework_path}/frameworks/native/camera:camera_framework", + "${multimedia_camera_framework_path}/interfaces/kits/js/camera_napi:camera_napi_base", ] external_deps = [ @@ -108,6 +111,8 @@ taihe_shared_library("camera_taihe") { "ipc:ipc_core", "media_library:media_library", "media_library:medialibrary_ani_utils", + "napi:ace_napi", + "runtime_core:ani_helpers", ] sanitize = { @@ -147,6 +152,7 @@ taihe_shared_library("camera_picker_taihe") { include_dirs = [ "include", "include/picker", + "include/transfer", "//drivers/peripheral/camera/interfaces/include", "${multimedia_camera_framework_path}/interfaces/inner_api/native/camera/include", ] @@ -158,6 +164,7 @@ taihe_shared_library("camera_picker_taihe") { "src/camera_worker_queue_keeper_taihe.cpp", "src/camera_security_utils_taihe.cpp", "src/picker/camera_picker_taihe.cpp", + "src/transfer/camera_picker_transfer_taihe.cpp", ] deps = [ @@ -165,6 +172,7 @@ taihe_shared_library("camera_picker_taihe") { ":camera_picker_run_taihe", "${multimedia_camera_framework_path}/common:camera_utils", "${multimedia_camera_framework_path}/frameworks/native/camera:camera_framework", + "${multimedia_camera_framework_path}/interfaces/kits/js/camera_napi:camera_napi_base", ] external_deps = [ @@ -181,6 +189,8 @@ taihe_shared_library("camera_picker_taihe") { "hitrace:hitrace_meter", "ipc:ipc_core", "graphic_surface:surface", + "napi:ace_napi", + "runtime_core:ani_helpers", ] sanitize = { diff --git a/frameworks/taihe/idl/ohos.multimedia.camera.taihe b/frameworks/taihe/idl/ohos.multimedia.camera.taihe index cc76fabdd..294cc55be 100644 --- a/frameworks/taihe/idl/ohos.multimedia.camera.taihe +++ b/frameworks/taihe/idl/ohos.multimedia.camera.taihe @@ -2457,4 +2457,26 @@ struct MetadataCatBodyObject { struct MetadataHumanBodyObject { @extends base: MetadataObject; -} \ No newline at end of file +} + +// transfer functions +function CameraInputTransferStaticImpl(input: @sts_type("ESValue") Opaque): CameraInput; +function CameraInputTransferDynamicImpl(input: CameraInput): @sts_type("Any") Opaque; +// function PhotoTransferStaticImpl(input: @sts_type("ESValue") Opaque): Photo; +// function PhotoTransferDynamicImpl(input: Photo): @sts_type("Any") Opaque; + +@!sts_inject(""" +export function cameraInputTransferStatic(input: Any): Object { + return cameraInputTransferStaticImpl(ESValue.wrap(input)); +} +export function cameraInputTransferDynamic(input: Object): Any { + return cameraInputTransferDynamicImpl(input as CameraInput); +} + +// export function photoTransferStatic(input: Any): Object { +// return photoTransferStaticImpl(ESValue.wrap(input)); +// } +// export function photoTransferDynamic(input: Object): Any { +// return photoTransferDynamicImpl(input as Photo); +// } +""") \ No newline at end of file diff --git a/frameworks/taihe/include/transfer/camera_picker_transfer_taihe.h b/frameworks/taihe/include/transfer/camera_picker_transfer_taihe.h new file mode 100644 index 000000000..42c6c41dc --- /dev/null +++ b/frameworks/taihe/include/transfer/camera_picker_transfer_taihe.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_TAIHE_INCLUDE_CAMERA_PICKER_TRANSFER_TAIHE_H +#define FRAMEWORKS_TAIHE_INCLUDE_CAMERA_PICKER_TRANSFER_TAIHE_H + +#include "ohos.multimedia.camera.proj.hpp" +#include "ohos.multimedia.camera.impl.hpp" +#include "taihe/runtime.hpp" + +namespace Ani { +namespace Camera { +using namespace taihe; +using namespace ohos::multimedia::camera; + +} // namespace Camera +} // namespace Ani + +#endif // FRAMEWORKS_TAIHE_INCLUDE_CAMERA_PICKER_TRANSFER_TAIHE_H \ No newline at end of file diff --git a/frameworks/taihe/include/transfer/camera_transfer_taihe.h b/frameworks/taihe/include/transfer/camera_transfer_taihe.h new file mode 100644 index 000000000..f5619813d --- /dev/null +++ b/frameworks/taihe/include/transfer/camera_transfer_taihe.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_TAIHE_INCLUDE_CAMERA_TRANSFER_TAIHE_H +#define FRAMEWORKS_TAIHE_INCLUDE_CAMERA_TRANSFER_TAIHE_H + +#include "ohos.multimedia.camera.proj.hpp" +#include "ohos.multimedia.camera.impl.hpp" +#include "taihe/runtime.hpp" + +namespace Ani { +namespace Camera { +using namespace taihe; +using namespace ohos::multimedia::camera; + +CameraInput CameraInputTransferStaticImpl(uintptr_t input); +uintptr_t CameraInputTransferDynamicImpl(CameraInput input); + +} // namespace Camera +} // namespace Ani + +#endif // FRAMEWORKS_TAIHE_INCLUDE_CAMERA_TRANSFER_TAIHE_H \ No newline at end of file diff --git a/frameworks/taihe/src/transfer/camera_picker_transfer_taihe.cpp b/frameworks/taihe/src/transfer/camera_picker_transfer_taihe.cpp new file mode 100644 index 000000000..2ed6dd15c --- /dev/null +++ b/frameworks/taihe/src/transfer/camera_picker_transfer_taihe.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "camera_picker_transfer_taihe.h" + +using namespace taihe; +using namespace ohos::multimedia::camera; + +namespace Ani { +namespace Camera { + +} // namespace Camera +} // namespace Ani \ No newline at end of file diff --git a/frameworks/taihe/src/transfer/camera_transfer_taihe.cpp b/frameworks/taihe/src/transfer/camera_transfer_taihe.cpp new file mode 100644 index 000000000..fe98d1b96 --- /dev/null +++ b/frameworks/taihe/src/transfer/camera_transfer_taihe.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "camera_transfer_taihe.h" + +#include "camera_input_taihe.h" +#include "camera_log.h" +#include "input/camera_input_napi.h" +#include "interop_js/arkts_esvalue.h" +#include "interop_js/arkts_interop_js_api.h" + +using namespace Ani::Camera; + +namespace Ani { +namespace Camera { + +CameraInput CameraInputTransferStaticImpl(uintptr_t input) +{ + ani_object esValue = reinterpret_cast(input); + CameraInput cameraInputTH = make_holder(nullptr); + void *nativePtr = nullptr; + CHECK_ERROR_RETURN_RET_LOG(!arkts_esvalue_unwrap(get_env(), esValue, &nativePtr) || nativePtr == nullptr, + cameraInputTH, "%{public}s unwrap esValue failed", __func__); + + auto cameraInputNapi = reinterpret_cast*>(nativePtr)->lock(); + CHECK_ERROR_RETURN_RET_LOG(cameraInputNapi == nullptr, + cameraInputTH, "%{public}s cameraInput is nullptr", __func__); + return make_holder(cameraInputNapi->GetCameraInput()); +} + +uintptr_t CameraInputTransferDynamicImpl(weak::CameraInput input) +{ + CHECK_ERROR_RETURN_RET_LOG(input.is_error(), 0, "%{public}s input is nullptr", __func__); + CameraInputImpl *implPtr = reinterpret_cast(input->GetSpecificImplPtr()); + CHECK_ERROR_RETURN_RET_LOG(implPtr == nullptr, 0, "%{public}s implPtr is nullptr", __func__); + napi_env jsEnv; + CHECK_ERROR_RETURN_RET_LOG(!arkts_napi_scope_open(get_env(), &jsEnv), 0, + "%{public}s arkts_napi_scope_open failed", __func__); + napi_value result = OHOS::CameraStandard::CameraInputNapi::CreateCameraInputNapiForTransfer(jsEnv, + implPtr->GetCameraInput()); + // arkts_napi_scope_close_n(jsEnv, 1, &result, nullptr); + return reinterpret_cast(result); +} + +} // namespace Camera +} // namespace Ani + +TH_EXPORT_CPP_API_CameraInputTransferStaticImpl(CameraInputTransferStaticImpl); +TH_EXPORT_CPP_API_CameraInputTransferDynamicImpl(CameraInputTransferDynamicImpl); \ No newline at end of file diff --git a/interfaces/kits/js/camera_napi/BUILD.gn b/interfaces/kits/js/camera_napi/BUILD.gn index ff88303ad..e833e0634 100644 --- a/interfaces/kits/js/camera_napi/BUILD.gn +++ b/interfaces/kits/js/camera_napi/BUILD.gn @@ -36,59 +36,12 @@ ohos_shared_library("camera_napi") { branch_protector_ret = "pac_ret" public_configs = [ ":camera_napi_public_config" ] - include_dirs = [ - "${multimedia_camera_framework_path}/common/utils", - "${multimedia_camera_framework_path}/interfaces/inner_api/native/camera/include", - "${multimedia_camera_framework_path}/services/camera_service/include", - "${multimedia_camera_framework_path}/frameworks/native/camera/include", - "${multimedia_camera_framework_path}/services/camera_service/binder/base/include/", - "${multimedia_camera_framework_path}/services/camera_service/binder/client/include", - "${multimedia_camera_framework_path}/services/camera_service/binder/server/include", - ] sources = [ - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/ability/camera_ability_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_metadata_utils.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_object_types.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_security_utils.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_utils.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_worker_queue_keeper.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/common/qos_utils.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/input/camera_input_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/input/camera_manager_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/input/camera_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/listener_base.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/aperture_video_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/fluorescence_photo_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/high_res_photo_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/light_painting_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/macro_photo_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/macro_video_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/mode_manager_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/night_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/panorama_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/photo_session_for_sys_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/photo_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/portrait_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/profession_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/quick_shot_photo_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/secure_camera_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/slow_motion_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/time_lapse_photo_session_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/video_session_for_sys_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/video_session_napi.cpp", "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/native_module_ohos_camera.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/deferred_photo_proxy_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/depth_data_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/depth_data_output_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/metadata_output_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/photo_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/photo_output_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/preview_output_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/video_output_napi.cpp", - "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/session/camera_session_napi.cpp", ] deps = [ + ":camera_napi_base", "${multimedia_camera_framework_path}/common:camera_utils", "${multimedia_camera_framework_path}/frameworks/native/camera:camera_framework", ] @@ -216,3 +169,118 @@ if (gen_camera_picker) { subsystem_name = "multimedia" } } + +ohos_shared_library("camera_napi_base") { + branch_protector_ret = "pac_ret" + + public_configs = [ ":camera_napi_public_config" ] + include_dirs = [ + "${multimedia_camera_framework_path}/common/utils", + "${multimedia_camera_framework_path}/interfaces/inner_api/native/camera/include", + "${multimedia_camera_framework_path}/services/camera_service/include", + "${multimedia_camera_framework_path}/frameworks/native/camera/include", + "${multimedia_camera_framework_path}/services/camera_service/binder/base/include/", + "${multimedia_camera_framework_path}/services/camera_service/binder/client/include", + "${multimedia_camera_framework_path}/services/camera_service/binder/server/include", + ] + sources = [ + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/ability/camera_ability_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_metadata_utils.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_object_types.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_security_utils.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_utils.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/camera_napi_worker_queue_keeper.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/common/qos_utils.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/input/camera_input_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/input/camera_manager_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/input/camera_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/listener_base.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/aperture_video_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/fluorescence_photo_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/high_res_photo_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/light_painting_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/macro_photo_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/macro_video_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/mode_manager_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/night_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/panorama_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/photo_session_for_sys_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/photo_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/portrait_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/profession_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/quick_shot_photo_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/secure_camera_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/slow_motion_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/time_lapse_photo_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/video_session_for_sys_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/mode/video_session_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/native_module_ohos_camera.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/deferred_photo_proxy_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/depth_data_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/depth_data_output_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/metadata_output_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/photo_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/photo_output_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/preview_output_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/output/video_output_napi.cpp", + "${multimedia_camera_framework_path}/frameworks/js/camera_napi/src/session/camera_session_napi.cpp", + ] + + deps = [ + "${multimedia_camera_framework_path}/common:camera_utils", + "${multimedia_camera_framework_path}/frameworks/native/camera:camera_framework", + ] + external_deps = [ + "c_utils:utils", + "data_share:datashare_common", + "data_share:datashare_consumer", + "drivers_interface_camera:libbuffer_handle_sequenceable_1.0", + "drivers_interface_camera:libcamera_proxy_1.0", + "drivers_interface_camera:libcamera_proxy_1.1", + "drivers_interface_camera:libmap_data_sequenceable_1.0", + "drivers_interface_camera:metadata", + "drivers_interface_display:libdisplay_commontype_proxy_1.0", + "graphic_2d:color_manager", + "graphic_surface:surface", + "hilog:libhilog", + "hisysevent:libhisysevent", + "hitrace:hitrace_meter", + "image_framework:image", + "image_framework:image_native", + "ipc:ipc_core", + "media_library:media_library", + "media_library:media_library_manager", + "media_library:medialibrary_nutils", + "napi:ace_napi", + "qos_manager:qos", + "samgr:samgr_proxy", + ] + + defines = [] + + if (hicollie_enable) { + external_deps += [ "hicollie:libhicollie" ] + defines += [ "HICOLLIE_ENABLE" ] + } + + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + cflags = [ + "-fPIC", + "-DIMAGE_COLORSPACE_FLAG", + "-Os", + ] + + version_script = "libcamera_napi_base.map" + + if (build_variant == "user") { + cflags += [ "-DIS_RELEASE_VERSION" ] + } + cflags_cc = cflags + relative_install_dir = "module/multimedia" + part_name = "camera_framework" + subsystem_name = "multimedia" +} diff --git a/interfaces/kits/js/camera_napi/include/input/camera_input_napi.h b/interfaces/kits/js/camera_napi/include/input/camera_input_napi.h index 0487c5d5d..7ac437b27 100644 --- a/interfaces/kits/js/camera_napi/include/input/camera_input_napi.h +++ b/interfaces/kits/js/camera_napi/include/input/camera_input_napi.h @@ -102,6 +102,8 @@ public: static napi_value UsedAsPosition(napi_env env, napi_callback_info info); static napi_value ControlAuxiliary(napi_env env, napi_callback_info info); + static napi_value CreateCameraInputNapiForTransfer(napi_env env, sptr cameraInput); + const EmitterFunctions& GetEmitterFunctions() override; sptr GetCameraInput(); diff --git a/interfaces/kits/js/camera_napi/libcamera_napi.map b/interfaces/kits/js/camera_napi/libcamera_napi.map index 9e3803029..7e8199c49 100644 --- a/interfaces/kits/js/camera_napi/libcamera_napi.map +++ b/interfaces/kits/js/camera_napi/libcamera_napi.map @@ -5,4 +5,4 @@ }; local: *; -}; \ No newline at end of file +}; diff --git a/interfaces/kits/js/camera_napi/libcamera_napi_base.map b/interfaces/kits/js/camera_napi/libcamera_napi_base.map new file mode 100644 index 000000000..7a0efd135 --- /dev/null +++ b/interfaces/kits/js/camera_napi/libcamera_napi_base.map @@ -0,0 +1,54 @@ +{ + global: + extern "C++" { + OHOS::CameraStandard::CameraNapiUtils::CheckError*; + OHOS::CameraStandard::CameraNapiUtils::FloatToDouble*; + OHOS::CameraStandard::CameraNapiUtils::GetPropertyDescriptor*; + OHOS::CameraStandard::CameraNapiUtils::ProcessingPhysicalApertures*; + OHOS::CameraStandard::CameraNapiUtils::GetNapiArgs*; + OHOS::CameraStandard::CameraNapiUtils::IncrementAndGet*; + OHOS::CameraStandard::CameraNapiUtils::CreateNapiErrorObject*; + OHOS::CameraStandard::CameraNapiUtils::InvokeJSAsyncMethod*; + OHOS::CameraStandard::CameraNapiUtils::CheckInvalidArgument*; + OHOS::CameraStandard::CameraNapiUtils::GetStringArgument*; + OHOS::CameraStandard::CameraNapiObjectTypes*; + OHOS::CameraStandard::CameraNapiObjCameraOutputCapability*; + OHOS::CameraStandard::ListenerBase*; + + OHOS::CameraStandard::CameraSessionNapi*; + OHOS::CameraStandard::PhotoSessionNapi*; + OHOS::CameraStandard::VideoSessionNapi*; + OHOS::CameraStandard::SecureCameraSessionNapi*; + OHOS::CameraStandard::PhotoSessionForSysNapi*; + OHOS::CameraStandard::VideoSessionForSysNapi*; + OHOS::CameraStandard::PortraitSessionNapi*; + OHOS::CameraStandard::NightSessionNapi*; + OHOS::CameraStandard::SlowMotionSessionNapi*; + OHOS::CameraStandard::ProfessionSessionNapi*; + OHOS::CameraStandard::MacroPhotoSessionNapi*; + OHOS::CameraStandard::MacroVideoSessionNapi*; + OHOS::CameraStandard::HighResPhotoSessionNapi*; + OHOS::CameraStandard::QuickShotPhotoSessionNapi*; + OHOS::CameraStandard::ApertureVideoSessionNapi*; + OHOS::CameraStandard::PanoramaSessionNapi*; + OHOS::CameraStandard::LightPaintingSessionNapi*; + OHOS::CameraStandard::TimeLapsePhotoSessionNapi*; + OHOS::CameraStandard::FluorescencePhotoSessionNapi*; + OHOS::CameraStandard::CameraInputNapi*; + OHOS::CameraStandard::PreviewOutputNapi*; + OHOS::CameraStandard::PhotoOutputNapi*; + OHOS::CameraStandard::VideoOutputNapi*; + OHOS::CameraStandard::MetadataOutputNapi*; + OHOS::CameraStandard::PhotoNapi*; + + OHOS::CameraStandard::CameraManagerNapi::Init*; + OHOS::CameraStandard::CameraNapi::Init*; + OHOS::CameraStandard::ModeManagerNapi::Init*; + OHOS::CameraStandard::DeferredPhotoProxyNapi::Init*; + }; + local: + extern "C++" { + OHOS::CameraStandard*; + }; + RegisterModule*; +}; -- Gitee