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
16 #include "video_processing_algorithm_without_data.h"
17
18 #include "algorithm_errors.h"
19 #include "vpe_log.h"
20
21 using namespace OHOS;
22 using namespace OHOS::Media::VideoProcessingEngine;
23 using namespace std::placeholders;
24
SetParameter(uint32_t clientID,int tag,const std::vector<uint8_t> & parameter)25 int VideoProcessingAlgorithmWithoutData::SetParameter(uint32_t clientID, int tag, const std::vector<uint8_t>& parameter)
26 {
27 return Execute(clientID, std::bind(&VideoProcessingAlgorithmWithoutData::OnSetParameter, this, _1, tag, parameter),
28 VPE_LOG_INFO);
29 }
30
GetParameter(uint32_t clientID,int tag,std::vector<uint8_t> & parameter)31 int VideoProcessingAlgorithmWithoutData::GetParameter(uint32_t clientID, int tag, std::vector<uint8_t>& parameter)
32 {
33 return Execute(clientID, std::bind(&VideoProcessingAlgorithmWithoutData::OnGetParameter, this, _1, tag, parameter),
34 VPE_LOG_INFO);
35 }
36
DoUpdateMetadata(uint32_t clientID,SurfaceBufferInfo & image)37 int VideoProcessingAlgorithmWithoutData::DoUpdateMetadata(uint32_t clientID, SurfaceBufferInfo& image)
38 {
39 return Execute(clientID, std::bind(&VideoProcessingAlgorithmWithoutData::OnUpdateMetadata, this, _1, image),
40 VPE_LOG_INFO);
41 }
42
DoProcess(uint32_t clientID,const SurfaceBufferInfo & input,SurfaceBufferInfo & output)43 int VideoProcessingAlgorithmWithoutData::DoProcess(uint32_t clientID,
44 const SurfaceBufferInfo& input, SurfaceBufferInfo& output)
45 {
46 return Execute(clientID, std::bind(&VideoProcessingAlgorithmWithoutData::OnProcess, this, _1, input, output),
47 VPE_LOG_INFO);
48 }
49
DoComposeImage(uint32_t clientID,const SurfaceBufferInfo & inputSdrImage,const SurfaceBufferInfo & inputGainmap,SurfaceBufferInfo & outputHdrImage,bool legacy)50 int VideoProcessingAlgorithmWithoutData::DoComposeImage(uint32_t clientID,
51 const SurfaceBufferInfo& inputSdrImage,
52 const SurfaceBufferInfo& inputGainmap,
53 SurfaceBufferInfo& outputHdrImage, bool legacy)
54 {
55 auto compose = &VideoProcessingAlgorithmWithoutData::OnComposeImage;
56 return Execute(clientID, std::bind(compose, this, _1, inputSdrImage, inputGainmap, outputHdrImage, legacy),
57 VPE_LOG_INFO);
58 }
59
DoDecomposeImage(uint32_t clientID,const SurfaceBufferInfo & inputImage,SurfaceBufferInfo & outputSdrImage,SurfaceBufferInfo & outputGainmap)60 int VideoProcessingAlgorithmWithoutData::DoDecomposeImage(uint32_t clientID,
61 const SurfaceBufferInfo& inputImage,
62 SurfaceBufferInfo& outputSdrImage,
63 SurfaceBufferInfo& outputGainmap)
64 {
65 auto decompose = &VideoProcessingAlgorithmWithoutData::OnDecomposeImage;
66 return Execute(clientID, std::bind(decompose, this, _1, inputImage, outputSdrImage, outputGainmap),
67 VPE_LOG_INFO);
68 }
69
OnSetParameter(const std::string & clientName,int tag,const std::vector<uint8_t> & parameter)70 int VideoProcessingAlgorithmWithoutData::OnSetParameter([[maybe_unused]] const std::string& clientName,
71 [[maybe_unused]] int tag, [[maybe_unused]] const std::vector<uint8_t>& parameter)
72 {
73 return ReturnNotSupport(VPE_LOG_INFO);
74 }
75
OnGetParameter(const std::string & clientName,int tag,std::vector<uint8_t> & parameter)76 int VideoProcessingAlgorithmWithoutData::OnGetParameter([[maybe_unused]] const std::string& clientName,
77 [[maybe_unused]] int tag, [[maybe_unused]] std::vector<uint8_t>& parameter)
78 {
79 return ReturnNotSupport(VPE_LOG_INFO);
80 }
81
OnUpdateMetadata(const std::string & clientName,SurfaceBufferInfo & image)82 int VideoProcessingAlgorithmWithoutData::OnUpdateMetadata([[maybe_unused]] const std::string& clientName,
83 [[maybe_unused]] SurfaceBufferInfo& image)
84 {
85 return ReturnNotSupport(VPE_LOG_INFO);
86 }
87
OnProcess(const std::string & clientName,const SurfaceBufferInfo & input,SurfaceBufferInfo & output)88 int VideoProcessingAlgorithmWithoutData::OnProcess([[maybe_unused]] const std::string& clientName,
89 [[maybe_unused]] const SurfaceBufferInfo& input,
90 [[maybe_unused]] SurfaceBufferInfo& output)
91 {
92 return ReturnNotSupport(VPE_LOG_INFO);
93 }
94
OnComposeImage(const std::string & clientName,const SurfaceBufferInfo & inputSdrImage,const SurfaceBufferInfo & inputGainmap,SurfaceBufferInfo & outputHdrImage,bool legacy)95 int VideoProcessingAlgorithmWithoutData::OnComposeImage([[maybe_unused]] const std::string& clientName,
96 [[maybe_unused]] const SurfaceBufferInfo& inputSdrImage,
97 [[maybe_unused]] const SurfaceBufferInfo& inputGainmap,
98 [[maybe_unused]] SurfaceBufferInfo& outputHdrImage, [[maybe_unused]] bool legacy)
99 {
100 return ReturnNotSupport(VPE_LOG_INFO);
101 }
102
OnDecomposeImage(const std::string & clientName,const SurfaceBufferInfo & inputImage,SurfaceBufferInfo & outputSdrImage,SurfaceBufferInfo & outputGainmap)103 int VideoProcessingAlgorithmWithoutData::OnDecomposeImage([[maybe_unused]] const std::string& clientName,
104 [[maybe_unused]] const SurfaceBufferInfo& inputImage,
105 [[maybe_unused]] SurfaceBufferInfo& outputSdrImage,
106 [[maybe_unused]] SurfaceBufferInfo& outputGainmap)
107 {
108 return ReturnNotSupport(VPE_LOG_INFO);
109 }
110
AddClientIDLocked(const std::string & clientName,uint32_t & clientID)111 int VideoProcessingAlgorithmWithoutData::AddClientIDLocked(const std::string& clientName, uint32_t& clientID)
112 {
113 uint32_t id;
114 if (!GenerateClientID([this](uint32_t id) { return clients_.find(id) != clients_.end(); }, id)) {
115 return VPE_ALGO_ERR_INVALID_STATE;
116 }
117 clients_[id] = clientName;
118 clientID = id;
119 return VPE_ALGO_ERR_OK;
120 }
121
DelClientIDLocked(uint32_t clientID,bool & isEmpty)122 int VideoProcessingAlgorithmWithoutData::DelClientIDLocked(uint32_t clientID, bool& isEmpty)
123 {
124 auto it = clients_.find(clientID);
125 CHECK_AND_RETURN_RET_LOG(it != clients_.end(), VPE_ALGO_ERR_INVALID_PARAM,
126 "Invalid input: clientID:%{public}u!", clientID);
127 clients_.erase(it);
128 isEmpty = clients_.empty();
129 return VPE_ALGO_ERR_OK;
130 }
131
ClearClientsLocked()132 void VideoProcessingAlgorithmWithoutData::ClearClientsLocked()
133 {
134 clients_.clear();
135 }
136
Execute(uint32_t clientID,std::function<int (const std::string &)> && operation,const LogInfo & logInfo)137 int VideoProcessingAlgorithmWithoutData::Execute(uint32_t clientID, std::function<int(const std::string&)>&& operation,
138 const LogInfo& logInfo)
139 {
140 std::string clientName;
141 {
142 std::lock_guard<std::mutex> lock(lock_);
143 if (!isInitialized_) [[unlikely]] {
144 VPE_ORG_LOGE(logInfo, "Oops! Not initialized!");
145 return VPE_ALGO_ERR_INVALID_STATE;
146 }
147 auto it = clients_.find(clientID);
148 if (it == clients_.end()) [[unlikely]] {
149 VPE_ORG_LOGE(logInfo, "Invalid input: client(%{public}u)!", clientID);
150 return VPE_ALGO_ERR_INVALID_PARAM;
151 }
152 clientName = it->second;
153 if (clientName.empty()) [[unlikely]] {
154 VPE_ORG_LOGE(logInfo, "Invalid input: client(%{public}u) for ''!", clientID);
155 return VPE_ALGO_ERR_INVALID_PARAM;
156 }
157 }
158 return operation(clientName);
159 }
160