1/*
2 * Copyright (c) 2022 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#ifndef HDI_CODECCONFIGPARSER_H
17#define HDI_CODECCONFIGPARSER_H
18
19#include "codec_component_type.h"
20#include "device_resource_if.h"
21
22#define NODE_VIDEO_HARDWARE_ENCODERS    "VideoHwEncoders"
23#define NODE_VIDEO_HARDWARE_DECODERS    "VideoHwDecoders"
24#define NODE_VIDEO_SOFTWARE_ENCODERS    "VideoSwEncoders"
25#define NODE_VIDEO_SOFTWARE_DECODERS    "VideoSwDecoders"
26#define NODE_AUDIO_HARDWARE_ENCODERS    "AudioHwEncoders"
27#define NODE_AUDIO_HARDWARE_DECODERS    "AudioHwDecoders"
28#define NODE_AUDIO_SOFTWARE_ENCODERS    "AudioSwEncoders"
29#define NODE_AUDIO_SOFTWARE_DECODERS    "AudioSwDecoders"
30
31#define CODEC_CONFIG_KEY_ROLE                   "role"
32#define CODEC_CONFIG_KEY_TYPE                   "type"
33#define CODEC_CONFIG_KEY_NAME                   "name"
34#define CODEC_CONFIG_KEY_SUPPORT_PROFILES       "supportProfiles"
35#define CODEC_CONFIG_KEY_MAX_INST               "maxInst"
36#define CODEC_CONFIG_KEY_IS_SOFTWARE_CODEC      "isSoftwareCodec"
37#define CODEC_CONFIG_KEY_PROCESS_MODE_MASK      "processModeMask"
38#define CODEC_CONFIG_KEY_CAPS_MASK              "capsMask"
39#define CODEC_CONFIG_KEY_MIN_BITRATE            "minBitRate"
40#define CODEC_CONFIG_KEY_MAX_BITRATE            "maxBitRate"
41
42#define CODEC_CONFIG_KEY_MIN_WIDTH              "minWidth"
43#define CODEC_CONFIG_KEY_MIN_HEIGHT             "minHeight"
44#define CODEC_CONFIG_KEY_MAX_WIDTH              "maxWidth"
45#define CODEC_CONFIG_KEY_MAX_HEIGHT             "maxHeight"
46#define CODEC_CONFIG_KEY_WIDTH_ALIGNMENT        "widthAlignment"
47#define CODEC_CONFIG_KEY_HEIGHT_ALIGNMENT       "heightAlignment"
48#define CODEC_CONFIG_KEY_MIN_BLOCK_COUNT        "minBlockCount"
49#define CODEC_CONFIG_KEY_MAX_BLOCK_COUNT        "maxBlockCount"
50#define CODEC_CONFIG_KEY_MIN_BLOCKS_PER_SECOND  "minBlocksPerSecond"
51#define CODEC_CONFIG_KEY_MAX_BLOCKS_PER_SECOND  "maxBlocksPerSecond"
52#define CODEC_CONFIG_KEY_SUPPORT_PIXEL_FMTS     "supportPixelFmts"
53#define CODEC_CONFIG_KEY_BLOCK_SIZE_WIDTH       "blockSizeWidth"
54#define CODEC_CONFIG_KEY_BLOCK_SIZE_HEIGHT      "blockSizeHeight"
55#define CODEC_CONFIG_KEY_MIN_FRAME_RATE         "minFrameRate"
56#define CODEC_CONFIG_KEY_MAX_FRAME_RATE         "maxFrameRate"
57#define CODEC_CONFIG_KEY_BITE_RATE_MODE         "bitRateMode"
58#define CODEC_CONFIG_KEY_MESURED_FRAME_RATE     "measuredFrameRate"
59#define CODEC_CONFIG_KEY_CAN_SWAP_WIDTH_HEIGHT  "canSwapWidthHeight"
60
61#define CODEC_CONFIG_KEY_SAMPLE_FORMATS         "sampleFormats"
62#define CODEC_CONFIG_KEY_SAMPLE_RATE            "sampleRate"
63#define CODEC_CONFIG_KEY_CHANNEL_LAYOUTS        "channelLayouts"
64#define CODEC_CONFIG_KEY_CHANNEL_COUNT          "channelCount"
65
66#define CODEC_CAPABLITY_GROUP_NUM  8
67
68typedef struct {
69    int32_t num;
70    CodecCompCapability *capablitis;
71} CodecCapablityGroup;
72
73typedef struct {
74    CodecCapablityGroup videoHwEncoderGroup;
75    CodecCapablityGroup videoHwDecoderGroup;
76    CodecCapablityGroup videoSwEncoderGroup;
77    CodecCapablityGroup videoSwDecoderGroup;
78    CodecCapablityGroup audioHwEncoderGroup;
79    CodecCapablityGroup audioHwDecoderGroup;
80    CodecCapablityGroup audioSwEncoderGroup;
81    CodecCapablityGroup audioSwDecoderGroup;
82    int32_t total;
83    bool inited;
84} CodecCapablites;
85
86typedef struct {
87    const char *attrName;
88    uint32_t *valueAddr;
89    uint32_t defaultValue;
90} ConfigUintNodeAttr;
91
92typedef struct {
93    const char *attrName;
94    int32_t *array;
95    int32_t length;
96    int32_t endValue;
97} ConfigUintArrayNodeAttr;
98
99int32_t LoadCodecCapabilityFromHcs(const struct DeviceResourceNode *node, CodecCapablites *caps);
100int32_t ClearCapabilityGroup(CodecCapablites *caps);
101
102#endif  // HDI_CODECCONFIGPARSER_H
103