RenderDoc 源码分析:OpenGL 资源监控 做渲染相关的开发,离不开图形调试工具。Android Studio 的 AGI 和 Xcode 的 Instruments 都提供了各自平台的相关能力。 若是做跨平台渲染,或追求更高阶的调试能力,需要用到 RenderDoc。 2023-01-15 编程 OpenGL 图形渲染 RenderDoc
继续深挖 Android/iOS 的图形内存共享 前文在聊到跨 CPU/GPU 内存共享时,提到 Android 的外部纹理和 iOS 的 IOSurface,但并未深入展开。 那么,为什么它们能实现内存共享呢? 先说结论:但凡涉及零拷贝内存共享,基本都离不开硬件的 DMA 能力。 下面我们抽丝剥茧地聊一聊。 2022-11-11 编程 Android iOS 操作系统 DMA mmap Vulkan IOSurface 内存管理
聊聊 Android/iOS 的视频采集、渲染、编码 虽然 18 年就做过跨 Android/iOS 双端渲染的项目,但只是单纯地 2D 纹理渲染,不涉及视频流; 而后 19 年参与的图像识别项目,虽然涉及 Camera,但也仅限 Android 侧,而且也不涉及渲染。 近期有机会同时接触到 Android/iOS 直播项目,串联起图像采集/编码/渲染,终于深刻认识到双端图像处理的差异。 下面简单做下梳理。 2022-10-24 编程 Android 图像采集 iOS OpenGL 图形渲染 视频编解码 IOSurface MediaCodec VideoToolBox PBO
基于栈 or 寄存器的 VM 有啥区别? 最近项目中有涉及 Lua,在查阅其 VM 资料时发现:从 5.0 开始,用了十年的基于栈的 VM 切换到了基于寄存器的 VM。 猛然联想到,当年校招背 Android 八股文时,也有一段类似的描述:“与基于栈的 JVM 不同,Dalvik 基于寄存器。” 当时也是一头雾水:有函数调用,就离不开栈,莫非基于寄存器的 VM 还能做到不用栈? 初出茅庐时囫囵吞枣、不求甚解,结果多年后终究还是绕不开这个话 2021-12-01 编程 JVM VM
梳理下 FFmpeg 的一些有用的命令 最近在探索图像处理类应用端到端耗时如何量化,最终方案是: 录视频 -> FFmpeg 分帧 -> 根据帧数量化耗时。 另外,平时自己从网上爬取 m3u8 视频,也会用到 FFmpeg。 所以,这里梳理下 FFmpeg 的一些比较有用的命令。 2020-10-24 编程 音频处理 视频处理 FFmpeg
buffer 流的常见处理策略 最近发现,无论音频还是图像,无论是 AI 识别,还是音视频编码,只要实时处理,都涉及一个关键场景:buffer 流的处理。 这里简单梳理下常见的处理策略。 2020-08-13 编程 流数据处理
图像压缩原理及 libjpeg 源码分析 最近在做图像处理项目的性能优化时发现,RGB 转 JPG 压缩的文件大小有波动,而这个会显著影响图像上传耗时。 为什么会有波动呢?通过了解 JPG 压缩编码的原理,我找到了答案。 2020-06-28 编程 图像编解码 JPEG 视频编解码
Android 图片压缩内存泄漏问题 最近在做 Android 相关的 YUV 图像压缩处理时,发现某些设备有内存泄露问题,这里作个简单梳理。 2019-12-28 编程 Android 图像编解码 JPEG
Kotlin/Native 跨平台实战从入门到“放弃” JetBrains 推出的 Kotlin 语言相信 Android 和 Java 开发者都不陌生。作为一门现代编程语言,不仅支持函数式、Coroutine 等特性,而且拥有良好的 Java 互操作性,将 Java 社区海量的开源项目为我所用。所以,Google 官方已将其列为 Android 的首选语言,对标 Apple 的 Swift。 而最近推出的 Kotlin/Native 则 2019-01-23 编程 Android iOS 跨平台 Kotlin
图形渲染性能优化之压缩纹理 PNG 是我们非常熟悉的一种无损压缩图片格式,常用于网络图片传输。而在图形渲染场景,对于 PNG 素材,我们一般要先将其解码为位图,然后转换为 GPU 纹理,处理完之后再释放内存中的位图对象。(iOS 有 GLKTextureLoader 帮我们封装了这一过程,但其实内部还是会做转换)在这一过程中,解码消耗 CPU,存储位图消耗内存;如果需要处理多帧纹理,则不断分配和释放内存还会造成内存“抖动 2018-10-01 编程 Android iOS 图形渲染 压缩纹理 ETC PVRTC
还在用 OpenGL? Metal 和 Vulkan 了解一下! 最近做一个移动端动效的项目需要用到 OpenGL。我们知道它基于 C 语言实现,拥有跨平台支持;但诞生于上世纪 90 年代的它,必然有历史局限性: 不支持预编译 Shader; 不支持多 CPU 线程; 不支持直接访问底层 GPU CommandBuffer; 所以,苹果 WWDC 2014 推出了新的图形渲染技术 Metal,并且从 iOS 12 开始将 OpenGL 相关 API 标记 2018-09-09 编程 iOS OpenGL Metal Vulkan SPIR-V 图形渲染
iOS 引用 C/C++ 项目:平台差异导致的代码移植 由于 Linux(包括 Android)在嵌入式和服务端的流行,很多 C/C++ 代码都是专为 Linux 而写;加上历史原因,很可能还是基于 GCC 编译; 而 iOS/MacOS 基于类 Unix 系统 BSD,并且从 2011 年的 OS X 10.7 开始,默认的 C++ Runtime 就从 GNU 的 libstdc++ 迁移到 LLVM 的 libc++,二者不完全二进制兼 2017-08-30 编程 iOS C++ Clang 跨平台 epoll kqueue pthread
iOS 引用 C/C++ 项目:交叉编译与 Objective-C++ 最近终于有幸参与公司的 iOS 项目,其中有个 C/C++ 写的库需要调用; 之前对 Android JNI/NDK 调用 C/C++ 还算熟悉,但 iOS 混编 C/C++ 却是初次接触,各种被虐.. 上个周末基本都在解决库的编译问题,爱人 Amble 也耐心帮我查资料、作分析,感动之余,决定把中途遇到的问题记录下来。 2017-06-06 编程 iOS Objective-C C++ CMake Clang