Intel硬件编解码,MSDK一些参数的说明
一、编码部分
mfxVideoParam常用的参数
mfxVideoParam.mfx.CodecId : 编码为H.264格式时,设置为MFX_CODEC_AVC,其他参数类型包括MFX_CODEC_HEVC、MFX_CODEC_MPEG2、MFX_CODEC_VC1、MFX_CODEC_CAPTURE、MFX_CODEC_VP9
GOP设置:
mfxVideoParam.mfx.GopPicSize 当前GOP中画面的个数,若GopPicSize=0,则认为GOP尺寸未指定,若GopPicSize=1,则将只使用I帧
mfxVideoParam.mfx.GopRefDist I或P关键帧之间的距离;若为零,则认为GOP结构未指定,若GopRefDist=1,则将不使用B帧
mfxVideoParam.mfx.GopOptFlag
MFX_GOP_CLOSED
B-frames of the first B-interval can never reference the previous GOP(第一个B间隔的B帧永远无法引用先前的GOP)
MFX_GOP_STRICT
The encoder must strictly follow the given GOP structure as defined by parameter GopPicSize, GopRefDist etc in the mfxVideoParam structure. Otherwise, the encoder can adapt the GOP structure for better efficiency, whose range is constrained by parameter GopPicSize and GopRefDist etc(编码器必须严格遵循mfxVideoParam结构中由参数GopPicSize,GopRefDist等定义的给定GOP结构。 否则,编码器可以采用GOP结构以提高效率,其范围受参数GopPicSize和GopRefDist等限制)
mfxVideoParam.mfx.IdrInterval 对于H264,IdrInterval指定了IDR帧的间隔,单位为I帧;若IdrInterval=0,则每个I帧均为IDR帧。若IdrInterval=1,则每隔一个I帧为IDR帧,以此类推。对于MPEG2, IdrInterval定义了序列头间隔,单位为I帧,若IdrInterval=N,SDK将在每第N个I帧之前插入序列头;若IdrInterval=0(默认),SDK将在流开头一次性插入序列头。
m_mfxEncParams.mfx.CodecProfile 常用的三种:MFX_PROFILE_AVC_BASELINE、MFX_PROFILE_AVC_MAIN、MFX_PROFILE_AVC_HIGH,
所谓的AVC其实就是H.264标准, AVC的规格分为三等,从低到高分别为:Baseline、Main、High。
Baseline(最低Profile)级别支持I/P 帧,只支持无交错(Progressive)和CAVLC,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等;
Main(主要Profile)级别提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于CAVLC 和CABAC 的支持,用于主流消费类电子产品规格如低解码(相对而言)的mp4、便携的视频播放器、PSP和Ipod等;
High(高端Profile,也叫FRExt)级别在Main的基础上增加了8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式如4:4:4)用于广播及视频碟片存储(蓝光影片),高清电视的应用。
m_mfxEncParams.mfx.CodecLevel 指定解码器可能使用的最大图片分辨率,帧速率和比特率,例如1920*1080,30fps,就需要指定MFX_LEVEL_AVC_4。至于Baseline@L x.x、Main@L x.x、High@L x.x形式则是在不同级别下的码流级别,数值越大码流就越大,更耗费资源。所以就码流而言High@L3.0<High@L4.0<High@L5.1。级别分类的图表见文档最后附图表:CodecLevel级别分类图标
m_mfxEncParams.mfx.TargetUsage 一般情况会设定为MFX_TARGETUSAGE_BALANCED;TargetUsage枚举器逐项列出从最佳质量的MFX_TARGETUSAGE_1到最佳速度的MFX_TARGETUSAGE_7的数字范围。 它表明了质量和速度之间的权衡。 该应用程序可以使用范围内的任何数字,支持的目标用法的实际数量取决于实现,如果不支持指定的目标用法,则SDK编码器将使用最接近的支持值。
m_mfxEncParams.mfx.TargetKbps 目标码率,必须设置项
m_mfxEncParams.mfx.MaxKbps 最大比特率,一般VBR和AVBR设置此项。如果MaxKbps等于零,则根据比特率,帧速率,配置文件,级别等来计算该值
m_mfxEncParams.mfx.QPI, QPP, QPB 恒定QP(CQP)模式的I,P和B帧的量化参数(QP)。
m_mfxEncParams.mfx.NumSlice 每个视频帧中的切片数; 每个切片包含一个或多个小块行。 如果NumSlice等于零,则编码器可以选择编解码器标准允许的任何切片分区。
m_mfxEncParams.mfx.NumRefFrame 帧的引用计数; 如果NumRefFrame = 0,则不指定此参数。
m_mfxEncParams.mfx.NumThread 不用的参数,设置为0就行
m_mfxEncParams.mfx.RateControlMethod 比特率控制算法,常用的MFX_RATECONTROL_CBR(恒定比特率控制),MFX_RATECONTROL_VBR(可变比特率控制),MFX_RATECONTROL_AVBR(平均可变比特率控制),MFX_RATECONTROL_CQP(恒定的量化参数算法)
m_mfxEncParams.mfx.FrameInfo.FrameRateExtD/FrameRateExtN 通过以下公式指定帧速率:FrameRateExtN / FrameRateExtD,对于编码,必须指定帧速率
m_mfxEncParams.mfx.FrameInfo.FourCC 传入编码器的视频数据格式,如MFX_FOURCC_NV12
m_mfxEncParams.mfx.FrameInfo.ChromaFormat 颜色采样方法,如nv12对应的为MFX_CHROMAFORMAT_YUV420
m_mfxEncParams.mfx.FrameInfo.PicStruct 传入编码器的视频图片结构,逐行扫描还是隔行扫描,如MFX_PICSTRUCT_PROGRESSIVE(逐行扫描)
m_mfxEncParams.mfx.FrameInfo.CropX/CropY/CropW/CropH 显存中的坐标点,一般设置为CropX = 0,CropY = 0,CropW = video_width,CropH = video_width
m_mfxEncParams.mfx.FrameInfo.Height/Width 视频帧的宽度和高度,以像素为单位; 宽度必须是16的倍数。逐行扫描的图片格式高度必须是16的倍数,非逐行扫描的图片格式必须是32的倍数
m_mfxEncParams.mfx.FrameInfo.BufferSize 帧缓冲区的大小(以字节为单位),当图片格式为P8的时候需要设置,这时Height/Width/CropX/CropY/CropW/CropH将会不再起作用
m_mfxEncParams.mfx.FrameInfo.AspectRatioW/AspectRatioH 设定视频帧宽高比,如果两个参数均为零,则编码器将使用视频帧宽高比的默认值
参考:Intel开发手册
附图表:CodecLevel级别分类图标:
Level | Max decoding speed | Max frame size | Max video bit rate for video coding layer (VCL) kbit/s | Examples for high resolution @ highest frame rate (max stored frames) | |||
Luma samples/s | Macroblocks/s | Luma samples | Macroblocks | Baseline、Extended、 Main Profiles | High Profile | ||
1 | 380,160 | 1,485 | 25,344 | 99 | 64 | 80 | 128×96@30.9 176×144@15.0 |
1b | 380,160 | 1,485 | 25,344 | 99 | 128 | 160 | 128×96@30.9 176×144@15.0 |
1.1 | 768,000 | 3,000 | 101,376 | 396 | 192 | 240 | 176×144@30.3 320×240@10.0 352×288@7.5 |
1.2 | 1,536,000 | 6,000 | 101,376 | 396 | 384 | 480 | 320×240@20.0 352×288@15.2 |
1.3 | 3,041,280 | 11,880 | 101,376 | 396 | 768 | 960 | 320×240@36.0 352×288@30.0 |
2 | 3,041,280 | 11,880 | 101,376 | 396 | 2,000 | 2,500 | 320×240@36.0 352×288@30.0 |
2.1 | 5,068,800 | 19,800 | 202,752 | 792 | 4,000 | 5,000 | 352×480@30.0 352×576@25.0 |
2.2 | 5,184,000 | 20,250 | 404,720 | 1,620 | 4,000 | 5,000 | 352×480@30.7 352×576@25.6 720×480@15.0 720×576@12.5 |
3 | 10,368,000 | 40,500 | 404,720 | 1,620 | 10,000 | 12,500 | 352×480@61.4 |
352×576@51.1 | |||||||
720×480@30.0 | |||||||
720×576@25.0 | |||||||
3.1 | 27,648,000 | 108,000 | 921,600 | 3,600 | 14,000 | 17,500 | 720×480@80.0 |
720×576@66.7 | |||||||
1280×720@30.0 | |||||||
3.2 | 55,296,000 | 216,000 | 1,310,720 | 5,120 | 20,000 | 25,000 | 1,280×720@60.0 |
1,280×1,024@42.2 | |||||||
4 | 62,914,560 | 245,760 | 2,097,152 | 8,192 | 20,000 | 25,000 | 1,280×720@68.3 |
1,920×1,080@30.1 | |||||||
2,048×1,024@30.0 | |||||||
4.1 | 62,914,560 | 245,760 | 2,097,152 | 8,192 | 50,000 | 62,500 | 1,280×720@68.3 |
1,920×1,080@30.1 | |||||||
2,048×1,024@30.0 | |||||||
4.2 | 133,693,440 | 522,240 | 2,228,224 | 8,704 | 50,000 | 62,500 | 1,280×720@145.1 1,920×1,080@64.0 2,048×1,080@60.0 |
5 | 150,994,944 | 589,824 | 5,652,480 | 22,080 | 135,000 | 168,750 | 1,920×1,080@72.3 2,048×1,024@72.0 2,048×1,080@67.8 2,560×1,920@30.7 3,672×1,536@26.7 |
5.1 | 251,658,240 | 983,040 | 9,437,184 | 36,864 | 240,000 | 300,000 | 1,920×1,080@120.5 2,560×1,920@51.2 4,096×2,048@30.0 4,096×2,160@28.5 4,096×2,304@26.7 |
5.2 | 530,841,600 | 2,073,600 | 9,437,184 | 36,864 | 240,000 | 300,000 | 1,920×1,080@172.0 2,560×1,920@108.0 4,096×2,048@63.3 4,096×2,160@60.0 4,096×2,304@56.3 |