当前位置: 首页 > 工具软件 > Media Tagger > 使用案例 >

intel media SDK (二)

单于季
2023-12-01

英特尔® Media SDK 编程接口通过媒体库调度程序层提供给应用。这个静态库可以为Intle Media SDK 提供的编码、解码和预处理功能提供接入点。该层还可以判断 CPU 或 GPU 是否处于最佳状态,并且能够支持应用的需求,具体流程如下:

  1. 调度程序识别激活显卡设备和驱动程序。
  2. 然后确定最合适的 SDK 部署,并重新调整函数调用;
  3. 如果没有适合的特定平台部署,调度程序会把 SDK 函数调用调整到 SDK 自带的软件部署。.
特定平台和软件库输出相同函数入点,这样,调度层就能选择合适的方法,并降低开支。

如果应用请求了一个显卡硬件无法运行的任务,就会用到 CPU 库。高度优化的 CPU 库利用英特尔® 数据流指令集(SSE4)确保流畅的播放和快速的解码。CPU 库通常被称作“软件回退”。
针对英特尔® 集成显卡(IIG)和未来英特尔独立显卡优化的媒体库可以通过 Microsoft DirectX Video Acceleration Version 2 接口提供硬件解码加速。媒体库简化了平台特定要求,SDK 可以显著减少开发人员在加速内容上投入的时间。而且,Intle Media SDK 为视频编码提供了一个标准接口,这是 DirectX Video Acceleration API 所没有的。
英特尔Media SDK 库和调度程序层可以相互配合,并智能确认运行请求任务的最高效方法。Intle Media SDK 可以确保开发人员在平台上获得更好的播放体验。



软件架构概述

英特尔® Media SDK 的常见功能:编码、解码和视频预处理(VPP)。 这些功能与编码位流和原始视频帧同时运行。

编码类功能将原始视频帧压缩为编码位流。解码类功能将位流解压为原始视频帧,VPP 类功能在编码前对原始视频帧进行预处理:

 

Intel Media SDK Video Decode

英特尔 Media SDK 视频解码
解码类功能输入压缩的原始视频流,并将其转换为可以播放的帧输出。这类功能只处理原始位流,而不会对 MP4 或者 MPG 等容器格式的位流进行处理。在提交解码前,应用必须提供对位流进行解复的工具。

解码类功能具有以下入口点:

DecodeHeader()

Parses the bitstream to retrieve the initial setup information for subsequent frames

Reset()

Resume after repositioning

DecodeFrameAsync()

Decodes a Frame

GetPayload()

Retrieves the user data

GetDecodeStat()

Obtain the decoding statistics


解码流程要求应用为库提供一个包含视频设置参数的sequence header(一种为 H.264 数据设定的序列参数,或 MPEG-2 和 VC-1 中的sequence header)来为后继帧进行解码。DecodeHeader()功能用于解析位流的序列参数,并且必须在对第一帧进行解码前使用。此外,解码流程可以在解码过程中随时对位流进行重新定位。DecodeHeader() 功能必须在定位改变后使用。
应用可以通过两种方法检索输出视频帧索:按解码播放次序。

  1. 如果采用按解码次序对帧进行检索,DECODE 会在解码后立即返还一个帧。然后,应用需要将帧从解码次序转换为播放次序。
  2. 如果采用按播放次序对帧进行检索,DECODE 会在下一帧可用前将这些帧高速缓存。.

如欲了解有关 英特尔® Media SDK 的解码类功能的更多信息。请参阅 英特尔® Media SDK 参考手册。

英特尔 Media SDK 视频编码
编码类功能输入原始视频帧,并将其压缩为位流。

ENCODE 通过两种方法处理输入帧:按播放编码次序。

  1. 如果采用播放次序,则 ENCODE 以播放次序对输入帧进行检索。少数 GOP (图片集)结构参数指定了 ENCODE 初始化过程中的 GOP 次序。
  2. 如果采用编码次序,则 ENCODE 以编码顺序对输入帧进行检索。程序必须为编码指定具体的输入帧类型。

ENCODE 支持恒定比特率和可变比特率。在恒定比特率模式中,当最小的压缩帧不足以满足 HRD 缓冲区(或 VBV)的需求时,ENCODE 会进行填充。填充是在编码帧末端添加 0。

Reset()

Fine-tune the encoding parameters

GetEncodeStat()

Retrieves the encoding statistics

EncodeFrameAsync()

Encode a frame with per-frame control




Media SDK 视频预处理(VPP)

视频预处理输入原始帧,将其格式转换为原始帧输出。程序指定了输入和输出格式,SDK 部署对路径进行相应配置。实际的转换过程是一个包括很多小过滤器的连锁运转

英特尔® Media SDK 支持以下预处理功能:颜色转换、尺寸调整、降噪、反交错处理、3:2 下拉和场景检测。SDK 根据用户设置动态配置路径。默认情况下,路径的构建方式有利于最大程度利用平台的硬件加速功能,或确保最佳的视频质量。构建路径时,应用可以使用扩展缓冲器配置参数或建议相关操作。


Reset()

Fine-tune the preprocessing parameters

GetVPPStat()

Retrieves the preprocessing statistics

RunFrameVPPAsync()

Preprocess a frame

 

使用英特尔® Media SDK
异步函数
英特尔® Media SDK 使用异步函数运行解码、编码和预处理功能。常规的“同步”函数通常在完成操作后立即返回结果,而 英特尔® Media SDK 的异步函数需要一个额外的步骤,即同步,只有在完成这个步骤之后应用才能使用相关结果。请注意异步函数的名称都带有“Async”,有助于将其从 SDK 的其他函数中分辨出来:

  1. 编码:MFXVideoENCODE_EncodeFrameAsync
  2. 解码:MFXVideoDECODE_DecodeFrameAsync
  3. 视频预处理:MFXVideoVPP_RunFrameVPPAsync

同步函数可立即返回结果,无需等待。应用必须明确地将异步函数结果“同步”。如果缺少了这一重要步骤,异步函数结果将不可用。如欲了解更多信息,请参阅英特尔® Media SDK 参考手册“异步函数与同步化”。
与Microsoft* DirectX 应用软件同时运行
英特尔® Media SDK 功能可以在 Direct3D9* 界面上与 Microsoft DirectX 应用软件同时运行。以下为典型应用情景:

SDK 利用Microsoft* DirectX Video Acceleration(DXVA2)进行硬件加速。应用必须遵守以下 DXVA2 的基础设施的限制和要求:

  1. 初始化需要一个Direct3D* 设备句柄。应用程序可以通过将Idirect3D9Manager界面句柄传递到到Media SDK 的 MFXVideoCORE_SetHandle() 功能来共享设备。
  2. 当 SDK 功能为硬件加速创建 DXVA2 辅助设备时,SDK 必须分配访问 I/O 的 Direct3D9 界面列表(一个界面链),并将该列表作为设备创建命令发出。

 

 类似资料: