/*
* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ohos.hdi.codec.v2_0;
import ohos.hdi.codec.v2_0.CodecTypes;
/**
* @brief Enumerates the extended codec codingtyps.
*/
enum CodecVideoExType {
CODEC_VIDEO_CodingVP9 = 10, /** VP9 Index in Codec HDI */
CODEC_VIDEO_CodingHEVC = 11, /** HEVC Index in Codec HDI */
};
/**
* @brief Enumerates the extended HEVC profile.
*/
enum CodecHevcProfile {
CODEC_HEVC_PROFILE_INVALID = 0x0,
CODEC_HEVC_PROFILE_MAIN = 0x1,
CODEC_HEVC_PROFILE_MAIN10 = 0x2,
CODEC_HEVC_PROFILE_MAIN_STILL = 0x3,
// main_10 profile with HDR SEI support.
CODEC_HEVC_PROFILE_MAIN10_HDR10 = 0x1000,
CODEC_HEVC_PROFILE_MAIN10_HDR10_PLUS = 0x2000,
CODEC_HEVC_PROFILE_MAX = 0x7FFFFFFF
};
/**
* @brief Enumerates the extended HEVC level.
*/
enum CodecHevcLevel {
CODEC_HEVC_LEVEL_INVALID = 0x0,
CODEC_HEVC_MAIN_TIER_LEVEL1 = 0x1,
CODEC_HEVC_HIGH_TIER_LEVEL1 = 0x2,
CODEC_HEVC_MAIN_TIER_LEVEL2 = 0x4,
CODEC_HEVC_HIGH_TIER_LEVEL2 = 0x8,
CODEC_HEVC_MAIN_TIER_LEVEL21 = 0x10,
CODEC_HEVC_HIGH_TIER_LEVEL21 = 0x20,
CODEC_HEVC_MAIN_TIER_LEVEL3 = 0x40,
CODEC_HEVC_HIGH_TIER_LEVEL3 = 0x80,
CODEC_HEVC_MAIN_TIER_LEVEL31 = 0x100,
CODEC_HEVC_HIGH_TIER_LEVEL31 = 0x200,
CODEC_HEVC_MAIN_TIER_LEVEL4 = 0x400,
CODEC_HEVC_HIGH_TIER_LEVEL4 = 0x800,
CODEC_HEVC_MAIN_TIER_LEVEL41 = 0x1000,
CODEC_HEVC_HIGH_TIER_LEVEL41 = 0x2000,
CODEC_HEVC_MAIN_TIER_LEVEL5 = 0x4000,
CODEC_HEVC_HIGH_TIER_LEVEL5 = 0x8000,
CODEC_HEVC_MAIN_TIER_LEVEL51 = 0x10000,
CODEC_HEVC_HIGH_TIER_LEVEL51 = 0x20000,
CODEC_HEVC_MAIN_TIER_LEVEL52 = 0x40000,
CODEC_HEVC_HIGH_TIER_LEVEL52 = 0x80000,
CODEC_HEVC_MAIN_TIER_LEVEL6 = 0x100000,
CODEC_HEVC_HIGH_TIER_LEVEL6 = 0x200000,
CODEC_HEVC_MAIN_TIER_LEVEL61 = 0x400000,
CODEC_HEVC_HIGH_TIER_LEVEL61 = 0x800000,
CODEC_HEVC_MAIN_TIER_LEVEL62 = 0x1000000,
CODEC_HEVC_HIGH_TIER_LEVEL62 = 0x2000000,
CODEC_HEVC_HIGH_TIER_MAX = 0x7FFFFFFF
};
/**
* @brief Enumerates the buffer types.
*/
enum CodecBufferType {
/** Invalid buffer type. */
CODEC_BUFFER_TYPE_INVALID = 0,
/** Virtual address type. */
CODEC_BUFFER_TYPE_VIRTUAL_ADDR = 0x1,
/** Shared memory. */
CODEC_BUFFER_TYPE_AVSHARE_MEM_FD = 0x2,
/** Handle. */
CODEC_BUFFER_TYPE_HANDLE = 0x4,
/** Dynamic handle. */
CODEC_BUFFER_TYPE_DYNAMIC_HANDLE = 0x8,
/** DMA memory. */
CODEC_BUFFER_TYPE_DMA_MEM_FD = 0x10,
};
/**
* @brief Defines the SupportBuffer.
*/
struct SupportBufferType {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
unsigned int portIndex; /** Port index */
unsigned int bufferTypes; /** Supported buffer types */
};
/**
* @brief Define the UseBuffer.
*/
struct UseBufferType {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
unsigned int portIndex; /** Port index */
unsigned int bufferType; /** Buffer type */
};
/**
* @brief Defines the BufferHandleUsage.
*/
struct GetBufferHandleUsageParams {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
unsigned int portIndex; /** Port index */
unsigned long usage; /** Usage */
};
/**
* @brief Defines the CodecVideoPortFormatParam.
*/
struct CodecVideoPortFormatParam {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
unsigned int portIndex; /** Port index */
unsigned int codecColorIndex; /** Color format index */
unsigned int codecColorFormat; /** Color format defined in Display */
unsigned int codecCompressFormat; /** See */
unsigned int framerate; /** Q16 format */
};
/**
* @brief Defines the ControlRateConstantQuality.
*/
struct ControlRateConstantQuality {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
unsigned int portIndex; /** Port index */
unsigned int qualityValue; /** Control rate constant quality */
};
/**
* @brief Defines the WorkingFrequencyParam.
*/
struct WorkingFrequencyParam {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
unsigned int level; /** Working frequency level */
};
/**
* @brief Defines the WorkingFrequencyParam.
*/
struct ProcessNameParam {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
String processName; /** Process Name */
};
/**
* @brief Enumerates the extended codec indexes.
*/
enum CodecIndexExType {
/** Extended BufferType index, value = Codec_IndexExtBufferTypeStartUnused + 0x00a00000 */
Codec_IndexExtBufferTypeStartUnused = 0x6F000000 + 0x00a00000,
/** SupportBuffer */
Codec_IndexParamSupportBufferType,
/** UseBuffer */
Codec_IndexParamUseBufferType,
/** GetBufferHandleUsage */
Codec_IndexParamGetBufferHandleUsage,
/** CodecVideoPortFormatParam */
Codec_IndexCodecVideoPortFormat,
/** ControlRateConstantQuality */
Codec_IndexParamControlRateConstantQuality,
/** Codec_IndexParamVideoHevc */
Codec_IndexParamVideoHevc = 0x6F000000 + 0x00a00007,
/** range/primary/transfer/matrix */
Codec_IndexColorAspects,
/** WorkingFrequencyParam */
Codec_IndexParamWorkingFrequency,
/** ProcessNameParam */
Codec_IndexParamProcessName,
};
/**
* @brief Structure for controlling HEVC video encoding
*/
struct CodecVideoParamHevc {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
unsigned int portIndex; /** Port index */
enum CodecHevcProfile profile; /** Hevc profile. For details, see {@link CodecHevcProfile}. */
enum CodecHevcLevel level; /** Hevc level. For details, see {@link CodecHevcLevel}. */
unsigned int keyFrameInterval; /** Distance between consecutive I-frames (including one of the I frams).
0 means interval is unspecified and can be freely chosen by the codec.
1 means a stream of only I frams. other means the real value. */
};
enum RangeType {
RANGE_UNSPECIFIED,
RANGE_FULL,
RANGE_LIMITED,
RANGE_MAX = 0xff,
};
enum Primaries {
PRIMARIES_UNSPECIFIED,
PRIMARIES_BT709, //Rec. ITU-R BT.709-6
PRIMARIES_BT470_6M, //Rec. ITU-R BT.470-6 System M
PRIMARIES_BT601_625, //Rec. ITU-R BT.601-7 625 or Rec. ITU-R BT.470-6 System B,G
PRIMARIES_BT601_525, //Rec. ITU-R BT.601-7 525 or SMPTE ST 170 or SMPTE ST 240
PRIMARIES_GENERICFILM, //Generic Film
PRIMARIES_BT2020, //Rec. ITU-R BT.2020-2 or Rec. ITU-R BT.2100-2
PRIMARIES_MAX = 0xff,
};
enum Transfer {
TRANSFER_UNSPECIFIED,
TRANSFER_LINEAR, //Linear transfer characteristics
TRANSFER_SRGB, //IEC 61966-2-1 sRGB
TRANSFER_SMPTE170, //SMPTE ST 170 or Rec. ITU-R BT.709-6 or BT.601-7 or BT.2020-2
TRANSFER_GAMMA22, //Rec. ITU-R BT.470-6 System M
TRANSFER_GAMMA28, //Rec. ITU-R BT.470-6 System B,G
TRANSFER_PQ, //Rec. ITU-R BT.2100-2 perceptual quantization (PQ) system
TRANSFER_HLG, //Rec. ITU-R BT.2100-2 hybrid log gamma (HLG) system
TRANSFER_SMPTE240 = 0x40, //SMPTE ST 240
TRANSFER_XVYCC, //IEC 61966-2-4
TRANSFER_BT1361, //Rec. ITU-R BT.1361-0 extended colour gamut system
TRANSFER_ST428, //SMPTE ST 428-1
TRANSFER_MAX = 0xff,
};
enum MatrixCoeffs {
MATRIX_UNSPECIFED,
MATRIX_BT709, //Rec. ITU-R BT.709-6
MATRIX_FCC, //United States Federal Communications Commission
MATRIX_BT601, //Rec. ITU-R BT.601-7 or Rec. ITU-R BT.470-6 System B,G
MATRIX_SMPTE240, //SMPTE ST 240
MATRIX_BT2020, //Rec. ITU-R BT.2100-2 (non-constant luminance)
MATRIX_BT2020CONSTANT, //Rec. ITU-R BT.2100-2 (constant luminance)
MATRIX_MAX = 0xff,
};
struct ColorAspects {
enum RangeType range;
enum Primaries primaries;
enum Transfer transfer;
enum MatrixCoeffs matrixCoeffs;
};
/**
* @brief Structure for controlling color space
*/
struct CodecVideoColorspace {
unsigned int size; /** Size of the structure */
union CodecVersionType version; /** Component version */
unsigned int portIndex; /** Port index */
unsigned int requestingDataSpace;
unsigned int dataSpaceChanged;
unsigned int pixeFormat;
unsigned int dataSpace;
struct ColorAspects aspects;
};