HarmonyOS 鸿蒙Next OH_PreviewOutput_SetPreviewRotation 不生效

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next OH_PreviewOutput_SetPreviewRotation 不生效

OH_PreviewOutput_SetPreviewRotation 报错,错误信息为

```objectivec
CAMERA_SERVICE_FATAL_ERROR

这是代码

nt32_t OhosCamera::PreviewOutputCreate()
{
    Camera_ErrorCode ret;
    ret = OH_CameraManager_GetSupportedCameraOutputCapability(camera_manager_, &cameras_[camera_dev_index_],
                                                              &camera_output_capability_);
    if (camera_output_capability_ == nullptr || ret != CAMERA_OK) {
        OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, LOG_TAG,
                     "OH_CameraManager_GetSupportedCameraOutputCapability failed, ret = %{public}d", ret);
        return -1;
    }

    if (camera_output_capability_->metadataProfilesSize <= 0) {
        OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, LOG_TAG, "metadataProfilesSize <= 0");
        return -1;
    }

    for (int i = 0; i < camera_output_capability_->previewProfilesSize; i++) {
        preview_profile_ = camera_output_capability_->previewProfiles[i];
        
        if (preview_profile_->size.width == height_ && preview_profile_->size.height == width_ ) {
            profile_index_ = i;
        }
    }

    preview_profile_ = camera_output_capability_->previewProfiles[profile_index_];
    int32_t IDLength = 24;
    char surfaceID[IDLength];

    if (captureType_ == CaptureType::SURFACE) {
        if (InitRenderContext() == false) {
            OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, "OhosCamera", "InitRenderContext failed");
            return -1;
        }

        if (CreateNativeImage() == false) {
            OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, "OhosCamera", "CreateNativeImage failed");
            return -1;
        }

        if (GetSurfaceID() != 0) {
            OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, "OhosCamera", "GetSurfaceID failed");
            return -1;
        }

        snprintf(surfaceID, IDLength, "%llu", surfaceId_);
        RTC_LOG(LS_VERBOSE) << "surfaceId_ = " << surfaceId_;
        ret = OH_CameraManager_CreatePreviewOutput(camera_manager_, preview_profile_, surfaceID, &preview_output_);
    } else {
        snprintf(surfaceID, IDLength, "%llu", GetImageReceiverID());
        ret = OH_CameraManager_CreatePreviewOutput(camera_manager_, preview_profile_, surfaceID, &preview_output_);
    }
    auto code = OH_PreviewOutput_SetPreviewRotation(preview_output_, IAMGE_ROTATION_90, false);
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, LOG_TAG,
                 "OH_PreviewOutput_SetPreviewRotation code = %{public}d", code);
    if (preview_output_ == nullptr || ret != CAMERA_OK) {
        OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, LOG_TAG,
                     "OH_CameraManager_CreatePreviewOutput failed, ret = %{public}d", ret);
        return -1;
    }

    return 0;
}

更多关于HarmonyOS 鸿蒙Next OH_PreviewOutput_SetPreviewRotation 不生效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

相机的权限添加了没,需要在module.json5中添加相机的权限:

"requestPermissions": [
{
  "name": "ohos.permission.CAMERA",
  "reason": "$string:ALLOW_WLAN",
  "usedScene": {}
}
]

更多关于HarmonyOS 鸿蒙Next OH_PreviewOutput_SetPreviewRotation 不生效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


有相机权限  

`OH_CaptureSession_AddPreviewOutput`(capture_session_, preview_output_)  
之后设置不会报错,但是不生效,预览画面还是旋转了90度,未按设置的角度输出,sessionMode  
`Camera_SceneMode::NORMAL_VIDEO`

针对帖子标题中提到的HarmonyOS(鸿蒙)Next OH_PreviewOutput_SetPreviewRotation不生效的问题,以下是专业回答:

HarmonyOS的Next OH_PreviewOutput_SetPreviewRotation函数用于设置预览输出的旋转角度。若该函数不生效,可能原因包括:

  1. 参数设置错误:检查传入的旋转角度参数是否在有效范围内,通常旋转角度应为0度、90度、180度或270度。

  2. API使用不当:确保在设置旋转角度之前,预览输出已经正确初始化并启动。同时,确认调用该函数的时间点是否在预览输出开始之后。

  3. 硬件或驱动限制:某些设备或驱动可能不支持预览旋转,或存在特定的限制条件。查阅相关设备的硬件规格和驱动文档,确认是否支持该功能。

  4. 系统或版本问题:确认HarmonyOS系统的版本是否支持该功能。在某些版本更新中,API的行为可能发生变化。

  5. 权限问题:检查应用是否已获取必要的摄像头和显示权限,权限不足可能导致设置不生效。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!