• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 Shenzhen Kaihong DID 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 "codec_component_capability_config.h"
17 #include "codec_log_wrapper.h"
18 
19 static CodecCapablites g_codecCapabilites = {0};
20 static const struct DeviceResourceNode *g_resourceNode = NULL;
21 
InitDataNode(const struct DeviceResourceNode * node)22 int32_t InitDataNode(const struct DeviceResourceNode *node)
23 {
24     if (node == NULL) {
25         CODEC_LOGE("data node is null!");
26         return HDF_FAILURE;
27     }
28     g_resourceNode = node;
29     return HDF_SUCCESS;
30 }
31 
ClearCapabilityData()32 int32_t ClearCapabilityData()
33 {
34     return ClearCapabilityGroup(&g_codecCapabilites);
35 }
36 
LoadCapabilityData()37 int32_t LoadCapabilityData()
38 {
39     return LoadCodecCapabilityFromHcs(g_resourceNode, &g_codecCapabilites);
40 }
41 
GetComponentNum(int32_t * num)42 int32_t GetComponentNum(int32_t *num)
43 {
44     if (!g_codecCapabilites.inited) {
45         CODEC_LOGE("g_codecCapabilites not init!");
46         return HDF_FAILURE;
47     }
48     *num = g_codecCapabilites.total;
49     return HDF_SUCCESS;
50 }
51 
GetComponentCapabilityList(CodecCompCapability * capList,int32_t count)52 int32_t GetComponentCapabilityList(CodecCompCapability *capList, int32_t count)
53 {
54     if (!g_codecCapabilites.inited) {
55         CODEC_LOGE("g_codecCapabilites not init!");
56         return HDF_FAILURE;
57     }
58     if (count != g_codecCapabilites.total) {
59         CODEC_LOGE("The length does not match!");
60         return HDF_FAILURE;
61     }
62     int32_t groupIndex;
63     int32_t capIndex;
64     int32_t curCount = 0;
65     CodecCapablityGroup *group = NULL;
66     CodecCompCapability *cap = NULL;
67     CodecCapablityGroup *codeCapGroups[] = {
68         &(g_codecCapabilites.videoHwEncoderGroup), &(g_codecCapabilites.videoHwDecoderGroup),
69         &(g_codecCapabilites.audioHwEncoderGroup), &(g_codecCapabilites.audioHwDecoderGroup),
70         &(g_codecCapabilites.videoSwEncoderGroup), &(g_codecCapabilites.videoSwDecoderGroup),
71         &(g_codecCapabilites.audioSwEncoderGroup), &(g_codecCapabilites.audioSwDecoderGroup)};
72 
73     for (groupIndex = 0; groupIndex < CODEC_CAPABLITY_GROUP_NUM; groupIndex++) {
74         group = codeCapGroups[groupIndex];
75         for (capIndex = 0; (capIndex < group->num) && (count > 0); capIndex++) {
76             cap = &group->capablitis[capIndex];
77             capList[curCount++] = *cap;
78         }
79     }
80     return HDF_SUCCESS;
81 }
82