|
| 1 | +// |
| 2 | +// Copyright (c) 2016 Advanced Micro Devices, Inc. All rights reserved. |
| 3 | +// |
| 4 | +// Permission is hereby granted, free of charge, to any person obtaining a copy |
| 5 | +// of this software and associated documentation files (the "Software"), to deal |
| 6 | +// in the Software without restriction, including without limitation the rights |
| 7 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| 8 | +// copies of the Software, and to permit persons to whom the Software is |
| 9 | +// furnished to do so, subject to the following conditions: |
| 10 | +// |
| 11 | +// The above copyright notice and this permission notice shall be included in |
| 12 | +// all copies or substantial portions of the Software. |
| 13 | +// |
| 14 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 15 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 16 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| 17 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 18 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| 19 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| 20 | +// THE SOFTWARE. |
| 21 | +// |
| 22 | + |
| 23 | +#ifndef __AMFVideoEncoderHW_HEVC_h__ |
| 24 | +#define __AMFVideoEncoderHW_HEVC_h__ |
| 25 | +#pragma once |
| 26 | + |
| 27 | +#include "public/include/components/Component.h" |
| 28 | + |
| 29 | +#define AMFVideoEncoder_HEVC L"AMFVideoEncoderHW_HEVC" |
| 30 | + |
| 31 | +enum AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM |
| 32 | +{ |
| 33 | + AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCONDING = 0, |
| 34 | + AMF_VIDEO_ENCODER_HEVC_USAGE_ULTRA_LOW_LATENCY, |
| 35 | + AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY, |
| 36 | + AMF_VIDEO_ENCODER_HEVC_USAGE_WEBCAM |
| 37 | +}; |
| 38 | + |
| 39 | +enum AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM |
| 40 | +{ |
| 41 | + AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN = 1 |
| 42 | +}; |
| 43 | + |
| 44 | +enum AMF_VIDEO_ENCODER_HEVC_TIER_ENUM |
| 45 | +{ |
| 46 | + AMF_VIDEO_ENCODER_HEVC_TIER_MAIN = 0, |
| 47 | + AMF_VIDEO_ENCODER_HEVC_TIER_HIGH = 1 |
| 48 | +}; |
| 49 | + |
| 50 | +enum AMF_VIDEO_ENCODER_LEVEL_ENUM |
| 51 | +{ |
| 52 | + AMF_LEVEL_1 = 30, |
| 53 | + AMF_LEVEL_2 = 60, |
| 54 | + AMF_LEVEL_2_1 = 63, |
| 55 | + AMF_LEVEL_3 = 90, |
| 56 | + AMF_LEVEL_3_1 = 93, |
| 57 | + AMF_LEVEL_4 = 120, |
| 58 | + AMF_LEVEL_4_1 = 123, |
| 59 | + AMF_LEVEL_5 = 150, |
| 60 | + AMF_LEVEL_5_1 = 153, |
| 61 | + AMF_LEVEL_5_2 = 156, |
| 62 | + AMF_LEVEL_6 = 180, |
| 63 | + AMF_LEVEL_6_1 = 183, |
| 64 | + AMF_LEVEL_6_2 = 186 |
| 65 | +}; |
| 66 | + |
| 67 | +enum AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_ENUM |
| 68 | +{ |
| 69 | + AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CONSTANT_QP = 0, |
| 70 | + AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_LATENCY_CONSTRAINED_VBR, |
| 71 | + AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR, |
| 72 | + AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CBR |
| 73 | +}; |
| 74 | + |
| 75 | +enum AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_ENUM |
| 76 | +{ |
| 77 | + AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_NONE = 0, |
| 78 | + AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_SKIP, |
| 79 | + AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_IDR, |
| 80 | + AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_I, |
| 81 | + AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_P |
| 82 | +}; |
| 83 | + |
| 84 | +enum AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_ENUM |
| 85 | +{ |
| 86 | + AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_I, |
| 87 | + AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_P |
| 88 | +}; |
| 89 | + |
| 90 | +enum AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM |
| 91 | +{ |
| 92 | + AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_QUALITY = 0, |
| 93 | + AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_BALANCED = 5, |
| 94 | + AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED = 10 |
| 95 | +}; |
| 96 | + |
| 97 | +enum AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_ENUM |
| 98 | +{ |
| 99 | + AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_NONE = 0, |
| 100 | + AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_GOP_ALIGNED, |
| 101 | + AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_IDR_ALIGNED |
| 102 | +}; |
| 103 | + |
| 104 | +enum AMF_VIDEO_ENCODER_HEVC_VBAQ_MODE_ENUM |
| 105 | +{ |
| 106 | + AMF_VIDEO_ENCODER_HEVC_VBAQ_MODE_NONE = 0, |
| 107 | + AMF_VIDEO_ENCODER_HEVC_VBAQ_MODE_AUTO |
| 108 | +}; |
| 109 | + |
| 110 | + |
| 111 | + |
| 112 | +// Static properties - can be set before Init() |
| 113 | +#define AMF_VIDEO_ENCODER_HEVC_FRAMESIZE L"HevcFrameSize" // AMFSize; default = 0,0; Frame size |
| 114 | + |
| 115 | +#define AMF_VIDEO_ENCODER_HEVC_USAGE L"HevcUsage" // amf_int64(AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM); default = N/A; Encoder usage type. fully configures parameter set. |
| 116 | +#define AMF_VIDEO_ENCODER_HEVC_PROFILE L"HevcProfile" // amf_int64(AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM) ; default = AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN; |
| 117 | +#define AMF_VIDEO_ENCODER_HEVC_TIER L"HevcTier" // amf_int64(AMF_VIDEO_ENCODER_HEVC_TIER_ENUM) ; default = AMF_VIDEO_ENCODER_HEVC_TIER_MAIN; |
| 118 | +#define AMF_VIDEO_ENCODER_HEVC_PROFILE_LEVEL L"HevcProfileLevel" // amf_int64 (AMF_VIDEO_ENCODER_LEVEL_ENUM, default depends on HW capabilities); |
| 119 | +#define AMF_VIDEO_ENCODER_HEVC_MAX_LTR_FRAMES L"HevcMaxOfLTRFrames" // amf_int64; default = 0; Max number of LTR frames |
| 120 | +#define AMF_VIDEO_ENCODER_HEVC_MAX_NUM_REFRAMES L"HevcMaxNumRefFrames" // amf_int64; default = 1; Maximum number of reference frames |
| 121 | +#define AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET L"HevcQualityPreset" // amf_int64(AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM); default = depends on USAGE; Quality Preset |
| 122 | +#define AMF_VIDEO_ENCODER_HEVC_EXTRADATA L"HevcExtraData" // AMFInterface* - > AMFBuffer*; SPS/PPS buffer - read-only |
| 123 | +#define AMF_VIDEO_ENCODER_HEVC_ASPECT_RATIO L"HevcAspectRatio" // AMFRatio; default = 1, 1 |
| 124 | + |
| 125 | +// Picture control properties |
| 126 | +#define AMF_VIDEO_ENCODER_HEVC_NUM_GOPS_PER_IDR L"HevcGOPSPerIDR" // amf_int64; default = 60; The frequency to insert IDR as start of a GOP. 0 means no IDR will be inserted. |
| 127 | +#define AMF_VIDEO_ENCODER_HEVC_GOP_SIZE L"HevcGOPSize" // amf_int64; default = 60; GOP Size, in frames |
| 128 | +#define AMF_VIDEO_ENCODER_HEVC_DE_BLOCKING_FILTER_DISABLE L"HevcDeBlockingFilter" // bool; default = depends on USAGE; De-blocking Filter |
| 129 | +#define AMF_VIDEO_ENCODER_HEVC_SLICES_PER_FRAME L"HevcSlicesPerFrame" // amf_int64; default = 1; Number of slices Per Frame |
| 130 | +#define AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE L"HevcHeaderInsertionMode" // amf_int64(AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_ENUM); default = NONE |
| 131 | + |
| 132 | +// Rate control properties |
| 133 | +#define AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD L"HevcRateControlMethod" // amf_int64(AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_MODE_ENUM); default = depends on USAGE; Rate Control Method |
| 134 | +#define AMF_VIDEO_ENCODER_HEVC_FRAMERATE L"HevcFrameRate" // AMFRate; default = depends on usage; Frame Rate |
| 135 | +#define AMF_VIDEO_ENCODER_HEVC_VBV_BUFFER_SIZE L"HevcVBVBufferSize" // amf_int64; default = depends on USAGE; VBV Buffer Size in bits |
| 136 | +#define AMF_VIDEO_ENCODER_HEVC_INITIAL_VBV_BUFFER_FULLNESS L"HevcInitialVBVBufferFullness" // amf_int64; default = 64; Initial VBV Buffer Fullness 0=0% 64=100% |
| 137 | +#define AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_PREANALYSIS_ENABLE L"HevcRateControlPreAnalysisEnable" // bool; default = depends on USAGE; enable Pre-analysis assisted rate control |
| 138 | +#define AMF_VIDEO_ENCODER_HEVC_ENABLE_VBAQ L"HevcEnableVBAQ" // amf_int64(AMF_VIDEO_ENCODER_HEVC_VBAQ_MODE_ENUM) default = AMF_VIDEO_ENCODER_HEVC_VBAQ_MODE_NONE; Enable VBAQ |
| 139 | + |
| 140 | + |
| 141 | +// Dynamic properties - can be set at any time |
| 142 | + |
| 143 | +// Rate control properties |
| 144 | +#define AMF_VIDEO_ENCODER_HEVC_ENFORCE_HRD L"HevcEnforceHRD" // bool; default = depends on USAGE; Enforce HRD |
| 145 | +#define AMF_VIDEO_ENCODER_HEVC_FILLER_DATA_ENABLE L"HevcFillerDataEnable" // bool; default = depends on USAGE; Enforce HRD |
| 146 | +#define AMF_VIDEO_ENCODER_HEVC_TARGET_BITRATE L"HevcTargetBitrate" // amf_int64; default = depends on USAGE; Target bit rate in bits |
| 147 | +#define AMF_VIDEO_ENCODER_HEVC_PEAK_BITRATE L"HevcPeakBitrate" // amf_int64; default = depends on USAGE; Peak bit rate in bits |
| 148 | + |
| 149 | +#define AMF_VIDEO_ENCODER_HEVC_MAX_AU_SIZE L"HevcMaxAUSize" // amf_int64; default = 60; Max AU Size in bits |
| 150 | + |
| 151 | +#define AMF_VIDEO_ENCODER_HEVC_MIN_QP_I L"HevcMinQP_I" // amf_int64; default = depends on USAGE; Min QP; range = |
| 152 | +#define AMF_VIDEO_ENCODER_HEVC_MAX_QP_I L"HevcMaxQP_I" // amf_int64; default = depends on USAGE; Max QP; range = |
| 153 | +#define AMF_VIDEO_ENCODER_HEVC_MIN_QP_P L"HevcMinQP_P" // amf_int64; default = depends on USAGE; Min QP; range = |
| 154 | +#define AMF_VIDEO_ENCODER_HEVC_MAX_QP_P L"HevcMaxQP_P" // amf_int64; default = depends on USAGE; Max QP; range = |
| 155 | + |
| 156 | +#define AMF_VIDEO_ENCODER_HEVC_QP_I L"HevcQP_I" // amf_int64; default = 26; P-frame QP; range = 0-51 |
| 157 | +#define AMF_VIDEO_ENCODER_HEVC_QP_P L"HevcQP_P" // amf_int64; default = 26; P-frame QP; range = 0-51 |
| 158 | + |
| 159 | +#define AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_SKIP_FRAME_ENABLE L"HevcRateControlSkipFrameEnable" // bool; default = depends on USAGE; Rate Control Based Frame Skip |
| 160 | + |
| 161 | + |
| 162 | +// Motion estimation |
| 163 | +#define AMF_VIDEO_ENCODER_HEVC_MOTION_HALF_PIXEL L"HevcHalfPixel" // bool; default= true; Half Pixel |
| 164 | +#define AMF_VIDEO_ENCODER_HEVC_MOTION_QUARTERPIXEL L"HevcQuarterPixel" // bool; default= true; Quarter Pixel |
| 165 | + |
| 166 | +// Per-submittion properties - can be set on input surface interface |
| 167 | +#define AMF_VIDEO_ENCODER_HEVC_END_OF_SEQUENCE L"HevcEndOfSequence" // bool; default = false; generate end of sequence |
| 168 | +#define AMF_VIDEO_ENCODER_HEVC_FORCE_PICTURE_TYPE L"HevcForcePictureType" // amf_int64(AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_ENUM); default = AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_NONE; generate particular picture type |
| 169 | +#define AMF_VIDEO_ENCODER_HEVC_INSERT_AUD L"HevcInsertAUD" // bool; default = false; insert AUD |
| 170 | +#define AMF_VIDEO_ENCODER_HEVC_INSERT_HEADER L"HevcInsertHeader" // bool; default = false; insert header(SPS, PPS, VPS) |
| 171 | + |
| 172 | +#define AMF_VIDEO_ENCODER_HEVC_MARK_CURRENT_WITH_LTR_INDEX L"HevcMarkCurrentWithLTRIndex" // amf_int64; default = N/A; Mark current frame with LTR index |
| 173 | +#define AMF_VIDEO_ENCODER_HEVC_FORCE_LTR_REFERENCE_BITFIELD L"HevcForceLTRReferenceBitfield"// amf_int64; default = 0; force LTR bit-field |
| 174 | + |
| 175 | +// Properties set by encoder on output buffer interface |
| 176 | +#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE L"HevcOutputDataType" // amf_int64(AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_ENUM); default = N/A |
| 177 | +#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_MARKED_LTR_INDEX L"HevcMarkedLTRIndex" // amf_int64; default = -1; Marked LTR index |
| 178 | +#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_REFERENCED_LTR_INDEX_BITFIELD L"HevcReferencedLTRIndexBitfield"// amf_int64; default = 0; referenced LTR bit-field |
| 179 | + |
| 180 | +// HEVC Encoder capabilities - exposed in AMFCaps interface |
| 181 | +#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_BITRATE L"HevcMaxBitrate" // amf_int64; Maximum bit rate in bits |
| 182 | +#define AMF_VIDEO_ENCODER_HEVC_CAP_NUM_OF_STREAMS L"HevcNumOfStreams" // amf_int64; maximum number of encode streams supported |
| 183 | +#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_PROFILE L"HevcMaxProfile" // amf_int64(AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM) |
| 184 | +#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_TIER L"HevcMaxTier" // amf_int64(AMF_VIDEO_ENCODER_HEVC_TIER_ENUM) maximum profile tier |
| 185 | +#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_LEVEL L"HevcMaxLevel" // amf_int64 maximum profile level |
| 186 | +#define AMF_VIDEO_ENCODER_HEVC_CAP_MIN_REFERENCE_FRAMES L"HevcMinReferenceFrames" // amf_int64 minimum number of reference frames |
| 187 | +#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_REFERENCE_FRAMES L"HevcMaxReferenceFrames" // amf_int64 maximum number of reference frames |
| 188 | + |
| 189 | + |
| 190 | +#endif //#ifndef __AMFVideoEncoderHW_HEVC_h__ |
0 commit comments