一、基本概念运动规划Motion Planning路径规划Path Planning轨迹规划Trajectory Planning运动规划由路径规划(空间)和轨迹规划(时间)组成,连接起点位置和终点位置的序列点或曲线称之为路径,构成路径的策略称之为路径规划。 路径规划是运动规划的主要研究内容之一。路径是机器人位姿的一定序列,而不考虑机器人位姿参数随时间变化的因素。路径规划(一般指位置规划
转载
2024-09-07 17:37:55
36阅读
1 Playbackthread启动回顾 AudioPloicyService启动和AudioFlinger启动的源码,playbacktrhead的创建流程分析栈如下:AudioPolicyService::onFirstRef(...)->AudioPolicyService::createAudioPolicyManager(...);-->AudioPoli...
原创
2021-08-11 22:59:44
3133阅读
从函数 AudioFlinger::PlaybackThread::Track::start 开始分析。 frameworks\base\services\AudioFlinger.cppstatus_t AudioFlinger::PlaybackThread::Track::start()
{
status_t status = NO_ERROR;
LOGV("start(%
Android AudioTrack音频流播放本文简单介绍一下音频流在AudioTrack和AudioFlinger之间的传输。一、AudioFlinger中数据流从PlaybackThread创建开始:void AudioFlinger::PlaybackThread::onFirstRef()
{
run(mName, ANDROID_PRIORITY_URGENT_AUDIO);
}
转载
2024-06-25 17:35:27
156阅读
上小节我们对AudioTrack创建作了一些概述,知道其大概会做如下事情: 1 使用AudioTrack的属性, 根据AudioPolicy找到对应的output、playbackThread 2 在playbackThread中创建对应的track 3 APP的AudioTrack 和 playbackThread的mTracks中的track之间建立共享内存第一点我们先来讲解第一点,应用程序在
这里以Android N为例:在了解AudioTrack之前,先从网上找了张图简单描述 AudioTrack、PlaybackThread、输出流设备三者的对应关系: 一般来说,输出流设备决定了它对应的 PlaybackThread 是什么类型,PlaybackThread 实例与输出流设备是一一对应的(OffloadThread 只会将音频数据输出到 compress_offload 设备中,M
转载
2024-08-04 17:10:40
212阅读
AudioTrack之数据传递简介接上一篇AudioTrack播放音频之建立通道找到了通道的唯一句柄值output,这个output实质就是在AudioFlinger创建PlaybackThread后,以key-value形式上保存(output, PlaybackThread)的key值,通过output就可以找到播放音频将从哪个PlaybackThread线程传递数据,这个线程相当于一个中间角
转载
2024-01-31 22:39:31
224阅读
本章节主要分析AudioTrack的两种模式以及APP的AudioTrack 和 playbackThread的mTracks中的track 之间建立共享内存是如何实现的。1 AudioTrack端 建立共享内存1.1 AudioTrack的两种模式APP创建AudioTrack,会和 AudioFlinger中PlaybackThread创建的Track 相对应。APP给A...
原创
2021-08-11 22:59:25
2675阅读
MixerThread是Android音频输出的核心部分,所有Android的音频都需要经过MixerThread进行混音后再输出到音频设备。 MixerThread的继承关系如下:MixerThread--->PlaybackThread--->ThreadBase--->Thread在PlaybackThread中,重写了Thread的threadLoop,onFi
转载
2024-04-15 23:05:08
578阅读
上小节我们讲解了音频数据的传输,应用程序会创建一个AudioTrack,然后会到时其与playbackThread之间创建一个共享内存,当然这个共享可以是应用程序创建,也可以是playbackThread创建。应用程序只要把数据写入到共享内存,playbackThread就能从共享内存得到数据,然后播放数据。那么我们来看一个问题,我们有2个应用程序,同时播放声音,每个应用程序都创建了一个Audio
转载
2023-12-09 20:10:56
215阅读
1.1.1 PlaybackThread的循环主体当一个PlaybackThread进入主循环后(threadLoop),音频事务就正式开启了。仔细观察的话,我们会发现这个循环中会不断地调用以 “threadLoop_”开头的若干接口,比如threadLoop_mix、threadLoop_sleepTime、 threadLoop_standby等等。以这样的前缀开头,是因为这些函数都是在thr
AndioFlinger 作为 Android 的音频系统引擎,重任之一是负责输入输出流设备的管理及音频流数据的处理传输,这是由回放线程(PlaybackThread 及其派生的子类)和录制线程(RecordThread)进行的,我们简单看看回放线程和录制线程类关系: ThreadBase:PlaybackThread 和 RecordThread 的基类Reco
AudioFlinger 回放录制线程AndioFlinger 作为 Android 的音频系统引擎,重任之一是负责输入输出流设备的管理及音频流数据的处理传输,这是由回放线程(PlaybackThread 及其派生的子类)和录制线程(RecordThread)进行的,我们简单看看回放线程和录制线程类关系:ThreadBase:PlaybackThread 和 RecordThread 的基类
R
转载
2024-03-26 10:29:04
199阅读
AudioFlinger 音频流管理从 AudioTrack、PlaybackThread、输出流设备三者的关系图中,我们看到 AudioTrack 把音频流数据送入到对应的 PlaybackThread 中,那么应用进程想控制这些音频流的话,比如开始播放 start()、停止播放 stop()、暂停播放 pause(),怎么办呢?注意应用进程与 AudioFlinger 并不在一个进程上。这就需
1、继承自BinderService<AudioFlinger>和BnAudioFlinger。
2、定义了一些枚举常量。
hardware_call_state : AUDIO_HW_OUTPUT_OPEN等
track_state : RESUMING等
3、类 PlaybackThread : public ThreadBase中用到的常量:
e
你好!这里是风筝的博客,欢迎和我一起交流。之前的文章:Android音频子系统(一)------openOutput打开流程 讲述了Output打开过程,那么接下来它是何时如何写入数据的呢?这里以Android N为例//@Threads.cpp
bool AudioFlinger::PlaybackThread::threadLoop()
{
//......
ret = threadLoo
转载
2023-09-28 23:21:16
216阅读
AudioPatch中有篇文章分析的蛮好的但是针对高通平台(例如MSM8953/SDM660等)其实是不支持的AudioPatch的,原因如下:frameworks\av\services\audioflinger\Threads.cppstatus_t AudioFlinger::PlaybackThread::createAudioPatch_l(const struct audio_patc
转载
2024-03-18 06:42:15
439阅读
从上一节分析可以知道,Java层AudioTrack最终也是调用Native层的AudioTrack,所以我们分析的核心就是Native层的AudioTrack。本章节主要分析AudioTrack是如何跟output和playbackthread建立关联的。1 AudioTrack构造器分析C++层的AudioTrack对象它的构造器代码如下:AudioTrack::Audi...
原创
2021-08-11 22:59:27
2095阅读
AndioFlinger 作为 Android 的音频系统引擎,重任之一是负责输入输出流设备的管理及音频流数据的处理传输,这是由回放线程(PlaybackThread 及其派生的子类)和录制线程(RecordThread)进行的。 播放线程的基类都是Thread:class Thread : virtual public RefBase (system/core/include/utils/Thr
该小节我们讲解一下在AudioFlinger这一层的对音量调节的代码流程,分为以下四个部分进行讲解: a. AudioFlinger对master volume, stream volume的初始化与设置 b. PlaybackThread对master volume, stream volume的初始化与设置 c. AudioTrack volume的设置 d. 这3种音量的使用下面是音量调节调