1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2022 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#ifndef HDI_CODECCONFIGPARSER_H
17094332d3Sopenharmony_ci#define HDI_CODECCONFIGPARSER_H
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_ci#include "codec_component_type.h"
20094332d3Sopenharmony_ci#include "device_resource_if.h"
21094332d3Sopenharmony_ci
22094332d3Sopenharmony_ci#define NODE_VIDEO_HARDWARE_ENCODERS    "VideoHwEncoders"
23094332d3Sopenharmony_ci#define NODE_VIDEO_HARDWARE_DECODERS    "VideoHwDecoders"
24094332d3Sopenharmony_ci#define NODE_VIDEO_SOFTWARE_ENCODERS    "VideoSwEncoders"
25094332d3Sopenharmony_ci#define NODE_VIDEO_SOFTWARE_DECODERS    "VideoSwDecoders"
26094332d3Sopenharmony_ci#define NODE_AUDIO_HARDWARE_ENCODERS    "AudioHwEncoders"
27094332d3Sopenharmony_ci#define NODE_AUDIO_HARDWARE_DECODERS    "AudioHwDecoders"
28094332d3Sopenharmony_ci#define NODE_AUDIO_SOFTWARE_ENCODERS    "AudioSwEncoders"
29094332d3Sopenharmony_ci#define NODE_AUDIO_SOFTWARE_DECODERS    "AudioSwDecoders"
30094332d3Sopenharmony_ci
31094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_ROLE                   "role"
32094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_TYPE                   "type"
33094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_NAME                   "name"
34094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_SUPPORT_PROFILES       "supportProfiles"
35094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MAX_INST               "maxInst"
36094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_IS_SOFTWARE_CODEC      "isSoftwareCodec"
37094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_PROCESS_MODE_MASK      "processModeMask"
38094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_CAPS_MASK              "capsMask"
39094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MIN_BITRATE            "minBitRate"
40094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MAX_BITRATE            "maxBitRate"
41094332d3Sopenharmony_ci
42094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MIN_WIDTH              "minWidth"
43094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MIN_HEIGHT             "minHeight"
44094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MAX_WIDTH              "maxWidth"
45094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MAX_HEIGHT             "maxHeight"
46094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_WIDTH_ALIGNMENT        "widthAlignment"
47094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_HEIGHT_ALIGNMENT       "heightAlignment"
48094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MIN_BLOCK_COUNT        "minBlockCount"
49094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MAX_BLOCK_COUNT        "maxBlockCount"
50094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MIN_BLOCKS_PER_SECOND  "minBlocksPerSecond"
51094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MAX_BLOCKS_PER_SECOND  "maxBlocksPerSecond"
52094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_SUPPORT_PIXEL_FMTS     "supportPixelFmts"
53094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_BLOCK_SIZE_WIDTH       "blockSizeWidth"
54094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_BLOCK_SIZE_HEIGHT      "blockSizeHeight"
55094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MIN_FRAME_RATE         "minFrameRate"
56094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MAX_FRAME_RATE         "maxFrameRate"
57094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_BITE_RATE_MODE         "bitRateMode"
58094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_MESURED_FRAME_RATE     "measuredFrameRate"
59094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_CAN_SWAP_WIDTH_HEIGHT  "canSwapWidthHeight"
60094332d3Sopenharmony_ci
61094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_SAMPLE_FORMATS         "sampleFormats"
62094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_SAMPLE_RATE            "sampleRate"
63094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_CHANNEL_LAYOUTS        "channelLayouts"
64094332d3Sopenharmony_ci#define CODEC_CONFIG_KEY_CHANNEL_COUNT          "channelCount"
65094332d3Sopenharmony_ci
66094332d3Sopenharmony_ci#define CODEC_CAPABLITY_GROUP_NUM  8
67094332d3Sopenharmony_ci
68094332d3Sopenharmony_citypedef struct {
69094332d3Sopenharmony_ci    int32_t num;
70094332d3Sopenharmony_ci    CodecCompCapability *capablitis;
71094332d3Sopenharmony_ci} CodecCapablityGroup;
72094332d3Sopenharmony_ci
73094332d3Sopenharmony_citypedef struct {
74094332d3Sopenharmony_ci    CodecCapablityGroup videoHwEncoderGroup;
75094332d3Sopenharmony_ci    CodecCapablityGroup videoHwDecoderGroup;
76094332d3Sopenharmony_ci    CodecCapablityGroup videoSwEncoderGroup;
77094332d3Sopenharmony_ci    CodecCapablityGroup videoSwDecoderGroup;
78094332d3Sopenharmony_ci    CodecCapablityGroup audioHwEncoderGroup;
79094332d3Sopenharmony_ci    CodecCapablityGroup audioHwDecoderGroup;
80094332d3Sopenharmony_ci    CodecCapablityGroup audioSwEncoderGroup;
81094332d3Sopenharmony_ci    CodecCapablityGroup audioSwDecoderGroup;
82094332d3Sopenharmony_ci    int32_t total;
83094332d3Sopenharmony_ci    bool inited;
84094332d3Sopenharmony_ci} CodecCapablites;
85094332d3Sopenharmony_ci
86094332d3Sopenharmony_citypedef struct {
87094332d3Sopenharmony_ci    const char *attrName;
88094332d3Sopenharmony_ci    uint32_t *valueAddr;
89094332d3Sopenharmony_ci    uint32_t defaultValue;
90094332d3Sopenharmony_ci} ConfigUintNodeAttr;
91094332d3Sopenharmony_ci
92094332d3Sopenharmony_citypedef struct {
93094332d3Sopenharmony_ci    const char *attrName;
94094332d3Sopenharmony_ci    int32_t *array;
95094332d3Sopenharmony_ci    int32_t length;
96094332d3Sopenharmony_ci    int32_t endValue;
97094332d3Sopenharmony_ci} ConfigUintArrayNodeAttr;
98094332d3Sopenharmony_ci
99094332d3Sopenharmony_ciint32_t LoadCodecCapabilityFromHcs(const struct DeviceResourceNode *node, CodecCapablites *caps);
100094332d3Sopenharmony_ciint32_t ClearCapabilityGroup(CodecCapablites *caps);
101094332d3Sopenharmony_ci
102094332d3Sopenharmony_ci#endif  // HDI_CODECCONFIGPARSER_H
103