1 /*
2 * Copyright (c) 2023-2023 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 <vector>
16 #include <shared_mutex>
17 #include <iostream>
18
19 #include "user_initiated_strategy.h"
20 #include "dp_log.h"
21
22 namespace OHOS {
23 namespace CameraStandard {
24 namespace DeferredProcessing {
UserInitiatedStrategy(const std::shared_ptr<PhotoJobRepository> & repository)25 UserInitiatedStrategy::UserInitiatedStrategy(const std::shared_ptr<PhotoJobRepository>& repository)
26 : repository_(repository)
27 {
28 DP_DEBUG_LOG("entered");
29 }
30
~UserInitiatedStrategy()31 UserInitiatedStrategy::~UserInitiatedStrategy()
32 {
33 DP_DEBUG_LOG("entered");
34 }
35
GetWork()36 DeferredPhotoWorkPtr UserInitiatedStrategy::GetWork()
37 {
38 DP_DEBUG_LOG("entered");
39 DeferredPhotoJobPtr jobPtr = GetJob();
40 ExecutionMode mode = GetExecutionMode();
41 if ((jobPtr != nullptr) && (mode != ExecutionMode::DUMMY)) {
42 return std::make_shared<DeferredPhotoWork>(jobPtr, mode);
43 }
44 return nullptr;
45 }
46
GetJob()47 DeferredPhotoJobPtr UserInitiatedStrategy::GetJob()
48 {
49 return repository_->GetHighPriorityJob();
50 }
51
GetExecutionMode()52 ExecutionMode UserInitiatedStrategy::GetExecutionMode()
53 {
54 if (cameraSessionStatus_ == CameraSessionStatus::SYSTEM_CAMERA_OPEN
55 || !(hdiStatus_ == HdiStatus::HDI_READY || hdiStatus_ == HdiStatus::HDI_READY_SPACE_LIMIT_REACHED)
56 || mediaLibraryStatus_ != MediaLibraryStatus::MEDIA_LIBRARY_AVAILABLE) {
57 DP_INFO_LOG("cameraSessionStatus_: %{public}d, hdiStatus_: %{public}d, mediaLibraryStatus_: %{public}d, ",
58 cameraSessionStatus_, hdiStatus_, mediaLibraryStatus_);
59 return ExecutionMode::DUMMY;
60 }
61
62 return ExecutionMode::HIGH_PERFORMANCE;
63 }
64
NotifyHdiStatusChanged(HdiStatus status)65 void UserInitiatedStrategy::NotifyHdiStatusChanged(HdiStatus status)
66 {
67 DP_INFO_LOG("previous hdi status %{public}d, new status: %{public}d", hdiStatus_, status);
68 hdiStatus_ = status;
69 }
70
NotifyMediaLibStatusChanged(MediaLibraryStatus status)71 void UserInitiatedStrategy::NotifyMediaLibStatusChanged(MediaLibraryStatus status)
72 {
73 DP_INFO_LOG("previous media lib status %{public}d, new status: %{public}d", mediaLibraryStatus_, status);
74 mediaLibraryStatus_ = status;
75 }
76
NotifyCameraStatusChanged(CameraSessionStatus status)77 void UserInitiatedStrategy::NotifyCameraStatusChanged(CameraSessionStatus status)
78 {
79 DP_INFO_LOG("previous camera session status %{public}d, new status: %{public}d", cameraSessionStatus_, status);
80 cameraSessionStatus_ = status;
81 }
82 } // namespace DeferredProcessing
83 } // namespace CameraStandard
84 } // namespace OHOS