- 博客(253)
- 资源 (1)
- 收藏
- 关注

原创 【置顶】 博文汇总
23年底了,想来也工作十年,也一直在csdn输出。这十年,从业务层做到性能优化,再到音视频,再到播放器稳定性相关的native crash。也积累了不少文章,在此汇总一下;另外还有大量的深度源码分析草稿,之后也整理发出来吧。
2023-12-15 18:50:44
1600
原创 音视频 ColorSpace色彩空间详解
基于前篇介绍YUV格式,本文继续介绍另一个重要概念颜色空间,又叫色彩空间;主要用于在音视频开发中的色彩空间转换。
2025-03-30 14:15:48
326
原创 Android9.x SurfaceView源码分析
本文是继再次对SurfaceView进行源码分析。看了下代码,上篇文章是基于Android4.x的,本篇基于Android9.x再次进行分析,Android从7.0开始支持SurfaceView动画,并建议7.0之后使用SurfaceView替代TextureView,这里主要在Android9.0上分析SurfaceView如何进行动画的。对layout或者layout.getSurfaceView()做缩放动画,有明显的黑影。
2024-12-24 21:31:33
195
原创 C++ lambada表达式、std::bind、std::function
本文介绍c++ lambada常见的表达式,语法太多了,用到的时候再补充。一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。
2024-12-23 08:00:00
324
原创 C++ 类与构造函数 三五法则
定义了拷贝操作的类类通常拥有一个资源,而拷贝成员必须拷贝此资源。但是拷贝一个资源会导致一些额外开销。在这种拷贝并非必要的情况下,定义了移动构造函数和移动赋值运算符的类就可以避免此问题。
2024-06-02 09:08:44
1243
1
原创 MediaCodec源码分析 ACodec状态机详解
UninitializedState:未初始化状态。在业务层调用完成后切换到LoadedState。LoadedState:表示解码器已经加载完了;调用,和后,在LoadedState::onStart中调用让omx进入可Idel状态,后切换到LoadedToIdleState状态。LoadedToIdleState:初始化Buffer,解码器可用了;在接收到OMX_StateIdle返回后,并发送让omx切换到执行态,后切换到IdleToExecutingState状态。
2024-03-17 10:55:06
311
原创 MediaCodec源码分析 状态简单介绍
本文分析MediaCodec.h层的状态机,下篇介绍ACodec状态机,基于7.0代码。During its life a codec conceptually exists in one of three states: Stopped, Executing or Released.Stopped 状态具有三个子状态:Uninitialized、Configured 和 Error。有三种方式可以使 MediaCodec 进入 Uninitialized 子状态:使用工厂方法创建 MediaCodec
2024-03-17 10:43:17
183
原创 MediaCodec源码分析 Codec消息轮转
本文梳理MediaCodec的消息轮转流程,基于7.0代码。MediaCodec底层实现为JMediaCodec、MediaCodec.cpp、ACodec,他们之间是通过media包下的ALooper、AHandler、AMeesage这一套机制进行线程间通信的。本文就是分析这里的流程,先分析ALooper这一套,然后再分析MediaCodec.java是怎么调用操作下去的,ACodec又是如何跟MediaCodec.cpp通信的。
2024-03-13 11:38:59
371
2
原创 Android Native Hook 深入理解PLT hook
本文介绍NativeHook技术里的PLT hook,参考开源的xhook和bhook进行理解,本文不涉及该hook技术源码的分析,只分析大体原理,用于在进行修复稳定性问题时候寻找hook点使用。
2023-12-22 20:28:28
1616
原创 Android7.x SurfaceView源码分析
更改layoutParams、surfaceView.setVisibility、滑动等基本任何一个对view的操作都会引起updateWindow,所以我们在对SurfaceView操作的时候要加倍小心,避免引起多次updateWindow,从回调上看,就是避免多次触发sufaceChange。通过调整surfaceViewContainer大小、surfaceHolder.setFixedSize,这三种方式均能触发surfaceChange。
2023-09-24 21:18:17
642
原创 MediaCodec源码分析 configure流程
本文梳理MediaCodec configure流程,基于7.0代码,这里只分析AVC和HEVC的视频硬解,流程图如下。
2023-09-12 08:00:00
469
原创 MediaCodec源码分析 createByCodecName流程
本文梳理MediaCodec初始化流程,即create流程,基于7.0代码。流程图如下,创建流程还是比较清晰简单的。
2023-09-07 08:00:00
400
原创 arm体系结构:汇编指令
ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。
2023-08-26 16:11:51
629
原创 Android 设置线程优先级源码分析
Android中设置线程优先级有thread.setPriority()方式和Process. setThreadPriority()两个方法。使用Process. setThreadPriority()进行更精准的设置,thread.setPriority可能会将线程优先级设置的比background还低,导致线程运行获取不到足够的时间片,出现不可知问题。本篇文章对这两种设置线程优先级的API的进行源码分析。
2023-05-27 17:26:26
610
原创 Android 创建线程源码分析 JavaThread&NativeThread
本文分析在Android中创建线程时候的源码分析,即JavaThread和NativeThread。
2023-05-20 17:59:32
842
原创 Android 性能优化 命令行查看CPU使用率
本文介绍cpu使用率概念,和使用ps命令、top命令和dumpsys cpuinfo命令来查看cpu使用率,帮助我们了解应用程序在运行过程中的整体状态和各个线程状态。
2023-05-06 23:28:21
4514
1
原创 C语言 非本地跳转 实现native层TryCatch
C语言的本地跳转是指goto、break、continue等语句,但是这个语句最大局限就是只能实现函数内部的跳转。C 语言提供了一种用户级异常控制流形式,称为非本地跳转(non local jump),它将控制直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用—返回序列。
2023-04-19 23:05:20
556
原创 Android ART&Dalvik虚拟机 追踪对象分配
本文介绍Dalvik虚拟机中的Allocation Tracker,用于追踪dalvik内存分配,能直观的看到分配了什么对象,和分配对象的堆栈。
2023-04-09 15:20:53
168
原创 Android ART虚拟机 GC流程分析
本文分析ART虚拟机的GC流程,主要函数从CollectGarbageInternal开始。当配置CMS为默认回收器时:- collector_type_为kCollectorTypeCMS。- foreground_collector_type_取值为kCollectorTypeCMS。它代表程序位于前台时使用的回收器类型。- background_collector_type_的取值为kCollectorTypeHomogeneousSpaceCompact。它代表程序位于后台时使用的回收器类型。
2023-04-05 14:01:14
799
原创 Android ART虚拟机 GC的各种类型
本文介绍ART虚拟机的GC类型,为下篇介绍ART的GC做准备。每个Space都有自己的gc回收策略,如下图所示:- kGcRetentionPolicyNeverCollect:不需要回收某个Space所包含的垃圾对象(因为该Space可能不存在垃圾对象)。- kGcRetentionPolicyAlwaysCollect:每次垃圾回收都需要处理某个Space空间。- kGcRetentionPolicyFullCollect:直到最后时刻才回收某个Space空间中的垃圾对象。
2023-04-04 23:23:13
663
原创 Android ART虚拟机 对象创建内存分配流程
本篇文章介绍我们在日常开发使用Java时new对象的时,ART在堆上的内存分配是如何分配的。内存又和gc相关,下篇文章会分析ART的gc流程。本文可以参考之前写的Dalivk虚拟机下的对象创建时内存分配流程一起看,会对ART虚拟机理解的更深刻些。
2023-04-03 23:38:55
652
原创 Android ART虚拟机 Space类体系
在ART虚拟机实现中,内存分配和释放的算法是封装在不同的Space中来完成的。而外部使用者只能借助Space及派生类的接口来完成内存的分配与释放。通过阅读这些Space的实现,可以看出ART虚拟机的一个重要的特点就是大量使用映射内存,相较于Dalvik虚拟机来说在内存分配上管理的更细致。
2023-04-02 18:41:38
1428
原创 Android ART虚拟机 堆Heap类构造函数
本文主要介绍Heap的构造函数,从构造函数里大量使用各种Space,可以看出ART虚拟机的一个重要的特点就是大量使用映射内存。主要代码在art/runtime/gc/heap.cc里。
2023-04-01 23:04:10
1023
原创 Android ART虚拟机 关键类
本文介绍ART虚拟机中的关键类,方便之后对ART更方便的理解。此处几个类和dalvik一脉相承,也可以更好的理解dalvik里面的GC模块。
2023-03-31 22:56:40
586
原创 Andriod ART虚拟机 启动和初始化
之前整理了一系列Dalvik虚拟机的关于堆内存和GC的文章,轮到对ART内存进行分析优化了,继续整理输出一波,本篇为ART虚拟机系列的第一篇,介绍ART虚拟机的启动和初始化。本ART系列基于7.0代码分析。
2023-03-29 20:30:07
725
原创 Android Dalvik虚拟机 堆内存管理 增长&释放
本篇继续介绍安卓dalvik虚拟机系列,介绍Dalvik虚拟机的堆内存管理,即堆是如何增长和释放的。
2023-03-04 14:46:36
979
深入理解Android内核设计思想第一版高清完整带目录
2018-05-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人