Intel Quick Sync Video Encoder 2
这边博客主要记录在预研quick sync中涉及到的一些性能质量相关的关键参数设置。
github: https://github.com/MarkRepo/qsve
1. VPP处理过程伪代码:
MFXVideoVPP_QueryIOSurf(session, &init_param, response);
allocate_pool_of_surfaces(in_pool, response[].NumFrameSuggested);
allocate_pool_of_surfaces(out_pool, response[].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 = ;
m_mfxEncParams.AsyncDepth = ;
m_mfxEncParams.mfx.NumRefFrame = ; //Vpp参数设置:
m_mfxVppParams.AsyncDepth = ;
4. Quality 编码质量相关参数:
m_mfxEncParams.mfx.TargetKbps // 码率越高,质量越好, 流量越大
m_mfxEncParams.mfx.TargetUsage // 1~7 质量从高到低, 流量几乎不变,质量变化不明显
5.SPS PPS信息(开始一个新的编码序列)
//获取当前参数设置
mfxVideoParam par;
memset(&par, , sizeof(p ar));
sts = m_pMfxEnc->GetVideoParam(&par);
MSDK_CHECK_RESULT(sts, MFX_ERR_NONE, sts); //设置编码器扩展选项,开始一个新序列
mfxExtEncoderResetOption resetOption;
memset(&resetOption, , sizeof(resetOption));
resetOption.Header.BufferId = MFX_EXTBUFF_ENCODER_RESET_OPTION;
resetOption.Header.BufferSz = sizeof(resetOption);
resetOption.StartNewSequence = MFX_CODINGOPTION_ON;
mfxExtBuffer* extendedBuffers[];
extendedBuffers[] = (mfxExtBuffer*) & resetOption;
par.NumExtParam = ;
par.ExtParam = extendedBuffers;
sts = m_pMfxEnc->Reset(&par);
MSDK_CHECK_RESULT(sts,MFX_ERR_NONE,sts); //手动设置编码参数
mfxEncodeCtrl curEncCtrl;
memset(&curEncCtrl, , 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上管理起来。
Intel Quick Sync Video Encoder 2的更多相关文章
- Intel Quick Sync Video Encoder
本篇记录Intel E3 1275处理器集成显卡的硬编码预研过程. 步骤如下: (1)环境搭建 (2)demo编译,测试 (3)研究demo源码,Media SDK API使用 (4)编写so动态库封 ...
- H.264转码加速:NVENC大战Quick Sync
GPU加速技术对普通消费者最直观的影响就是视频转码应用上了,NVIDIA..AMD以及Intel都有自己的加速技术,而在新一代CPU和GPU架构上,三方都有更新的技术方案.<br>< ...
- H.265 Video Encoder IP Core
复制: 开源H.265硬件视频编码器H.265 Video Encoder IP Core是开源的H.265硬件视频编码器,实现了H.265(或叫HEVC)的大部分功能. 它由复旦大学专用集成电路与系 ...
- H.265 HD 和H.265 4K Video Encoder IP Core
H.265 HD 和H.265 4K Video Encoder IP Core H.265 HD Video Encoder IP Core(H.265 HD Video/Audio Encoder ...
- Intel Media SDK H264 encoder GOP setting
1 I帧,P帧,B帧,IDR帧,NAL单元 I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随 ...
- Getting Started with the Intel Media SDK
By Gael Hofemeier on March 19, 2015 Follow Gael on Twitter: @GaelHof Media SDK Developer’s Guide Med ...
- Intel® Media SDK(一)
A cross-platform API for developing media applications on Windows* Fast video playback, encode, proc ...
- Intel 处理器架构演进 转
Intel 处理器架构演进 Posted on 2018-02-13 | Edited on 2018-09-23 | In Computer Architecture | Comments: ...
- Intel® Core™ i5-5300U Processor
3M Cache, up to 2.90 GHz Specifications Ordering and Compliance Essentials Product Collection 5t ...
随机推荐
- MSSQL数据库导入导出大全二(SQL语句)
Excel文件导入数据库多个Sheet if exists(select 1 from sysobjects where name=N'p_import_excel' and type='P')dro ...
- Step 2---有关Github的几个问题
1.取得项目的Git仓库的方式 第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库. 要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行: $ git init 初始化 ...
- JavaScript变量提升 面试题
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- asp.net core mvc视频A:笔记3-2.表单使用
页面上呈现表单的两种方式 新建项目,增加Test控制器,增加Index视图 方式一:HTML构建表单 运行 方式二:HTML 运行 数据绑定 处理方法 调用结果 登录后返回值 默认值绑定 方式一: 控 ...
- Linux下安装jdk8的方法
一.yum安装 只需要一条命令就可以安装jdk: yum install java--openjdk* -y 执行过这条命令无需配置,直接可以使用. 二.下载tar包安装 下载jdk8 登录网址:ht ...
- JavaScript事件使用指南
事件流 事件流描述的是从页面中接收事件的顺序,IE和Netscape提出来差不多完全相反的事件流的概念,IE事件流是事件冒泡流,Netscape事件流是事件捕获流. 事件冒泡 IE的事件流叫做事件冒泡 ...
- map端join
package my.hadoop.hdfs.mapreduceJoin; import java.io.BufferedReader; import java.io.FileInputStream; ...
- 在Mac上为自己手动编译安装一套PHP7的开发环境
首先你得去官网下载php7 beta1的版本 这里由于我是在mac上安装,所以就去下载linux相关的版本,地址也直接附上了php7 beta1windows版的官方也有发布详情猛戳:这里 解压安装包 ...
- android:分享 一个非常强大的LOG开关---Log.isLoggable
1.API亮点: 此API能够实现不更换APK.在出问题的手机上就直接能抓到有效log,能提升不少工作效率. .API介绍 近期在解决短信问题时.看到一个非常强大的LOG开关---Log.isLogg ...
- 64位win7环境eclipse集成svn后出现Failed to load JavaHL Library的解决办法
http://lushuifa.iteye.com/blog/2038000