`
isiqi
  • 浏览: 16485621 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android Audioflinger

阅读更多

一:录制audioflinger层和audiorecord。

音频系统的对外接口是AudioRecord,它通过iBinder来远程调用Audioflinger的openRecorder函数。AudioRecord构造函数如下:

1:AudioRecord

AudioRecord::AudioRecord(

int streamType,

uint32_t sampleRate,

int format,

int channelCount,

int frameCount,

uint32_t flags,

callback_t cbf,

void* user,

int notificationFrames)

: mStatus(NO_INIT)

{

log_wj("ENTER IN::--%s---%s---\n",__FILE__,__FUNCTION__);

mStatus = set(streamType, sampleRate, format, channelCount,

frameCount, flags, cbf, user, notificationFrames);

}

调用:

status_t AudioRecord::set(int streamType,

uint32_t sampleRate,

int format,

int channelCount,

int frameCount,

uint32_t flags,

callback_t cbf,

void* user,

int notificationFrames,

bool threadCanCallJava)

{

const sp& audioFlinger = AudioSystem::get_audio_flinger();

//获取缓存大小,间接调用我们修改过该函数(经过三次调用中转),返回值为//channelCount*320

AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &inputBuffSizeInBytes);

//远程调用audioFlinger的openrecord函数,openRecord相当于audioflinger为audioRecord

//开辟相应的服务窗口

sp record = audioFlinger->openRecord(getpid(), streamType,

sampleRate, format,

channelCount,

frameCount,

((uint16_t)flags) << 16,

&status);

//创建一个线程用来处理

mClientRecordThread = new ClientRecordThread(*this, threadCanCallJava);

}

AudioRecord相当于一个代理,它的线程是用来处理其它客户的请求。

2:AudioFlinger

sp AudioFlinger::openRecord(

pid_t pid,

int streamType,

uint32_t sampleRate,

int format,

int channelCount,

int frameCount,

uint32_t flags,

status_t *status)

{

// AudioRecord线程

if (mAudioRecordThread == 0) {

LOGE("Audio record thread not started");

lStatus = NO_INIT;

goto Exit;

}

// add client to list

{ // scope for mLock

Mutex::Autolock _l(mLock);

wclient = mClients.valueFor(pid);

if (wclient != NULL) {

client = wclient.promote();

} else {

client = new Client(this, pid);

mClients.add(pid, client);

}

// create new record track. The record track uses one track in mHardwareMixerThread by //convention.

//生成一个recordTrack用来作为数据的中转(audioflinger与audiorecord之间)。

//他们使用audio_track_cblk_t数据结构来传输数据。

recordTrack = new MixerThread::RecordTrack(mHardwareMixerThread, client, streamType, sampleRate, format, channelCount, frameCount, flags);

if (recordTrack->getCblk() == NULL) {

recordTrack.clear();

lStatus = NO_MEMORY;

goto Exit;

}

// return to handle to client------我们的audiorecord。

recordHandle = new RecordHandle(recordTrack);

}

AudioRecord和AudioFlinger操作的都是RecordTrack实例,AudioRecord通过它的执行控制操作(start/stop)和读取操作(read)。Audiorecord的start/stop操作可以理解为一个开关,控制的是AudiorecordThread的运行与否。

Audioflinger则负责从音频设备读取数据放置到

audio_track_cblk_t数据结构中。

二:硬件抽象层

分享到:
评论

相关推荐

    android audioflinger.pdf

    ### Android AudioFlinger详解:构建音频处理核心 #### 引言 在深入探讨Android系统中的AudioFlinger组件之前,我们先来简述一下AudioFlinger的重要性。AudioFlinger是Android音频子系统的核心组件,负责音频数据...

    Android 12 AudioFlinger 分析(RK3588)

    在Android操作系统中,AudioFlinger是音频服务的核心组件,它负责处理音频的混合、路由、硬件交互以及与其他音频服务的协作。本分析将专注于在Android 12版本中,AudioFlinger在Rockchip RK3588处理器上的实现和优化...

    Android深入浅出之AudioFlinger

    ### Android AudioFlinger深入解析 #### 一、AudioFlinger概览 AudioFlinger,作为Android音频子系统的核心组件,扮演着系统音频管理中枢的角色。它不仅负责音频数据的混音、路由,还承担着与硬件层交互的任务,...

    Android P Audio系统笔记:AudioPolicy&AudioFlinger初始化

    AudioFlinger和AudioPolicy两者是Android Audio框架层最主要的两个服务,他们两个是Android框架层的本地服务,在init.rc中启动; AudioPolicyManager负责音频策略定制者,说白了就相当于Audio系统的司令。 Audio...

    Android深入浅出之Audio 第二部分 AudioFlinger分析

    本篇文章将深入探讨AudioFlinger,它是Android音频子系统的基石,负责音频混合、硬件交互以及多应用音频流的同步。我们将通过分析AudioFlinger的源码和使用相关工具来理解其工作原理。 首先,AudioFlinger是一个...

    安卓audio-audioflinger、audiopolicy策略加载

    Android音频框架通过AudioPolicyService和AudioFlinger协同工作,实现音频策略的制定和执行。AudioPolicyService作为策略中心,依据audio_policy.conf文件制定出适应不同场景的音频策略,而AudioFlinger则负责将...

    Jelly Bean AudioFlinger introduction

    AudioFlinger是Android音频子系统的核心组件之一,它负责音频的混音、路由和播放等功能。下面详细介绍AudioFlinger的关键组成部分。 #### 3.1 快速通道混音器 (Fasttrack Mixer) 快速通道混音器是AudioFlinger中的...

    Android音频ALSA.7z

    2. Android AudioFlinger服务的工作原理,如何处理音频流和混合。 3. HAL的设计和实现,以及如何与ALSA驱动进行交互。 4. 音频特效框架和音频策略框架的详细操作。 5. 针对不同硬件平台的ALSA配置和优化。 6. 应用...

    audio上层框架介绍

    本文将深入探讨Android音频上层框架,特别是AudioFlinger和AudioPolicyService,以及它们如何与硬件交互。 AudioFlinger是Android音频系统的核心组件,负责音频的混合、路由和硬件交互。IAudioFlinger.cpp是Audio...

    android Audio ALSA框架分析

    AudioFlinger 是 Android 音频系统的关键组件之一,它位于 Java 层和本地层之间,起到桥梁的作用。AudioFlinger 主要负责: - **初始化**: 初始化音频系统,建立与硬件的连接。 - **创建Track**: 创建用于播放或...

    Android Audio 音频开发

    在 Android 中,音频系统自上而下由 Java 的音频类、音频本地框架类、AudioFlinger 和音频的硬件抽象层几个部分组成。音频系统的各个层次情况如下所示。音频本地框架类是 libmedia.so 的一个部分,这些音频接口对...

    Android audio知识总结.pdf

    本文将深入探讨Android音频框架,特别是AudioTrack、AudioRecord、AudioSystem、AudioPolicyService、AudioFlinger以及Audio HAL,并讨论它们在音视频处理中的作用。 1. AudioTrack: AudioTrack是Android应用程序...

    AndroidAudio系统概述[参考].pdf

    本系统主要分成四个层次:media库提供的Audio系统本地部分接口、AudioFlinger作为Audio系统的中间层、Audio的硬件抽象层提供底层支持、Audio接口通过JNI和Java框架提供给上层。 Android Audio系统的结构如图7-1所示...

    修改和定制Android音频策略

    4. **Audio Server**:控制音频系统的整体行为,包括初始化Audio Flinger等组件。 在车载导航仪的应用场景中,需要特别关注的是Audio Policy Manager,因为它直接决定了音频如何根据不同的使用场景(如导航模式、...

    android audio 音频调试技巧

    Audio flinger: AudioFlinger@2.0 ... ``` 这个命令给出了音频系统的主要组件版本信息。 #### 2. Loopback 声卡录音调试 在进行音频调试时,使用Loopback声卡可以让开发者更容易地测试录音功能。Loopback声卡可以...

    Audio系统综述 Android底层开发

    创建`AudioFlinger`时,会进一步创建音频硬件接口`mAudioHardware`,这一步骤发生在`AudioFlinger::AudioFlinger()`构造函数中,通过调用`AudioHardwareInterface::create()`完成。这个过程涉及打开音频驱动,获取...

    Android7.0 Audio Framework——framework introduce.pdf

    在 Android 7.0 中,AudioFlinger 和 AudioPolicyService 都是在 audioserver 服务进程中加载到 ServiceManager 上的。 小结 Android 7.0 Audio Framework 是一个复杂的音频处理系统,它由多个组件组成,包括 ...

    Android的Audio系统.pdf

    该系统主要分为四个层次:Media 库提供的 Audio 系统的上层接口、AudioFlinger 作为 Audio 系统的中枢、Audio 库的硬件抽象层提供底层的支持、Audio 接口通过 JNI 和 Java 框架提供给上层。 第一部分:Audio 系统...

    android Audio ALSA框架分析.zip

    AudioFlinger是音频处理的核心,它负责混音、路由、同步多个音频流,并将它们发送到硬件设备。HAL作为软件和硬件之间的桥梁,使得AudioFlinger能够以统一的方式与不同的音频硬件交互。 在ALSA层面,Android通常使用...

Global site tag (gtag.js) - Google Analytics