Androoid 视频、图像采集时相机预览时的效率改善问题
2017-12-29 23:11
344 查看
曾经试图在GPUImage这个工程基础之上来开发一个项目,由于这个开源工程很知名,start非常多,就毫不犹豫地将这个工程拿来用了。谁知功能完成进入测试阶段之后,才暴露出各种问题和坑点。
第一个坑点是当一个渲染管道叠加了两个以上的滤镜的时候,稍微低端一点的手机已经在相机预览的时候已经卡得不行了。
第二个坑点是,录制的过程中会概率性的包EGL_BAG_SURFACE错误,然后预览界面就定住了。由于这个问题是OpenGL ES 报错,修复起来还是比较麻烦的。
下面就解决第一个坑点作一些总结:
要在界面上显示相机的预览画面,先要拿到camera 输出的预览图像数据。
而拿到相机的预览数据有两种方法:
第一种是利用 camera.setPreviewCallback()方法,在回调的方法中可以拿到相机的yuv数据,然后将yuv转为RGB数据,得到一张bitmap。然后将bitmap绘制到UI的预览区域。
GpuImage就是利用这种方案。这种方案的弊端在呀,要获得callback的yuv数据,必须在camera.setPreviewCallback()调用camera.setPreviewTexture方法,将预览数据先输入到一个surfaceTexture中,即使这个surfaceTexture不用显示在界面上。这就产生了一个冗余的数据处理过程。
其实如果善于利用camera.setPreviewTexture()方法,camera.setPreviewCallback()是用不着的,而且SurfaceTexture 默认是GPU运算,它的直接可以接受yuv格式的纹理,少了一个转RGB的过程。另外,SurfaceTexture可以更方便地与openGL es API 配合。
只是,在编写shader时,注意,SurfaceTexture的纹理类型和 openGL 绘图时的 fragment shader 中接收预览数据的sample2D 类型都应该是 external_OES的,具体可以参考我写的这个Demo。
近期计划对Android 版的 GPUImage作持续的改进,欢迎关注我的CSDN和github帐号!
第一个坑点是当一个渲染管道叠加了两个以上的滤镜的时候,稍微低端一点的手机已经在相机预览的时候已经卡得不行了。
第二个坑点是,录制的过程中会概率性的包EGL_BAG_SURFACE错误,然后预览界面就定住了。由于这个问题是OpenGL ES 报错,修复起来还是比较麻烦的。
下面就解决第一个坑点作一些总结:
要在界面上显示相机的预览画面,先要拿到camera 输出的预览图像数据。
而拿到相机的预览数据有两种方法:
第一种是利用 camera.setPreviewCallback()方法,在回调的方法中可以拿到相机的yuv数据,然后将yuv转为RGB数据,得到一张bitmap。然后将bitmap绘制到UI的预览区域。
GpuImage就是利用这种方案。这种方案的弊端在呀,要获得callback的yuv数据,必须在camera.setPreviewCallback()调用camera.setPreviewTexture方法,将预览数据先输入到一个surfaceTexture中,即使这个surfaceTexture不用显示在界面上。这就产生了一个冗余的数据处理过程。
其实如果善于利用camera.setPreviewTexture()方法,camera.setPreviewCallback()是用不着的,而且SurfaceTexture 默认是GPU运算,它的直接可以接受yuv格式的纹理,少了一个转RGB的过程。另外,SurfaceTexture可以更方便地与openGL es API 配合。
只是,在编写shader时,注意,SurfaceTexture的纹理类型和 openGL 绘图时的 fragment shader 中接收预览数据的sample2D 类型都应该是 external_OES的,具体可以参考我写的这个Demo。
近期计划对Android 版的 GPUImage作持续的改进,欢迎关注我的CSDN和github帐号!
相关文章推荐
- 关于LabVIEW用USB相机采集图像问题小结
- 用Labview调用两个相机采集图像程序以及出现串图问题的解决办法
- Basler相机采集的彩色图像转换到opencv中Mat的问题
- 基于嵌入式Linux的视频图像采集与传输
- OPENcv从相机采集图像数据-图像处理接口IPLIMAGE结构的指针
- Kinect彩色相机标定(一):彩色图像的采集
- Android开发之自定义相机设定照片和预览参数问题
- Camera1实时预览并采集YUV图像
- FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题
- 利用Android Camera2 的照相机api 实现 实时的图像采集与预览
- Android中用Bitmap画图预览,视频图像分辨率是320x240(4:3),手机分辨率是540x960(9:16),图像被拉伸怎么办?
- Android WebView 播放视频的问题(只有声音没有图像)
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
- point grey的多相机采集问题
- Android多媒体技术(一)Camera实时视频采集预览、拍照、JPEG图片方向的处理
- 关于二维码扫描显示预览图像旋转90度的问题
- Qt5.3里使用OpenCV库采集摄像头图像保存为图片和视频
- opecv学习(三)视频读取及摄像头采集图像/边缘检测/模糊去燥
- 基于 face++的人脸检测,解决了 camera 预览变形,图像方向不对等问题.
- iOS RTMP 视频直播开发笔记(1) – 采集摄像头图像