1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2022-2023 Shenzhen Kaihong DID Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci * 		http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#include <hdf_log.h>
17094332d3Sopenharmony_ci#include <memory.h>
18094332d3Sopenharmony_ci#include <malloc.h>
19094332d3Sopenharmony_ci#include <securec.h>
20094332d3Sopenharmony_ci#include "codec_adapter_interface.h"
21094332d3Sopenharmony_ci#include "codec_log_wrapper.h"
22094332d3Sopenharmony_ci#include "component_mgr.h"
23094332d3Sopenharmony_ci#include "component_node.h"
24094332d3Sopenharmony_ci#include "hitrace_meter.h"
25094332d3Sopenharmony_ci
26094332d3Sopenharmony_ciusing namespace OHOS::Codec::Omx;
27094332d3Sopenharmony_ci
28094332d3Sopenharmony_cistatic ComponentMgr g_mgr;
29094332d3Sopenharmony_cistruct CodecComponentNode {
30094332d3Sopenharmony_ci    std::shared_ptr<ComponentNode> node;
31094332d3Sopenharmony_ci};
32094332d3Sopenharmony_ci#ifdef __cplusplus
33094332d3Sopenharmony_ciextern "C" {
34094332d3Sopenharmony_ci#endif
35094332d3Sopenharmony_ci
36094332d3Sopenharmony_ciint32_t OMXAdapterCreateComponent(struct CodecComponentNode **codecNode, char *compName, int64_t appData,
37094332d3Sopenharmony_ci                                  struct CodecCallbackType *callbacks)
38094332d3Sopenharmony_ci{
39094332d3Sopenharmony_ci    HITRACE_METER_NAME(HITRACE_TAG_HDF, "HdfCodecCreateComponent");
40094332d3Sopenharmony_ci    OMX_COMPONENTTYPE *comp = nullptr;
41094332d3Sopenharmony_ci    CodecComponentNode *tempNode = new CodecComponentNode;
42094332d3Sopenharmony_ci    if (tempNode == nullptr) {
43094332d3Sopenharmony_ci        CODEC_LOGE("create CodecComponentNode error");
44094332d3Sopenharmony_ci        return HDF_ERR_MALLOC_FAIL;
45094332d3Sopenharmony_ci    }
46094332d3Sopenharmony_ci    tempNode->node = std::make_shared<ComponentNode>(callbacks, appData, compName);
47094332d3Sopenharmony_ci    if (tempNode->node == nullptr) {
48094332d3Sopenharmony_ci        CODEC_LOGE("fail to init ComponentNode");
49094332d3Sopenharmony_ci        delete tempNode;
50094332d3Sopenharmony_ci        tempNode = nullptr;
51094332d3Sopenharmony_ci        return HDF_FAILURE;
52094332d3Sopenharmony_ci    }
53094332d3Sopenharmony_ci    auto err = g_mgr.CreateComponentInstance(compName, &ComponentNode::callbacks_, tempNode->node.get(), &comp);
54094332d3Sopenharmony_ci    if (err != OMX_ErrorNone) {
55094332d3Sopenharmony_ci        CODEC_LOGE("create component instance err[%{public}d]", err);
56094332d3Sopenharmony_ci        delete tempNode;
57094332d3Sopenharmony_ci        tempNode = nullptr;
58094332d3Sopenharmony_ci        return err;
59094332d3Sopenharmony_ci    }
60094332d3Sopenharmony_ci    tempNode->node->SetHandle(static_cast<OMX_HANDLETYPE>(comp));
61094332d3Sopenharmony_ci
62094332d3Sopenharmony_ci    *codecNode = tempNode;
63094332d3Sopenharmony_ci    return HDF_SUCCESS;
64094332d3Sopenharmony_ci}
65094332d3Sopenharmony_ci
66094332d3Sopenharmony_ciint32_t OmxAdapterDestroyComponent(struct CodecComponentNode *codecNode)
67094332d3Sopenharmony_ci{
68094332d3Sopenharmony_ci    HITRACE_METER_NAME(HITRACE_TAG_HDF, "HdfCodecDestroyComponent");
69094332d3Sopenharmony_ci    if (codecNode == nullptr) {
70094332d3Sopenharmony_ci        CODEC_LOGE("codecNode is null");
71094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
72094332d3Sopenharmony_ci    }
73094332d3Sopenharmony_ci    if (codecNode->node == nullptr) {
74094332d3Sopenharmony_ci        delete codecNode;
75094332d3Sopenharmony_ci        codecNode = nullptr;
76094332d3Sopenharmony_ci        CODEC_LOGE("node is null");
77094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
78094332d3Sopenharmony_ci    }
79094332d3Sopenharmony_ci    OMX_HANDLETYPE comp = codecNode->node->GetHandle();
80094332d3Sopenharmony_ci    codecNode->node = nullptr;
81094332d3Sopenharmony_ci    auto err = g_mgr.DeleteComponentInstance(static_cast<OMX_COMPONENTTYPE*>(comp));
82094332d3Sopenharmony_ci    if (err != OMX_ErrorNone) {
83094332d3Sopenharmony_ci        delete codecNode;
84094332d3Sopenharmony_ci        codecNode = nullptr;
85094332d3Sopenharmony_ci        CODEC_LOGE("DeleteComponentInstance err[%{public}d]", err);
86094332d3Sopenharmony_ci        return err;
87094332d3Sopenharmony_ci    }
88094332d3Sopenharmony_ci
89094332d3Sopenharmony_ci    delete codecNode;
90094332d3Sopenharmony_ci    codecNode = nullptr;
91094332d3Sopenharmony_ci    return HDF_SUCCESS;
92094332d3Sopenharmony_ci}
93094332d3Sopenharmony_ci
94094332d3Sopenharmony_ciint32_t OmxAdapterComponentVersion(struct CodecComponentNode *codecNode, struct CompVerInfo *verInfo)
95094332d3Sopenharmony_ci{
96094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || verInfo == nullptr) {
97094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or verInfois is null");
98094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
99094332d3Sopenharmony_ci    }
100094332d3Sopenharmony_ci    return codecNode->node->GetComponentVersion(*verInfo);
101094332d3Sopenharmony_ci}
102094332d3Sopenharmony_ci
103094332d3Sopenharmony_ciint32_t OmxAdapterSendCommand(struct CodecComponentNode *codecNode, OMX_COMMANDTYPE cmd, uint32_t param,
104094332d3Sopenharmony_ci                              int8_t *cmdData, uint32_t cmdDataLen)
105094332d3Sopenharmony_ci{
106094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr) {
107094332d3Sopenharmony_ci        CODEC_LOGE("codecNode or node is null");
108094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
109094332d3Sopenharmony_ci    }
110094332d3Sopenharmony_ci    return codecNode->node->SendCommand(cmd, param, cmdData, cmdDataLen);
111094332d3Sopenharmony_ci}
112094332d3Sopenharmony_ci
113094332d3Sopenharmony_ciint32_t OmxAdapterGetParameter(struct CodecComponentNode *codecNode, OMX_INDEXTYPE paramIndex, int8_t *param,
114094332d3Sopenharmony_ci                               uint32_t paramLen)
115094332d3Sopenharmony_ci{
116094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || param == nullptr) {
117094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or param is null");
118094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
119094332d3Sopenharmony_ci    }
120094332d3Sopenharmony_ci
121094332d3Sopenharmony_ci    return codecNode->node->GetParameter(paramIndex, param, paramLen);
122094332d3Sopenharmony_ci}
123094332d3Sopenharmony_ci
124094332d3Sopenharmony_ciint32_t OmxAdapterSetParameter(struct CodecComponentNode *codecNode, OMX_INDEXTYPE index, int8_t *param,
125094332d3Sopenharmony_ci                               uint32_t paramLen)
126094332d3Sopenharmony_ci{
127094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || param == nullptr) {
128094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or param is null");
129094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
130094332d3Sopenharmony_ci    }
131094332d3Sopenharmony_ci    return codecNode->node->SetParameter(index, param, paramLen);
132094332d3Sopenharmony_ci}
133094332d3Sopenharmony_ci
134094332d3Sopenharmony_ciint32_t OmxAdapterGetConfig(struct CodecComponentNode *codecNode, OMX_INDEXTYPE index, int8_t *config,
135094332d3Sopenharmony_ci                            uint32_t configLen)
136094332d3Sopenharmony_ci{
137094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || config == nullptr) {
138094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or config is null");
139094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
140094332d3Sopenharmony_ci    }
141094332d3Sopenharmony_ci    return codecNode->node->GetConfig(index, config, configLen);
142094332d3Sopenharmony_ci}
143094332d3Sopenharmony_ci
144094332d3Sopenharmony_ciint32_t OmxAdapterSetConfig(struct CodecComponentNode *codecNode, OMX_INDEXTYPE index, int8_t *config,
145094332d3Sopenharmony_ci                            uint32_t configLen)
146094332d3Sopenharmony_ci{
147094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || config == nullptr) {
148094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or config is null");
149094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
150094332d3Sopenharmony_ci    }
151094332d3Sopenharmony_ci    return codecNode->node->SetConfig(index, config, configLen);
152094332d3Sopenharmony_ci}
153094332d3Sopenharmony_ci
154094332d3Sopenharmony_ciint32_t OmxAdapterGetExtensionIndex(struct CodecComponentNode *codecNode, const char *parameterName,
155094332d3Sopenharmony_ci                                    OMX_INDEXTYPE *indexType)
156094332d3Sopenharmony_ci{
157094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || parameterName == nullptr || indexType == nullptr) {
158094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node , parameterName or indexType is null");
159094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
160094332d3Sopenharmony_ci    }
161094332d3Sopenharmony_ci    return codecNode->node->GetExtensionIndex(parameterName, indexType);
162094332d3Sopenharmony_ci}
163094332d3Sopenharmony_ci
164094332d3Sopenharmony_ciint32_t OmxAdapterGetState(struct CodecComponentNode *codecNode, OMX_STATETYPE *state)
165094332d3Sopenharmony_ci{
166094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || state == nullptr) {
167094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or state is null");
168094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
169094332d3Sopenharmony_ci    }
170094332d3Sopenharmony_ci    return codecNode->node->GetState(state);
171094332d3Sopenharmony_ci}
172094332d3Sopenharmony_ci
173094332d3Sopenharmony_ciint32_t OmxAdapterComponentTunnelRequest(struct CodecComponentNode *codecNode, uint32_t port,
174094332d3Sopenharmony_ci                                         int32_t omxHandleTypeTunneledComp, uint32_t tunneledPort,
175094332d3Sopenharmony_ci                                         struct OMX_TUNNELSETUPTYPE *tunnelSetup)
176094332d3Sopenharmony_ci{
177094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || tunnelSetup == nullptr) {
178094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or tunnelSetup is null");
179094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
180094332d3Sopenharmony_ci    }
181094332d3Sopenharmony_ci    return codecNode->node->ComponentTunnelRequest(port, omxHandleTypeTunneledComp, tunneledPort, tunnelSetup);
182094332d3Sopenharmony_ci}
183094332d3Sopenharmony_ci
184094332d3Sopenharmony_ciint32_t OmxAdapterUseBuffer(struct CodecComponentNode *codecNode, uint32_t portIndex, struct OmxCodecBuffer *omxBuffer)
185094332d3Sopenharmony_ci{
186094332d3Sopenharmony_ci    HITRACE_METER_NAME(HITRACE_TAG_HDF, "HdfCodecUseBuffer");
187094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || omxBuffer == nullptr) {
188094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or omxBuffer is null");
189094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
190094332d3Sopenharmony_ci    }
191094332d3Sopenharmony_ci    return codecNode->node->UseBuffer(portIndex, *omxBuffer);
192094332d3Sopenharmony_ci}
193094332d3Sopenharmony_ci
194094332d3Sopenharmony_ciint32_t OmxAdapterAllocateBuffer(struct CodecComponentNode *codecNode, uint32_t portIndex,
195094332d3Sopenharmony_ci                                 struct OmxCodecBuffer *omxBuffer)
196094332d3Sopenharmony_ci{
197094332d3Sopenharmony_ci    HITRACE_METER_NAME(HITRACE_TAG_HDF, "HdfCodecAllocateBuffer");
198094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || omxBuffer == nullptr) {
199094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or omxBuffer is null");
200094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
201094332d3Sopenharmony_ci    }
202094332d3Sopenharmony_ci    return codecNode->node->AllocateBuffer(portIndex, *omxBuffer);
203094332d3Sopenharmony_ci}
204094332d3Sopenharmony_ci
205094332d3Sopenharmony_ciint32_t OmxAdapterFreeBuffer(struct CodecComponentNode *codecNode, uint32_t portIndex, struct OmxCodecBuffer *omxBuffer)
206094332d3Sopenharmony_ci{
207094332d3Sopenharmony_ci    HITRACE_METER_NAME(HITRACE_TAG_HDF, "HdfCodecFreeBuffer");
208094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || omxBuffer == nullptr) {
209094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or omxBuffer is null");
210094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
211094332d3Sopenharmony_ci    }
212094332d3Sopenharmony_ci    int32_t ret = codecNode->node->FreeBuffer(portIndex, *omxBuffer);
213094332d3Sopenharmony_ci    return ret;
214094332d3Sopenharmony_ci}
215094332d3Sopenharmony_ci
216094332d3Sopenharmony_ciint32_t OmxAdapterEmptyThisBuffer(struct CodecComponentNode *codecNode, struct OmxCodecBuffer *omxBuffer)
217094332d3Sopenharmony_ci{
218094332d3Sopenharmony_ci    HITRACE_METER_NAME(HITRACE_TAG_HDF, "HdfCodecEmptyThisBuffer");
219094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || omxBuffer == nullptr) {
220094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or omxBuffer is null");
221094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
222094332d3Sopenharmony_ci    }
223094332d3Sopenharmony_ci    return codecNode->node->EmptyThisBuffer(*omxBuffer);
224094332d3Sopenharmony_ci}
225094332d3Sopenharmony_ci
226094332d3Sopenharmony_ciint32_t OmxAdapterFillThisBuffer(struct CodecComponentNode *codecNode, struct OmxCodecBuffer *omxBuffer)
227094332d3Sopenharmony_ci{
228094332d3Sopenharmony_ci    HITRACE_METER_NAME(HITRACE_TAG_HDF, "HdfCodecFillThisBuffer");
229094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || omxBuffer == nullptr) {
230094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or omxBuffer is null");
231094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
232094332d3Sopenharmony_ci    }
233094332d3Sopenharmony_ci    return codecNode->node->FillThisBuffer(*omxBuffer);
234094332d3Sopenharmony_ci}
235094332d3Sopenharmony_ci
236094332d3Sopenharmony_ciint32_t OmxAdapterSetCallbacks(struct CodecComponentNode *codecNode, struct CodecCallbackType *omxCallback,
237094332d3Sopenharmony_ci                               int64_t appData)
238094332d3Sopenharmony_ci{
239094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || omxCallback == nullptr) {
240094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or omxCallback is null");
241094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
242094332d3Sopenharmony_ci    }
243094332d3Sopenharmony_ci    return codecNode->node->SetCallbacks(omxCallback, appData);
244094332d3Sopenharmony_ci}
245094332d3Sopenharmony_ci
246094332d3Sopenharmony_ciint32_t OmxAdapterDeInit(struct CodecComponentNode *codecNode)
247094332d3Sopenharmony_ci{
248094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr) {
249094332d3Sopenharmony_ci        CODEC_LOGE("codecNode or node is null");
250094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
251094332d3Sopenharmony_ci    }
252094332d3Sopenharmony_ci    return codecNode->node->DeInit();
253094332d3Sopenharmony_ci}
254094332d3Sopenharmony_ci
255094332d3Sopenharmony_ciint32_t OmxAdapterUseEglImage(struct CodecComponentNode *codecNode, struct OmxCodecBuffer *buffer, uint32_t portIndex,
256094332d3Sopenharmony_ci                              int8_t *eglImage, uint32_t eglImageLen)
257094332d3Sopenharmony_ci{
258094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || buffer == nullptr || eglImage == nullptr) {
259094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node, buffer or eglImage is null");
260094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
261094332d3Sopenharmony_ci    }
262094332d3Sopenharmony_ci    return codecNode->node->UseEglImage(*buffer, portIndex, eglImage, eglImageLen);
263094332d3Sopenharmony_ci}
264094332d3Sopenharmony_ci
265094332d3Sopenharmony_ciint32_t OmxAdapterComponentRoleEnum(struct CodecComponentNode *codecNode, uint8_t *role, uint32_t roleLen,
266094332d3Sopenharmony_ci                                    uint32_t index)
267094332d3Sopenharmony_ci{
268094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || role == nullptr) {
269094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, node or role is null");
270094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
271094332d3Sopenharmony_ci    }
272094332d3Sopenharmony_ci    return codecNode->node->ComponentRoleEnum(role, roleLen, index);
273094332d3Sopenharmony_ci}
274094332d3Sopenharmony_ci
275094332d3Sopenharmony_ciint32_t OmxAdapterSetComponentRole(struct CodecComponentNode *codecNode, char *compName)
276094332d3Sopenharmony_ci{
277094332d3Sopenharmony_ci    if (codecNode == nullptr || codecNode->node == nullptr || compName == nullptr) {
278094332d3Sopenharmony_ci        CODEC_LOGE("codecNode, compName is null");
279094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
280094332d3Sopenharmony_ci    }
281094332d3Sopenharmony_ci    CodecOMXCore *core;
282094332d3Sopenharmony_ci    auto err = g_mgr.GetCoreOfComponent(core, compName);
283094332d3Sopenharmony_ci    if (err != HDF_SUCCESS || core == nullptr) {
284094332d3Sopenharmony_ci        CODEC_LOGE("core is null");
285094332d3Sopenharmony_ci        return err;
286094332d3Sopenharmony_ci    }
287094332d3Sopenharmony_ci
288094332d3Sopenharmony_ci    std::vector<std::string> roles;
289094332d3Sopenharmony_ci    std::string name = compName;
290094332d3Sopenharmony_ci    int32_t ret = core->GetRolesOfComponent(name, roles);
291094332d3Sopenharmony_ci    if (ret != HDF_SUCCESS) {
292094332d3Sopenharmony_ci        CODEC_LOGE("GetRoleOfComponent return err [%{public}d]", ret);
293094332d3Sopenharmony_ci        return ret;
294094332d3Sopenharmony_ci    }
295094332d3Sopenharmony_ci    if (roles.empty()) {
296094332d3Sopenharmony_ci        CODEC_LOGE("role of component is empty");
297094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
298094332d3Sopenharmony_ci    }
299094332d3Sopenharmony_ci    uint32_t roleIndex = 0;
300094332d3Sopenharmony_ci    CODEC_LOGI("RoleName = [%{public}s]", roles[roleIndex].c_str());
301094332d3Sopenharmony_ci
302094332d3Sopenharmony_ci    OMX_PARAM_COMPONENTROLETYPE role;
303094332d3Sopenharmony_ci    errno_t res = strncpy_s(reinterpret_cast<char *>(role.cRole), OMX_MAX_STRINGNAME_SIZE,
304094332d3Sopenharmony_ci                            roles[roleIndex].c_str(), roles[roleIndex].length());
305094332d3Sopenharmony_ci    if (res != EOK) {
306094332d3Sopenharmony_ci        CODEC_LOGE("strncpy_s return err [%{public}d]", err);
307094332d3Sopenharmony_ci        return HDF_FAILURE;
308094332d3Sopenharmony_ci    }
309094332d3Sopenharmony_ci    role.nSize = sizeof(role);
310094332d3Sopenharmony_ci    ret = codecNode->node->SetParameter(OMX_IndexParamStandardComponentRole,
311094332d3Sopenharmony_ci                                        reinterpret_cast<int8_t *>(&role), sizeof(role));
312094332d3Sopenharmony_ci    if (ret != HDF_SUCCESS) {
313094332d3Sopenharmony_ci        CODEC_LOGE("OMX_IndexParamStandardComponentRole err [%{public}d]", ret);
314094332d3Sopenharmony_ci    }
315094332d3Sopenharmony_ci
316094332d3Sopenharmony_ci    return ret;
317094332d3Sopenharmony_ci}
318094332d3Sopenharmony_ci
319094332d3Sopenharmony_ciint32_t OmxAdapterWriteDumperData(char *info, uint32_t size, uint32_t compId, struct CodecComponentNode *codecNode)
320094332d3Sopenharmony_ci{
321094332d3Sopenharmony_ci    OMX_STATETYPE state;
322094332d3Sopenharmony_ci    int32_t ret = OmxAdapterGetState(codecNode, &state);
323094332d3Sopenharmony_ci    if (ret != HDF_SUCCESS) {
324094332d3Sopenharmony_ci        CODEC_LOGE("OmxAdapterWriteDumperData error!");
325094332d3Sopenharmony_ci        return HDF_FAILURE;
326094332d3Sopenharmony_ci    }
327094332d3Sopenharmony_ci    std::string dump = "compName = ";
328094332d3Sopenharmony_ci    if (codecNode->node != nullptr) {
329094332d3Sopenharmony_ci        dump.append(codecNode->node->GetCompName()).append(", compId = ").append(std::to_string(compId))
330094332d3Sopenharmony_ci            .append(", state = ").append(std::to_string(state)).append(", bufferCount = ")
331094332d3Sopenharmony_ci            .append(std::to_string(codecNode->node->GetBufferCount()));
332094332d3Sopenharmony_ci    }
333094332d3Sopenharmony_ci    dump.append("\n");
334094332d3Sopenharmony_ci    errno_t error = strncpy_s(info, size, dump.c_str(), dump.length());
335094332d3Sopenharmony_ci    if (error != EOK) {
336094332d3Sopenharmony_ci        CODEC_LOGE("strncpy_s return err [%{public}d]", error);
337094332d3Sopenharmony_ci        return HDF_FAILURE;
338094332d3Sopenharmony_ci    }
339094332d3Sopenharmony_ci    return HDF_SUCCESS;
340094332d3Sopenharmony_ci}
341094332d3Sopenharmony_ci#ifdef __cplusplus
342094332d3Sopenharmony_ci};
343094332d3Sopenharmony_ci#endif
344