Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Audio System

Sam Huang
August 31, 2020

Android Audio System

Sam Huang

August 31, 2020
Tweet

More Decks by Sam Huang

Other Decks in Programming

Transcript

  1. Android Audio System
    Introduction

    View full-size slide

  2. Outline
    • Background
    • Android Audio System
    • Audio Framework
    • Audio HAL
    2

    View full-size slide

  3. Background
    • Information about this slide
    • Software
    • Android 4.0/4.2
    4

    View full-size slide

  4. Android Audio System
    5

    View full-size slide

  5. Architecture Audio System
    • The complexity of android audio system
    • Soft real-time requirement
    • Large number of usage scenarios
    • Software
    • phone/media player/…
    • different volume setting/…
    • Hardware
    • earpiece/speaker/hdmi/…
    • mic/bluetooth/…
    • Flexibility design
    • good design pattern
    • performance (Java/JNI/binder/…)
    6

    View full-size slide

  6. Architecture Audio System
    7
    Linux Driver
    Audio HAL
    Android Framework
    Java App

    View full-size slide

  7. Android Audio System
    8
    app
    AudioTrack/AudioRecord/…
    (AudioPolicy/AudioFlinger/…)
    Audio HAL
    (open/read/write/…)
    Audio Driver
    control
    flow
    data flow
    p
    c
    m
    d
    a
    t
    a
    Audio
    Policy
    Audio
    Flinger

    View full-size slide

  8. Audio Framework
    9

    View full-size slide

  9. Audio Framework
    10
    router
    receiver 1
    sender 1
    Network Packet Routing
    sender 2
    sender 3
    sender 4
    receiver 2
    receiver 3
    Routing path

    View full-size slide

  10. Audio Framework
    11
    Audio
    Policy Hardware 1
    AudioTrack 1
    Audio Routing (play audio)
    Hardware 2
    Hardware 3
    Audio Flinger
    AudioTrack 2
    AudioTrack 3
    AudioTrack 4
    Java App Audio Framework
    Audio HAL

    View full-size slide

  11. Audio Policy
    • Decide which thread in AudioFlinger should sound be
    attached.
    • stream strategy output
    • stream : VOICE_CALL, TTS, MUSIC, …
    • strategy : PHONE, MUSIC, …
    • output : a thread in AudioFlinger
    • strategy : bridge between software data stream and hardware
    12

    View full-size slide

  12. Audio Policy
    13

    View full-size slide

  13. Audio Policy
    • IOProfile (audio_policy.conf)
    • Content
    • Define all the possible I/O devices
    • Define default I/O device
    • Hierarchical structure
    • hardware module
    • profile
    • sampling_rates/channels/formats/devices/flags
    • With IOProfile, audio policy gets better OO structure.
    14

    View full-size slide

  14. Audio Policy
    15

    View full-size slide

  15. Audio Flinger
    • Several thread to read/write data
    • Create thread by AudioPolicy
    • mixer thread
    • duplicating thread
    • direct output thread
    • Resampler
    • Non-blocking audio I/O
    • AudioWatchdog
    16

    View full-size slide

  16. Audio HAL
    Platform Group
    18
    app
    AudioTrack/AudioRecord/…
    (AudioPolicy/AudioFlinger/…)
    Audio HAL
    (open/read/write/…)
    Audio Driver

    View full-size slide

  17. Audio HAL
    • ALSA (Advanced Linux Sound Architecture)
    • unified interface/SMP/thread-safe/…
    • usespace library
    • alsa-lib
    • tinyalsa
    • tinyplay/tinycap/ tinymix
    • Audio HAL interface
    • volume setting
    • I/O function
    • …
    19

    View full-size slide