HarmonyOS 鸿蒙Next OH_PreviewOutput_SetPreviewRotation 不生效
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
相机的权限添加了没,需要在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函数用于设置预览输出的旋转角度。若该函数不生效,可能原因包括:
-
参数设置错误:检查传入的旋转角度参数是否在有效范围内,通常旋转角度应为0度、90度、180度或270度。
-
API使用不当:确保在设置旋转角度之前,预览输出已经正确初始化并启动。同时,确认调用该函数的时间点是否在预览输出开始之后。
-
硬件或驱动限制:某些设备或驱动可能不支持预览旋转,或存在特定的限制条件。查阅相关设备的硬件规格和驱动文档,确认是否支持该功能。
-
系统或版本问题:确认HarmonyOS系统的版本是否支持该功能。在某些版本更新中,API的行为可能发生变化。
-
权限问题:检查应用是否已获取必要的摄像头和显示权限,权限不足可能导致设置不生效。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。