Intel Quick Sync Video Encoder 2

这边博客主要记录在预研quick sync中涉及到的一些性能质量相关的关键参数设置。

1. VPP处理过程伪代码:

MFXVideoVPP_QueryIOSurf(session, &init_param, response);
allocate_pool_of_surfaces(in_pool, response[0].NumFrameSuggested);
allocate_pool_of_surfaces(out_pool, response[1].NumFrameSuggested);
MFXVideoVPP_Init(session, &init_param);
in=find_unlocked_surface_and_fill_content(in_pool);
out=find_unlocked_surface_from_the_pool(out_pool);
for (;;) {
  sts=MFXVideoVPP_RunFrameVPPAsync(session,in,out,aux,&syncp);
  if (sts==MFX_ERR_MORE_SURFACE || sts==MFX_ERR_NONE) {
    MFXVideoCore_SyncOperation(session,syncp,INFINITE);
    process_output_frame(out);
    out=find_unlocked_surface_from_the_pool(out_pool);
  } 

  if (sts==MFX_ERR_MORE_DATA && in==NULL) break;
  if (sts==MFX_ERR_NONE || sts==MFX_ERR_MORE_DATA) {
    in=find_unlocked_surface(in_pool);
    fill_content_for_video_processing(in);
    if (end_of_input_sequence()) in=NULL;
  }
} 

MFXVideoVPP_Close(session);
free_pool_of_surfaces(in_pool);
free_pool_of_surfaces(out_pool);

2.Encoder处理过程伪代码:

MFXVideoENCODE_QueryIOSurf(session, &init_param, &request);
allocate_pool_of_frame_surfaces(request.NumFrameSuggested);
MFXVideoENCODE_Init(session, &init_param);
sts=MFX_ERR_MORE_DATA;
for (;;) {
  if (sts==MFX_ERR_MORE_DATA && !end_of_stream()) {
    find_unlocked_surface_from_the_pool(&surface);
    fill_content_for_encoding(surface);
  }

  surface2=end_of_stream()?NULL:surface;
  sts=MFXVideoENCODE_EncodeFrameAsync(session,NULL,surface2,bits,&syncp);
  if (end_of_stream() && sts==MFX_ERR_MORE_DATA) break;
  … // other error handling
  if (sts==MFX_ERR_NONE) {
    MFXVideoCORE_SyncOperation(session, syncp, INFINITE);
    do_something_with_encoded_bits(bits);
  }
}
MFXVideoENCODE_Close();
free_pool_of_frame_surfaces();

3. Lowlatency 低延时参数设置:

//Encoder参数设置:
m_mfxEncParams.mfx.GopRefDist = 1;  m_mfxEncParams.AsyncDepth = 1;
m_mfxEncParams.mfx.NumRefFrame = 1;

//Vpp参数设置:
m_mfxVppParams.AsyncDepth = 1;

4. Quality 编码质量相关参数:

m_mfxEncParams.mfx.TargetKbps    //  码率越高,质量越好, 流量越大
m_mfxEncParams.mfx.TargetUsage   //  1~7 质量从高到低, 流量几乎不变,质量变化不明显

5.SPS PPS信息(开始一个新的编码序列)

//获取当前参数设置  
mfxVideoParam par;
memset(&par, 0, sizeof(p ar));
sts = m_pMfxEnc->GetVideoParam(&par);
MSDK_CHECK_RESULT(sts, MFX_ERR_NONE, sts);

//设置编码器扩展选项,开始一个新序列
mfxExtEncoderResetOption resetOption;
memset(&resetOption, 0, sizeof(resetOption));
resetOption.Header.BufferId = MFX_EXTBUFF_ENCODER_RESET_OPTION;
resetOption.Header.BufferSz = sizeof(resetOption);
resetOption.StartNewSequence = MFX_CODINGOPTION_ON;
mfxExtBuffer* extendedBuffers[1];
extendedBuffers[0] = (mfxExtBuffer*) & resetOption;
par.NumExtParam = 1;
par.ExtParam = extendedBuffers;
sts = m_pMfxEnc->Reset(&par);
MSDK_CHECK_RESULT(sts,MFX_ERR_NONE,sts);

//手动设置编码参数
mfxEncodeCtrl curEncCtrl;
memset(&curEncCtrl, 0, sizeof(curEncCtrl));
curEncCtrl.FrameType = MFX_FRAMETYPE_I | MFX_FRAMETYPE_REF | MFX_FRAMETYPE_IDR;
sts = m_pMfxEnc->EncodeFrameAsync(&curEncCtrl, &m_pVPPSurfacesVPPOutEnc[nEncSurfIdx], &m_mfxBS, &syncpEnc);

6. 运行环境依赖的rpm

 libdrm, libdrm-devel, libva, intel-linux-media, kmod-ukmd(内核模块), libippcc.so, libippcore.so,(libippcc.so 会根据cpu型号依赖不同的动态库,如E3 1275 依赖libippccl9.so, i5 6400 依赖libippccy8.so)

