• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <dlfcn.h>
16 #include <unistd.h>
17 #include <regex>
18 #include "ipc_skeleton.h"
19 #include "bundle_mgr_interface.h"
20 #include "system_ability_definition.h"
21 #include "camera_fwk_metadata_utils.h"
22 #include "camera_log.h"
23 #include "rotate_plugin/camera_rotate_plugin.h"
24 #include "camera_util.h"
25 #include "surface.h"
26 #include "hcapture_session.h"
27 #include "parameters.h"
28 
29 namespace OHOS {
30 namespace CameraStandard {
31 #if (defined(__aarch64__) || defined(__x86_64__))
32 const std::string CAMERA_PLUGIN_SO_PATH = "/system/lib64/libcompatible_policy_camera.z.so";
33 #else
34 const std::string CAMERA_PLUGIN_SO_PATH = "/system/lib/libcompatible_policy_camera.z.so";
35 #endif
36 using  UpdateParameterFunc = bool(*)(ParameterMap&, ParameterMap&);
37 bool CameraRotatePlugin::initResult = false;
38 sptr<CameraRotatePlugin> CameraRotatePlugin::cameraRotatePlugin_;
39 std::mutex CameraRotatePlugin::instanceMutex_;
GetInstance()40 sptr<CameraRotatePlugin> &CameraRotatePlugin::GetInstance()
41 {
42     if (cameraRotatePlugin_ == nullptr) {
43         std::unique_lock<std::mutex> lock(instanceMutex_);
44         if (cameraRotatePlugin_ == nullptr) {
45             MEDIA_INFO_LOG("Initializing CameraRotatePlugin instance");
46             cameraRotatePlugin_ = new CameraRotatePlugin();
47             initResult = cameraRotatePlugin_->Init();
48         }
49     }
50     CHECK_PRINT_ELOG(!initResult, "CameraRotatePlugin::GetInstance init first failed");
51     CHECK_EXECUTE(!initResult, initResult = cameraRotatePlugin_->Init());
52     CHECK_PRINT_ELOG(!initResult, "CameraRotatePlugin::GetInstance init second failed");
53     return CameraRotatePlugin::cameraRotatePlugin_;
54 }
55 
CameraRotatePlugin()56 CameraRotatePlugin::CameraRotatePlugin()
57 {
58     MEDIA_INFO_LOG("CameraRotatePlugin construct");
59 }
60 
~CameraRotatePlugin()61 CameraRotatePlugin::~CameraRotatePlugin()
62 {
63     if (handle_) {
64         dlclose(handle_);
65         handle_ = nullptr;
66     }
67 }
68 
69 
SetCaptureSession(const std::string & bundleName,wptr<HCaptureSession> hcaptureSession)70 void CameraRotatePlugin::SetCaptureSession(const std::string& bundleName, wptr<HCaptureSession> hcaptureSession)
71 {
72     captureSessionMap_.EnsureInsert(bundleName, hcaptureSession);
73 }
74 
HookCameraAbility(const std::string & cameraId,std::shared_ptr<OHOS::Camera::CameraMetadata> & inability)75 bool CameraRotatePlugin::HookCameraAbility(const std::string& cameraId,
76     std::shared_ptr<OHOS::Camera::CameraMetadata>& inability)
77 {
78     if (inability == nullptr) {
79         return false;
80     }
81     ParameterMap param;
82     int uid = IPCSkeleton::GetCallingUid();
83     InitParam(GetClientBundle(uid), inability, cameraId, param);
84 
85     camera_metadata_item_t item;
86     int32_t ret = OHOS::Camera::FindCameraMetadataItem(inability->get(), OHOS_ABILITY_CAMERA_POSITION, &item);
87     if (ret == CAM_META_SUCCESS) {
88         param[PLUGIN_CAMERA_POSITION] = to_string(item.data.u8[0]);
89     } else {
90         return false;
91     }
92     ret = OHOS::Camera::FindCameraMetadataItem(inability->get(), OHOS_SENSOR_ORIENTATION, &item);
93     if (ret == CAM_META_SUCCESS) {
94         param[PLUGIN_SENSOR_ORIENTATION] = to_string(item.data.i32[0]);
95     } else {
96         return false;
97     }
98     uint8_t cameraPosition = 0;
99     int32_t sensorOrientation = 0;
100     if (GetCameraAbility(param, cameraPosition, sensorOrientation)) {
101         std::shared_ptr<OHOS::Camera::CameraMetadata> outputCapability =
102             CameraFwkMetadataUtils::CopyMetadata(inability);
103         outputCapability->updateEntry(OHOS_ABILITY_CAMERA_POSITION, &cameraPosition, 1);
104         outputCapability->updateEntry(OHOS_SENSOR_ORIENTATION, &sensorOrientation, 1);
105         inability = outputCapability;
106         return true;
107     }
108     return false;
109 }
110 
HookOpenDeviceForRotate(const std::string & bundleName,std::shared_ptr<OHOS::Camera::CameraMetadata> inputCapability,const std::string & cameraId)111 bool CameraRotatePlugin::HookOpenDeviceForRotate(const std::string& bundleName,
112     std::shared_ptr<OHOS::Camera::CameraMetadata> inputCapability, const std::string& cameraId)
113 {
114     ParameterMap param;
115     InitParam(bundleName, inputCapability, cameraId, param);
116     return SubscribeUpdateSettingCallback(param);
117 }
118 
HookCloseDeviceForRotate(const std::string & bundleName,std::shared_ptr<OHOS::Camera::CameraMetadata> inputCapability,const std::string & cameraId)119 bool CameraRotatePlugin::HookCloseDeviceForRotate(const std::string& bundleName,
120     std::shared_ptr<OHOS::Camera::CameraMetadata> inputCapability, const std::string& cameraId)
121 {
122     ParameterMap param;
123     InitParam(bundleName, inputCapability, cameraId, param);
124     return UnSubscribeUpdateSettingCallback(param);
125 }
126 
HookCreatePreviewFormat(const std::string & bundleName,int32_t & format)127 bool CameraRotatePlugin::HookCreatePreviewFormat(const std::string& bundleName, int32_t& format)
128 {
129     ParameterMap param = {
130         {PLUGIN_BUNDLE_NAME, bundleName},
131         {PLUGIN_PREVIEW_FORMAT, to_string(format)}
132     };
133     return CreatePreviewOutput(param, format);
134 }
135 
HookCreateVideoOutput(ParameterMap basicInfoMap,const sptr<OHOS::IBufferProducer> & producer)136 bool CameraRotatePlugin::HookCreateVideoOutput(ParameterMap basicInfoMap, const sptr<OHOS::IBufferProducer>& producer)
137 {
138     if (producer == nullptr) {
139         return false;
140     }
141     std::string surfaceAppFwkType = "";
142     uint32_t transform = 0;
143     if (CreateVideoOutput(basicInfoMap, surfaceAppFwkType, transform)) {
144         producer->SetTransform(static_cast<OHOS::GraphicTransformType>(transform));
145         producer->SetSurfaceAppFrameworkType(surfaceAppFwkType);
146         return true;
147     }
148     return false;
149 }
150 
HookPreviewStreamStart(ParameterMap basicInfoMap,const sptr<OHOS::IBufferProducer> & producer,int32_t & rotateAngle)151 bool CameraRotatePlugin::HookPreviewStreamStart(ParameterMap basicInfoMap,
152     const sptr<OHOS::IBufferProducer>& producer, int32_t& rotateAngle)
153 {
154     if (producer == nullptr) {
155         return false;
156     }
157     MEDIA_DEBUG_LOG("CameraRotatePlugin::HookPreviewStreamStart enter");
158     int32_t frameGravity = -1;
159     int32_t fixedRotation = -1;
160     if (PreviewStreamStart(basicInfoMap, frameGravity, fixedRotation, rotateAngle)) {
161         MEDIA_DEBUG_LOG("CameraRotatePlugin::HookPreviewStreamStart %{public}d  %{public}d",
162             frameGravity, fixedRotation);
163         producer->SetFrameGravity(frameGravity);
164         producer->SetFixedRotation(fixedRotation);
165         return true;
166     }
167     return false;
168 }
169 
HookPreviewTransform(ParameterMap basicInfoMap,const sptr<OHOS::IBufferProducer> & producer,int32_t & sensorOrientation,int32_t & cameraPosition)170 bool CameraRotatePlugin::HookPreviewTransform(ParameterMap basicInfoMap,
171     const sptr<OHOS::IBufferProducer>& producer,
172     int32_t& sensorOrientation, int32_t& cameraPosition)
173 {
174     if (producer == nullptr) {
175         return false;
176     }
177     int32_t frameGravity = -1;
178     int32_t fixedRotation = -1;
179     if (PreviewTransform(basicInfoMap, frameGravity, fixedRotation, sensorOrientation, cameraPosition)) {
180         MEDIA_DEBUG_LOG("CameraRotatePlugin::HookPreviewTransform frameGravity: %{public}d, fixedRotation: %{public}d, "
181             "sensorOrientation: %{public}d, cameraPosition: %{public}d",
182             frameGravity, fixedRotation, sensorOrientation, cameraPosition);
183         producer->SetFrameGravity(frameGravity);
184         producer->SetFixedRotation(fixedRotation);
185         return true;
186     }
187     return false;
188 }
189 
HookVideoStreamStart(ParameterMap basicInfoMap,const sptr<OHOS::IBufferProducer> & producer,bool & mirror)190 bool CameraRotatePlugin::HookVideoStreamStart(ParameterMap basicInfoMap,
191     const sptr<OHOS::IBufferProducer>& producer, bool& mirror)
192 {
193     if (producer == nullptr) {
194         return false;
195     }
196 
197     std::string surfaceAppFwkType = "";
198     uint32_t transform = 0;
199     if (VideoStreamStart(basicInfoMap, surfaceAppFwkType, transform, mirror)) {
200         producer->SetTransform(static_cast<OHOS::GraphicTransformType>(transform));
201         producer->SetSurfaceAppFrameworkType(surfaceAppFwkType);
202         return true;
203     }
204     return false;
205 }
206 
HookCaptureStreamStart(ParameterMap basicInfoMap,int32_t & jpegOrientation,bool & mirror)207 bool CameraRotatePlugin::HookCaptureStreamStart(ParameterMap basicInfoMap, int32_t& jpegOrientation, bool& mirror)
208 {
209     return CaptureStreamStart(basicInfoMap, jpegOrientation, mirror);
210 }
211 
GetFunction(const std::string & functionName)212 void* CameraRotatePlugin::GetFunction(const std::string& functionName)
213 {
214     CHECK_RETURN_RET_DLOG(
215         handle_ == nullptr, nullptr, "CameraRotatePlugin::GetFunction fail not loaded");
216     void* funcInstance = nullptr;
217     if (functionMap_.Find(functionName, funcInstance)) {
218         return funcInstance;
219     }
220     void* handleFunc = dlsym(handle_, functionName.c_str());
221     CHECK_RETURN_RET_DLOG(
222         handleFunc == nullptr, nullptr, "CameraRotatePlugin::GetFunction fail function:%{public}s not find",
223         functionName.c_str());
224     MEDIA_INFO_LOG("CameraRotatePlugin::GetFunction %{public}s success", functionName.c_str());
225     functionMap_.EnsureInsert(functionName, handleFunc);
226     return handleFunc;
227 }
228 
GetParameterResult(ParameterMap basicInfoMap,const std::string & functionName,ParameterMap & parameterMap)229 bool CameraRotatePlugin::GetParameterResult(ParameterMap basicInfoMap, const std::string& functionName,
230     ParameterMap& parameterMap)
231 {
232     UpdateParameterFunc updateParameterFunc = (UpdateParameterFunc)GetFunction(functionName);
233     CHECK_RETURN_RET_DLOG(updateParameterFunc == nullptr, false,
234         "function %{public}s is failed", functionName.c_str());
235     bool result = updateParameterFunc(basicInfoMap, parameterMap);
236     CHECK_RETURN_RET_DLOG(!result, false, "function %{public}s is failed", functionName.c_str());
237     return true;
238 }
239 
InitParam(const std::string & bundleName,std::shared_ptr<OHOS::Camera::CameraMetadata> inputCapability,const std::string & cameraId,ParameterMap & param)240 void CameraRotatePlugin::InitParam(const std::string& bundleName,
241     std::shared_ptr<OHOS::Camera::CameraMetadata> inputCapability, const std::string& cameraId, ParameterMap& param)
242 {
243     if (inputCapability == nullptr) {
244         return;
245     }
246     camera_metadata_item_t item;
247     int32_t ret = OHOS::Camera::FindCameraMetadataItem(inputCapability->get(),
248         OHOS_ABILITY_CAMERA_CONNECTION_TYPE, &item);
249     int32_t connectionType = 0;
250     if (ret == CAM_META_SUCCESS) {
251         connectionType = static_cast<int32_t>(item.data.u8[0]);
252     }
253     param[PLUGIN_BUNDLE_NAME] = bundleName;
254     param[PLUGIN_CAMERA_ID] = cameraId;
255     param[PLUGIN_CAMERA_CONNECTION_TYPE] = std::to_string(connectionType);
256 }
257 
Init()258 bool CameraRotatePlugin::Init()
259 {
260     if (handle_) {
261         ParameterMap updateParameter;
262         return GetParameterResult(updateParameter, "Init", updateParameter);
263     }
264     if (system::GetParameter("const.camera.compatible_policy_camera.enable", "false") != "true" ||
265         access(CAMERA_PLUGIN_SO_PATH.c_str(), R_OK) != 0) {
266         MEDIA_ERR_LOG("so file not exist.");
267         return false;
268     }
269     handle_ = ::dlopen(CAMERA_PLUGIN_SO_PATH.c_str(), RTLD_NOW);
270     if (!handle_) {
271         MEDIA_ERR_LOG("dlopen failed check so file exists");
272         return false;
273     }
274     ParameterMap updateParameter;
275     bool result = GetParameterResult(updateParameter, "Init", updateParameter);
276     return result;
277 }
278 
GetCameraAbility(ParameterMap basicInfoMap,uint8_t & cameraPosition,int32_t & sensorOrientation)279 bool CameraRotatePlugin::GetCameraAbility(ParameterMap basicInfoMap,
280     uint8_t& cameraPosition, int32_t& sensorOrientation)
281 {
282     ParameterMap updateParameter;
283     bool result = GetParameterResult(basicInfoMap, "GetCameraAbility", updateParameter);
284     CHECK_RETURN_RET_ELOG((updateParameter.size() < 1 || !result), false, "GetCameraAbility is failed");
285     result = (updateParameter.find(PLUGIN_CAMERA_POSITION) != updateParameter.end()) &&
286         (updateParameter.find(PLUGIN_SENSOR_ORIENTATION) != updateParameter.end());
287     CHECK_RETURN_RET_ELOG(!result, false, "updateParameter result not include needed parameter");
288     result = isIntegerRegex(updateParameter[PLUGIN_CAMERA_POSITION]) &&
289         isIntegerRegex(updateParameter[PLUGIN_SENSOR_ORIENTATION]);
290     CHECK_RETURN_RET_ELOG(!result, false, "updateParameter result not valid number");
291     cameraPosition = std::stoi(updateParameter[PLUGIN_CAMERA_POSITION]);
292     sensorOrientation = std::stoi(updateParameter[PLUGIN_SENSOR_ORIENTATION]);
293     return result;
294 }
295 
OnParameterChange(ParameterMap ParameterMap)296 int32_t CameraRotatePlugin::OnParameterChange(ParameterMap ParameterMap)
297 {
298     wptr<HCaptureSession> hcaptureSessionWptr;
299     captureSessionMap_.Find(ParameterMap[PLUGIN_BUNDLE_NAME], hcaptureSessionWptr);
300     sptr<HCaptureSession> hcaptureSessionSptr = hcaptureSessionWptr.promote();
301     CHECK_RETURN_RET_ELOG((hcaptureSessionSptr == nullptr || ParameterMap.size() < 1), CAMERA_INVALID_ARG,
302         "hcaptureSession is null");
303     hcaptureSessionSptr->UpdateHookBasicInfo(ParameterMap);
304     return 0;
305 }
306 
307 using OpenCameraDeviceFunc = bool(*)(ParameterMap&, UpdateSettingsCallback, ParameterMap&);
SubscribeUpdateSettingCallback(ParameterMap basicInfoMap)308 bool CameraRotatePlugin::SubscribeUpdateSettingCallback(ParameterMap basicInfoMap)
309 {
310     OpenCameraDeviceFunc openCameraDeviceFunc = (OpenCameraDeviceFunc)GetFunction("SubscribeUpdateSettingCallback");
311     CHECK_RETURN_RET_ELOG(openCameraDeviceFunc == nullptr, false, "SubscribeUpdateSettingCallback is failed");
312     // 定义接口
313     UpdateSettingsCallback callback = std::bind(&CameraRotatePlugin::OnParameterChange, this, std::placeholders::_1);
314     ParameterMap updateParameter;
315     bool result = openCameraDeviceFunc(basicInfoMap, callback, updateParameter);
316     CHECK_RETURN_RET_ELOG(!result, false, "SubscribeUpdateSettingCallback is failed");
317     return true;
318 }
319 
UnSubscribeUpdateSettingCallback(ParameterMap basicInfoMap)320 bool CameraRotatePlugin::UnSubscribeUpdateSettingCallback(ParameterMap basicInfoMap)
321 {
322     ParameterMap updateParameter;
323     bool result = GetParameterResult(basicInfoMap, "UnSubscribeUpdateSettingCallback", updateParameter);
324     CHECK_RETURN_RET_ELOG(!result, false, "UnSubscribeUpdateSettingCallback is failed");
325     captureSessionMap_.Erase(basicInfoMap[PLUGIN_BUNDLE_NAME]);
326     return result;
327 }
328 
CreatePreviewOutput(ParameterMap basicInfoMap,int32_t & format)329 bool CameraRotatePlugin::CreatePreviewOutput(ParameterMap basicInfoMap, int32_t& format)
330 {
331     ParameterMap updateParameter;
332     bool result = GetParameterResult(basicInfoMap, "CreatePreviewOutput", updateParameter);
333     CHECK_RETURN_RET_ELOG((updateParameter.size() < 1 || !result), false, "CreatePreviewOutput is failed");
334     result = updateParameter.find(PLUGIN_PREVIEW_FORMAT) != updateParameter.end() &&
335         isIntegerRegex(updateParameter[PLUGIN_PREVIEW_FORMAT]);
336     CHECK_RETURN_RET_ELOG(!result, false, "CreatePreviewOutput updateParameter result not valid number");
337     format = std::stoi(updateParameter[PLUGIN_PREVIEW_FORMAT]);
338     return true;
339 }
340 
PreviewStreamStart(ParameterMap basicInfoMap,int32_t & frameGravity,int32_t & fixedRotation,int32_t & rotateAngle)341 bool CameraRotatePlugin::PreviewStreamStart(ParameterMap basicInfoMap, int32_t& frameGravity,
342     int32_t& fixedRotation, int32_t& rotateAngle)
343 {
344     ParameterMap updateParameter;
345     bool result = GetParameterResult(basicInfoMap, "PreviewStreamStart", updateParameter);
346     CHECK_RETURN_RET_ELOG((updateParameter.size() < 1 || !result), false, "PreviewStreamStart is failed");
347     result = updateParameter.find(PLUGIN_CAMERA_HAL_ROTATE_ANGLE) != updateParameter.end();
348     CHECK_RETURN_RET_ELOG(!result, false, "PreviewStreamStart result not include needed parameter");
349     CHECK_EXECUTE(updateParameter.find(PLUGIN_SURFACE_FRAME_GRAVITY) != updateParameter.end() &&
350         isIntegerRegex(updateParameter[PLUGIN_SURFACE_FIXED_ROTATION]),
351         frameGravity = std::stoi(updateParameter[PLUGIN_SURFACE_FRAME_GRAVITY]));
352     CHECK_EXECUTE(updateParameter.find(PLUGIN_SURFACE_FIXED_ROTATION) != updateParameter.end() &&
353         isIntegerRegex(updateParameter[PLUGIN_SURFACE_FIXED_ROTATION]),
354         fixedRotation = std::stoi(updateParameter[PLUGIN_SURFACE_FIXED_ROTATION]));
355     rotateAngle = std::stoi(updateParameter[PLUGIN_CAMERA_HAL_ROTATE_ANGLE]);
356     return true;
357 }
358 
PreviewTransform(ParameterMap basicInfoMap,int32_t & frameGravity,int32_t & fixedRotation,int32_t & sensorOrientation,int32_t & cameraPosition)359 bool CameraRotatePlugin::PreviewTransform(ParameterMap basicInfoMap, int32_t& frameGravity, int32_t& fixedRotation,
360     int32_t& sensorOrientation, int32_t& cameraPosition)
361 {
362     ParameterMap updateParameter;
363     bool result = GetParameterResult(basicInfoMap, "PreviewTransform", updateParameter);
364     CHECK_RETURN_RET_ELOG((updateParameter.size() < 1 || !result), false, "PreviewTransform is failed");
365     result = (updateParameter.find(PLUGIN_SURFACE_FRAME_GRAVITY) != updateParameter.end()) &&
366         (updateParameter.find(PLUGIN_SURFACE_FIXED_ROTATION) != updateParameter.end()) &&
367         (updateParameter.find(PLUGIN_CAMERA_POSITION) != updateParameter.end()) &&
368         (updateParameter.find(PLUGIN_SENSOR_ORIENTATION) != updateParameter.end());
369     CHECK_RETURN_RET_ELOG(!result, false, "PreviewTransform result not include needed parameter");
370     result = isIntegerRegex(updateParameter[PLUGIN_SURFACE_FRAME_GRAVITY]) &&
371         isIntegerRegex(updateParameter[PLUGIN_SURFACE_FIXED_ROTATION]) &&
372         isIntegerRegex(updateParameter[PLUGIN_CAMERA_POSITION]) &&
373         isIntegerRegex(updateParameter[PLUGIN_SENSOR_ORIENTATION]);
374     frameGravity = std::stoi(updateParameter[PLUGIN_SURFACE_FRAME_GRAVITY]);
375     fixedRotation = std::stoi(updateParameter[PLUGIN_SURFACE_FIXED_ROTATION]);
376     cameraPosition = std::stoi(updateParameter[PLUGIN_CAMERA_POSITION]);
377     sensorOrientation = std::stoi(updateParameter[PLUGIN_SENSOR_ORIENTATION]);
378     return true;
379 }
380 
CaptureStreamStart(ParameterMap basicInfoMap,int32_t & jpegOrientation,bool & mirror)381 bool CameraRotatePlugin::CaptureStreamStart(ParameterMap basicInfoMap, int32_t& jpegOrientation, bool& mirror)
382 {
383     ParameterMap updateParameter;
384     basicInfoMap[PLUGIN_JPEG_ORIENTATION] = to_string(jpegOrientation);
385     basicInfoMap[PLUGIN_CAPTURE_MIRROR] = to_string(mirror);
386     bool result = GetParameterResult(basicInfoMap, "CaptureStreamStart", updateParameter);
387     CHECK_RETURN_RET_ELOG((updateParameter.size() < 1 || !result), false, "CaptureStreamStart is failed");
388     result = (updateParameter.find(PLUGIN_CAPTURE_MIRROR) != updateParameter.end()) &&
389         (updateParameter.find(PLUGIN_JPEG_ORIENTATION) != updateParameter.end());
390     CHECK_RETURN_RET_ELOG(!result, false, "CaptureStreamStart result not include needed parameter");
391     result = isIntegerRegex(updateParameter[PLUGIN_JPEG_ORIENTATION]) &&
392         isIntegerRegex(updateParameter[PLUGIN_CAPTURE_MIRROR]);
393     CHECK_RETURN_RET_ELOG(!result, false, "CaptureStreamStart result not valid parameter");
394     result = (std::stoi(updateParameter[PLUGIN_CAPTURE_MIRROR]) == 0 ||
395         std::stoi(updateParameter[PLUGIN_CAPTURE_MIRROR]) == 1);
396     CHECK_RETURN_RET_ELOG(!result, false, "CaptureStreamStart result not valid bool parameter");
397     jpegOrientation = std::stoi(updateParameter[PLUGIN_JPEG_ORIENTATION]);
398     mirror = std::stoi(updateParameter[PLUGIN_CAPTURE_MIRROR]);
399     return true;
400 }
401 
CreateVideoOutput(ParameterMap basicInfoMap,std::string & surfaceAppFwkType,uint32_t & transform)402 bool CameraRotatePlugin::CreateVideoOutput(ParameterMap basicInfoMap, std::string& surfaceAppFwkType,
403     uint32_t& transform)
404 {
405     ParameterMap updateParameter;
406     basicInfoMap[PLUGIN_VIDEO_SURFACE_TRANSFORM] = to_string(transform);
407     bool result = GetParameterResult(basicInfoMap, "CreateVideoOutput", updateParameter);
408     CHECK_RETURN_RET_ELOG((updateParameter.size() < 1 || !result), false, "CreateVideoOutput is failed");
409     result = (updateParameter.find(PLUGIN_SURFACE_APP_FWK_TYPE) != updateParameter.end()) &&
410         (updateParameter.find(PLUGIN_VIDEO_SURFACE_TRANSFORM) != updateParameter.end());
411     CHECK_RETURN_RET_ELOG(!result, false, "CreateVideoOutput result not include needed parameter");
412     result = isIntegerRegex(updateParameter[PLUGIN_VIDEO_SURFACE_TRANSFORM]);
413     CHECK_RETURN_RET_ELOG(!result, false, "CreateVideoOutput result not valid parameter");
414     surfaceAppFwkType = updateParameter[PLUGIN_SURFACE_APP_FWK_TYPE];
415     transform = static_cast<uint32_t>(std::stoi(updateParameter[PLUGIN_VIDEO_SURFACE_TRANSFORM]));
416     return true;
417 }
418 
VideoStreamStart(ParameterMap basicInfoMap,std::string & surfaceAppFwkType,uint32_t & transform,bool & mirror)419 bool CameraRotatePlugin::VideoStreamStart(ParameterMap basicInfoMap, std::string& surfaceAppFwkType,
420     uint32_t& transform, bool& mirror)
421 {
422     ParameterMap updateParameter;
423     basicInfoMap[PLUGIN_VIDEO_SURFACE_TRANSFORM] = to_string(transform);
424     bool result = GetParameterResult(basicInfoMap, "VideoStreamStart", updateParameter);
425     CHECK_RETURN_RET_ELOG((updateParameter.size() < 1 || !result), false, "VideoStreamStart is failed");
426     result = (updateParameter.find(PLUGIN_SURFACE_APP_FWK_TYPE) != updateParameter.end()) &&
427         (updateParameter.find(PLUGIN_VIDEO_SURFACE_TRANSFORM) != updateParameter.end()) &&
428         (updateParameter.find(PLUGIN_VIDEO_MIRROR) != updateParameter.end());
429     CHECK_RETURN_RET_ELOG(!result, false, "VideoStreamStart result not include needed parameter");
430     result = isIntegerRegex(updateParameter[PLUGIN_VIDEO_SURFACE_TRANSFORM]) &&
431         isIntegerRegex(updateParameter[PLUGIN_VIDEO_MIRROR]);
432     CHECK_RETURN_RET_ELOG(!result, false, "VideoStreamStart result not valid parameter");
433     surfaceAppFwkType = updateParameter[PLUGIN_SURFACE_APP_FWK_TYPE];
434     transform = static_cast<uint32_t>(std::stoi(updateParameter[PLUGIN_VIDEO_SURFACE_TRANSFORM]));
435     mirror = std::stoi(updateParameter[PLUGIN_VIDEO_MIRROR]);
436     return true;
437 }
438 }
439 }
440