英特尔® Media SDK 编程接口通过媒体库调度程序层提供给应用。这个静态库可以为Intle Media SDK 提供的编码、解码和预处理功能提供接入点。该层还可以判断 CPU 或 GPU 是否处于最佳状态,并且能够支持应用的需求,具体流程如下:
如果应用请求了一个显卡硬件无法运行的任务,就会用到 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() 功能必须在定位改变后使用。
应用可以通过两种方法检索输出视频帧索:按解码或播放次序。
如欲了解有关 英特尔® Media SDK 的解码类功能的更多信息。请参阅 英特尔® Media SDK 参考手册。
英特尔 Media SDK 视频编码
编码类功能输入原始视频帧,并将其压缩为位流。
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 的其他函数中分辨出来:
同步函数可立即返回结果,无需等待。应用必须明确地将异步函数结果“同步”。如果缺少了这一重要步骤,异步函数结果将不可用。如欲了解更多信息,请参阅英特尔® Media SDK 参考手册“异步函数与同步化”。
与Microsoft* DirectX 应用软件同时运行
英特尔® Media SDK 功能可以在 Direct3D9* 界面上与 Microsoft DirectX 应用软件同时运行。以下为典型应用情景:
SDK 利用Microsoft* DirectX Video Acceleration(DXVA2)进行硬件加速。应用必须遵守以下 DXVA2 的基础设施的限制和要求: