• 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 
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