Android OpenGL 渲染相机预览画面显示体系

news/2024/3/29 0:53:40/文章来源:https://blog.csdn.net/weixin_47592544/article/details/130324837

OpenGL能进行高效得渲染图形图像,并支持各种复杂的特效和动画。

而在 Android 当中,运用的是OpenGL ES,它是OpenGL的一个轻量级版本,专门用于在移动设备、游戏控制台、嵌入式系统等嵌入式环境中使用。

它可以做相机滤镜或者图片滤镜的效果,以相机滤镜为例:

首先 Camera 把摄像头收集到的数据传给 SurfaceTexture,在初始化 SurfaceTexture 时会与一个纹理ID相互进行绑定,而一个纹理ID对应一个纹理对象,openGL根据纹理ID获取到纹理对象后,渲染成帧数据,再通过 EGL 显示在 Surface 上。


纹理:是一种可以被 OpenGL 识别和使用的渲染数据源

纹理对象:是一个用于存储和处理纹理数据的对象

纹理ID:用于标识和操作这个纹理对象的唯一编号,类似于身份证号码

SurfaceTexture:将数据转换为OpenGL ES可用的纹理,并将其更新到绑定的纹理对象中,以供OpenGL ES进行渲染和显示

EGL:它是OpenGL ES与底层窗口系统(如Android、Linux等)之间的中间层,用于管理与窗口系统的交互以及OpenGL ES渲染表面的创建、绑定和显示等操作。


关于 GLSurfaceView: 

GLSurfaceView是Android SDK提供的一个用于显示OpenGL ES图形渲染结果的视图,其主要特点是可以在独立的线程上进行OpenGL渲染,以避免卡顿和界面卡死的问题。最主要是提供EGLOpenGL ES环境的创建和管理,这些环境是OpenGL渲染的基础。

详细的逻辑可以参考:https://github.com/xufuji456/FFmpegAndroid中的相机滤镜部分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102230.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

seata1.6.0 单机,集群搭建 基于nacos注册中心 mysql数据库

seata1.6.0 单机,集群搭建 基于nacos注册中心 mysql数据库 大纲 1 单机搭建2 集群搭建 由于项目中的dubbo版本为2.6.0 故客户端程序(TM RM)使用seata-all 1.4.2 ,服务端(TC)使用seata-server-1.6.0.zip …

MIT6.S081操作系统实验2021(xv6系统)——lab1 Xv6 and Unix utilities

MIT6.S081操作系统实验2021——lab1 参考文章 sleep 要求为xv6实现UNIX 程序sleep;其应该暂停用户指定的ticks number。tick是 xv6 内核定义的时间概念,即计时器芯片的两次中断之间的时间(两次时钟中断之间的时间)。您的解决方…

关于函数栈帧的创建与销毁和可变参数列表

目录 1. 深刻理解函数调用过程1.1 基本概念1.2 函数栈帧的创建于销毁1.2.1 栈帧创建1.2.2 栈帧销毁1.2.3 有趣的现象 2. 了解可变参数列表的使用与原理2.1 可变参数列表与函数栈帧的关系2.2 宏的工作过程2.3 宏的具体实现原理 1. 深刻理解函数调用过程 1.1 基本概念 关于函数…

【MySQL】(7)复合查询

文章目录 单表查询回顾与练习多表查询自连接多行子查询(单列)in 运算符all 关键字any 关键字 多列子查询from 子句中的子查询合并查询 单表查询回顾与练习 注:下面的依旧基于 scott 数据库 MariaDB [scott]> select * from emp; -------…

ASEMI代理ADG736BRMZ-REEL7原装ADI车规级ADG736BRMZ-REEL7

编辑:ll ASEMI代理ADG736BRMZ-REEL7原装ADI车规级ADG736BRMZ-REEL7 型号:ADG736BRMZ-REEL7 品牌:ADI /亚德诺 封装:MSOP-10 批号:2023 安装类型:表面贴装型 引脚数量:10 类型&#xff1…

Mybatis框架超详解及运用总结

Mybatis 一、什么是Mybatils?二、第一个Mybatils程序2.1、创建springboot工程2.2、准备数据2.3、配置MyBatis2.4、编写SQL语句2.5、单元测试 三、JDBC四、数据库连接池五、lombok六、Mybatis基础操作6.1、删除6.2、新增6.2.1、主键返回 6.3、修改6.4、查询6.4.1、数…

