iOS 关于CVPixelBufferRef的滤镜处理

iOS 关于CVPixelBufferRef的滤镜处理,第1张

在iOS音视频开发中,经常会看到 CVPixelBufferRef 这个数据结构,和 ffmpeg 中的 AVFrame 类似,里面保存着原始的图像数据。

我们发现,在有些场景中将 CVPixelBufferRef 送入滤镜sdk处理后,并不需要返回sdk处理后 CVPixelBufferRef ,就能实现滤镜效果显示的改变,如下图场景。

1.滤镜sdk处理 CVPixelBufferRef 的 *** 作为同步 *** 作。

2.滤镜sdk外部和内部的 CVPixelBufferRef 共享同一块内存。

1.使用 CVPixelBufferRef 创建纹理对象的两种方法:

CoreVideo 框架的方法:使用此方法可以创建 CVOpenGLESTextureRef 纹理,并通过 CVOpenGLESTextureGetName(texture) 获取纹理id。

OpenGL 的方法:

创建纹理对象,使用 glTexImage2D 方法上传 CVPixelBufferRef 中图像数据data到纹理对象中。

2.demo中使用 GPUImageRawDataInput 作为滤镜链起点,输入 CVPixelBufferRef 的图像数据,使用 GPUImageTextureOutput 作为滤镜链终点,输出滤镜处理后的纹理id。

3.使用原始 CVPixelBufferRef 创建纹理,将此纹理作为附件挂载到 frame buffer object 的纹理附件上。绘制滤镜处理后的纹理到帧缓冲对象中。

激活并绑定滤镜纹理,上传顶点坐标,纹理坐标到顶点着色器,开始绘制:

了解了 CVPiexlBufferRef 以上特性后,在短视频sdk架构中,就可以设计出模块化,可插拔的滤镜组件。在视频采集,编辑,转码等场景中均可快速集成。

demo中也提供了两个简单的场景:

1.视频采集过程中添加滤镜:从 GPUImageVideoCamera 的代理方法中取出 CVPixelBufferRef 进行滤镜处理。

2.视频播放过程中添加滤镜:在 AVPlayer 播放时,从实现了 AVVideoCompositing 协议的方法中取出 CVPixelBufferRef 进行滤镜处理。

Github:Demo地址

欢迎留言或私信探讨问题及Star,谢谢~

参考文章:

在 iOS 中给视频添加滤镜

深入理解 CVPixelBufferRef

该文档收集了视频特效的参考资料:

美颜滤镜篇

IOS使用GPUImage滤镜初级试水

GPUImage录像的一些备忘

GPUImage录制加美颜、柔光

GPUImage详细解析(三)- 实时美颜滤镜

GPUImage详细解析(十)用GPUImage和指令配合合并视频

ios GPUImage简单滤镜 -- 录制视频(保存+聚焦)

GPUImage 实现自定义相机

GPUImage详细解析(二)

GPUImage--美颜滤镜GPUImageBeautifyFilter

使用GPUImage开启的相机进行摄像,保存写入到Path

IOS视频编辑功能详解下篇-视频裁剪、视频拼接、音视频的处理

AVFoundation和-GPUImage初探

GPUImage

GPUImage 3 浅析、基础框架搭建、后续规划

视频滤镜GPUImageFilter基础篇

基于GPUImage的实时美颜滤镜

水印

视频编辑功能详解上篇-添加水印

GPUImage详细解析(七)文字水印和动态图像水印

给GPUImage录制的视频添加水印

iOS 视频剪切、旋转,视频添加音频、添加水印,视频导出

视频特效制作:如何给视频添加边框、水印、动画以及3D效果

ios 视频编辑,添加文字、图片(CA动画)水印,合成视频

iOS 视频剪辑 (添加水印,裁剪,合并视频,添加背景音乐)

人脸识别骗

iOS 基于AVFoundation框架搭建人脸识别,并获取识别到的人脸图片

iOS 基于GPUImage框架搭建人脸识别,自带滤镜美颜,扫描区域设置等功能

OpenGLES

GPUImage详细解析

强大的GPUImage,实现美颜及各种效果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11245373.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存