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