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