自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 Android AAudio详解

AAudio 是在 Android O 版本中引入的全新 Android C API。此 API 专为需要低延迟的高性能音频应用而设计。应用通过读取数据并将数据写入流来与 AAudio 进行通信。AAudio的mmap模式就是直接将内核alsa 驱动使用的一块内存映射到用户态,这样应用可以将数据直达驱动,节省了中途的拷贝操作,而且读写是基于NOIRQ的,也就是不需要没有用中断机制,用单独的一个计时器驱动读写数据。音频流具有共享模式。

2024-07-10 23:04:29 290

原创 Android AudioTrack音频流播放

本文简单介绍一下音频流在AudioTrack和AudioFlinger之间的传输。

2024-05-16 08:11:48 854 1

原创 Android AudioTrack创建流程

AudioTrack是应用播放音频数据入口,通过该类应用可将解码后的音频数据播放出来。本篇主要简单介绍AudioTrack的创建流程。

2024-05-13 01:09:12 439

原创 Android AudioFlinger & AudioPolicy启动详解

AudioPolicyService和AudioFlinger都是运行在AudioServer进程中的模块,它们的入口是在/frameworks/av/media/audioserver/main_audioserver.cpp文件中的main()函数中,由init进程通过解析audioserver.rc文件启动。main()函数干的事也比较简单,就是创建AudioPolicyService和AudioFlinger对象,并将它们两个作为Binder服务,添加进ServiceManager中。

2024-05-11 01:42:09 890 1

原创 Linux ALSA架构:从tinyalsa到音频驱动(八)

本文讲一下从HAL层的TinyALSA调到ASOC的platform、codec、machine的完整流程,也就是如何从Tinyalsa调到驱动程序中。

2024-04-30 11:07:14 533

原创 Linux ALSA架构:驱动综述(七)

驱动综述

2024-04-26 23:06:53 357

原创 Linux ALSA架构:DAPM初始化(六)

dapm context,直译过来的意思是dapm上下文。可以这么理解:dapm把整个音频系统,按照功能和偏置电压级别,划分为若干个电源域,每个域包含各自的widget,每个域中的所有widget通常都处于同一个偏置电压级别上,而一个电源域就是一个dapm context,通常会有以下几种dapm context:1)属于codec中的widget位于一个dapm context中;2)属于platform的widget位于一个dapm context中;

2023-08-20 17:15:38 344 1

原创 Linux ALSA驱动:Machine驱动(五)

ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用之前的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。

2023-08-20 17:13:26 489 1

原创 Linux ALSA架构:Platform & Codec驱动(四)

ASoC被分为Machine、Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者喇叭的音频信号。在具体实现上,ASoC有把Platform驱动分为两个部分:platform_driver和dai_driver。

2023-08-13 00:54:11 838 1

原创 Linux ALSA架构:DPAM概念详解(三)

Linux ALSA架构:DPAM概念详解(三)一、DAPM简介DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASOC core中完成。用户空间的应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活的音频流(playback/capture)和声卡中的mixer等的配置来

2023-08-13 00:53:27 689 1

原创 Linux ALSA架构:声卡及设备(二)

声卡中挂载着 Pcm Device,用于跟用户空间交互,进行播放和录音,Pcm 设备用 snd_pcm 结构体描述。每个pcm实例对应一个pcm设备文件,一个pcm实例由一个playback stream和一个capture stream组成,这两个stream又分别有一个或多个substreams(ALSA下为1个)组成。可以通过cat /proc/asound/pcm查看设备里面所有已经创建可供用户空间访问的pcm设备的详细信息。int device;

2023-08-09 00:11:02 2235 1

原创 Linux ALSA驱动:框架简介(一)

ALSA,全称是Advanced Linux Sound Architecture,是Linux中提供声音设备驱动的内核组件,应用可以通过ALSA接口实现音频播放、录音、设备通路控制、音量控制、通话等功能。在 Linux 内核设备驱动层,ALSA 提供了,在应用层,ALSA 为我们提供了 alsa-lib,故在其支持下,Linux 应用程序只需要调用 alsa-lib 提供的 API,即可完成对底层音频硬件的控制。

2023-06-15 23:08:01 2451 1

转载 为什么不应该使用“volatile”类型

如果所有的代码都遵循加锁规则,当持有the_lock的时候,不可能意外的改变shared_data的值。那些访问函数正是为了防止意外优化而写的,因此,再说一次,volatile类型不是必需的。3)Jiffies变量是一种特殊情况,虽然每次引用它的时候都可以有不同的值,但读jiffies 变量时不需要任何特殊的加锁保护。在内核中,程序员必须防止意外的并发访问破坏共享的数据结构,这其实是一个完全不同的任务。1)在一些体系架构的系统上,允许直接的I/0内存访问,那么前面提到的访问函数可以使用 volatile。

2023-06-02 09:00:00 88

原创 Linux中断子系统之核间中断

在SMP系统中,IPI用于传递核间事件「inter-core event」。为了使用硬件体系架构相关的特殊功能,要借助中断控制器提供的功能使IPI从一个核传递给另外其他核。因此,在中断控制器驱动初始化时将调用set_smp_cross_call()函数去设定触发IPI的回调函数。IPI不仅需要能够被一个核或多个核捕获,而且还需要能够被中断处理函数辨识出。在使用GIC中断控制器的系统中,小于等于15的硬中断号「hwirq」都属于软件生成中断「SGI,Software Generated Interrupt」

2023-05-26 14:34:25 1122

原创 Linux中断子系统之软中断、tasklet和工作队列

因为它们的运作方式与上文描述的中断类似,但完全是用软件实现的,所以称为软中断(softIRQ)。

2023-05-25 08:50:46 2002 1

原创 Linux中断子系统之中断机制

中断这块的内容大概说完了,不过这里也只是从硬件得到响应后的硬件中断,因为在开始也说过,由于CPU的资源宝贵,而在中断处理期间又不能有任何的抢占操作,所以在硬件中断的过程中,各个中断处理例程只是把一些必须的操作在这里面执行完,然后就把控制权交回,真正做后续处理的是后面将介绍的软中断。

2023-05-24 16:36:00 345

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除