-
Notifications
You must be signed in to change notification settings - Fork 271
GPUPicture_IO
为了支持图像的采集和处理, 我们往往会需要在内存和GPU之间传输图像
本SDK提供了 KSYGPUPicInput和KSYGPUOutput两个类来实现这个传输的过程.
直播过程中我们用到图像的像素格式主要有3种
像素格式 | iOS OSType |
---|---|
NV12 | kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange |
I420 | kCVPixelFormatType_420YpCbCr8Planar |
BGRA | kCVPixelFormatType_32BGRA |
KSYGPUPicInput 和 KSYGPUOutput 能够支持以上3种格式的输入和输出.
下面列举一些可能的传输情况: KSYGPUPicInput 和 KSYGPUOutput 下文简称 picIn, picOut.
- 最基本的纯GPU处理的情况: 摄像头采集得到 NV12 的图像, 直接通过 picIn 输入到GPU, 经过美颜后送入预览,并通过 picOut 送入streamer 编码推流.
![basic flow](http://g.gravizo.com/svg?digraph G { rankdir = LR; node [shape="box"]; KSYAVFCapture;picIn;picOut;preview;streamer; node [shape="Mrecord"]; GPUFilters; KSYAVFCapture -> picIn[label="NV12"]; picIn -> GPUFilters; GPUFilters -> picOut; picOut -> streamer[label="BGRA/NV12/I420"]; GPUFilters -> preview; } )
其中, 到streamer选择 NV12 的效率高一些
- 采集后先用CPU的滤镜或贴纸处理, 处理后通过 picIn 输入到GPU, 经过美颜后送入预览,并通过 picOut 送入streamer 编码推流.
![basic flow](http://g.gravizo.com/svg?digraph G {
rankdir = LR;
node [shape="box"];
KSYAVFCapture;picIn;picOut;preview;streamer;
CPUFilters[label="滤镜或贴纸"];
node [shape="Mrecord"];
GPUFilters;
KSYAVFCapture -> CPUFilters[label="BGRA"];
CPUFilters->picIn[label="BGRA"];
picIn -> GPUFilters;
GPUFilters -> picOut;
picOut -> streamer[label="BGRA/NV12/I420"];
GPUFilters -> preview;
}
)
一般CPU上的滤镜和贴纸比较常用的是BGRA.