7. 剩下的细节参考github上的源代码,稍后把代码放到github上管理起来。

时间: 2024-11-08 22:27:31

Intel Quick Sync Video Encoder 2的相关文章

H.264转码加速:NVENC大战Quick Sync

GPU加速技术对普通消费者最直观的影响就是视频转码应用上了,NVIDIA..AMD以及Intel都有自己的加速技术,而在新一代CPU和GPU架构上,三方都有更新的技术方案.<br><br> NVIDIA在Kepler架构上引入了NVENC编码单元,实测画质与CUDA相当,但是速度更快,只不过在速度和功耗上依然比不过Intel的Quick Sync,AMD的VCE因为缺少软件支持显得更悲剧. 在GPU通用计算刚刚进入桌面平台时,NVIDIA以及AMD都把视频转码加速功能当作重点,因为

H.265 Video Encoder IP Core

复制: 开源H.265硬件视频编码器H.265 Video Encoder IP Core是开源的H.265硬件视频编码器,实现了H.265(或叫HEVC)的大部分功能. 它由复旦大学专用集成电路与系统国家重点实验室(State Key Lab of ASIC & System,Fudan University)视频图像处理实验室(VIP Lab)范益波教授研究团队开发完成,并开放源代码.任何组织个人可以无偿使用上述代码用于研究和生产目的,VIP Lab将会持续更新并维护H.265硬件视频编码器

E3-1260L (8M Cache, 2.40 GHz) E3-1265L v2 (8M Cache, 2.50 GHz)

http://ark.intel.com/compare/52275,65728       Product Name Intel® Xeon® Processor E3-1260L (8M Cache, 2.40 GHz) Intel® Xeon® Processor E3-1265L v2 (8M Cache, 2.50 GHz) Code Name Sandy Bridge Ivy Bridge Essentials Status End of Life Launched Launch D

优秀开源项目之二:流媒体直播系统Open Broadcaster Software

Open Broadcaster Software(OBS)是一款用于音视频录制和直播的免费开源软件.可以轻松部署到多种平台,目前支持Windows.MAC和Linux. 特性: 1.高性能的实时视频/音频捕获和混合,无限制的场景,可以通过自定义转换在这些场景之间无缝切换. 2.提供视频源过滤器,比如图像掩蔽.颜色校正.色度/颜色键控等等. 3.直观的音频混合器,该混合器带有过滤功能,比如说噪声门.噪声抑制和增益. 4.强大易用的配置选项,可以轻松的添加资源.删除资源或者调整资源的属性. 5.改

Vegas Pro 15激活补丁

Vegas Pro 15激活补丁:http://www.3322.cc/soft/21834.htmlVegas Pro 15破解工具专业用于破解Vegas Pro 15的工具,它可让用户完全免费的使用原本需要付费才能使用的功能.Vegas Pro 15是一款专业的影像编辑工具,它具有强大的后期处理功能,可让用户随心所欲地对视频素材进行行剪辑合成.添加特效.调整颜色.编辑字幕等强大操作,同时它还拥有强大的音频处理工具,可以为用户的视频素材添加各种音效.录制声音.处理噪声,以及生成杜比5.1环绕立

在ffmpeg中添加编解码器

本文基于ffmpeg-2.2,添加基于QSV(Intel Media SDK / Quick Sync Video)的系列编解码器qsvavc_enc.qsvavc_dec.qsvmpeg2_dec. qsvvc1_dec,通过一个命令行参数--enable-qsv打开和关闭. 1. 在libavcodec目录添加相应的代码实现 可参考hevc.c, libx265.c.如qsvdec.c,qsvenc.c. 文件名可以随意起,实现中注意下面红字标出的地方需注意. ff_qsvavc_decod

Video Codecs by FOURCC 视频格式编码

FOURCC Name Summary 1978 A.M.Paredes predictor This is a LossLess video codec. >>> 2VUY 2VUY / BlackMagic >>> 3IV0 3ivx 3IV0 no longer used for this codec, however some files might be around. >>> 3IV1 3ivx MPEG4-based codec. Use

Video processing systems and methods

BACKGROUND The present invention relates to video processing systems. Advances in imaging technology have led to high resolution cameras for personal use as well as professional use. Personal uses include digital cameras and camcorders that can captu

Intel核显终于有Windows 10正式版驱动!

AMD催化剂15.7.1.NVIDIA GeForce 353.62之后,Intel今天也放出了自己的Windows 10显卡驱动包“15.40.4.64.4256”,而且是新系统下的第一个公开正式版,不过仅支持64位. 该驱动支持第四代酷睿22nm Haswell.第五代酷睿14nm Broadwell的全系列核芯显卡,上至i7下至赛扬(部分),而且是全系列支持DirectX 12(但有些其他GPU的独享功能不支持).OpenGL 4.3,同时也支持DirectX 11.3. Broadwel