1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License. 5da853ecaSopenharmony_ci * You may obtain a copy of the License at 6da853ecaSopenharmony_ci * 7da853ecaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8da853ecaSopenharmony_ci * 9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and 13da853ecaSopenharmony_ci * limitations under the License. 14da853ecaSopenharmony_ci */ 15da853ecaSopenharmony_ci#include "hcodec_loader.h" 16da853ecaSopenharmony_ci#include <dlfcn.h> 17da853ecaSopenharmony_ci#include "avcodec_errors.h" 18da853ecaSopenharmony_ci#include "avcodec_log.h" 19da853ecaSopenharmony_ci 20da853ecaSopenharmony_cinamespace OHOS { 21da853ecaSopenharmony_cinamespace MediaAVCodec { 22da853ecaSopenharmony_cinamespace { 23da853ecaSopenharmony_ciconstexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, LOG_DOMAIN_FRAMEWORK, "HCodecLoader"}; 24da853ecaSopenharmony_ciconst char *HCODEC_LIB_PATH = "libhcodec.z.so"; 25da853ecaSopenharmony_ciconst char *HCODEC_CREATE_FUNC_NAME = "CreateHCodecByName"; 26da853ecaSopenharmony_ciconst char *HCODEC_GETCAPS_FUNC_NAME = "GetHCodecCapabilityList"; 27da853ecaSopenharmony_ci} // namespace 28da853ecaSopenharmony_cistd::shared_ptr<CodecBase> HCodecLoader::CreateByName(const std::string &name) 29da853ecaSopenharmony_ci{ 30da853ecaSopenharmony_ci HCodecLoader &loader = GetInstance(); 31da853ecaSopenharmony_ci CHECK_AND_RETURN_RET_LOG(loader.Init() == AVCS_ERR_OK, nullptr, "Create codec by name failed: init error"); 32da853ecaSopenharmony_ci return loader.Create(name); 33da853ecaSopenharmony_ci} 34da853ecaSopenharmony_ci 35da853ecaSopenharmony_ciint32_t HCodecLoader::GetCapabilityList(std::vector<CapabilityData> &caps) 36da853ecaSopenharmony_ci{ 37da853ecaSopenharmony_ci HCodecLoader &loader = GetInstance(); 38da853ecaSopenharmony_ci CHECK_AND_RETURN_RET_LOG(loader.Init() == AVCS_ERR_OK, AVCS_ERR_UNKNOWN, "Get capability failed: init error"); 39da853ecaSopenharmony_ci return loader.GetCaps(caps); 40da853ecaSopenharmony_ci} 41da853ecaSopenharmony_ci 42da853ecaSopenharmony_ciHCodecLoader::HCodecLoader() : VideoCodecLoader(HCODEC_LIB_PATH, HCODEC_CREATE_FUNC_NAME, HCODEC_GETCAPS_FUNC_NAME) {} 43da853ecaSopenharmony_ci 44da853ecaSopenharmony_ciHCodecLoader &HCodecLoader::GetInstance() 45da853ecaSopenharmony_ci{ 46da853ecaSopenharmony_ci static HCodecLoader loader; 47da853ecaSopenharmony_ci return loader; 48da853ecaSopenharmony_ci} 49da853ecaSopenharmony_ci} // namespace MediaAVCodec 50da853ecaSopenharmony_ci} // namespace OHOS