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