首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    FFmpeg + OpenGLES 实现视频解码播放和视频滤镜

    ):FFmpeg + OpenSLES 实现音频解码播放 FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放 前面 Android FFmpeg 开发系列文章中,我们已经利用...FFmpeg 的解码功能和 ANativeWindow 的渲染功能,实现了的视频的解码播放。...视频解码播放和视频滤镜 1 OpenGL ES 渲染解码帧 经过上面几节的介绍,我们对音视频的解码过程已经比较熟悉了。本文要用 OpenGL 实现视频的渲染,这里再回顾下视频的解码流程: ?...渲染效果 2 添加视频滤镜 这里又回到了 OpenGL ES 开发领域,对这一块感兴趣的同学可以参考这篇Android OpenGL ES 从入门到精通系统性学习教程。...动态网格滤镜 缩放和旋转 我们在 GLSurfaceView 监听用户的滑动和缩放手势,控制 OpenGLRender 的变换矩阵,从而实现视频图像的旋转和缩放。 ? 视频图像的旋转和缩放

    3K10

    FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放

    该文章首发于微信公众号:字节流动 FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放...[FFmpeg + OpenGLES 实现音频可视化播放] 关于音频的可视化,在旧文中,我们曾经实现过将 Android AudioRecorder 采集的实时音频单通道 PCM 数据用 OpenGL...具体的渲染过程和细节,请移步这篇文章,代码已开源: OpenGL ES 实现可视化实时音频 提取一个通道的音频数据 在上一篇文章,我们构建 OpenSLES 播放器时,对数据格式的定义如下: SLDataFormat_PCM...pShort = pByte + i * 4 + 2; //右声道值 short rightChannelValue = *pShort; } 另外需要注意的是,数据的存储方式分为大端序和小端序...由于前期已经系统地阐述了 OpenGL ES 相关知识点,这里就不做展开叙述,详细内容请参考: Android OpenGL ES 从入门到精通系统性学习教程 利用 OpenGL 渲染音频数据,本质上就是根据音频数据的值去构建一组如下图所示的网格

    1.1K30

    FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放

    FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03)...FFmpeg + OpenGLES 实现音频可视化播放 关于音频的可视化,在旧文中,我们曾经实现过将 Android AudioRecorder 采集的实时音频单通道 PCM 数据用 OpenGL 渲染成柱状图...具体的渲染过程和细节,请移步这篇文章,代码已开源: OpenGL ES 实现可视化实时音频 提取一个通道的音频数据 在上一篇文章,我们构建 OpenSLES 播放器时,对数据格式的定义如下: SLDataFormat_PCM...pShort = pByte + i * 4 + 2; //右声道值 short rightChannelValue = *pShort; } 另外需要注意的是,数据的存储方式分为大端序和小端序...由于前期已经系统地阐述了 OpenGL ES 相关知识点,这里就不做展开叙述,详细内容请参考: Android OpenGL ES 从入门到精通系统性学习教程 利用 OpenGL 渲染音频数据,本质上就是根据音频数据的值去构建一组如下图所示的网格

    94130

    OpenGL ES 绘制贝塞尔曲线

    Android Canvas 绘制贝塞尔曲线 Android 自定义 View 时,我们知道 Canvas 类有专门的 API 可以很方便地绘制贝塞尔曲线,但是通常性能较差,更不方便与图像一起处理,因为本文的目的是利用贝塞尔曲线处理图像...绘制贝塞尔曲线 OpenGL ES 的基本绘制单位是点、线和三角形,既然可以绘制点,只需要基于上述公式计算出点,然后将其绘制出来,即可得到我们想要的贝塞尔曲线。...= 4.0f;//设置点的大小 gl_Position = u_MVPMatrix * pos; } //片段着色器 #version 300 es precision mediump float...),防止最先绘制的曲边扇形被覆盖,了解 OpenGLES 混合可以参考旧文Android OpenGL ES 3.0 开发(十二):混合。...参考 Sound Visualization on Android: Drawing a Cubic Bezier with OpenGL ES

    1.3K40

    OpenGL ES 文字渲染进阶--渲染中文字体

    [OpenGL ES 文字渲染进阶--渲染中文字体] 旧文 OpenGL ES 文字渲染方式有几种? 一文中分别介绍了 OpenGL 利用 Canvas 和 FreeType 绘制文字的方法。...FreeType 官网地址: https://www.freetype.org/ 关于 FreeType 开源库多个平台的编译方法,同样请参考旧文 OpenGL ES 文字渲染方式有几种?...值得反复强调的地方,针对 OpenGL ES 灰度图要使用的纹理格式是 GL_LUMINANCE 而不是 GL_RED 。...glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 生成一个 VAO 和一个 VBO ,用于管理的存储顶点、..., GL_NONE); glBindVertexArray(GL_NONE); 每个 2D 方块需要 6 个顶点,每个顶点又是由一个 4 维向量(一个纹理坐标和一个顶点坐标)组成,因此我们将VBO 的内存分配为

    1.4K20

    OpenGL ES 文字渲染进阶--渲染中文字体

    旧文 OpenGL ES 文字渲染方式有几种? 一文中分别介绍了 OpenGL 利用 Canvas 和 FreeType 绘制文字的方法。...FreeType 官网地址: https://www.freetype.org/ 关于 FreeType 开源库多个平台的编译方法,同样请参考旧文 OpenGL ES 文字渲染方式有几种?...值得反复强调的地方,针对 OpenGL ES 灰度图要使用的纹理格式是 GL_LUMINANCE 而不是 GL_RED 。...glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 生成一个 VAO 和一个 VBO ,用于管理的存储顶点、纹理坐标数据..., GL_NONE); glBindVertexArray(GL_NONE); 每个 2D 方块需要 6 个顶点,每个顶点又是由一个 4 维向量(一个纹理坐标和一个顶点坐标)组成,因此我们将VBO 的内存分配为

    1.9K20

    NDK OpenGLES3.0 开发(八):坐标系统

    的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。...GLM 可以在 Github 上下载,把头文件的根目录复制到你的includes文件夹,然后你就可以使用这个库了。...通过这四个参数我们定义了近平面和远平面的大小,然后第五和第六个参数则定义了近平面和远平面的距离。这个指定的投影矩阵将处于这些 x,y,z 范围之间的坐标转换到标准化设备坐标系中。 透视投影 ?...第三和第四个参数设置了平截头体的近和远平面。我们经常设置近距离为 0.1 而远距离设为 100.0 。所有在近平面和远平面的顶点且处于平截头体内的顶点都会被渲染。...OpenGL 3D 变换实现 实现 OpenGL 3D 效果最简单的方式是在顶点着色器中将顶点坐标与 MVP 变换矩阵相乘: #version 300 es layout(location = 0) in

    1.5K20

    理解 OpenGL ES 混合

    OpenGL ES 混合 OpenGL ES 混合本质上是将 2 个片元的颜色进行调和,产生一个新的颜色。...OpenGL ES 混合发生在片元通过各项测试之后,准备进入帧缓冲区的片元和原有的片元按照特定比例加权计算出最终片元的颜色值,不再是新(源)片元直接覆盖缓冲区中的(目标)片元。...启用 OpenGL ES 混合使用 glEnable(GL_BLEND);。 然后通过 glBlendFunc;设置混合的方式,其中 sfactor 表示源因子,dfactor 表示目标因子。...4 个通道较小的值; GL_MAX:混合结果的 4 个通道值分别取 2 元素中 4 个通道较大的值; 我们可以为 RGB 和 alpha 通道各自设置不同的混合因子,使用 glBlendFuncSeperate..., 0, 0, 1.0, glm::vec3(2.0f, 0.0f, 0.0f), ratio); glUniformMatrix4fv(m_MVPMatLoc, 1, GL_FALSE, &m_MVPMatrix

    1.2K20

    NDK OpenGL ES 3.0 开发(十三):实例化(Instancing)

    OpenGL ES 实例化 OpenGL ES 实例化(Instancing)是一种只调用一次渲染函数就能绘制出很多物体的技术,可以实现将数据一次性发送给 GPU ,告诉 OpenGL ES 使用一个绘制函数...OpenGL ES 着色器中有一个与实例化绘制相关的内建变量 gl_InstanceID。...效果图 利用内建变量 gl_InstanceID和偏移数组进行实例化绘制还存在一个问题,那就是着色器中 uniform 类型数据存在上限,也就是 u_offsets 这个数组的大小有限制,最终导致我们绘制的实例存在上限...) { outColor = texture(s_TextureMap, v_texCoord); } 设置 VAO 和...(GL_ARRAY_BUFFER, m_VboIds[1]); glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec3) * 125, &translations[

    1.2K30
    领券