视频和视频帧:Intel GPU(核显)的源码编解码故事
一般提及基于“显卡或多媒体处理芯片对视频进行解码”为硬解码,本文将探讨如何利用Intel的源码核显,即集成GPU实现硬解码。源码提及QSV,源码全称为Quick Sync Video,源码linkedhash源码Intel在年发布Sandy Bridge CPU时,源码一同推出了这项基于核显进行多媒体处理,源码包括视频编解码的源码技术。集成核显,源码官方称HD Graphics,源码最早在Sandy Bridge前一代制程已推出,源码但性能提升及充分发挥在Sandy Bridge时期。源码Haswell及后续制程发布更高级的源码Iris架构。最近Intel宣布将开发独立显卡,源码核显发展具体走向未知。
接手QSV项目时,预期会有很多相关资料,实则相反。因此,将记录自己学习过程。
本文将介绍:
I. Intel的核显(集成GPU):
了解核显很有必要,几个月前,作者对CPU的认识还停留在“南北桥”架构。以下内容若有不准确之处,欢迎指正。
查看Gen CPU结构图,首先看CPU核心部分。在整块CPU芯片中,核显占比不小,算力不容小觑。在没有独立显卡的笔记本上,可以运行大量大型游戏,虽偶有卡顿、掉帧情况,整体表现已相对不错。如何编译ros源码
接下来,看官方给出的GPU内部结构图。GPU内部远比图上所示复杂,图中介绍的仅为部分Subslice芯片结构。GPU分为Slice部分和Un-Slice部分,Slice部分已介绍,接下来介绍Un-Slice部分。
作者找到了一张图,展示了在MFF上进行视频处理的流程:1) 首先在MFX/VDBOX模块上进行编解码;2) 接着送到VQE/VEBOX上做图像增强和矫正处理;3) 然后送到SFC上做scale和transcode;4) 最后送出到显示屏上展示。是否完全正确,作者这里做个记录。
推荐知乎文章《转》Intel Gen8/Gen9核芯显卡微架构详细剖析,深入浅出,关于thread dispatch的说明即出自该文。
最后,总结Intel集成GPU/核显结构图。
注意,这是skylake架构下的GT2/GT3/GT4 GPU结构图,X数字越大,集成的Slice和Unslice芯片更多,能力越强,价格也更高。
II. Quick Sync Video(QSV)技术:
QSV是Intel推出的将视频处理任务直接送到GPU上进行专门负责视频处理的硬件模块处理的软件技术。与CPU或通用GPU上的视频编码不同,QSV是处理器芯片上的专用硬件核心,这使得视频处理更为高效。
要了解QSV如何驱动GPU的MFF,首先看官方Intel® Video and Audio for Linux上的图。在介绍QSV之前,提及Intel在FFmpeg上提供的插件,包括ffmpeg-qsv、ffmpeg-vaapi和ffmpeg-ocl。详细描述如下:
· FFmpeg-vaapi提供基于低级VAAPI接口的硬件加速,在VA API标准下在Intel GPU上执行高性能视频编解码器、视频处理和转码功能。180度旋转源码
· FFmpeg-qsv提供基于Intel GPU的硬件加速,基于Intel Media SDK提供高性能视频编解码器、视频处理和转码功能。
· FFmpeg-ocl提供基于工业标准OpenCL在CPU/GPU上的硬件加速,主要用于加速视频处理过滤器。
接下来,介绍QSV在ffmpeg2.8及以上版本的支持,经过MSDK、LibVA、UMD和LibDRM。分层进行分析:
· MSDK:Intel的媒体开发库,支持多种图形平台,实现通用功能,可用于数字视频的预处理、编解码和不同编码格式的转换。源码地址为Intel® Media SDK,在Linux平台上编译使用。
· VA-API:Video Acceleration API,提供类unix平台的视频硬件加速开源库和标准。Intel源码地址在Intel-vaapi-driver Project,在Linux平台上使用。
· UMD:User Mode Driver的缩写,指VA-API Driver。Intel提供了两个工具:intel-vaapi-driver 和 intel-media-driver,推荐使用后者。
· LibDRM:Direct Rendering Manager,解决多个程序协同使用Video Card资源问题,提供一组API访问GPU。与VA-API,LibDRM是一套通用的Linux/Unix解决方案。
· Linux Kernel:Intel的Kernel是i driver,描述了libDRM和Kernel Driver之间的关系。
至此,整个关系图较为清晰。
III. FFMPEG+QSV解码:
QSV硬解的cef如何获取源码任务主要包括:
关于3-4步操作的详细实现,底层库会帮助完成。但作为一个优秀的工程师,研究FFMPEG源码依然十分重要。接下来,介绍如何使用FFmpeg API中的h_qsv解码器插件。
提及FFmpeg命令行使用方法,推荐阅读官方资料《QuickSync》或《Intel_FFmpeg_plugins》。
关于示例代码,作者曾遇到许多坑,总结为:多数中文博客不可靠,官方demo最可信。官方代码提供了两份可用:qsvdec.c和hw_decode.c。作者最早使用的是第一段代码,核心部分如下:
然而,这段代码存在问题。测试发现,对于赛扬系列一款CPU,在p视频上MSDK达到fps,理论上h_qsv平台上限也应为fps,但实际测试不到fps。排查后发现是av_hwframe_transfer_data()性能较弱。
最终,与Intel一起解决了性能问题。那么,性能提升方案为何是GPU-COPY技术做Memory-Mapping?
解释GPU和CPU渲染图像的过程,包括坐标系转化、纹理叠加等,仅需了解两点:
后者的数据组织方式能充分利用GPU的并行特性,加速图像处理、渲染。尽管存在一些纹理叠加的技术难题,但性能提升足以补偿。
接下来,解释Memory-Mapping:从Intel CPU架构图中可见,GPU和CPU位于同一芯片上,android简单商城源码各自寄存器/缓存区有限,视频数据主要存储在内存上。GPU和CPU的数据组织方式不同,同一帧数据存于内存同一位置,数据格式不同,因此需要做Memory-Mapping。Memory-Mapping相较于Memory-Copy,减少了数据从内存区域A移动到区域B的操作,已经是优化。进一步优化:GPU完成Memory-Mapping以及数据从GPU到内存和CPU的操作。
在av_hwframe_transfer_data()内部,Memory-Mapping由CPU完成,性能受限于CPU,只能并行。修改后,整体性能从不到fps提升至fps,虽然与理想fps仍有差距,但满足性能需求。
据悉,Intel将在FFmpeg 4.3开源出这个解决方案。
写在后面:
了解GPU底层对应用开发人员帮助不大,毕竟了解芯片布线的重新设计、制程工艺提升、GPU-COPY技术的数据I/O提升等,也不能做什么。最终,芯片架构是芯片工程师的事,底层逻辑实现是嵌入式工程师的事。应用开发人员无法做出实质贡献,但作为知识库扩充或休闲阅读,了解也无妨。
希望有机会接触CUDA的编解码,深入学习N卡设计。
感谢因《视频和帧》系列文章结识的朋友,热心指出文章描述不准确的地方。文中如有不严谨之处,欢迎指正。
Linux下USB设备图像采集
FFmpeg在Linux环境下提供了一种强大的方法来采集USB设备图像。在进行图像采集时,首先通过调用`av_find_input_format`接口来获取到`AVInputFormat`对象,然后利用`avformat_open_input`函数来启用采集设备。
在Linux系统中,视频采集的核心组件名为`v4l2`,即video4linux2的简称。Linux将视频设备视为设备文件,可通过`/dev/video0`路径进行访问,类似于操作普通文件。
为查看相机设备,有几种方法。方法一,直接使用`ls`命令查看`/dev/`目录下的设备列表。方法二,利用FFmpeg的`ffprobe`命令来查看连接到系统中的摄像头设备。通过这种方式,可获取到设备名称、裸帧格式(如`yuyv`)、帧率(如fps)和分辨率(如x)等信息。
在采集数据时,需要将`yuyv`格式转换为更通用的`yuvp`格式,随后再进行编码保存为`h`文件。通过`ffprobe`命令查看到`video1`设备无法进行采集,这可能意味着该设备未被正确识别或配置。
在Linux环境下进行`v4l2`设备的交互,可以通过一系列命令实现。例如,获取设备列表、查看相机参数以及测试相机的可用性。此外,可能需要通过依赖库`libv4l2`来支持某些功能,通常需要重新编译FFmpeg,并在编译配置中加入`--enable-libv4l2`参数。
在进行源码开发时,需要声明并设置关键参数,如开启输入流通道、设置解码器以及配置H.输出文件的刷新机制。还需要管理编解码缓存区,以确保数据的正确处理和传输。最终启动编解码流程,并利用SDL2进行渲染,完成整个图像采集和处理任务。
火炬之光2控制台代码大全
1、火炬之光2控制台秘籍HELP 显示所有的秘籍列表 CLS 清空控制台历史 Room 回到角色所在层初始点 fps 显示帧率等 god 神模式,无敌 speed 角色走路奔跑速度提升 godspeed 无敌+速度提升 damage shapes 显示伤害类型 aifreeze。
2、首先 打开 我的电脑\用户名\我的文档\My Games\torchlight 2\save\一串数字\settingstxt把 CONSOLE 0 和 DEBUGMENUS 0后面的0改为1保存 OK进入游戏后按quotins quot 呼出控制台然后直接在里面输入代码后回车,地上。
3、\x0d\socketable 姚洛洛的头颅 +7%掉宝 吸血\x0d\此头需要物品等级,故一般都用骰子的6% \x0d\socketable 萨尔丹权势之头颅 %几率反射%DPS远程伤害 %冰冻5秒。
4、BERSERKER狂暴战,CASTER法师,WANDERER流浪者就是射手,ENGINEER工程师 例如 WANDERER__BOOTS_ALT_C,这个东西的编号为,那么就要输入item 调出这个物品,这是流浪者专用的鞋子,装备等级为C。
5、+%全部伤害 电击几率5秒 socketable 姚洛洛的头颅 +7%掉宝 吸血 此头需要物品等级,故一般都用骰子的6%socketable 萨尔丹权势之头颅 %几率反射%DPS远程伤害 %冰冻5秒。
6、Cabalist神秘法师服 胸甲caster__chest_alt_set 裤子pants 手套gloves 鞋boots 其他的类似,只输入内部内容,我给你发火炬之光2全部套装套控制台命令大全的邮件了,望采纳。
7、直接在控制台复制粘贴代码即可每个职业都是9个代码,因为套装两个戒指一样法师CASTER__AMULET_ALT_SET CASTER__BELT_ALT_SET CASTER__BOOTS_ALT_SET CASTER__CHEST_ALT_SET CASTER__GLOVES_ALT_SET CAS。
8、2\save\一串数字\settingstxt 把settingstxt中的 CONSOLE 0 和 DEBUGMENUS 0 后面的0改为1 保存 OK再进入游戏后按quot ins quot 就可以呼出控制台然后输入代码,再按ENTER键,装备就会掉出来。
9、首先保证你可以开启控制台,然后按insert键,打开控制台,输入TL2_BLOODEMBER_BASE 1 ,然后按回车,东西就掉在地上了不要前面的希望能帮助到你。
、ARMOR是个总分类,不光是防护装备,包括武器装备首饰装备和宠物装备在内的全部装备都有目前为止我也正在纠结这个问题上,4种级职业套都缺肩甲和胸甲,目前肩甲和胸甲依然用级天神套。
、打开控制台输入命令列如宝石类socketable空格+ 序号 回车 就行上面已经排好几个种类防具类输入BOOTS鞋子类 检索得到即游戏里总的双鞋子,我们拿BOOTS 6来说明,源代码为BERSERKER__BOOTS_ALT。
、保存后关闭,重新进入游戏,用你的角色进入游戏后按Shift+ ~ 就是esc下面那个键,就能打开控制台2win7系统这样打开同样把文件夹选项中选上显示所有文件夹的选项,再我的文档Administrator\AppData\Roaming\runic。
、在setting里面要改两个参数的值为1,分别是DEBUG,CONSOLE,修改他们的值为1后进入游戏按Insert进入控制台,应该就可以使用了,你看下是不是少改了一个。
、是火炬之光2套装代码的编号 你要找到火炬2的套装代码表,然后分别把这些号码后面的一串字符复制,调出控制台,复制的代码粘贴每个都要单独复制,粘贴上去,回车你要的套装碎片就掉到地上了野蛮人套共7个碎片其实。
、打开后,需要把参数 CONSOLE 0 和 DEBUGMENUS 0 改为 CONSOLE 1 和DEBUGMENUS 1 即把后面的0改为1, 再点击保存3进入游戏页面后按“Inser”键即可呼出火炬之光2控制台注意控制台不按Insert呼出,人物。
、item itemSocketable, 注意大写和逗号,或者itemSocketable,由于这个游戏我没玩过,所以在游民找的教程,仔细看了下,应该就是这两种情况了。
超详细!手把手教你使用YOLOX进行物体检测(附数据集)
手把手教你使用YOLOX进行物体检测详解
YOLOX是一个由旷视开源的高效物体检测器,它在年实现了对YOLO系列的超越,不仅在AP上优于YOLOv3、YOLOv4和YOLOv5,而且在推理速度上具有竞争力。YOLOX-L版本在COCO上以.9 FPS的速度达到了.0%的AP,相较于YOLOv5-L有1.8%的提升,并支持ONNX、TensorRT、NCNN和Openvino等多种部署方式。本文将逐步指导你进行物体检测的配置与实践。1. 安装与环境配置
从GitHub下载YOLOX源码至D盘根目录,用PyCharm打开。
安装Python依赖,包括YOLOX和APEX等。
确认安装成功,如出现环境问题,可参考相关博客。
验证环境,通过下载预训练模型并执行验证命令。
2. 制作数据集
使用VOC数据集,通过Labelme标注并转换为VOC格式。可参考特定博客解决环境问题。3. 修改配置文件
-
调整YOLOX_voc_s.py中的类别数和数据集目录。
修改类别名称和测试路径,确保文件路径正确。
4. 训练与测试
-
推荐命令行方式训练,配置参数并执行命令。
测试阶段,修改__init__.py和demo.py,适用于单张和批量预测。
5. 保存测试结果与常见错误处理
-
添加保存测试结果的功能,解决DataLoader worker异常退出问题。
处理CUDNN error,调整相关命令参数。
阅读完整教程,你将能够顺利地在YOLOX上进行物体检测,并解决可能遇到的问题。想了解更多3D视觉技术,欢迎加入3D视觉开发者社区进行交流和学习。2024-12-24 00:30
2024-12-23 23:44
2024-12-23 23:43
2024-12-23 23:09
2024-12-23 22:31