Intel Quick Sync Video Encoder
本篇记录Intel E3 1275处理器集成显卡的硬编码预研过程。
步骤如下:
(1)环境搭建
(2)demo编译,测试
(3)研究demo源码,Media SDK API使用
(4)编写so动态库封装RGB,YUV的编码接口
下面记录每个过程的主要事项以及遇到的一些重要问题。
1. 环境搭建
(1)首先在intel官网下载 MediaServerStudioEssentials2017.tar.gz, 主要考虑这个版本的SDK最适合 CentOS7.2.1511, 也可以下载R2版本。
(2)安装CentOS7.2.1511。
(3)安装Media SDK,具体步骤参考media_server_studio_getting_started_guide.pdf文档。这里要说明的是media sdk安装过程中会依赖很多基础库,比如libdrm, libva,X11, libGL等等,但是在install_sdk_script.sh脚本中安装的rpm包依赖的这些基础库的版本可能比CentOS7.2.1511中的低,这时候会安装失败,提示依赖错误。解决办法是在install_sdk_script.sh脚本中的yum命令参数加上--oldpackage参数,强制安装旧版本,使依赖关系通过。
第二个问题是依赖冲突,出现过一个问题是kernel-tools安装了两个不同版本rmp包,这时候会依赖冲突,导致安装失败,解决方法是删掉一个rpm包。对于yum如何处理两个不同版本依赖库的问题后面再考虑。(这里我是对比一个安装正确的环境,删掉了一个高版本的库)
2. demo编译,测试
环境搭建好之后,可以根据文档中的说明验证media sdk安装的正确性。然后根据Sample_guide.pdf文档,使用cmake程序编译,再使用每一个demo目录下的文档中参数的说明测试demo。这一步没什么好说的,如果环境安装正确的话,一切顺利。需要提一下的是,用sample_encode 把yuv数据编码成h264后不能用VLC直接播放,需要在命令行加--demux h264参数启动vlc才能播放。关于cmake的使用,后续要学习一下,跨平台的编译工具,还可以用来写测试用例自动测试程序。
3. 源码分析, SDK API使用
对照着demo和media_sdk.pdf文档看,基本上没啥问题。需要关注的几个点是:
(1)VPP,Encoder参数初始化
(2)输入输出缓冲区是如何分配与管理的(有一个”异步深度”的概念,主要关系到分配的输入缓冲区个数)
(3)VPP, Encoder的异步处理流程(编码RGB数据源需要用到VPP模块)
(4)编码结果数据的获取。
(5)RGBA的编码处理: 把VPP的输入格式改成RGB4, 输出改成NV12,把rgb视频数据拷贝pData.R, 然后赋值pData.G = pData.R+1, pData.B=pData.R+2, pData.A = pData.R+3,利用VPP完成RGB到yuv颜色空间的转换。
4. so动态库
由于不会cmake,所以这里我把源码直接拿过来写makefile编译的,需要注意的几个问题:
(1)makefile里面需要定义几个与libVA有关的宏,使硬编码生效。( -DLIBVA_SUPPORT -DLIBVA_DRM_SUPPORT -DLIBVA_X11_SUPPORT)
(2)so链接的静态库不是libmfx.a, 而是libdispatch_shared.a, 这个静态库需要自己在/opt/intel/mediasdk/opensource/mfx_dispatch目录下用cmake编译出来,具体过程看dispatch的相关文档。如果使用libmfx.a链接,so会产生符号冲突,导致崩溃。
(3)在虚拟机中搭建环境,安装media-sdk,编译libdispatch_shared.a,然后生成自己的so动态库,把动态库放到物理机中链接运行导致出错的问题,是因为不同环境下编译出来的静态库不能通用导致的,此处的问题是libdispatch_shared.a.
Intel Quick Sync Video Encoder的更多相关文章
- Intel Quick Sync Video Encoder 2
这边博客主要记录在预研quick sync中涉及到的一些性能质量相关的关键参数设置. github: https://github.com/MarkRepo/qsve 1. VPP处理过程伪代码: M ...
- 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 ...
随机推荐
- Laravel之命令
一.创建命令 php artisan make:console SendEmails 上述命令将会生成一个类app/Console/Commands/SendEmails.php,当创建命令时,--c ...
- crm使用soap取消用户訪问记录权限
//取消訪问权限 function demo() { //操作记录的id var targetId = "A8A46444-BA10-E411-8A04-00155D002F ...
- centos7 安装docker后启动报错
启动docker $ sudo systemctl start docker 报错. 查看状态: $ systemctl status docker.service -l 加 -l 有的行信息很长 ...
- Android开发环境搭建 for windows (linux类似) 详细可参考“文件”中“Android开发环境搭建.pdf ”
ADT-Bundle for Windows 是由Google Android官方提供的集成式IDE,已经包含了Eclipse,你无需再去下载Eclipse,并且里面已集成了插件,它解决了大部分新手通 ...
- UUID(即GUID)
UUID(GUID)是Cocoa Touch提供的一种生成唯一标识的机制.类型为CFUUIDRef的对象可以代表UUID,UUID是基于当前时间.计数器和硬件标识(通常是以太网卡的MAC地址)等数据计 ...
- nginx uri和request_uri区别
$request_uri This variable is equal to the *original* request URI as received from the client includ ...
- Lua学习十一----------Lua迭代器
© 版权声明:本文为博主原创文章,转载请注明出处 Lua迭代器 - 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址 - Lu ...
- PAT 1001. A+B Format(水题)
#include<cstdio> #include<cstring> using namespace std; char s[10]; int main() { int a,b ...
- leetcode笔记:Add Binary
一.题目描写叙述 Given two binary strings, return their sum (also a binary string). For example, a = "1 ...
- 【数据挖掘】关联分析之Apriori(转载)
[数据挖掘]关联分析之Apriori 1.Apriori算法 如果一个事务中有X,则该事务中则很有可能有Y,写成关联规则 {X}→{Y} 将这种找出项目之间联系的方法叫做关联分析.关联分析中最有名的问 ...