1.H264编码原理
H264编码结构如下图所示
由图可知编码器包括两条主要的数据流路径:左->右(编码)、右->左(重建)。
编码数据流如下:
1)以宏块(16×16亮度区域和相应的色度区域)为单位,对输入视频第n帧Fn进行编码;
2)运动估计函数从参考帧(如上一次重建帧F或子采样后的F)中寻找当前宏块的匹配(相似)区域,该区域和当前宏块的位置偏移即为运动矢量MV;
3)根据MV生成运动补偿的预测P(16×16区域);
4)用当前宏块减去P生成当前帧的残差宏块Dn;
5)将Dn分割为8×8或4×4的子块,分别进行DCT变换;
6)子块量化(X);
7)子块的DCT系数重排序(Reorder),再进行run-level游程编码(在一个非零的DCT系数前的连续为零的系数的数目被称为“游run”,而非零DCT系数的绝对值被称为“程level”);
8)编码后的系数、运动矢量和相关的宏块头信息经过熵编码(无损)后生成压缩比特率。
重建数据流如下:
1)每个量化后的宏块X经过重定比例(rescale)、IDCT(DCT逆变换)变换生成解码后的残差D'n。由于量化过程不可逆,所以D'n和原宏块Dn并不相同(有失真);
2)残差Dn与运动补偿预测P相加得到重建宏块,所有重建宏块一起得到重建帧Fn。
第n帧Fn编码结束后,其重建帧F'n可以用来作为参考帧,并用于第n+1帧Fn+1的编码。
2. H.264编码核心技术
2.1帧内预测
在帧内预测模式中,预测块P是基于已编码重建块和当前块形成的。对亮度像素而言,P块用于4×4子块或者16×16宏块的相关操作。4×4亮度子块有9种可选预测模式,独立预测每一个4×4亮度子块,适用于带有大量细节的图像编码;16×16亮度块有4种预测模式,预测整个16×16亮度块,适用于平坦区域图像编码;色度块也有4种预测模式,类似于16×16亮度块预测模式。编码器通常选择使P块和编码块之间差异最小的预测模式。
1)4x4亮度预测模式
2)16×16亮度预测模式
宏块的全部16×16亮度成分可以整体预测,有4种预测模式。帧内16×16模式适用于图像平坦区域预测。
3)8×8色度块预测模式
每个帧内编码宏块的8×8色度成分由已编码左上方色度像素预测而得,两种色度成分常用同一种预测模式。4种预测模式类似于帧内16×16预测的4种预测模式,只是模式编号不同。其中DC(模式0)、水平(模式1)、垂直(模式2)、平面(模式3)。
4)对应H264编码参数
对应H264编码参数IH264ENC_IntraCodingParamsintraCodingParams
字段 | 缺省值 | 描述及可取值 |
intraCodingPreset | IH264_INTRACODING_DEFAULT | IH264_INTRACODING_DEFAULT IH264_INTRACODING_USERDEFINED IH264_INTRACODING_EXISTING IH264_INTRACODING_HIGH_SPEED |
lumaIntra4x4Enable | 0xFF if (profile != IH264_HIGH_PROFILE) 0x0 if (profile == IH264_HIGH_PROFILE && inputContentType == IVIDEO_PROGRESSIVE) 0x1F if (profile == IH264_HIGH_PROFILE && inputContentType != IVIDEO_PROGRESSIVE) | 定义4x4亮度子块的九种预测模式是否可用【0x000,0x1ff】 |
lumaIntra8x8Enable | 0xFF if (profile != IH264_HIGH_PROFILE) 0x0 if (profile == IH264_HIGH_PROFILE && inputContentType == IVIDEO_PROGRESSIVE) 0x1F if (profile == IH264_HIGH_PROFILE && inputContentType != IVIDEO_PROGRESSIVE) | 定义8x8亮度子块的九种预测模式是否可用【0x000,0x1ff】 |
lumaIntra16x16Enable | 0xF | 定义16x16亮度子块的四种预测模式是否可用【0x0,0xf】 |
chromaIntra8x8Enable | 0xF | 定义8x8色度子块的四种预测模式是否可用【0x0,0xf】 |
chromaComponentEnable | IH264_CHROMA_COMPONENT_DEFAULT | 此参数控制的色度帧内预测搜索IH264_CHROMA_COMPONENT_CR_ONLY IH264_CHROMA_COMPONENT_CB_CR_BOTH |
intraRefreshMethod | IH264_INTRAREFRESH_DEFAULT | 帧内刷新机制 IH264_INTRAREFRESH_DEFAULT IH264_INTRAREFRESH_CYCLIC_MBS IH264_INTRAREFRESH_GDR |
intraRefreshRate | 0 | 帧内刷新率 >=0, effective only intraRefreshMethod != IH264_INTRAREFRESH_DEFAULT |
gdrOverlapRowsBtwFrames | 0 | <= intraRefreshRate |
constrainedIntraPredEnable | 0 | 控制帧内p片宏块编码Zero, non-zero |
intraCodingBias | IH264ENC_INTRACODINGBIAS_DEFAULT | 控制帧内宏块所占百分比 IH264ENC_INTRACODINGBIAS_DEFAULT IH264ENC_INTRACODINGBIAS_HIGH_SPEED |
2.2帧间预测
H.264帧间预测是利用已编码视频帧/场和基于块的运动补偿的预测模式。与以往标准帧间预测的区别在于块尺寸范围更广(从16×16到4×4)、亚像素运动矢量的使用(亮度采用1/4像素精度MV)及多参考帧的运用等等。主要包括可变块大小、多帧运动估计、亚像素精度的运动估计以及去块效应滤波。
1)去块效应滤波
它的作用就是用来消除解码图像中的块效应。块效应产生的原因是各个宏块分别进行量化,这样在相邻宏块的交界处,因量化步长不同而导致原本很接近的像素值重构后产生了较大的差异,形成明显的块边界。去块效应滤波是在4×4的块边界上滤波,使块边界趋于平滑。
H.264定义了自适应去除块效应的滤波器,这可以处理预测环路中的水平和垂直块边缘,大大减少了方块效应。
2)可变块大小
块大小对运动估计的效果是有影响的。将宏块分割成不同尺寸的运动补偿子块称作树状结构运动补偿。宏块的分割和子宏块的分割各包括四种类型,如图3所示。较小的块可以使运动估计更精确,产生较小的运动残差,降低码率。在H.264建议的不同大小的块选择中,可以看出,一个宏块最多可以携带16个不同的运动矢量。配合多帧运动估计,同一宏块中的不同块还可以使用不同的参考帧来进行预测。
图运动补偿的宏块分割
3)多帧运动估计
与以前视频压缩标准中使用的单帧运动估计技术相比,H.264使用的多帧运动估计具有更高的效率,更强的差错稳健性。所谓多帧运动估计是指使用一个或多个参考帧来估计运动矢量,可以防止因某个帧出现错误而影响到后面的帧。但是,这种估计需要更大的内存,更高的运算复杂度。
4)亚像素精度的运动估计
在H.264中,运动估计的精度由H.263中的半像素提高到 1/4像素,并且把1/8像素作为可选项。与半像素精度的运动估计一样,1/4像素精度的运动估计使用内插得到半像素和1/4像素位置的点。
5)对应H264编码参数
IH264ENC_InterCodingParams interCodingParams
字段 | 缺省值 | 描述及可取值 |
interCodingPreset |
IH264_INTERCODING_DEFAULT | 控制帧间编码参数为预设模式参数还是自定义模式参数 IH264_INTERCODING_DEFAULT IH264_INTERCODING_USERDEFINED IH264_INTERCODING_EXISTING IH264_INTERCODING_MED_SPEED_HIGH_QUALITY IH264_INTERCODING_HIGH_SPEED |
searchRangeHorP | 144 | P帧水平搜索范围【16,144】 |
searchRangeVerP | 32 | P帧垂直搜索范围【16,32】 |
searchRangeHorB | 144 | B帧水平搜索范围【16,144】 |
searchRangeVerB | 16 | B帧垂直搜索范围【16,32】 |
interCodingBias | IH264_BIASFACTOR_NORMAL | 控制某个宏块帧内预测编码还是帧间预测编码参数。Ignore |
skipMVCodingBias |
IH264_BIASFACTOR_NORMAL | IH264_BIASFACTOR_NORMAL IH264_BIASFACTOR_LOW IH264_BIASFACTOR_MILD IH264_BIASFACTOR_ADAPTIVE |
minBlockSizeP
|
IH264_BLOCKSIZE_16x16
| P帧内最小块大小 IH264_BLOCKSIZE_16x16 IH264_BLOCKSIZE_8x8 |
minBlockSizeB
|
IH264_BLOCKSIZE_16x16
| B帧内最小块大小 IH264_BLOCKSIZE_16x16 IH264_BLOCKSIZE_8x8 |
meAlgoMode |
IH264ENC_MOTIONESTMODE_NORMAL | 运动估计算法 IH264ENC_MOTIONESTMODE_ NORMAL IH264ENC_MOTIONESTMODE_HIGH_SPEED |
IH264ENC_LoopFilterParams loopFilterParams
字段 | 缺省值 | 描述及可取值 |
loopfilterPreset | IH264_LOOPFILTER_DEFAULT | IH264_LOOPFILTER_DEFAULT IH264_LOOPFILTER_USERDEFINED |
loopfilterDisableIDC | IH264_DISABLE_FILTER_NONE | 控制H.264环路滤波器禁用选项IH264_DISABLE_FILTER_NONE --均不禁用 IH264_DISABLE_FILTER_ALL_EDGES --禁用所有边缘过滤 IH264_DISABLE_FILTER_SLICE_EDGES—禁用slice边缘过滤 |
filterOffsetA | 0 | 环路滤波器的α偏移,【-12,12】间的偶数 |
filterOffsetB | 0 | 环路滤波器的β偏移【-12,12】间的偶数 |
2.3整数变换(4*4DCT变换)与量化
1)DCT变换
H.264仍然采用对残差信号进行变换在量化后进行熵编码的模式来压缩空间冗余信息。使用了类似于4x4离散余弦变换DCT的整数变换而不是象MPEG4那样采用8x8DCT的浮点数变换。最终使用那种变换方式还用根据残余数据类型的不同来选择,帧内编码宏块的亮度DC系数(仅对16x16预测模式有效)采用4x4的矩阵,色度DC系数采用2x2的矩阵,对于其他的都采用4X4的块来变换。
使用以整数为基础的空间变换可以提高计算速度(只使用加法和位移运算),但是使用整数变换要以不矢精确度为前提;整数变换的反变换过程中不会出现较大的误差,并且缩放矩阵的乘法集成到了量化中,降低了乘法的总次数。
2)量化
量化过程在不降低视觉效果的前提下减少图像编码长度,减少视觉恢复中不必要的信息。H.264采用标量量化技术,它将每个图像样点编码映射成较小的数值。一般标量量化器的原理为:
其中,y为输入样本点编码,QP为量化步长,FQ为y的量化值,round()为取整函数(其输出为与输入实数最近的整数)
在H.264中,量化步长Qstep共有52个值。
QP是量化参数,是量化步长的序号。当QP取最小值0时代表最精细的量化,当QP取最大值51时代表最粗糙的量化。QP每增加6,Qstep增加一倍。
对于色度编码,一般使用与亮度编码同样的量化步长。为了避免在较高量化步长时的出现颜色量化人工效应,现在的H.264草案把色度的QP最大值大约限制在亮度QP最大值的80%范围内,最后的H.264草案规定,亮度QP的最大值是51,而色度QP的最大值是39。
3)对应编码参数
H264ENC_RateControlParams rateControlParams
字段 | 缺省值 | 描述及可取值 |
rateControlParamsPreset | IH264_RATECONTROLPARAMS_DEFAULT | IH264_RATECONTROLPARAMS_DEFAULT IH264_RATECONTROLPARAMS_USERDEFINED IH264RATECONTROLPARAMSEXISTING |
scalingMatrixPreset | IH264_SCALINGMATRIX_NORMAL(if profile == HIGH)
IH264_SCALINGMATRIX_NONE(if profile != HIGH) | 控制缩放矩阵 IH264_SCALINGMATRIX_NONE IH264_SCALINGMATRIX_NORMAL IH264_SCALINGMATRIX_NOISY IH264_SCALINGMATRIX_STD_DEFAULT IH264_SCALINGMATRIX_USERDEFINED_SPSLEVEL IH264_SCALINGMATRIX_USERDEFINED_PPSLEVEL |
rcAlgo |
IH264_RATECONTROL_DEFAULT | Rate 控制算法 IH264_RATECONTROL_DEFAULT IH264_RATECONTROL_PRC IH264_RATECONTROL_PRC_LOW_DELAY |
qpI | 28 | I帧量化参数 【-1,51】 |
qpMaxI | 36 | I帧量化参数最大值 【0,51】 |
qpMinI | 10 | I帧量化参数最小值 【0,51】 |
qpP | 28 | p帧量化参数 【-1,51】 |
qpMaxP | 40 | P帧量化参数最大值 【0,51】 |
qpMinP | 10 | P帧量化参数最小值 【0,51】 |
qpOffsetB | 4 | (qpP+ qpOffsetB)范围【0,51】 |
qpMaxB | 44 | B帧量化参数最大值 【0,51】 |
qpMinB | 10 | B帧量化参数最小值 【0,51】 |
allowFrameSkip | 0 | Not supported – don’t care |
removeExpensiveCoeff | 0 | 是否去除高频高花费系数 0,non-zero |
chromaQPIndexOffset | 0 | Specifies offset to be added to luma Qp for addressing QpC values table for chroma components.【-12,12】 |
IPQualityFactor | IH264_QUALITY_FACTOR_DEFAUL | I帧与P帧质量相关系数 Ignore |
initialBufferLevel |
Equal to HRDBufferSize | 预设参考解码缓冲区级别 Any value between –(2^31 -10^8) to (2^31 -10^8) |
HRDBufferSize | 2*targetBitRate for VBR Rate Control 1/2*targetBitRate for CBR RateControl | 预设参考解码缓冲区大小 |
minPicSizeRatioI | 0 | [0,4] & [5,31] |
maxPicSizeRatioI | 640 | [0,960] except 31 and 32 |
minPicSizeRatioP | 0 | [0,4] & [5,31] |
maxPicSizeRatioP | 0 | [0,960] except 31 and 32 |
minPicSizeRatioB | 0 | [0,4] & [5,31] |
maxPicSizeRatioB | 0 | [0,960] except 31 and 32 |
enablePRC | 1 | Control flag to enable MB level perceptual rate control [0, non-zero] |
enablePartialFrameSkip | 0 | Control flag to enable partial frame skip. Only useful with CBR rate control mode [0, non-zero] |
discardSavedBits | 0 | Control Flag to discard saved bits for future pictures. [0, non-zero] |
reserved | 0 | |
VBRDuration | 8 | [0,3600] |
VBRsensitivity | 0 | [0,8] |
skipDistributionWindowLength | 5 | [0,10] |
numSkipInDistributionWindow | 5 | [0,10] |
enableHRDComplianceMode | 5 | [0, non-zero] |
frameSkipThMulQ5 | 0 | 0 & [16,128] |
vbvUseLevelThQ5 | 0 | 0 & [16,128] |
transformBlockSize
2.4熵编码
H.264中熵编码方式有如下两种
1)CAVLC(基于上下文自适应的可变长编码)
CAVLC用于亮度和色度残差数据的编码。残差经过变换量化后的数据表现出如下特性:4*4块数据经过预测、变换、量化后,非零系数主要集中在低频部分,而高频系数大部分是零;量化后的数据经过zig-zag扫描,DC系数附近的非零系数值较大,而高频位置上的非零系数值大部分是+1和-1;相邻的4*4块的非零系数的数目是相关的。CAVLC充分利用残差经过整数变换、量化后数据的特性进行压缩,进一步减少数据中的冗余信息,为H.264卓越的编码效率奠定了基础。
2)CABAC(基于上下文的自适应二进制算术熵编码)
采用基于上下文的自适应二进制算术编码算法(CABAC),能够充分利用上下文信息和算术编码的优点,使得编码后的平均码长更逼近图像的信息熵,达到最佳的编码效率。采用CABAC算法进行编码,可以提高大约10%的编码率
具体编码步骤:
a.二值化:CABAC使用二进制算术编码,所以要将数据先转换为二进制数据,这些原始数据包括变换系数和运动矢量等。转换后二进制数据为可变长编码的数据,并且还要将这些数据进行算术编码。
b.内容模式选择:内容模式是针对二进制数据进行统计的概率模型,这个模式根据之前编码的一些数据符号的统计特性从一些可选模式中选出。内容模式存储了每一位“1”或“0”的概率。
c.算术编码:算术编码器根据选择的内容模式对每一位进行编码。
d.概率校正:被选择的内容模式根据实际被编码的值进行校正,例如,如果数据比特流中有数值“1”,就将“1”的概率统计值加1
对应编码参数为entropyCodingMode
3 H264 编码参数
3.1 IH264ENC_Params
字段 | 缺省值 | 描述及可取值 |
videnc2Params | 定义编码器基本参数,宽,高,I帧到p帧间隔,比特率,profile,输入输出数据模型 等参数 | |
rateControlParams | Controls all rate control related parameters. | |
interCodingParams | Controls all inter coding related parameters. 帧间预测编码参数 | |
intraCodingParams | Controls all intra coding related parameters. 帧内预测编码参数 | |
nalUnitControlParams | Controls the insertion of different NALUs at different access points in video sequence. | |
sliceCodingParams | Controls all slice coding related parameters. | |
loopFilterParams | Controls the in-loop filtering process. | |
fmoCodingParams | Controls the FMO behavior. 宏块次序 | |
vuiCodingParams | Controls the VUI parameters coding. | |
stereoInfoParams | Controls the stereo video coding. | |
framePackingSEIParams | Controls the frame packing SEI parameters for Stereo Video. | |
svcCodingParams | Controls the SVC coding parameters. | |
interlaceCodingType |
IH264_INTERLACE_FIELDONLY_ARF | Controls the type of interlaced coding. IH264_INTERLACE_FIELDONLY IH264_INTERLACE_FIELDONLY_MRF IH264_INTERLACE_FIELDONLY_ARF IH264_INTERLACE_DEFAULT IH264_INTERLACE_FIELDONLY_SPF |
bottomFieldIntra | 0 | Controls the type of coding for second field for interlaced content,0, non-zero |
gopStructure |
IH264ENC_GOPSTRUCTURE_NONUNIFORM
| 定义了GOP结构类型,均匀和非均匀 IH264ENC_GOPSTRUCTURE_NONUNIFORM IH264ENC_GOPSTRUCTURE_DEFAULT IH264ENC_GOPSTRUCTURE_UNIFORM |
entropyCodingMode
| IH264_ENTROPYCODING_CAVLC(if Profile == BASELINE)
IH264_ENTROPYCODING_CABAC(if Profile != BASELINE)
| 熵编码类型 |
transformBlockSize
| IH264_TRANSFORM_ADAPTIVE(if Profile == HIGH) IH264_TRANSFORM_4x4(if Profile != HIGH) | 变换块大小 IH264_TRANSFORM_4x4 IH264_TRANSFORM_8x8 IH264_TRANSFORM_ADAPTIVE |
log2MaxFNumMinus4 | 10
| 限制码流中最大帧数目 【0,12】 |
picOrderCountType |
IH264_POC_TYPE_0 | 图像顺序计数类型 IH264_POC_TYPE_0 IH264_POC_TYPE_1 IH264_POC_TYPE_2 |
enableWatermark | 0 | 启用或禁用水印 [0, non-zero] |
IDRFrameInterval | 0 | 连续Idr帧间最大间隔 Any value |
pConstantMemory | NULL | |
maxIntraFrameInterval | 1 | 连续帧间最大间隔 Any value >= 0 |
debugTraceLevel | 0 | Zero, non-zero (all non-zero values are considered as same level) |
lastNFramesToLog | 0 | Any Value |
enableAnalyticinfo | 0 | Zero, non-zero |
enableGMVSei | 0 | Zero, non-zero |
constraintSetFlags | 0 | Zero, non-zero |
enableRCDO | 0 | 这个参数是用来使编码码流符合降低解码操作复杂度级别 Zero, non-zero |
enableLongTermRefFrame |
IH264ENC_LTRP_NONE | 此参数用于支持长期参考帧 IH264ENC_LTRP_NONE IH264ENC_LTRP_REFERTO_PERIODICLTRP IH264ENC_LTRP_REFERTOP_PROACTIVE IH264ENC_LTRP_REFERTOP_REACTIVE |
LTRPPeriod | 0 | 此参数用于指定长期参考帧标记间隔 Zero, nonZero |
numTemporalLayer |
IH264_TEMPORAL_LAYERS_1 | 控制码流中的temporal Levels [IH264_TEMPORAL_LAYERS_1 , IH264_TEMPORAL_LAYERS_4] |
referencePicMarking |
IH264_LONG_TERM_PICTURE
| This parameter used to control the reference picture marking 0 – 0 - Short-term Picture (Sliding Window) 1 - Long-term Picture ( MMCO Commands) |
reservedParams[3] | 0,0,0,0 | 保留字段 |
IVIDENC2_Params
字段 | 缺省值 | 描述及可取值 |
size |
sizeof(IH264ENC_Params) | sizeof(IVIDENC2_Params) sizeof(IH264ENC_Params) |
ENCODINGPRESET |
XDM_DEFAULT
| 预置控制编码器质量参数 XDM_DEFAULT XDM_HIGH_SPEED XDM_USER_DEFINED XDM_HIGH_SPEED_MED_QUALITY 1 XDM_MED_SPEED_HIGH_QUALITY |
rateControlPreset | IVIDEO_STORAGE | IVIDEO_STORAGE IVIDEO_NONE IVIDEO_USER_DEFINED IVIDEO_RATECONTROLPRESET_DEFAULT IVIDEO_LOW_DELAY |
maxHeight | 1088 | [80, 4096] if contentType is IVIDEO_PROGRESSIVE [80, 2048]: if contentType is IVIDEO_INTERLACED |
maxWidth | 1920 | [96, 4352] |
dataEndianness | XDM_BYTE | 输出数据格式XDM_BYTE |
maxInterFrameInterval | 1 | I帧与p帧的间距 [1,31] if contentType is IVIDEO_PROGRESSIVE 【1,16】: if contentType is IVIDEO_INTERLACED |
maxBitRate | -1 | Any Value, |
minBitRate | 0 | Any Value, |
inputChromaFormat | XDM_YUV_420SP | XDM_YUV_420SP |
inputContentType |
IVIDEO_PROGRESSIVE | IVIDEO_PROGRESSIVE IVIDEO_PROGRESSIVE_FRAME IVIDEO_INTERLACED IVIDEO_INTERLACED_FRAME |
operatingMode | IVIDEO_ENCODE_ONLY | IVIDEO_ENCODE_ONLY |
Profile |
IH264_HIGH_PROFILE | IH264_BASELINE_PROFILE IH264_MAIN_PROFILE IH264_HIGH_PROFILE IVIDENC2_DEFAULTPROFILE |
Level | IH264_LEVEL_40 | Any value, only lower 16 bits are considered by encoder |
inputDataMode | IVIDEO_ENTIREFRAME | IVIDEO_ENTIREFRAME IVIDEO_NUMROWS |
outputDataMode | IVIDEO_ENTIREFRAME | IVIDEO_ENTIREFRAME IVIDEO_FIXEDLENGTH IVIDEO_SLICEMODE |
numInputDataUnits | 1 | Number of input slices/rows. Ignored and assumed to be 1 |
numOutputDataUnits | 1 | [1,64] |
metadataType [IVIDEO_MAX_NUM_ METADATA_PLANES] |
IVIDEO_METADATAPLANE_NONE | Type of the each meta data plane, IVIDEO_METADATAPLANE_NONE IH264_USER_DEFINED_SCALINGMATRIX IH264_SEI_USER_DATA_UNREGISTERED |
3.2 IH264ENC_DynamicParams
字段 | 缺省值 | 描述及可取值 |
videnc2DynamicParams | IVIDENC2_DynamicParams | |
rateControlParams | Controls all rate control related parameters. | |
interCodingParams | Controls all inter coding related parameters. 帧间预测编码参数 | |
intraCodingParams | Controls all intra coding related parameters. 帧内预测编码参数 | |
sliceCodingParams | Controls all slice coding related parameters. | |
sliceGroupChangeCycle | 0 | Ignore |
searchCenter | {0x7FFF,0x7FFF}
| 运动估计搜索中心 (-64,64), 0x7FFF --> ignore user provided gMV and use internal |
enableStaticMBCount |
0
| Flag to indicate enable/disable of H.241 defined Static MB count 0 – Disable Non-Zero - Enable |
enableROI | 0 | Flag to Enable/Disable ROI coding. Non-Zero – enable ROI coding. 0 – disable ROI coding.
|
reservedDynParams[3] | 0 | 预留字段 |
IVIDENC2_DynamicParams videnc2DynamicParams
字段 | 缺省值 | 描述及可取值 |
size | sizeof(IH264ENC_DynamicParams) | sizeof(IVIDENC2_DynamicParams) sizeof(IH264ENC_DynamicParams) |
inputHeight | 1088
| 输入帧高(像素) [80, 4096] if contentType is IVIDEO_PROGRESSIVE [80, 2048]: if contentType is IVIDEO_INTERLACED |
inputWidth | 1920 | 输入帧宽(像素)[96, 4352] |
refFrameRate | 30000 | Reference or input frame rate in fps * 1000. Ignore
|
targetFrameRate | 30000 | Target frame rate in fps * 1000. Valid Values as per Level Limit |
targetBitRate | 12000000 | 目标码率 Valid Values (> 16*1024) as per Level Limit |
intraFrameInterval | 30 | 连续I帧间的距离 Any value >=0 |
generateHeader | XDM_ENCODE_AU | Encode entire access unit or only header. XDM_ENCODE_AU XDM_ENCODE_HEADER |
captureWidth | 1920 | >= inputWidth |
forceFrame | IVIDEO_NA_FRAME | Force the current (immediate) frame to be encoded as a specific frame type. IVIDEO_NA_FRAME IVIDEO_IDR_FRAME |
interFrameInterval | 1 | Number of B frames between two reference frames; [1,31] if contentType is IVIDEO_PROGRESSIVE 【1,16】: if contentType is IVIDEO_INTERLACED |
mvAccuracy
| IVIDENC2_MOTIONVECTOR_QUARTERPEL
| 运动矢量的像素精度 IVIDENC2_MOTIONVECTOR_QUARTERPEL IVIDENC2_MOTIONVECTOR_PIXEL |
sampleAspectRatioHeight | 1 | Any value, only lower 16 bits are considered by encoder |
sampleAspectRatioWidth | 1 | Any value, only lower 16 bits are considered by encoder |
ignoreOutbufSizeFlag | XDAS_TRUE | [0,non-zero] |
*putDataFxn | NULL | Function pointer to produce data at sub-frame level Valid function pointer, NULL |
putDataHandle | 0 | Any Value |
*getDataFxn | NULL | Function pointer to receive data at sub-frame level Valid function pointer, NULL |
getDataHandle | 0 | Any Value |
getBufferFxn | 0 | Function pointer to receive buffer at sub-frame level Valid function pointer, NULL |
getBufferHandle | NULL | Valid function pointer, NULL |
lateAcquireArg | IRES_HDVICP2_UNKNOWNLATEACQUIREARG (-1) | Any Value |