技术博客
  • 归档
  • 分类
  • 标签
  •   
  •   
Code talks.

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

音频处理相关梳理

关于音频处理,最近之前做智能语音助手简单接触过 speex 压缩,最近做直播算是有了更进一步的认识,这里简单做下梳理。

2021-07-18
编程
音频处理

梳理下 FFmpeg 的一些有用的命令

最近在探索图像处理类应用端到端耗时如何量化,最终方案是: 录视频 -> FFmpeg 分帧 -> 根据帧数量化耗时。 另外,平时自己从网上爬取 m3u8 视频,也会用到 FFmpeg。 所以,这里梳理下 FFmpeg 的一些比较有用的命令。

2020-10-24
编程
音频处理 视频处理 FFmpeg

buffer 流的常见处理策略

最近发现,无论音频还是图像,无论是 AI 识别,还是音视频编码,只要实时处理,都涉及一个关键场景:buffer 流的处理。 这里简单梳理下常见的处理策略。

2020-08-13
编程
流数据处理

图像压缩原理及 libjpeg 源码分析

最近在做图像处理项目的性能优化时发现,RGB 转 JPG 压缩的文件大小有波动,而这个会显著影响图像上传耗时。 为什么会有波动呢?通过了解 JPG 压缩编码的原理,我找到了答案。

2020-06-28
编程
图像编解码 JPEG 视频编解码

YUV 相关内容梳理

最近做了差不多半年的图像识别相关项目,涉及到 YUV 图像的处理,这里对相关内容作下简单梳理。

2020-01-18
编程
图像编解码 YUV OpenCV

Android 图片压缩内存泄漏问题

最近在做 Android 相关的 YUV 图像压缩处理时,发现某些设备有内存泄露问题,这里作个简单梳理。

2019-12-28
编程
Android 图像编解码 JPEG

Kotlin/Native 跨平台实战从入门到“放弃”

JetBrains 推出的 Kotlin 语言相信 Android 和 Java 开发者都不陌生。作为一门现代编程语言,不仅支持函数式、Coroutine 等特性,而且拥有良好的 Java 互操作性,将 Java 社区海量的开源项目为我所用。所以,Google 官方已将其列为 Android 的首选语言,对标 Apple 的 Swift。 而最近推出的 Kotlin/Native 则是基于 LL

2019-01-23
编程
Android iOS Kotlin 跨平台

图形渲染性能优化之压缩纹理

PNG 是我们非常熟悉的一种无损压缩图片格式,常用于网络图片传输。而在图形渲染场景,对于 PNG 素材,我们一般要先将其解码为位图,然后转换为 GPU 纹理,处理完之后再释放内存中的位图对象。(iOS 有 GLKTextureLoader 帮我们封装了这一过程,但其实内部还是会做转换)在这一过程中,解码消耗 CPU,存储位图消耗内存;如果需要处理多帧纹理,则不断分配和释放内存还会造成内存“抖动”

2018-10-01
编程
Android iOS 图形渲染 压缩纹理 ETC1 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++,二者不完全二进制兼容(Xco

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
1234

搜索

© 2013 - 2023 | 署名-相同方式共享