android opengl
红色与青色
这个作者很懒,什么都没留下…
展开
-
Android OpenGL 模仿抖音上的time warp scan特效
照例先看效果挺有意思的一种滤镜,思路很简单,先确定宽高画一个空的图片,然后通过y轴来一像素一像素的添加图像数据,难点是OpenGL怎么实现,OpenGL可以通过fbo来进行图像数据保存,然后通过一个参数来进行判断如freezeHeight,小于freezeHeight的图像数据不进行处理,大于freezeHeight的都进行替换,freezeHeight随着时间慢慢变大,当现在的freezeHeight比刚才的freezeHeight大的时候,刚才替换掉的图像数据就保留了下来,最后freezeHe.原创 2020-12-14 17:14:05 · 644 阅读 · 0 评论 -
Android OpenGLES Camera2绿幕抠图
真的是不能乱立flag,刚说完没啥事就给我来事了,这次要我试试手机摄像头的绿幕抠图,我说这玩意儿效果怎么样无法保证,毕竟是实时的,无法做到象后期那样精细的抠图先看效果只能说还行,绿边还是有的shader是用了RealTimeGreenScreen这项目的算法,对参数进行了修改思路是先把rgb转成hsv,通过rgb的g和hsv的颜色范围来确定绿色,再使用算法HSV基本颜色分量范围Github...原创 2020-11-20 11:42:27 · 2463 阅读 · 3 评论 -
Android OpenGLES视频模糊,毛玻璃效果
最近帮朋友做了个给视频加模糊的功能,毛玻璃效果,思路很简单,首先要先知道哪些参数能修改模糊度,我在动态调节模糊里说了sigma,blurRadius和图片尺寸都会影响模糊效果,在画面清晰时sigma对模糊的效果影响特别小,而blurRadius必须很大的时候才能达到效果,可是blurRadius太大会照成视频卡顿,所以最简单的方法是先降低画面尺寸,在设置blurRadius和sigma。思路有了,接下来是原理,缩小画面尺寸,先想到的应该是改变视频的长宽,但我们不能去改原文件的长宽,所以只能对解码出来的视原创 2020-09-03 17:51:18 · 2553 阅读 · 4 评论 -
Android opengles 法线贴图(Normal Mapping)
在褶皱的画面上做画面替换,比如一件衣服替换衣服的花纹,再比如旗子上替换图案,由于不知道用的是什么计算就搜索相关的东西,原来这种技术叫凹凸映射,有两种实现方法高度纹理(height map)和法线纹理(normal map),原理方面我也不太懂,所以就不说了,有兴趣可以自己搜索相关内容,我在网上找到了法线纹理的实现方法normalMapping,高度纹理以后找找看法线纹理是将原图通过法线贴图计算出法线向量,最后渲染出来凹凸感生成法线贴图的工具网上有很多,可以自己搜索代码和素材都原创 2020-05-19 10:28:40 · 572 阅读 · 0 评论 -
android 简单的exoplayer全景播放器
全景播放器网上一搜也是一堆一堆的,还有google推出的vrsdk,所以也没啥好说的,就简单记录一下实现全景主要用到的还是opengles,只要用的开源播放器有setSurface(Surface surface)这个函数,就可以不改播放器源码实现原理很简单只要通过opengles生成个纹理,再通过纹理生成SurfaceTexture,再通过SurfaceTexture生成Surface,...原创 2018-11-02 14:54:56 · 1741 阅读 · 7 评论 -
android 将opengles渲染线程嵌入到exoplayer解码线程内
根据项目需要实现这个功能,所以又开始改exoplayer源码了。我以前也改过修改ExoPlayer源码,获取帧时间,现在我要在这个的基础上进行修改修改VideoTimeListener.java,添加新的回调函数public interface VideoTimeListener { void onVideoTimeChanged(long time); Surface ...原创 2018-11-01 17:59:10 · 978 阅读 · 0 评论 -
android opengles2.0 硬解码时出现bindTextureImage: clearing GL error: 0x502
做硬解码用opengles2.0显示的时候总是出现这个提示,为什么出现完全没有头绪,直到我写新项目发现没有这个提示,然后对比代码发现错误原因硬解码要先生成一个GLES11Ext.GL_TEXTURE_EXTERNAL_OES的纹理,再由这个纹理生成SurfaceTexture,通过SurfaceTexture的updateTexImage()更新纹理数据,在渲染的时候通过GLES20.glBi...原创 2018-11-05 17:35:26 · 9892 阅读 · 7 评论 -
android opengles 抗锯齿
抗锯齿,对opengles来说很简单,只要在配置egl环境的时候添加两行代码就搞定了int confAttr[] = { EGL14.EGL_RED_SIZE, 8, EGL14.EGL_GREEN_SIZE, 8, EGL14.EGL_BLUE_SIZE, 8, EGL14.EGL_ALPHA_SIZE, 8, ...原创 2018-11-08 15:02:53 · 4304 阅读 · 0 评论 -
android opengl es 实现色调H,饱和度S,亮度L滤镜
在opengl es的glsl中把rgb转hsl或转hsv方法在网上很多,一搜一大把,找过来试了试,刚开始很头疼,色调H,饱和度S,亮度L最大值多少?叠加方法是加减还是乘除一头雾水。通过这篇文章RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解,我有了大概的了解,然后就是在代码里一个一个的测试,最终实现了色调H,饱和度S,亮度L的修改,先看看效果这是和android的ColorMa...原创 2018-11-27 16:03:23 · 2037 阅读 · 0 评论 -
android 通过egl实现Service运行Camera
所谓的后台可以是在Activity里打开Camera而不显示画面,也可以在Service内开启Camera,我主要写后者Camera的开启必须要调用setPreviewTexture或setPreviewDisplay,二选一,所以想要在后台打开Camera就需要一个没有画面的SurfaceTexture或SurfaceHolder,SurfaceHolder我不太熟,所以我从SurfaceTe...原创 2018-12-27 15:15:57 · 1134 阅读 · 5 评论 -
Android使用MediaCodec和OpenGL对多段视频画面进行裁剪和拼接
太久没写博客了,由于工作,过年还有孩子出生搞得自己焦头烂额,现在有些时间了就搞点东西。发现浏览量突破10万了,也是挺高兴的,虽然很多东西写的不好,可也看到了自己的进步,也是前年到现在的累积。刚开始我只是学习视频解码,渲染和视频编码,慢慢的也开始搞音频了,本来没想过搞视频编辑这一块的,慢慢的做着做着就接触到了,也没想到会搞成一个系列,等完成了再好好整理一下,废话不多说开始说正题。转gif...原创 2019-03-22 14:19:19 · 5123 阅读 · 6 评论 -
Android opengles 动态调节高斯模糊
高斯模糊网上例子很多,可是找了一下发现都是没有动态计算权重矩阵数组的,基本是把权重矩阵写死了公式我就不说了,网上很多,只是没有发现权重矩阵的计算代码,根据网上的公式的推导代码float a = (float) ((1.0f / 2.0f * Math.PI * Math.pow(sigma, 2.0f)) * Math.exp(-s / (2.0f * Math.pow(sigma, 2...原创 2019-06-13 17:55:07 · 1105 阅读 · 1 评论 -
Android opengles 传数组给shader着色器
最近在研究高斯模糊,有用到传数组给着色器这个功能就记录一下先贴fragment_shader.glsl代码uniform highp float vt[4];void main() { gl_FragColor = vec4(vt[0],vt[1],vt[2],vt[3]);}一个长度为4的float数组,根据数组来显示颜色根据uniform我们在创建program的...原创 2019-06-12 10:57:37 · 1660 阅读 · 0 评论 -
android opengl 纹理压缩 使用带透明通道的etc1
etc1网上资料很多,而带透明通道,也就是alpha通道的方法其实就是mask抠图,先看未处理时的纹理样子再来看处理完的样子带透明通道的etc1其实就是高度加了一倍,在下面加上一个mask来进行抠图,根据这个原理jpg我们也可以自己加上透明通道说完原理来说代码关于etc1的处理代码都在android.opengl.ETC1Util内读取etc1数据用的是ETC1Util...原创 2019-07-16 11:05:20 · 1445 阅读 · 0 评论 -
android 用opengles实现几个简单的ps叠加方法和简单的滤镜再转成bitmap
最近修改滤镜,发现这篇文章终于把photoshop图层叠加模式讲清楚了 ,就想着实现这篇文章的效果,就做了个小demo2019/09/04更新增加了把各种滤镜转bitmap的方法至于效果对不对我也不知道,因为我没装ps就算装了我也不会用那篇文章的最后两个没有实现,收缩和补偿值不知道是啥,也就跳过了关于A和B,我理解为A是背景图片,B是叠加图片,所以shader代码内A是co...原创 2019-08-28 15:58:15 · 1030 阅读 · 0 评论 -
android opengles 实现翻牌效果
前一阵子通过android.graphics.Camera实现翻牌效果,看源码知道是3x3的矩阵,我就想opengles也可以实现,然后就开始动手了首先设置初始矩阵Matrix.perspectiveM(projectionMatrix, 0, 90f, 1, 1, 50);Matrix.setLookAtM(viewMatrix, 0, 0.0f, 0.0f, 1.0...原创 2018-11-02 16:50:22 · 1268 阅读 · 0 评论 -
android 使用ImageReader+共享EGLContext把opengles渲染的图像转bitmap
使用ImageReader把opengles渲染的图像转bitmap以前也实现了,最近学了glRenderbufferStorageMultisample抗锯齿,就想结合起来看看,这是效果感觉glRenderbufferStorageMultisample的抗锯齿效果也不咋样,是不是这样用不对。。EGLContext共享我以前的文章也用过,EGLContext共享的好处就是不用进行重复...原创 2018-11-09 16:24:35 · 3407 阅读 · 1 评论 -
android jni 用c++使用opengles和egl实现离屏渲染
最近在做视频有关的东西,用开源的ffmpeg解码视频,在通过opengl渲染出来,因为有使用到egl就试了试离屏渲染 EGLConfig eglConf;EGLSurface eglSurface;EGLContext eglCtx;EGLDisplay eglDisp; egl用到的就是这四个先初始化 EGLint configSpec[] = { E...原创 2017-08-04 20:20:43 · 4443 阅读 · 0 评论 -
android opengl fbo模式
opengl 有好多o啊,还有ibo,vbo和vao,我都被搞糊涂了...试了试fbo和vbo。fbo是挺有用的,用它实现了多线程渲染,vbo听说能提高效率贴代码public class GLRenderer implements GLSurfaceView.Renderer { private int programId; //vertexData和textu原创 2017-08-18 17:59:18 · 1258 阅读 · 0 评论 -
camera2 opengl实现滤镜效果录制视频 二 双SurfaceView渲染
上一篇用到了EGLUtils这个类,initEGL函数有个EGLContext参数,这篇将用到public void initEGL(EGLContext eglContext, Surface surface) 双SurfaceView渲染其实很简单,只要两个线程,个跑个的的就OK了不过有时候会有特殊需求比如原创 2017-08-22 10:08:32 · 2256 阅读 · 0 评论 -
camera2 opengl实现滤镜效果录制视频 四 录像
对录像这块,没怎么研究视频尺寸,这也是我没有用MediaRecorde的原因,我估计用MediaRecorde报错是尺寸不匹配录像和录音差不多VideoEncoderpublic class VideoEncoder { //视频参数 private static final String VIDEO_MIME_TYPE = "video/avc";//视频类型原创 2017-09-04 17:35:51 · 2155 阅读 · 6 评论 -
camera2 opengl实现滤镜效果录制视频 三 录音
本来是想用MediaRecorder直接录像的,可是好像参数设置错误总是报错就改用MediaCodec了MediaCodec配合MediaMuxer进行录音,以后可以直接用来录像public class AudioEncoder { private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; //原创 2017-08-30 10:21:28 · 950 阅读 · 0 评论 -
camera2 opengl实现滤镜效果录制视频 五 音视频合并
前几篇文章实现了音频和视频的录制,这篇就来实现录制有声音的视频VideoEncoder用于录制视频和编码public class VideoEncoder { private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; //音频通道(单声道) private static final in原创 2017-09-08 14:46:52 · 708 阅读 · 0 评论 -
camera2 opengl实现滤镜效果录制视频 六 摄像头方向(完)
补上demoGitHub摄像头坑还是挺多的,优化了下代码,发现原来的长宽设置不对,就仔细研究了一下显示摄像头数据时要按照摄像头的内部规定长宽来设置,而获得的尺寸都是宽比高大的,也就是横屏尺寸,而且摄像头方向和当前屏幕方向又不一样,所以刚开始的时候画面严重拉伸贴代码Camera2SurfaceViewpublic class Camera2SurfaceView extends...原创 2017-09-21 14:51:20 · 1386 阅读 · 3 评论 -
camera2 opengl实现滤镜效果录制视频 目录
最近研究opengl和 camera2,实现了滤镜功能和录像功能camera2 opengl实现滤镜效果录制视频 一 相机预览camera2 opengl实现滤镜效果录制视频 二 双SurfaceView渲染camera2 opengl实现滤镜效果录制视频 三 录音camera2 opengl实现滤镜效果录制视频 四 录像camera2 opengl实现滤镜效果录制视频 五 音...原创 2017-08-21 08:49:50 · 1825 阅读 · 0 评论 -
android jni基于ffmpeg,opengles,egl的yuv视频播放功能
ffmpeg+opengl,难点就是怎么把数据给opengl渲染其实很简单,只要在GLSurfaceView内创建Surface再传给jni层就能进行渲染了,但这是java层进行渲染,我需要jni进行渲染,所以就放弃GLSurfaceView改用egl开始贴代码java层public class VideoSurfaceView extends SurfaceView implements Sur...原创 2017-08-10 12:33:09 · 2183 阅读 · 8 评论 -
camera2 opengl实现滤镜效果录制视频 一 相机预览
既然要录像,第一步肯定是打开相机了,打开方法网上很多,我是用opengl预览的,就讲opengl部分camera2要显示图像,就要添加surface来进行显示mCameraDevice.createCaptureSession(Arrays.asList(mSurface), new CameraCaptureSession.StateCallback()平常预览都是取surf原创 2017-08-21 16:04:18 · 2178 阅读 · 3 评论 -
android jni调用opengl es fbo部分机型没有画面问题
我手上一台华为,一台小米的手机显示都没这个问题,从同事那借的vivo和三星还有客户用的中兴手机都没有画面,不停的测试发现直接渲染有画面,加上fbo就没有画面!本来想去掉fbo,可发现很多特效都需要fbo实现,所以开始找出问题所在。写了个简单的demo进行测试,用java写的,发现在所有机型上都可以显示,经过认真对比,调用的代码基本是相同的,就是glTexImage2D和glFramebufferT...原创 2018-05-16 16:53:42 · 633 阅读 · 0 评论 -
opengl shader实现透视变换效果
想在手机上实现透视变换的效果,可是不想加opencv,所以只能找opengl的方法,经过不停的寻找终于让我找到了外国一个大神写的算法,写入代码,一运行效果非常好,除了有锯齿,然后发现网页不知道什么时候被我关闭了,找了半天找不到了,算了如果有人发现请告诉我,谢谢接下来贴代码public class TestActivity extends Activity implements G...原创 2018-08-27 18:00:57 · 2974 阅读 · 0 评论 -
ExoPlayer添加滤镜功能
我以前写过一篇修改ExoPlayer源码,获取帧时间,只是简单的获取帧时间,这次升个级,添加滤镜,获取帧时间功能保留,并且用来刷新画面,这样就可以实现某些基于帧时间来实现的滤镜功能了,比如动画效果,当然我这边还是简单的用黑白滤镜来演示效果就不贴了,和我以前写的黑白滤镜播放器一样的。还是基于修改ExoPlayer源码,获取帧时间来修改在VideoTimeListener内添加onSurf...原创 2018-08-21 15:09:32 · 1341 阅读 · 0 评论 -
android 硬解码用opengles3.0渲染视频
想着以后可能会遇到用opengles3.0来处理视频就想了解一下,结果发现网上没有多少这方面的东西,然后就自己摸索了先来说说java端的写法,我这篇就是用java端opengles2.0写的android 简单的exoplayer全景播放器,然后我想改成3.0的,很简单,直接把GLES20改成GLES30,比如GLES30.glGenTextures(1, textures, 0);...原创 2018-11-06 10:00:50 · 1577 阅读 · 1 评论 -
android egl10和egl14
使用起来感觉没啥差别,就是包名和参数不一样,也不知道有什么区别,估计调用的都是c++的egl先贴egl10private EGL10 mEgl;private EGLDisplay mEglDisplay = EGL10.EGL_NO_DISPLAY;private EGLContext mEglContext = EGL10.EGL_NO_CONTEXT;private EGL原创 2017-08-17 09:38:55 · 3294 阅读 · 0 评论