- 博客(3219)
- 资源 (101)
- 收藏
- 关注
原创 Android9.0 setStereoVolume左右声道流程(二十四)
注意:这条路其实没有走,过后会写第二篇分析到底是怎么控制AudioTrack的左右声道的。栗子:setStereoVolume()控制左右声道流程.private AudioTrack mAudioTrack;int bufferSize = AudioTrack.getMinBufferSize(mSampleRateInHz, mChannelConfig, AudioFormat....
2019-03-06 18:30:21 3698 1
原创 通过AMS分析Binder流程(Java到Kernel)
栗子:public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, D...
2019-01-08 13:00:08 1208
原创 MediaPlayer到ACodec到OMX流程(十九)
********************************************************************************OpenMax(OMX)框架位置及作用1.android系统中只用openmax来做code,所以android向上抽象了一层OMXCodec,提供给上层播放器用。 播放器中音视频解码器mVideosource、mAudiosou...
2018-09-01 18:12:36 3877
原创 Android7.1 audio 播放流程(三十五)
MediaPlayer基本使用方式:播放一首MP3歌曲MediaPlayer mp = new MediaPlayer();mp.setDataSource("/sdcard/test.mp3");mp.prepare();mp.start();//这里初始化CCDeCoder解码器1. IMediaPlayer.cpp/h<1>.头文件frameworks/av/i...
2018-08-03 17:26:31 2348
原创 tshark/wireshark/tcpdump实战笔记(更新中...)
注意Wireshark表示意义:Source: 发送方IP Destination: 接收方IPProtoco: 协议Length: 这里显示的物理层(Frame)数据长度,Frame层长度最长,因为每层都要加上包头。info: 显示发送和接收数据的状态//安装tshark和wireshark# sudo apt-get install tshark# sudo apt-g...
2018-05-18 17:51:19 1835
原创 Android输入事件InputReader和InputDispatcher分析
.C++frameworks/native/services/inputflinger/InputDispatcher.cppvoid InputDispatcher::notifyKey(const NotifyKeyArgs* args) { mPolicy->interceptKeyBeforeQueueing(&event, /*byref*/ policyFlags);}.J
2017-08-10 17:07:25 1823 2
原创 Linux之常用命令备忘<不断更新中...>(十七)
1、模糊查找字符串# find . "*" | xargs grep "ro.hardware" -rn --color# find -name "*.rc" | xargs grep "ro.hardware" -rn --color# find -name "*.rc" | xargs grep -rn --color "ro.hardware"//过滤不想看到的字符...
2016-11-09 15:20:23 1676
原创 Android4.4之Camera2预览流程APP到Driver(十四)
1.APP调用 packages/apps/Camera2/src/com/android/camera/PhotoModule.java private void startPreview() { Log.v(TAG, "startPreview"); mCameraDevice.startPreviewAsync(); mFocu...
2016-11-03 18:59:46 3617
原创 Linux内核之hook机制:call_void_hook用法实例(六十一)
本篇目的:Linux内核之hook机制:call_void_hook用法实例char * lsm;\ ____ptr?\ pos;char * lsm;\ ____ptr?\ pos;char * lsm;\ ____ptr?\ pos;char * lsm;\ ____ptr?\ pos;
2024-04-24 06:15:00 456
原创 Linux内核之宏_IOWR:如何生成ioctl控制命令(六十)
本篇目的:Linux内核之宏_IOWR:如何生成ioctl控制命令在Linux内核中,_IOWR是一个宏,用于生成系统调用中ioctl命令代码的一部分。ioctl(“input/output control”)系统调用是Linux中用于与设备文件交互的接口,它允许用户空间程序向设备驱动发送控制命令,并可能传递或接收数据。_IOWR宏用于构造一个ioctl命令,该命令支持双向数据传输,即可以同时从用户空间读取数据和向用户空间写入数据。
2024-04-24 05:00:00 616
原创 Linux内核之内存回收器:shrinker用法实例(五十九)
本篇目的:Linux内核之内存回收器:shrinker用法实例struct shrinker 是 Linux 内核中用于管理内存回收器的结构体。它允许内核在系统内存紧张时释放不再需要的内存对象,以确保系统的稳定性和性能。
2024-04-23 06:00:00 561
原创 shell进阶之正则表达式:字符转义(十七)
本篇目的:shell进阶之搜索:正则表达式字符转义Shell脚本中的正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它通过特定的模式匹配规则来搜索、替换、查找和操作字符串。正则表达式在Shell脚本中的应用非常广泛,例如在处理日志文件、文本数据、配置文件等方面。然而,正则表达式中包含了一些特殊字符,这些特殊字符在正则表达式中有特殊的意义和用途。当我们在Shell脚本中使用正则表达式时,有时需要对这些特殊字符进行转义,以避免它们被误解为正则表达式的特殊含义。
2024-04-23 04:30:00 540
原创 Android14音频进阶之车载音频系统AAOS:VehicleService服务(六十八)
本篇目的:Android14音频进阶之AAOS车载音频系统VehicleService服务学习接第六十七篇:Android14音频进阶之Perfetto高级调试技巧本篇来分析一下AAOS车载音频系统VehicleService服务启动过程。在AAOS系统未推出之前,大家开发车机系统,都是基于AOSP原生系统开发,Google开始发力自己的车机系统,各大车企也纷纷加入。从而降低了企业的开发成本,但是开发人员的学习成本并没有因此降低。
2024-04-22 07:00:00 1051
原创 Linux内核之slab、slub内存分配器实例用法区别(五十八)
本篇目的:Linux内核之slab、slub内存分配器用法实例区别在Linux内核中,slab和slub都是内存分配器,用于管理内核空间的内存分配和释放。它们的作用是优化内存分配和释放的性能,减少内存碎片化,并提高系统的性能和稳定性。
2024-04-22 05:15:00 635
原创 Linux内核之注册字符设备:alloc_chrdev_region静态注册、register_chrdev动态注册(五十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
2024-04-22 04:00:00 968
原创 Linux内核之内核通知文件系统创建的路径:fsnotify_create用法实例(五十六)
本篇目的:Linux内核之内核通知文件系统创建的路径:fsnotify_create用法实例fsnotify_create 函数是 Linux 内核中的一个函数,用于通知文件系统中的文件或目录创建事件。当新的文件或目录被创建时,内核会调用 fsnotify_create 函数来向文件系统通知机制注册相应的创建事件监听器。// 审计文件系统事件:通知有新的子节点被创建// 发送文件系统通知事件:文件被创建参数说明:inode:新创建的文件或目录所属的父目录的索引节点。
2024-04-21 06:15:00 636
原创 Linux内核之文件系统访问:目录项、inode、物理磁盘访问关系(五十五)
本篇目的:Linux内核之目录项/inode/物理磁盘访问关系在Linux文件系统中,目录项(dentry)、inode和物理磁盘之间的关系是理解和文件访问流程的关键。
2024-04-21 04:15:00 683
原创 Linux内核之目录项关联inode索引节点:d_instantiate用法实例(五十四)
本篇目的:Linux内核之目录项关联inode索引节点:d_instantiate用法实例在Linux内核中,函数是一个关键的文件系统接口,它用于将目录项(dentry)与inode关联起来。这个函数在文件系统的路径查找过程中被调用,对于文件系统的性能和稳定性有着重要影响。
2024-04-20 06:15:00 954
原创 Linux内核之读、写信号量:up_read、up_write用法实例(五十三)
本篇目的:Linux内核之读写信号量:up_read/up_write用法实例在 Linux 内核中,up_read 和 up_write 是用于管理读写信号量的函数,通常与 down_read 和 down_write 函数一起使用,用于实现读写锁。up_read函数:作用:释放读取锁定信号量。用法: up_read(& sem);说明:up_read 函数用于释放先前通过 down_read 函数获取的读取锁。它使得其他进程或线程能够获取读取锁,允许多个并发读取操作。
2024-04-20 05:45:00 943
原创 Linux内核之查找文件系统中文件或目录:lookup_one_len用法实例(五十二)
本篇目的:Linux内核之查找文件系统中路径:lookup_one_len用法实例Linux内核中的函数是文件系统路径查找中的一个关键函数,它用于在VFS(Virtual File System)层中根据给定的路径名查找目录项(dentry)。这个函数的主要作用是在文件系统中寻找与路径名匹配的目录项,它是文件系统交互的基础之一,对于文件系统的性能和稳定性有着重要影响。在Linux系统中,每个文件或目录都有一个与之对应的目录项对象,即dentry。
2024-04-19 09:09:27 777
原创 Linux内核之引用计数器:refcount_set代码实例(五十一)
本篇目的:Linux内核之引用计数器:refcount_set代码实例是 Linux 内核中用于设置引用计数值的函数之一。引用计数是一种常见的内核机制,用于跟踪内核对象的引用次数,以确保在没有任何引用时可以安全地释放对象。其中,r是一个refcount_t类型的指针,表示要设置的引用计数器,而n是要设置的值。通常,函数在初始化内核对象的引用计数时使用,或者在需要重置引用计数器值时使用。在初始化时,它可以将引用计数设置为初始值,通常为 1,表示对象的第一个引用。
2024-04-19 07:42:28 548
原创 Linux内核之虚拟地址转物理页:virt_to_page实现代码实例(五十)
本篇目的:Linux内核之virt_to_page实现与用法实例是Linux内核中用于将虚拟地址转换为对应的页描述符(page descriptor)的函数。在Linux内核中,每个物理内存页都有一个对应的结构,该结构包含了页的详细信息,如页的状态、引用计数、映射信息等。当内核需要操作一个特定的虚拟地址时,它通常会使用来获取该虚拟地址对应的page结构。在Linux内核中,虚拟地址空间被划分为多个区域,如内核空间、用户空间等。每个区域内部又被划分为多个页,每页大小通常为4KB。
2024-04-18 10:03:20 995
原创 Linux内核之kfree如何释放内存(四十九)
本篇目的:Linux内核之kfree实现及用法实例在Linux内核中,kfree是一个用于释放内存的函数,它用于释放通过kmallockzallocvmalloc等函数分配的内存。这些分配函数在内核空间中动态地分配内存,而kfree则用于在不再需要这些内存时将其释放回系统。当一个内核函数需要一些临时内存来存储数据时,它会调用kmalloc或kzallockzalloc是kmalloc的一个变体,它会在分配内存后将其清零)。这些函数返回一个指向分配的内存的指针。
2024-04-18 07:43:54 606
原创 Linux内核之WRITE_ONCE用法实例(四十八)
本篇目的:Linux内核之WRITE_ONCE用法实例WRITE_ONCE是一个宏,它在Linux内核中用于确保对变量的写操作是原子性的,并且不会被编译器的优化重排。这个宏的主要目的是在多线程环境中提供一种安全的方式来写入共享变量,确保其他线程能够看到正确的值。WRITE_ONCE宏的实现利用了C语言的结构体和联合体的特性。首先,它定义了一个匿名联合体,其中包含一个与目标变量x类型相同的成员__val,以及一个字符数组__c。这个字符数组的大小设置为1,是为了确保联合体的大小与x的大小相同。
2024-04-17 06:00:00 575
原创 C语言之aligned用法实例(四十七)
本篇目的:Linux内核之aligned用法实例在Linux内核中,aligned关键字是一个编译器指令,它用于指定变量或结构体的对齐方式。对齐是指变量或结构体在内存中的起始地址与某个数的倍数对齐。对齐对于性能至关重要,特别是在处理对齐敏感的数据类型(如浮点数)或使用SIMD指令时。正确的对齐可以减少内存访问时间,提高程序的性能。在Linux内核中,aligned关键字通常与一起使用,其中n是一个整数,指定了对齐边界。n必须是2的幂,因为大多数处理器和内存系统都对齐到2的幂边界上的地址。
2024-04-17 05:00:00 818
原创 Emacs之增加/取消输入括号自动匹配(一百三十六)
本篇目的:Emacs之取消输入括号自动匹配Emacs 是一个功能强大的文本编辑器,它拥有丰富的扩展和自定义选项,能够满足各种编程和文本编辑需求。其中一个非常实用的功能就是输入括号自动匹配,也就是。是 Emacs 中的一个模式,当你在编辑器中输入一个开放括号(如等)时,Emacs 会自动为你插入一个对应的闭合括号,并将光标放在这两个括号之间。这不仅使代码看起来更加整洁,还有助于减少因遗漏或错位括号而导致的语法错误。要启用,你可以在 Emacs 的配置文件(通常是.emacs或init.el。
2024-04-16 06:15:00 1369
原创 C语言之探秘:访问结构体空指针与结构体空指针的地址的区别(九十三)
本篇目的:C语言之探秘:访问结构体空指针与结构体空指针的地址的区别在C语言中,结构体(Struct)是一种复合数据类型,它可以包含多个不同类型的数据项。指针(Pointer)是一种特殊的数据类型,用于存储变量地址。空指针(Null Pointer)是一个不指向任何有效内存地址的特殊指针。当我们谈论结构体空指针与结构体空指针的地址时,我们需要明确两个概念:结构体变量的地址和结构体指针的地址。结构体空指针:结构体空指针是指未经初始化的结构体指针,它不指向任何有效的内存地址。在C语言中,我们可以使用。
2024-04-16 04:30:00 891
原创 Android14音频进阶之Perfetto高级调试技巧(六十七)
本篇目的:Android14音频进阶之Perfetto高级调试技巧接第六十六篇:Android14音频进阶之<进阶调试>:Perfetto定位系统音频问题上一篇与读者分享如何使用谷歌新一代的性能分析工具Perfetto,可能还有些读者还是云里雾里,本文来一个dump Android各个层级trace的实战篇。Perfetto是一个很强大的性能优化和debug系统疑难杂症的工具,有了它图形化的功能,可以帮我们达到事半功倍的效果,学习它,是为了让它的能力能够释放出来,帮我们从繁杂的debug中解脱出来。
2024-04-15 07:00:00 1660
原创 C语言之哈希表节点插入与遍历学习(九十二)
本篇目的:C语言之哈希表节点插入与遍历学习哈希表(Hash Table)是一种数据结构,用于存储键值对(Key-Value Pair)的集合。它通过哈希函数将键映射到表中的一个位置,以加快查找速度。在哈希表中,数据是以数组的形式存储的,数组的索引是通过哈希函数计算得出的。哈希表的核心思想是将键通过哈希函数转换为一个整数值,然后将这个整数值作为数组索引,将对应的值存储在数组中。当我们想要查找一个键对应的值时,只需要再次使用哈希函数计算数组索引,然后直接访问数组中的对应位置即可。
2024-04-15 06:00:00 731
原创 C语言之offsetof实现分析(九十一)
本篇目的:C语言之offsetof实现分析C语言中的offsetof宏是一个非常有用的工具,它用于计算结构体中某个成员相对于结构体开头的偏移量。这个宏定义在头文件中,它是C标准库的一部分。offsetof宏的使用方法非常简单,它的原型如下:其中,type是一个结构体类型,member是type结构体中的一个成员。offsetof宏的返回值是member成员相对于type结构体开头的字节偏移量。
2024-04-15 04:45:00 748
原创 C语言之typeof用法实例(九十二)
本篇目的:C语言之typeof用法实例C语言的typeof运算符是一个编译时运算符,它用于获取表达式的类型。这个运算符是由GCC扩展引入的,不是标准C语言的一部分。typeof运算符允许我们在编写泛型代码时避免硬编码特定的数据类型,从而提高代码的灵活性和可重用性。typeof运算符的基本形式如下:其中expr是任何有效的C语言表达式。typeof运算符将返回expr的类型,这个类型可以用于定义新的变量、函数参数或者作为类型转换的目标类型。typeof运算符的一个主要优点是它提供了类型推断的能力。
2024-04-14 06:15:00 736
原创 C语言之_Generic用法实例(九十一)
本篇目的:C语言之_Generic用法实例C语言的_Generic表达式是C11标准引入的一个特性,它提供了一种在编译时基于表达式类型选择函数或值的方法。这种机制与C++中的模板元编程相似,但更为简单和受限。_Generic表达式的基本形式如下:其中expr是我们要判断的表达式,是可能的类型,是对应的类型为真时返回的值,是默认返回的值(当没有任何类型匹配时)。_Generic表达式的基本思想是,根据expr的类型,从多个候选值中选择一个。这种选择是在编译时进行的,因此_Generic。
2024-04-14 05:15:00 670
原创 Linux内核之互斥锁mutex_init和自旋锁spin_lock区别及用法实例(四十六)
本篇目的:Linux内核之互斥锁mutex_init和自旋锁spin_lock区别及用法实例在Linux内核中,mutex_init和spin_lock是两种常用的同步机制,用于在多线程或多处理器环境中保护共享资源,防止并发访问造成的数据不一致问题。mutex_init用于初始化一个互斥锁(mutex),它是一种睡眠锁。当一个线程尝试获取一个已经被其他线程持有的互斥锁时,该线程会被阻塞,进入睡眠状态,直到互斥锁被释放。互斥锁适用于那些可能造成较长时间阻塞的场景,因为线程睡眠状态不会消耗CPU资源。
2024-04-13 06:45:00 1370
原创 Linux内核之自旋锁:自旋锁初始化之spin_lock_init用法实例(四十五)
本篇目的:Linux内核之自旋锁:spin_lock_init用法实例Linux内核是一个开源的类UNIX操作系统内核,被广泛用于各种计算机系统。在Linux内核中,同步机制是确保多线程程序正确性的关键部分。是Linux内核中用于初始化自旋锁的一个函数,它用于保护内核中的临界区,防止多个线程同时访问共享资源。自旋锁(spinlock)是一种锁,当一个线程尝试获取一个已被其他线程获取的锁时,该线程将在一个循环中不断地检查锁是否已经可用。这个过程被称为“自旋”。
2024-04-13 05:15:00 836
原创 Linux内核之Binder驱动红黑树:rb_root用法实例(四十四)
本篇目的:Linux内核之Binder驱动关键结构体rb_root用法实例Binder是Android系统中实现跨进程通信(IPC)的机制,它由内核空间的Binder驱动和用户空间的Binder库组成。Binder驱动中的关键数据结构之一是rb_root,它用于管理Binder实体的高速缓存。在Binder驱动中,每个进程都有一个binder_proc结构体,用于管理该进程中的Binder实体和引用。
2024-04-12 06:30:00 830
原创 Linux内核之Binder驱动关键结构体binder_ref用法实例(四十三)
本篇目的:Linux内核之Binder驱动关键结构体binder_ref用法实例Binder是Android系统中一个非常重要的组件,它负责在进程间进行通信(IPC)。Binder驱动是Binder机制的核心部分,它工作在内核空间,负责处理跨进程的通信细节。Binder驱动通过一个名为binder_ref的数据结构来管理进程间的引用关系。在Binder驱动中,每个进程都有一个对应的binder_proc结构体,该结构体包含了进程的所有Binder相关的信息。
2024-04-12 05:45:00 1411
原创 Linux内核之Binder驱动关键结构体binder_node用法实例(四十二)
本篇目的:Linux内核之Binder驱动关键结构体binder_node用法实例是 Android Binder 驱动中用于表示 Binder 实体的核心数据结构。Binder 实体是 Binder 通信机制中的基本单元,它可以是一个服务,也可以是一个客户端句柄。每个 Binder 实体都对应一个结构,该结构包含了实体的各种信息,如引用计数、节点 ID、用户数据等。Binder 实体在 Binder 驱动中通过来管理,它是实现进程间通信(IPC)和服务管理的基础。
2024-04-11 07:45:00 706
原创 Linux内核之Binder驱动关键结构体binder_proc用法实例(四十一)
在 Android 系统中,Binder 是一个提供进程间通信(IPC)的驱动程序。它允许一个进程(称为服务器)提供服务给其他进程(称为客户端)。struct binder_proc 是 Binder 驱动中的一个关键结构体,它代表了一个使用 Binder 机制的进程。这个结构体包含了进程的 Binder 相关的所有信息,如线程池、内存分配情况、已打开的 Binder 实体等。
2024-04-11 05:45:00 1271
原创 Linux内核之等待队列wait_queue_head_t数据结构用法实例(四十)
本篇目的:Linux内核之等待队列wait_queue_head_t用法实例是 Linux 内核中用于实现等待队列的基本数据结构。在 Linux 内核中,等待队列是一种常见的机制,用于让进程在某个条件不满足时进入睡眠状态,当条件满足时被唤醒继续执行。这种机制在很多内核子系统中都有应用,如进程调度、设备驱动、同步等。结构体定义了一个等待队列的头部,它包含了等待队列的基本信息和一个用于同步的锁。等待队列实际上是一个进程列表,这些进程都在等待某个条件变为真。每个等待队列都有一个对应的结构体,用于管理这个队列。
2024-04-10 07:15:00 1384
H.264标准协议(官方中文版)
2020-10-28
HxD_Hex编辑器中文版.zip
2020-09-12
MultimediaFrameworkOverview.zip
2020-09-01
Gstreamer-Openmax-gst-openmax.zip
2020-08-17
GStreamer中文开发手册.zip
2020-07-22
win10removeAll.zip
2020-06-25
vcxsrv-64.1.20.8.1.zip
2020-06-20
debug_hybris_demo.zip
2020-06-03
手写Fuchsia第一个app
2020-03-16
第五代加固技术ARM VMP原理实现与应用.zip
2020-03-01
AUDIO CODEC DAPM详解.zip
2019-12-30
蓝牙Audio调试.zip
2019-12-27
Universal Serial Bus Device Class Definition for Audio Devices.zip
2019-11-16
802.11 Reason Code中文说明(全)
2019-05-21
彻底禁掉Win10 Defender自启动
2022-12-24
Elecard HEVC Analyzer_For_Windows.zip
2021-01-06
JM-H264参考手册
2020-10-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人