Android跨进程渲染-HardwareBuffer

前言 图片流交换是非常常见的需求,为了保证程序的健壮性,可以将这些步骤分为各个进程分别处理,防止中间步骤错误导致主进程crash从而降低用户体验。比如人脸识别、场景识别、直播等场景,这些图片数据可能要经过很多个步骤流转,在各步骤中执行格式转换、图层叠加、图片畸变、颜色矫正等,比如直播中常见的特效和相机图片叠加。 在查阅资料过程中,发现网上相应的资料较少。对我非常有帮助的是一位博主Robot 9写的《基于 HardwareBuffer 实现 Android 多进程渲染》,但我不太想使用aidl来实现跨进程,于是我研究一段时间之后,决定使用Socket+HardwareBuffer来完成跨进程渲染。……

Continue reading

OpenGL或Vulkan渲染YUV格式数据

1 概述 YUV是一种广泛应用于视频和图像处理的颜色空间格式,它通过将亮度和色度分离来表示颜色信息,以提高压缩效率和适应人眼感知。为了深入了解YUV格式及其应用,本文将分为几个部分来讨论。首先,我们将探讨YUV格式的采样方式和存储格式,以及不同采样方式对图像质量和压缩效率的影响。其次,我们将研究RGB到YUV和YUV到RGB的转换方法,包括转换公式和矩阵运算,以便在不同颜色空间之间进行准确的转换。最后会介绍如何利用OpenGL或Vulkan 来处理和渲染YUV格式的图像或视频数据,将讨论使用着色器程序和纹理贴图技术来实现YUV数据的采样、转换和渲染的方法。 2 YUV介绍 YUV,“Y” 表示明亮度(Luminance),也就是像素的灰阶值,还含有较多的绿色通道量。因此需要单纯的 Y 分量就可以显示出完整的黑白图像。“U” 和 “V” 分别表示色度(Chrominance)和浓度(Chroma),用于描述色彩饱和度,U 分量是蓝色通道与 Y(亮度)的差值,V 分量是红色通道与 Y(亮度)的差值。……

Continue reading

Learn_Vulkan02_渲染框架实现_开篇

前言 距离上一次认真写一点东西,又过了1年之久,深感自己拖延症愈加严重,每次定好的计划总是无法做到真正的执行,这期间也可以给自己找个借口,那就是工作很忙,但也有大部分原因是因为感觉自己经验尚浅,想着要后面会不会推翻当下的方案,后面就是不知道从哪开始记录了,最后就进入了焦虑 -> 躺平 -> 焦虑的恶性循环。……

Continue reading

Learn_Vulkan01_重要对象浅析

1 概述 前面一篇文章是Learn_Vulkan00_第一个三角形,渲染出来了第一个彩色三角形。学习新事物的是一个很枯燥的过程,所以我们应该每个阶段想办法获得一些成就感,比如上一篇的三角形,先用最快的方式得到效果,能看到效果就能给我们带来进一步的学习动力。 上一个案例中用到的对象我只是列了一个列表,简单描述了各个对象的作用。但描述还是较为简短,在进入更复杂的Vulkan程序之前,还是想把几个重要对象梳理一遍。 层和扩展 实例 窗口表面 物理设备和队列族 逻辑设备和队列 交换链 说明:本文中的代码就是上篇文章中的代码,编程环境是Windows,如果要在Linux/MacOS中运行,还需要修改配置文件。……

Continue reading

Learn_Vulkan00_第一个三角形

1 概述 本文将描述一个基于C++/Vulkan渲染彩色三角形的案例。因为Vulkan API较为底层,对象也繁多,所以我尽可能只保留必要内容,目的是梳理出来一个Vulkan程序的基础框架,也是对Vulkan各个对象的初步理解。当然也出于这个关系,本文不会对每个API参数都进行详细解释。……

Continue reading

Hello OpenXR - 第一个OpenXR程序

1 概要 本文目标是实现一个最小化OpenXR应用程序,只渲染一个三角形,渲染库采用的是OpenGL,窗口管理使用GLFW,OpenXR Runtime使用的是Monado。因为Monado目前支持的是安卓和Linux平台,本人测试使用的是Ubuntu系统,所以这个DEMO可以在Ubuntu系统下正常运行,但别的系统还没有经过严格测试。 2 环境准备 点击下载cmake,如果使用apt安装,可能版本号过低。……

Continue reading

多层菜单数据查询

在9月份面试时,面试官在一张草稿纸上出了一道省市县联动的题目,并提示我可以使用递归或循环,将数据查询出来封装到对象中。当时我用了循环的方式将其封装,虽说勉强实现,但是代码冗余度高,逻辑性特别差。 碰巧最近项目中业务需要,也是将多级菜单封装到根菜单返回给前端,发现还是会把自己弄得头晕,因此打算认真写一下,当做笔记,也对之前Hibernate,Mybatis框架的复习。下面将会使用Mybatis 和 JPA 分别实现菜单封装业务逻辑,初步规划只要将数据以JSON格式写回前端即是测试通过。 使用Mybatis 数据库表一览……

Continue reading

基于Apache james实现的Java邮件服务器

什么是邮件服务器 邮件服务器是一种用来负责电子邮件收发管理的设备,而邮件服务就是责邮件的收信和发信功能,其最主要有pop和smtp两个协议。关于这两个协议,有着很多的知识点涵盖其中,这里不过多介绍。下面是我接触过的两个可以实现邮件服务的解决方案。 易邮邮件服务 在windows系统下,可以使用 易邮邮件服务 ,这个服务器简单而且实用,用在平时开发,测试或者局域网间的邮件收发还是挺方便的,不过我没有找到官方的,可以将易邮邮件服务安装在Linux的相关资料,因此不使用这个。这是易邮邮件服务的官方网站地址: https://www.……

Continue reading

Linux下安装Nginx

介绍 Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。在高连接并发的情况下,Nginx是Apache服务器不错的替代品。……

Continue reading