推式配货(Push)、拉式配货(Pull)和配送需求计划(DRP)的区别

随着电子商务的迅猛发展,物流配送服务已然成为企业竞争最为核心的环节,一个全面、完善的物流配送方案,能够帮助企业满足客户交期、节约运输和库存成本,促进各环节沟通,提高生产稳定性。同时,物流配送的许多…

垃圾回收概述

什么是垃圾 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收?什么时候回收?如何回收? 垃圾收…

9.7 字符串的指针和指向字符串的指针变量

9.7 字符串的指针和指向字符串的指针变量 一.字符串表示形式二.字符串指针做函数参数1.数组名做函数参数2.数组指针做函数参数 三.字符指针变量与字符数组(1)字符数组是由若干个元素组成,每个元素中存放一个字符。(2)赋…

[HBZ分享] 小米手机如何解BL锁

第一步: 进入【设置—>我的设备–>全部参数–>连续疯狂的点MIUI版本那一行】 第二步:进入【更多设置–>开发者模式】,打开USB调试 与 USB安装 第三步:进入【更多设置–>开发者模式】,进入【设别解锁状…

人工神经网络

1. 单个神经元 🍑 神经网络 即 模型 🍤 输入 四个参数 --> 结果 🍑 模型训练(学习) 例子 🍑 模型的输入x 乘 权值ω 减去阈值θ --> 激活函数 f 🍑 输出 yi (向下传递 或 直接输出) …

JVM性能监测工具-JConsole

JVM性能监测工具-JConsole JConsole工具是JDK自带的图形化性能监控工具。并通过JConsole工具, 可以查看Java应用程序的运行概况, 监控堆信息、 元空间使用情况及类的加载情况等。 JConsole程序在%JAVA_HOM E%/bin目录下 或者你可以直接在命令行对他进…

【致敬未来的攻城狮计划】— 连续打卡第十天:FSP固件库开发及FSP配置详解。

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

手势语言识别模型训练及应用

使用训练集训练模型,使模型能够识别不同手势。 OpenCV-Python环境使用训练集训练模型,使模型能够识别不同手势。系统测试 本项目基于卷积神经网络,通过Python的翻转功能沿垂直轴翻转每个图像,实现手势语言识别的功能。系统流程如图…

数据治理与数据中台架构

随着工业 4.0 时代的到来,传统行业的数字化转型是大势所趋;将数据提高到数据要素层面,让传统的技术在新的场景下发挥出新的作用,是近期研究和探讨的焦点话题。数语科技支持和服务传统行业多年,聚焦于传统数据建模和数据…

catkin_make_workspace

ERROR1 : CMake Error at /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake:113 (message): Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir, which is not found. It does neither exist as an absolute directory nor in ‘${{pr…

.net6 core web项目发布部署到Linux,以守护进程服务的形式部署启动,nginx实现转发

一、发布项目 1、以文件夹形式 2、目标运行时选对应的平台(Linux-x64) 3、文件夹选项:在发布前删除所有现有文件 二、部署项目(安装.net6环境:参考Linux安装 dotnet sdk 6.0) (1)…

网络基础,InetAddress,Socket,TCP,UDP

概念:两台设备之间通过网络实现数据运输网络通信:将数据通过网络从一台设备传输到另一台设备java.net包下提供了一系列的类或接口,供程序员使用,完成网络通信网络:两台或多台设备通过一定物理设备连接起来构成了网络根…

Scala中的Map 集合详解

目录 一、不可变长Map集合 1.map的声明与遍历 2.map的常用方法:get、getOrElse、keys、values、、: 二、可变长Map集合 三、Map的其他方法 key -> value 的语法形式实际上是用库中的隐式转换实现的,实际调用了 Map.apply 方法。Map.a…

盘点并发编程的12种业务场景,面试别再说你不会并发了

前言 并发编程是一项非常重要的技术,无论在面试,还是工作中出现的频率非常高。 并发编程说白了就是多线程编程,但多线程一定比单线程效率更高? 答:不一定,要看具体业务场景。 毕竟如果使用了多线程&…