1/* 2 * Copyright (c) 2023 Huawei Device 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 16package ohos.hdi.codec.v2_0; 17 18import ohos.hdi.codec.v2_0.CodecTypes; 19 20/** 21 * @brief Enumerates the extended codec codingtyps. 22 */ 23enum CodecVideoExType { 24 CODEC_VIDEO_CodingVP9 = 10, /** VP9 Index in Codec HDI */ 25 CODEC_VIDEO_CodingHEVC = 11, /** HEVC Index in Codec HDI */ 26}; 27 28/** 29 * @brief Enumerates the extended HEVC profile. 30 */ 31enum CodecHevcProfile { 32 CODEC_HEVC_PROFILE_INVALID = 0x0, 33 CODEC_HEVC_PROFILE_MAIN = 0x1, 34 CODEC_HEVC_PROFILE_MAIN10 = 0x2, 35 CODEC_HEVC_PROFILE_MAIN_STILL = 0x3, 36 // main_10 profile with HDR SEI support. 37 CODEC_HEVC_PROFILE_MAIN10_HDR10 = 0x1000, 38 CODEC_HEVC_PROFILE_MAIN10_HDR10_PLUS = 0x2000, 39 CODEC_HEVC_PROFILE_MAX = 0x7FFFFFFF 40}; 41 42/** 43 * @brief Enumerates the extended HEVC level. 44 */ 45enum CodecHevcLevel { 46 CODEC_HEVC_LEVEL_INVALID = 0x0, 47 CODEC_HEVC_MAIN_TIER_LEVEL1 = 0x1, 48 CODEC_HEVC_HIGH_TIER_LEVEL1 = 0x2, 49 CODEC_HEVC_MAIN_TIER_LEVEL2 = 0x4, 50 CODEC_HEVC_HIGH_TIER_LEVEL2 = 0x8, 51 CODEC_HEVC_MAIN_TIER_LEVEL21 = 0x10, 52 CODEC_HEVC_HIGH_TIER_LEVEL21 = 0x20, 53 CODEC_HEVC_MAIN_TIER_LEVEL3 = 0x40, 54 CODEC_HEVC_HIGH_TIER_LEVEL3 = 0x80, 55 CODEC_HEVC_MAIN_TIER_LEVEL31 = 0x100, 56 CODEC_HEVC_HIGH_TIER_LEVEL31 = 0x200, 57 CODEC_HEVC_MAIN_TIER_LEVEL4 = 0x400, 58 CODEC_HEVC_HIGH_TIER_LEVEL4 = 0x800, 59 CODEC_HEVC_MAIN_TIER_LEVEL41 = 0x1000, 60 CODEC_HEVC_HIGH_TIER_LEVEL41 = 0x2000, 61 CODEC_HEVC_MAIN_TIER_LEVEL5 = 0x4000, 62 CODEC_HEVC_HIGH_TIER_LEVEL5 = 0x8000, 63 CODEC_HEVC_MAIN_TIER_LEVEL51 = 0x10000, 64 CODEC_HEVC_HIGH_TIER_LEVEL51 = 0x20000, 65 CODEC_HEVC_MAIN_TIER_LEVEL52 = 0x40000, 66 CODEC_HEVC_HIGH_TIER_LEVEL52 = 0x80000, 67 CODEC_HEVC_MAIN_TIER_LEVEL6 = 0x100000, 68 CODEC_HEVC_HIGH_TIER_LEVEL6 = 0x200000, 69 CODEC_HEVC_MAIN_TIER_LEVEL61 = 0x400000, 70 CODEC_HEVC_HIGH_TIER_LEVEL61 = 0x800000, 71 CODEC_HEVC_MAIN_TIER_LEVEL62 = 0x1000000, 72 CODEC_HEVC_HIGH_TIER_LEVEL62 = 0x2000000, 73 CODEC_HEVC_HIGH_TIER_MAX = 0x7FFFFFFF 74}; 75 76/** 77 * @brief Enumerates the buffer types. 78 */ 79enum CodecBufferType { 80 /** Invalid buffer type. */ 81 CODEC_BUFFER_TYPE_INVALID = 0, 82 /** Virtual address type. */ 83 CODEC_BUFFER_TYPE_VIRTUAL_ADDR = 0x1, 84 /** Shared memory. */ 85 CODEC_BUFFER_TYPE_AVSHARE_MEM_FD = 0x2, 86 /** Handle. */ 87 CODEC_BUFFER_TYPE_HANDLE = 0x4, 88 /** Dynamic handle. */ 89 CODEC_BUFFER_TYPE_DYNAMIC_HANDLE = 0x8, 90 /** DMA memory. */ 91 CODEC_BUFFER_TYPE_DMA_MEM_FD = 0x10, 92}; 93 94/** 95 * @brief Defines the <b>SupportBuffer</b>. 96 */ 97struct SupportBufferType { 98 unsigned int size; /** Size of the structure */ 99 union CodecVersionType version; /** Component version */ 100 unsigned int portIndex; /** Port index */ 101 unsigned int bufferTypes; /** Supported buffer types */ 102}; 103 104/** 105 * @brief Define the <b>UseBuffer</b>. 106 */ 107struct UseBufferType { 108 unsigned int size; /** Size of the structure */ 109 union CodecVersionType version; /** Component version */ 110 unsigned int portIndex; /** Port index */ 111 unsigned int bufferType; /** Buffer type */ 112}; 113 114/** 115 * @brief Defines the <b>BufferHandleUsage</b>. 116 */ 117struct GetBufferHandleUsageParams { 118 unsigned int size; /** Size of the structure */ 119 union CodecVersionType version; /** Component version */ 120 unsigned int portIndex; /** Port index */ 121 unsigned long usage; /** Usage */ 122}; 123 124/** 125 * @brief Defines the <b>CodecVideoPortFormatParam</b>. 126 */ 127struct CodecVideoPortFormatParam { 128 unsigned int size; /** Size of the structure */ 129 union CodecVersionType version; /** Component version */ 130 unsigned int portIndex; /** Port index */ 131 unsigned int codecColorIndex; /** Color format index */ 132 unsigned int codecColorFormat; /** Color format defined in Display */ 133 unsigned int codecCompressFormat; /** See */ 134 unsigned int framerate; /** Q16 format */ 135}; 136 137/** 138 * @brief Defines the <b>ControlRateConstantQuality</b>. 139 */ 140struct ControlRateConstantQuality { 141 unsigned int size; /** Size of the structure */ 142 union CodecVersionType version; /** Component version */ 143 unsigned int portIndex; /** Port index */ 144 unsigned int qualityValue; /** Control rate constant quality */ 145}; 146 147/** 148 * @brief Defines the <b>WorkingFrequencyParam</b>. 149 */ 150struct WorkingFrequencyParam { 151 unsigned int size; /** Size of the structure */ 152 union CodecVersionType version; /** Component version */ 153 unsigned int level; /** Working frequency level */ 154}; 155 156/** 157 * @brief Defines the <b>WorkingFrequencyParam</b>. 158 */ 159struct ProcessNameParam { 160 unsigned int size; /** Size of the structure */ 161 union CodecVersionType version; /** Component version */ 162 String processName; /** Process Name */ 163}; 164 165/** 166 * @brief Enumerates the extended codec indexes. 167 */ 168enum CodecIndexExType { 169 /** Extended BufferType index, value = Codec_IndexExtBufferTypeStartUnused + 0x00a00000 */ 170 Codec_IndexExtBufferTypeStartUnused = 0x6F000000 + 0x00a00000, 171 /** SupportBuffer */ 172 Codec_IndexParamSupportBufferType, 173 /** UseBuffer */ 174 Codec_IndexParamUseBufferType, 175 /** GetBufferHandleUsage */ 176 Codec_IndexParamGetBufferHandleUsage, 177 /** CodecVideoPortFormatParam */ 178 Codec_IndexCodecVideoPortFormat, 179 /** ControlRateConstantQuality */ 180 Codec_IndexParamControlRateConstantQuality, 181 /** Codec_IndexParamVideoHevc */ 182 Codec_IndexParamVideoHevc = 0x6F000000 + 0x00a00007, 183 /** range/primary/transfer/matrix */ 184 Codec_IndexColorAspects, 185 /** WorkingFrequencyParam */ 186 Codec_IndexParamWorkingFrequency, 187 /** ProcessNameParam */ 188 Codec_IndexParamProcessName, 189}; 190 191/** 192 * @brief Structure for controlling HEVC video encoding 193 */ 194struct CodecVideoParamHevc { 195 unsigned int size; /** Size of the structure */ 196 union CodecVersionType version; /** Component version */ 197 unsigned int portIndex; /** Port index */ 198 enum CodecHevcProfile profile; /** Hevc profile. For details, see {@link CodecHevcProfile}. */ 199 enum CodecHevcLevel level; /** Hevc level. For details, see {@link CodecHevcLevel}. */ 200 unsigned int keyFrameInterval; /** Distance between consecutive I-frames (including one of the I frams). 201 0 means interval is unspecified and can be freely chosen by the codec. 202 1 means a stream of only I frams. other means the real value. */ 203}; 204 205enum RangeType { 206 RANGE_UNSPECIFIED, 207 RANGE_FULL, 208 RANGE_LIMITED, 209 RANGE_MAX = 0xff, 210}; 211 212enum Primaries { 213 PRIMARIES_UNSPECIFIED, 214 PRIMARIES_BT709, //Rec. ITU-R BT.709-6 215 PRIMARIES_BT470_6M, //Rec. ITU-R BT.470-6 System M 216 PRIMARIES_BT601_625, //Rec. ITU-R BT.601-7 625 or Rec. ITU-R BT.470-6 System B,G 217 PRIMARIES_BT601_525, //Rec. ITU-R BT.601-7 525 or SMPTE ST 170 or SMPTE ST 240 218 PRIMARIES_GENERICFILM, //Generic Film 219 PRIMARIES_BT2020, //Rec. ITU-R BT.2020-2 or Rec. ITU-R BT.2100-2 220 PRIMARIES_MAX = 0xff, 221}; 222 223enum Transfer { 224 TRANSFER_UNSPECIFIED, 225 TRANSFER_LINEAR, //Linear transfer characteristics 226 TRANSFER_SRGB, //IEC 61966-2-1 sRGB 227 TRANSFER_SMPTE170, //SMPTE ST 170 or Rec. ITU-R BT.709-6 or BT.601-7 or BT.2020-2 228 TRANSFER_GAMMA22, //Rec. ITU-R BT.470-6 System M 229 TRANSFER_GAMMA28, //Rec. ITU-R BT.470-6 System B,G 230 TRANSFER_PQ, //Rec. ITU-R BT.2100-2 perceptual quantization (PQ) system 231 TRANSFER_HLG, //Rec. ITU-R BT.2100-2 hybrid log gamma (HLG) system 232 TRANSFER_SMPTE240 = 0x40, //SMPTE ST 240 233 TRANSFER_XVYCC, //IEC 61966-2-4 234 TRANSFER_BT1361, //Rec. ITU-R BT.1361-0 extended colour gamut system 235 TRANSFER_ST428, //SMPTE ST 428-1 236 TRANSFER_MAX = 0xff, 237}; 238 239enum MatrixCoeffs { 240 MATRIX_UNSPECIFED, 241 MATRIX_BT709, //Rec. ITU-R BT.709-6 242 MATRIX_FCC, //United States Federal Communications Commission 243 MATRIX_BT601, //Rec. ITU-R BT.601-7 or Rec. ITU-R BT.470-6 System B,G 244 MATRIX_SMPTE240, //SMPTE ST 240 245 MATRIX_BT2020, //Rec. ITU-R BT.2100-2 (non-constant luminance) 246 MATRIX_BT2020CONSTANT, //Rec. ITU-R BT.2100-2 (constant luminance) 247 MATRIX_MAX = 0xff, 248}; 249 250struct ColorAspects { 251 enum RangeType range; 252 enum Primaries primaries; 253 enum Transfer transfer; 254 enum MatrixCoeffs matrixCoeffs; 255}; 256 257/** 258 * @brief Structure for controlling color space 259 */ 260struct CodecVideoColorspace { 261 unsigned int size; /** Size of the structure */ 262 union CodecVersionType version; /** Component version */ 263 unsigned int portIndex; /** Port index */ 264 unsigned int requestingDataSpace; 265 unsigned int dataSpaceChanged; 266 unsigned int pixeFormat; 267 unsigned int dataSpace; 268 struct ColorAspects aspects; 269};