opengl

FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视频滤镜

若如初见. 提交于 2020-10-25 09:11:40
该原创文章首发于微信公众号:字节流动 FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放 FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放 前面 Android FFmpeg 开发系列文章中,我们已经利用 FFmpeg 的解码功能和 ANativeWindow 的渲染功能,实现了的视频的解码播放。但是,当你想为播放器做一些视频滤镜时,如加水印、旋转缩放等效果,使用 OpenGL ES 实现起来就极为方便。 OpenGLES 渲染解码帧 经过上面几节的介绍,我们对音视频的解码过程已经比较熟悉了。本文要用 OpenGL 实现视频的渲染,这里再回顾下视频的解码流程: 从流程图中可以看出,解码一帧图像后,首先将对图像进行格式转换,转换成 RGBA 格式,使用 OpenGL 或 ANativeWindow 可以直接进行渲染。 当然,使用 OpenGL 进行渲染时,为了提升性能,可以将格式转换放到 GPU 上来做(即 shader 实现 YUV 到 RGB 的转换),也可以使用 OES 纹理直接接收 YUV 图像数据,这里就不进行展开讲了。

飞凌Linux版LS1028A嵌入式开发板测评分享

痞子三分冷 提交于 2020-10-25 06:45:41
FET1028A- C核心板 基于 NXP 公司的Layerscape LS1028A设计,是对Layerscape 产品线系列化的完善。 Layerscape LS1028A工业应用处理器包括支持TSN的以太网交换机和以太网控制器,可支持融合的IT和OT网络。两个功能强大的64位Arm®v8内核支持 工业控制 的实时处理,以及 物联网 中 边缘计算 的虚拟机。集成的GPU和L C D控制器使人机接口( HMI )系统支持新一代接口。 · 面向工业应用的Armv8双处理器 · 4端口时间敏感网络交换机 · 2个具有时间敏感网络功能的以太网控制器 · GPU和LCD控制器 · 可配置的加密分流引擎 · PCI Express · CAN总线 Layerscape LS1028A功能单元框图 OK1028A-C开发平台(CPU/1. 5G Hz +内存/2GB+eMMC/8GB)支持5个Ethernet网络:1个1000Mbps SGMII HE和QSGMII引出的4个1000Mbps,以及PCIe 2.0、SATA3.0、USB3.0、UA RT 、IIC、 SPI 等接口,板载一颗16M的QSPI Flash和一颗8GB的EMMC,OK1028A-C平台支持QSPI启动和SD/EMMC启动,支持TF 提供了1个标准3.5mm耳机口,以及1个喇叭接口,支持 飞凌 配套的LVDS显示屏

VS Code + MinGW + Clang + OpenGL (vscode 配置 opengl环境)

£可爱£侵袭症+ 提交于 2020-10-24 19:59:35
vscode配置opengl环境会遇到一些问题,这里是在看了一些博文之后给出的一篇完整的可行的配置 首先,要配置C++环境,网上有很多完整的配置C++环境的教程,这里就引用一条 https://www.zhihu.com/question/30315894 上面这篇博文里面使用的是64位环境 (!!!强调一下,你使用的MinGW是64位的 ,那么Clang也要是,glut也要是64位的 ,32位的同理) 这里附上64位需要的glut地址(这里考虑到墙的原因上传到码云 ) https://gitee.com/wentao-k/OpenGlDevelop/tree/master/glut64%E4%BD%8D 下载glut.h , glut32.lib , glut32.dl文件就行(这是我们需要使用到的), 看完第一个博客,你已经配置好你的Clang环境了,也就是C++的环境 然后我们开始配置glut环境,我把vscode需要的配置文件 包括,c_pp_properties.json , launch.json , setting.json , task.json 上传到码云 https://gitee.com/wentao-k/OpenGlDevelop/tree/master/.vscode 然后在vscode中,配置到自己的工作环境下 如图,放到自己创建的.vscode

OpenGL基础51:泛光

对着背影说爱祢 提交于 2020-10-23 20:43:01
一、泛光(Bloom) 如果一个物体的颜色值接近1.0,怎么确定它是否是光源呢?毕竟一张白纸它的颜色也可以是1.0 在此之前,分辨光源往往都是靠的经验,例如你知道这个物体它是个路灯,又或者说根据周围的光照来判断光的中心等等,其实只要使用的模型,都没什么大的问题,而很多游戏中为了体现出更真实的光源,都会给光源加上泛光,以体现出光源向四周发散的光芒,提升光照的效果: 泛光效果只是一个渲染技巧,本质上就是一个模糊处理,它并不能反映出真实的物理世界,但尽管如此,一个完美的算法依旧可以大幅提升画面的效果,泛光的实现可能相对于之前要复杂一些,但是整体难度并没有太高,大致的流程如下: 走正常渲染流程,将渲染得到的结果放入颜色缓冲A中,并同时提取亮色(光源)放入颜色缓冲B中 对于从颜色缓冲B得到的亮色纹理,多次进行模糊处理,最终可以得到一个只有光源且带了泛光效果的纹理C 混合纹理C和纹理A 很多地方在讲泛光时都会提到HDR,是因为在HDR场景中能够更精准的提取亮色,但是不依赖HDR也可以,例如你可以直接提取所有的放射光贴图 minecraft的光影材质包 二、多渲染目标(MRT、Multiple Render Targets) 之前是将渲染的结果存储在一张纹理中,然后紧接着对着整张纹理进行二次处理,例如HDR和模糊之类的,但要实现泛光就需要渲染两张纹理,一张为正常的渲染结果,另一张为提取的亮色

Flutter初始化流程

拈花ヽ惹草 提交于 2020-10-22 10:32:31
1. 引言 最近在做性能优化的时候发现,在混合栈开发中,第一次启动Flutter页面的耗时总会是第二次启动Flutter页面耗时的两倍左右,这样给人感觉很不好。分析发现第一次启动Flutter页面会做一些初始化工作,借此,我梳理了下Flutter的初始化流程。 2. Flutter初始化时序 Flutter初始化主要分四部分,FlutterMain初始化、FlutterNativeView初始化、FlutterView初始化和Flutter Bundle初始化。 我们先看下Flutter初始化的时序图,来整体把握下Flutter初始化的一般流程: Flutter初始化时序 3. 具体分析 3.1 FlutterMain初始化 这部分初始化工作是由Application.onCreate方法中调用开始的,在Application创建的时候就会初始化完成,不会影响Flutter页面的第一次启动,所以这里只是做一个简单分析。 从FlutterMain.startInitialization方法代码中可以轻易看出来,初始化主要分四部分。 前面三部分比较类似,分别是初始化配置信息、初始化AOT编译和初始化资源,最后一部分则是加载Flutter的Native环境。 这部分感兴趣的同学可以看下FlutterMain.java源码,逻辑还是比较清晰的。 public static void