音频hal层总结+frameworks 概要

本文详细介绍了Android音频框架的各个部分,包括HAL层的音频流、策略管理、兼容旧版代码、ALSA管理以及Framework层的结构。重点分析了音频流的处理、ALSA设备文件结构以及不同线程在音频播放和录音中的角色。此外,还探讨了AudioFlinger作为核心组件如何管理和协调音频数据流。

音频hal层总结+frameworks 概要

 

第一部分

三个文件,其中所有类,都为根类.文件地址:

1:Audio.h 有四个类

.audio_stream_out: 主要有四个成员函数: *get_latency  set_volume  write  get_render_position   并且包含: struct audio_stream common;

 

 . audio_stream_in:主要有三个成员函数: set_gain(调音)  read  get_input_frames_lost

   函数getInputFramesLost,调用checkRecordThread_l获取录音线程,然后调用线程的getInputFramesLost函数。

   并且包含: struct audio_stream common;

 

 . struct audio_module {   struct hw_module_t common; };   

 

. audio_hw_device 包含很多成员函数

 

 

2: audio_effect.h 音效文件先不表.

 

3: audio_policy.h 策略管理

①.    audio_policy:

 

②.    audio_policy_service_ops

   

  . typedef struct audio_policy_module { struct hw_module_t common;} audio_policy_module_t;

 

  . audio_policy_device:

    

 

 

第二部分: STUB(模拟测试)程序

   文件目录:  两个文件

1: audio_hw.c

2: audio_policy.c

   这两个程序,其实就是两个Stub(模拟测试)程序. 我们hal层可以参照来写.

 

 

 

第三部分:兼容2.3以前的程序 文件目录:

1: AudioSystemLegacy.h

namespace来看,确实4.0以后可能不用到. Using 使用名字空间表示以下代表在status_t AudioParameter空间可见..

 

2: AudioHardwareBase.h

 

3:AudioHardwareInterface.h

  有三个类, AudioStreamOut  AudioStreamIn   AudioHardwareInterface

 

 AudioStreamIn  成员函员包括以下

其中Read Write 函数是最关键的了.

 

4: AudioPolicyInterface.h

5: AudioPolicyManagerBase.h

上面两个都是音频软硬件策略文件了.

 

 

功能如: 可以看出包括软硬件的策略管理.

 

 

 

第三部分之二(兼容2.3之前代码) 文件路径:

从以下文件名可以知道程序功能:

以前的主程序,主要分为stub   hw_hal   a2dp   policy 等四大块功能.

兼容的方法为如下:

/*

兼容以前的设计,4.0实现一个中间层:hardware/libhardware_legacy/audio/audio_hw_hal.cpp

结构与其他的audio_hw.c大同小异,差别在于open方法:

 

[cpp] view plaincopystatic int legacy_adev_open(const hw_module_t* module, const char* name, 

                            hw_device_t** device) 

{  

    ...... 

 

    ladev->hwif = createAudioHardware(); 

**不,`frameworks/native` 不属于 HAL **。 它属于 **Android 系统的“系统运行时”或“本地系统服务”**,位于 **HAL 之上、Java 框架之下**,是 Android 原生 C/C++ 核心服务的重要组成部分。 --- ## 🧱 Android 架构分(自上而下) ```text +----------------------------+ | Apps (Java/Kotlin) | +----------------------------+ | Java Framework (SDK API) | ← Activity, View, Context 等 +----------------------------+ | Native Framework | ← frameworks/native/... ✅ | (C/C++ System Services) | 如 SurfaceFlinger, InputFlinger, AudioFlinger +----------------------------+ | HAL (Hardware Abstraction Layer) | ← 硬件抽象接口(.so) +----------------------------+ | Linux Kernel | ← 驱动、设备管理 +----------------------------+ ``` > 🔺 `frameworks/native` 在 **HAL 之上**,通过调用 HAL 接口与硬件交互。 --- ## 📁 frameworks/native 是什么? 路径:`/frameworks/native/` 这是 Android 中一系列核心 **本地(native)系统服务** 的集合,使用 C/C++ 编写,运行在独立进程中,提供底能力支持。 ### 主要子目录和对应服务: | 目录 | 功能 | 是否依赖 HAL | |------|------|---------------| | `/gui` | 图形系统:SurfaceFlinger、BufferQueue、Display | ✅ 调用 `gralloc.hal`, `composer.hal` | | `/input` | 输入系统:InputReader、InputDispatcher | ✅ 调用 `inputflinger`,间接读取 evdev 设备 | | `/audio` | 音频系统:AudioFlinger、AudioPolicyService | ✅ 调用 `audio.hal` | | `/binder` | Binder IPC 机制核心 | ❌ 不依赖 HAL,是通信基础 | | `/libui` | UI 基础库(如 DisplayInfo, Rect) | ⚠️ 提供数据结构,不直接调 HAL | | `/cmds/servicemanager` | ServiceManager 守护进程 | ❌ 系统基础设施 | --- ## 🔗 与 HAL 的关系:**调用者 vs 被调用者** - `frameworks/native` 是 **HAL 的使用者(Client)** - HAL 是 **硬件抽象模块的实现者(Server)** ### 示例:显示图像流程 ```text App → Canvas.drawBitmap() ↓ frameworks/native/libs/gui/Surface.cpp ↓ SurfaceFlinger (合成图) ↓ HWC2::Composer (HAL 接口) → libhardware/modules/hwcomposer/ ↓ GPU 或 显示控制器驱动(Kernel) ``` 👉 所以:`frameworks/native` **依赖并调用 HAL**,因此不可能是 HAL 本身。 --- ## 🆚 对比:HAL 在哪里? HAL 代码通常位于: ```bash /hardware/interfaces/ # AIDL HAL 或 HIDL(旧) /vendor/<oem>/interfaces/ # 厂商自定义 HAL /out/soong/.intermediates/ # 编译生成的 .so 文件 ``` 例如: - `android.hardware.graphics.composer@3.0` - `android.hardware.camera.provider@2.4` - `gralloc.default.so`, `audio.primary.mt6895.so` 这些才是真正的 **HAL 实现模块**,以 `.so` 动态库形式存在。 --- ## ✅ 总结:`frameworks/native` 的定位 | 特性 | 说明 | |------|------| | **级** | 系统服务(Native System Services) | | **语言** | C/C++ | | **作用** | 实现核心系统功能(输入、图形、音频等) | | **是否属于 HAL** | ❌ 否 | | **是否调用 HAL** | ✅ 是,它是 HAL 的客户端 | | **运行方式** | 作为系统服务进程运行(如 `surfaceflinger`, `inputflinger`) | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值