SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
Team Emertxe
Android System Development
Day-4
Audio HAL
Audio HAL
(Overview)
● Connects higher-level, audio-specific framework APIs in
android.media to the underlying audio driver and hardware
● Defines standard interface that audio services call into and that you
must implement for your audio hardware to function correctly
● Interfaces are located in hardware/libhardware/include/hardware
Audio Architecture
*source : Android documentation
Audio Architecture
Application
Application framework
Native Framework
Audio HAL
Tiny Alsa
Java
C++
C
Kernel ALSA
Audio Architecture
(Native Framework)
Application framework
Native Framework
Audio HAL
Tiny Alsa
AudioTrack AudioRecord AudioEffect
Audio Flinger
AudioPolicy
Service
Audio HAL
(Implementation steps)
● Implement interfaces described in audio.h,
audio_effect.h files
● Create an audio policy configuration file
– Describe audio topology and package the HAL
implementation into a shared library
● Configure pre-processing effects such as automatic gain
control and noise suppression
Audio HAL
(Interfaces)
●
Main functions -
– hardware/libhardware/include/hardware/audio.h
– audio_stream_t
– stream_callback_t
– audio_stream_out_t
– audio_stream_in_t
– audio_hw_device_t
● Effects (downmixing, echo, or noise suppression)
– hardware/libhardware/include/hardware/audio_effect.h
– audio_effect_library_t
– struct effect_interface_s
Audio HAL
(Interfaces)
● Reference implementation -
– system/media/audio/include/system/audio.h
– device/samsung/tuna/audio
Audio HAL
(Audio policy configuration)
● Naugat introduced new XML based audio policy
– New audio policy configuration file audio_policy_configuration.xml
– Location : /system/etc
– Include build option USE_XML_AUDIO_POLICY_CONF := 1 in device
makefile
● Old policy (audio_policy.conf) is deprecated
– Location : device/<company>/<device>/audio/audio_policy.conf
– Example : device/samsung/tuna/audio/audio_policy.conf
Audio HAL
(Audio policy – non-XML sample)
global_configuration {
attached_output_devices AUDIO_DEVICE_OUT_SPEAKER
default_output_device AUDIO_DEVICE_OUT_SPEAKER
}
audio_hw_modules {
primary {
outputs {
primary {
sampling_rates 44100
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
devices AUDIO_DEVICE_OUT_SPEAKER
flags AUDIO_OUTPUT_FLAG_PRIMARY
}
}
}
}
*frameworks/av/services/audiopolicy/audio_policy.conf
Audio HAL
(Audio policy configuration)
● XML files from other folders can be included using Xinclude element
– Example : <xi:include href=”a2dp_audio_policy_configuration.xml”/>
● Audio policy files
– A2DP: a2dp_audio_policy_configuration.xml
– Reroute submix: rsubmix_audio_policy_configuration.xml
– USB: usb_audio_policy_configuration.xml
Audio HAL
(Audio policy – XML sample)
<audioPolicyConfiguration version="1.0">
<globalConfiguration speaker_drc_enabled="true"/>
<module name="primary" halVersion="3.0">
<attachedDevices>
<item>Speaker</item>
<item>Built-In Mic</item>
</attachedDevices>
<defaultOutputDevice>Speaker</defaultOutputDevice>
</module>
<xi:include href="audio_policy_volumes.xml"/>
<xi:include href="default_volume_tables.xml"/>
</audioPolicyConfiguration>
*frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml
Audio HAL
(Advantages of XML based policy)
●
Audio profiles are now structured similar to HDMI Simple Audio Descriptors and
enable a different set of sampling rates/channel masks for each audio format
●
Explicit definitions of all possible connections between devices and streams
– Previously, an implicit rule made it possible to interconnect all devices attached to the
same HAL module, preventing audio policy from controlling connections requested with
audio patch APIs
– In XML format, topology description now defines connection limitations
●
Support for includes avoids repeating standard A2DP, USB, or reroute submit
definitions
●
Customizable volume curves
– Previously, volume tables were hard-coded
– In XML format, volume tables are described and can be customized
Audio HAL
(shared library)
● Create a device/<company>/<device>/audio directory to
contain your library's source files.
● Create an Android.mk file to build the shared library
● Make file shall contain
– LOCAL_MODULE := audio.primary.<device>
● Create device.mk (see rpi3.mk in device/brcm/rpi/ directory)
Audio HAL
(Preprocessing Effects)
● Default pre-processing effects applied for each AudioSource are specified
in the /system/etc/audio_effects.conf file
● To apply custom effects for every AudioSource, create a
/system/vendor/etc/audio_effects.conf file and specify the pre-processing
effects to turn on
Audio HAL
(Module)
struct audio_module HAL_MODULE_INFO_SYM = {
.common = {
.tag = HARDWARE_MODULE_TAG,
.module_api_version = AUDIO_MODULE_API_VERSION_0_1,
.hal_api_version = HARDWARE_HAL_API_VERSION,
.id = AUDIO_HARDWARE_MODULE_ID,
.name = "Raspberry Pi Audio HW HAL",
.author = "The Android Open Source Project",
.methods = &hal_module_methods,
},
};
● Audio module shall be initialized as mentioned below
● Name shall be HAL_MODULE_INFO_SYM
● The hal_module_methods points to open function
Audio HAL
(hw_module_methods_t)
static struct hw_module_methods_t hal_module_methods = {
.open = adev_open,
};
TinyALSA
Audio HAL
(tinyalsa)
● ALSA is an open source sound architecture for Linux
● TinyALSA is a small ALSA library aimed to be used in Android
● Source code is available in “external/tinyalsa” directory
● Utility executables
– tinyplay
– tinymix
– tinycap
– Tinypcminfo
● Shared library - libtinyalsa
TinyALSA vs ALSA
# Feature TinyALSA ALSA
1 Control Interface Partly support Full Support
2 Mixer Interface No Full Support
3 PCM Interface Partly support Full Support
4 Raw MIDI Interface No Full Support
5 Sequencer Interface No Full Support
6 Timer Interface No Full Support
Audio HAL
(tinyalsa PCM APIs)
*Path: external/tinyalsa/include/tinyalsa/asoundlib.h
# API Description
1 pcm_open () Open PCM device
2 pcm_read () Read PCM audio data from PCM
3 pcm_write () Write data. This is start playback at first write.
4 pcm_close () Close driver
5 pcm_set_config () Set configuration parameters
6 pcm_get_config () Get configuration parameters
7 pcm_is_ready () Check if PCM driver is ready
Audio HAL
(tinyalsa Parameter APIs)
*Path: external/tinyalsa/include/tinyalsa/asoundlib.h
# API Description
1 pcm_params_get () Get parameters
2 pcm_params_get_mask () Get mask
3 pcm_params_get_min () Get min
4 pcm_params_set_min () Set Min
5 pcm_params_get_max () Get Max
6 pcm_params_set_max () Set Max
7 pcm_params_free () Free memory allocated for parameters
8 pcm_params_to_string () Human readable parameter string
9 pcm_params_format_test ()
Audio HAL
(tinyalsa MMAP APIs)
*Path: external/tinyalsa/include/tinyalsa/asoundlib.h
# API Description
1 pcm_mmap_write () Write to shared memory
2 pcm_mmap_read () Read from shared memory
3 pcm_mmap_begin () Request to access a portion of direct (mmap) area
4 pcm_mmap_commit () Completed the access to area requested (using
begin)
5 pcm_mmap_avail () Number of frames ready to be read (capture) /
written (playback)
8 pcm_prepare () Prepare the PCM substream to be triggerable
9 pcm_start () Start a PCM channel that doesn't transfer data
10 pcm_stop () Stop a PCM channel that doesn't transfer data
11 pcm_ioctl () ioctl function for PCM driver
12 pcm_wait () Interrupt driven API
13 pcm_get_poll_fd () Get poll file descriptor
Audio HAL
(tinyalsa Other APIs)
*Path: external/tinyalsa/include/tinyalsa/asoundlib.h
# API Description
1 pcm_get_error () Returns human readable reason (string) for the
last error
2 pcm_format_to_bits () Returns the sample size in bits for a PCM
format
3 pcm_get_buffer_size () buffer size that should be used for pcm_write
4 pcm_frames_to_bytes () buffer size that should be used for pcm_write
5 pcm_bytes_to_frames () buffer size that should be used for pcm_write
6 pcm_get_latency () Get the PCM latency in milliseconds
7 pcm_get_htimestamp () Returns available frames in pcm buffer to read
(in stream) or write (out stream)and
corresponding time stamp
Camera HAL
Camera HAL
(Overview)
● Connects the higher level camera framework APIs in
android.hardware to underlying camera driver and hardware
● The camera HAL provides interfaces for use in implementing camera
pipeline components
● Refer to following files
– camera.h source file
– camera3.h source file
– camera_common.h source file
Camera Architecture
Camera API (v1/v2)
Native API (JNI) / Native Services
Native Camera Library
Camera Services
Camera HAL
Media Server Process
Java
C++
C
Camera Architecture
(APIs)
Camera API (v1/v2)
Android.hardware
.camera
Android.media
.MediaRecorder
Android.hardware
.Camera2
.CameraDevice
Android.hardware
.Camera2
.CameraManager
Android.hardware
.Camera2
.ICameraDeviceUser
Android.hardware
.Camera2
.ICameraService
ICameraService
CameraService
Native Camera Library
Camera Service
CameraDeviceClient
JNI Camera
Context
Stagefright
Native API Native Services
Camera Architecture
(Native Camera Library)
JNI Camera Context
Native Camera Library
ICameraClient
Camera
ICamera
CameraBase
ICameraService
Stagefright
CameraService
android.hardware
.Camera2
.CameraManager
android.hardware
.ICameraService
Camera Architecture
(Camera Service)
Camera
Camera Services
Camera HAL
Device v1
ICameraClient ICameraDevice
callbacks
ICameraService
Listner
CameraDevice
Client
Camera2ClientCameraClient CameraService
CameraHardware
Interface
Camera2Device Camera3Device
Camera HAL
Device v2
Camera HAL
Device v3
Camera HAL
Module
Camera APIsICamera
Camera Architecture
(Camera Services)
Camera Hardware
Interface
Camera HAL
Camera HAL
Device v1
Camera HAL
Device v2
Camera HAL
Device v3
Camera HAL
Module
Camera2Device Camera3Device Camera Service
V4L2 (Linux Kernel)
Camera HAL
(Implementation)
● HAL sits between camera driver and Android framework
● HAL interface is defined in :
– hardware/libhardware/include/hardware/camera.h
– hardware/libhardware/include/hardware/camera_common.h
● Camera_common.h defines camera_module, a standard structure to
obtain general information about the camera
● Declares a camera_device struct that in turn contains a
camera_device_ops struct with pointers to functions that implement
the HAL interface
● Camera parameters are defined in
frameworks/av/include/camera/CameraParameters.h
Camera HAL
(Creating shared library)
● Create a device/<company_name>/<device_name>/camera
directory to contain library's source files
● Create an Android.mk file to build the shared library
● Make file shall contain
– LOCAL_MODULE := camera.<device_name>
– LOCAL_MODULE_RELATIVE_PATH := hw
● Specify camera features by copying the necessary feature XML files
in frameworks/native/data/etc directory with device.mk
● See reference file “device/samsung/tuna/device.mk”
Camera HAL
(Creating shared library)
● Declare camera’s media codec, format, and resolution capabilities in
– device/<company_name>/<device_name>/media_profiles.xml
– device/<company_name>/<device_name>/media_codecs.xml XML files
● Add media_profiles.xml and media_codecs.xml in device.mk
● Add Camera app in PRODUCT_PACKAGES variable in device.mk to be part
of system image
Camera APIs
(v1, V2, V3)
●
Supported camera HAL1 as many devices still rely on it
●
Android camera service supports implementing both HALs (1 & 3)
● Useful when to support a less-capable front-facing camera with
camera HAL1
●
Camera HAL2 is not supported as it was a temporary step on the
way to camera HAL3
●
Single camera HAL module which lists multiple independent
camera devices (each may have own version number)
●
Camera module 2 or newer required to support devices 2 or
newer
Camera3
● Re-designed to
– Increase the ability of app to control camera
– Be more efficient and maintainable
● Additional camera control enables
– Develop high-quality camera app
– Operate reliably across multiple products
– Use device-specific algorithms whenever possible & maximize
quality & performance
● Structures the operation modes into a single unified view
Camera3
● Single unified view results in better user
control for
– Focus and exposure
– Post-processing, such as noise reduction, contrast
and sharpening
●
This simplified view makes it easier for app
developers to use the camera's various
functions
Camera3
HAL operation
● Asynchronous requests for captures come from the framework
● HAL device must process requests in order; for each request,
produce output result metadata, & one or more output image
buffers
● First-in, first-out for requests & results, & for streams referenced by
subsequent requests
● Timestamps must be identical for all outputs from a given request,
so that the framework can match them together if needed
● All capture configuration and state [except for 3A (auto-exposure,
auto-white-balance, auto-focus) control routines] is encapsulated in
the requests and results
Camera3 operation
Framework operation
●
Framework opens device
– camera_module_t common.open()→
●
Framework checks version field & instantiates appropriate
handler for that version of camera hardware device
– camera3_device_t ops initialize()→ →
●
Framework configure streams
– camera3_device_t ops configure_streams()→ →
●
Framework allocate stream buffers
– camera3_device_t ops register_stream_buffers()→ →
Framework operation
●
Framework requests default settings for some number of use cases with
calls to camera3_device_t ops construct_default_request_settings()→ →
●
Framework construct a capture request and send it to HAL
– camera3_device_t ops process_capture_request()→ →
●
HAL notifies framework of a started capture request
– camera3_callback_ops notify()→
●
HAL notifies framework of a finished capture request
– camera3_callback_ops process_capture_result()→
●
Framework calls close the device
– camera3_device_t common close() may be called to→ →
Camera operation flow
Camera Devices
●
LEGACY : These devices expose capabilities to apps through the
Camera API2 interfaces that are approximately the same
capabilities as those exposed to apps through the Camera API1
interfaces. The legacy frameworks code conceptually translates
Camera API2 calls into Camera API1 calls; legacy devices do not
support Camera API2 features such as per-frame controls
●
FULL : These devices support all of major capabilities of Camera
API2 and must use Camera HAL 3.2 or later and Android 5.0 or
later
●
LIMITED : These devices support some Camera API2 capabilities
(but not all) and must use Camera HAL 3.2 or later
Camera modes
● The camera 3 HAL device can implement one of two possible
operational modes
– Limited
– Full
● Full support is expected from new higher-end devices
● Limited mode has hardware requirements roughly in line with those
for a camera HAL device v1 implementation, and is expected from
older or inexpensive devices
● HAL must indicate its level of support with the
android.info.supportedHardwareLevel static metadata entry, with 0
indicating limited mode, and 1 indicating full mode support.
Camera and HAL
(versions)
●
Camera API1
– The app-level camera framework on Android 4.4 and earlier devices, exposed through the
android.hardware.Camera class
●
Camera API2
– The app-level camera framework on Android 5.0 and later devices, exposed through the
android.hardware.camera2 package
●
Camera HAL
– The camera module layer implemented by SoC vendors. The app-level public frameworks are
built on top of the camera HAL
●
Camera HAL3.1
– Version of the camera device HAL released with Android 4.4
●
Camera HAL3.2
– Version of the camera device HAL released with Android 5.0
Enabling Camera
● Add following parameters in /boot/config.txt
● start_x=1
● gpu_mem=256 (128 or more)
Camera Interface
(camera_device_ops_t)
●
set_preview_window
●
set_callbacks (notification and data)
●
enable_msg_type
●
disable_msg_type
●
msg_type_enabled
●
start_preview
●
preview_enabled
●
store_meta_data_in_buffers
Camera Interface
(camera_device_ops_t)
●
start_recording
●
stop_recording
●
recording_enabled
●
release_recording_frame
●
auto_focus
●
cancel_auto_focus
●
take_picture
●
cancel_picture
Camera Interface
(camera_device_ops_t)
● set_parameters
● get_parameters
●
put_parameters (to return memory to HAL)
●
send_command (to driver)
●
release (hardware resources)
●
dump (state of camera)
Camera Interface
(preview_stream_ops_t)
●
deque_buffer
●
enqueue_buffer
●
cancel_buffer
●
set_buffer_count
●
set_buffers_geometry
●
set_crop
●
set_usage
●
set_swap
●
get_min_undequed_buffer_count
●
lock_buffer
●
set_timestamp
Video4Linux (V4L2)
What is V4L2?
●
An open source standard to capture real time
video for linux systems
●
Second version of video for linux
●
V4L2 is two layer driver system
●
Top layer is videodev module
●
Lower layer is collection of several driver modules
●
V4L2 drivers are clients of videodev
V4L2
(Devices)
Device Name Minor Number Description
From To
/dev/video0 /dev/video63 0-63 Video Capturer Devices
/dev/radio0 /dev/radio63 64-127 AM/FM Radio Devices
/dev/vtx0 /dev/vtx31 192-223 Teletext Devices
/dev/vbi0 /dev/vbi15 224-239 VBI Devices
V4L2
(Video Device)
# Members Description
char name[32] Name of the device
int type Type of V4L2 device
int minor Device minor number
Pointer *fops File operations used
Function
pointer
void (*release)(struct
video_device *vfd)
Release function used by the
driver
Void pointer priv The private data
V4L2
(File operations)
# Funcrion Description
1 int (*open)() Called when a file descriptor is opened on the
device file (/dev/videoX)
2 int (*close)() Called on last close (release) of a file descriptor
3 int (*read)() Called to data (buffer) of size count (the number
of bytes of data requested)
4 int (*write)() Called to write data of size count (the number
of bytes of data to write)
5 int (*ioctl)() Called when the application calls ioctl()
6 int (*mmap)() Called when the application calls mmap()
7 int (*poll)() Called when the application calls select()
V4L2
(Property Negotiation)
●
First the application asks for the possibles values
of some property
●
Next chooses one of the possible values
●
Next configures that value
●
Finally checks right configuration of the value
●
Important properties - Video Input, Video Output,
Norm (only for input devices), Modulator (only for
output devices), Input Channel, Window Size
V4L2
(Pixel format negotiation)
●
Pixel format is how every pixel is stored in
memory
●
Application need to know this format to allow the
properly interpretation of that pixel
●
There are two "families" of pixel formats RGB and
YUV
●
Mostly, devices capture natively in YUV formats
●
Video is converted to RGB formats for displaying in
the viewer
V4l2
(Buffers)
● V4L2_MMAP
– Memory mapping (allocated by the kernel)
●
V4L2_USERPTR
– User memory (allocated by user app)
● DMABUF, read/write
– Direct Memory Access (GPU, OpenGL)
– Can handle fullHD (1080p) at 60FPS
V4L2
(Driver Compilation)
●
Step 1 : Copy driver source files in following folder
– kernels/rpi/deriver/media/platform/<device>
●
Step 2 : Edit Makefile to add following lines
– <driver_name>-obj := (add all file which required to build mofules with “.o”
extantion)
– obj-$(CONFIG_<unique word which easly identify and give information about driver>)
+=<driver_name>.o
●
Step 3 : Add following line in Kconfig
– connfig <driver_name which show on menuconfig>
– tristate “<write the purpose of module>”
– default n (Must specify; other options y and m)
– --help--
<write brief description about module to help user selection while building the kernel
module>
V4L2
(Driver Compilation and loading)
● Step 4 : make ARCH=arm menuconfig
– Select driver with m option; save and exit
● Step 5 : Compile module from /kernel/rpi directory
– make ARCH=arm CROSSCOMPILE=<absolute path of compiler> -j4
modules
● Step 6 : copy <driver>.ko file in target board
– system/lib/modules/<kernel version>/kernel/media/v4l2-core
● Step 7 : Run following command
– insmod <driver_name>.ko (to load driver)
– rmmod <driver_name> (to remove driver)
Stay connected
About us: Emertxe is India’s one of the top IT finishing schools & self learning
kits provider. Our primary focus is on Embedded with diversification focus on
Java, Oracle and Android areas
Emertxe Information Technologies,
No-1, 9th Cross, 5th Main,
Jayamahal Extension,
Bangalore, Karnataka 560046
T: +91 80 6562 9666
E: training@emertxe.com
https://www.facebook.com/Emertxe https://twitter.com/EmertxeTweet https://www.slideshare.net/EmertxeSlides
Thank You

Más contenido relacionado

La actualidad más candente

Learning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverLearning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverNanik Tolaram
 
Android audio system(audioflinger)
Android audio system(audioflinger)Android audio system(audioflinger)
Android audio system(audioflinger)fefe7270
 
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)Nanik Tolaram
 
Embedded Android Workshop with Pie
Embedded Android Workshop with PieEmbedded Android Workshop with Pie
Embedded Android Workshop with PieOpersys inc.
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesChris Simmonds
 
Android's Multimedia Framework
Android's Multimedia FrameworkAndroid's Multimedia Framework
Android's Multimedia FrameworkOpersys inc.
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Opersys inc.
 
Android audio system(audio_hardwareinterace)
Android audio system(audio_hardwareinterace)Android audio system(audio_hardwareinterace)
Android audio system(audio_hardwareinterace)fefe7270
 
Q4.11: Porting Android to new Platforms
Q4.11: Porting Android to new PlatformsQ4.11: Porting Android to new Platforms
Q4.11: Porting Android to new PlatformsLinaro
 
Android's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALAndroid's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALOpersys inc.
 
Android Security Internals
Android Security InternalsAndroid Security Internals
Android Security InternalsOpersys inc.
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for LinuxYu-Hsin Hung
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessNanik Tolaram
 

La actualidad más candente (20)

Learning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverLearning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device Driver
 
Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)
 
Android audio system(audioflinger)
Android audio system(audioflinger)Android audio system(audioflinger)
Android audio system(audioflinger)
 
Android IPC Mechanism
Android IPC MechanismAndroid IPC Mechanism
Android IPC Mechanism
 
Low Level View of Android System Architecture
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System Architecture
 
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
 
Embedded Android Workshop with Pie
Embedded Android Workshop with PieEmbedded Android Workshop with Pie
Embedded Android Workshop with Pie
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot images
 
Android's Multimedia Framework
Android's Multimedia FrameworkAndroid's Multimedia Framework
Android's Multimedia Framework
 
Android Binder: Deep Dive
Android Binder: Deep DiveAndroid Binder: Deep Dive
Android Binder: Deep Dive
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
 
Binder: Android IPC
Binder: Android IPCBinder: Android IPC
Binder: Android IPC
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
Android audio system(audio_hardwareinterace)
Android audio system(audio_hardwareinterace)Android audio system(audio_hardwareinterace)
Android audio system(audio_hardwareinterace)
 
Android presentation
Android presentationAndroid presentation
Android presentation
 
Q4.11: Porting Android to new Platforms
Q4.11: Porting Android to new PlatformsQ4.11: Porting Android to new Platforms
Q4.11: Porting Android to new Platforms
 
Android's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALAndroid's HIDL: Treble in the HAL
Android's HIDL: Treble in the HAL
 
Android Security Internals
Android Security InternalsAndroid Security Internals
Android Security Internals
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for Linux
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting Process
 

Destacado

Destacado (20)

Communication Protocols (UART, SPI,I2C)
Communication Protocols (UART, SPI,I2C)Communication Protocols (UART, SPI,I2C)
Communication Protocols (UART, SPI,I2C)
 
Embedded Linux on ARM
Embedded Linux on ARMEmbedded Linux on ARM
Embedded Linux on ARM
 
Linux device drivers
Linux device drivers Linux device drivers
Linux device drivers
 
Embedded C
Embedded CEmbedded C
Embedded C
 
Emertxe : Linux training portfolio
Emertxe : Linux training portfolioEmertxe : Linux training portfolio
Emertxe : Linux training portfolio
 
Interview preparation workshop
Interview preparation workshopInterview preparation workshop
Interview preparation workshop
 
Linux systems - Getting started with setting up and embedded platform
Linux systems - Getting started with setting up and embedded platformLinux systems - Getting started with setting up and embedded platform
Linux systems - Getting started with setting up and embedded platform
 
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernelEmbedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
 
Data Structures & Algorithm design using C
Data Structures & Algorithm design using C Data Structures & Algorithm design using C
Data Structures & Algorithm design using C
 
Embedded C - Optimization techniques
Embedded C - Optimization techniquesEmbedded C - Optimization techniques
Embedded C - Optimization techniques
 
BusyBox for Embedded Linux
BusyBox for Embedded LinuxBusyBox for Embedded Linux
BusyBox for Embedded Linux
 
File systems for Embedded Linux
File systems for Embedded LinuxFile systems for Embedded Linux
File systems for Embedded Linux
 
Introduction to Embedded Systems
Introduction to Embedded Systems Introduction to Embedded Systems
Introduction to Embedded Systems
 
Emertxe : Training portfolio
Emertxe : Training portfolioEmertxe : Training portfolio
Emertxe : Training portfolio
 
Embedded Linux - Building toolchain
Embedded Linux - Building toolchainEmbedded Linux - Building toolchain
Embedded Linux - Building toolchain
 
Resume Preparation - Workshop
Resume Preparation - WorkshopResume Preparation - Workshop
Resume Preparation - Workshop
 
A practical guide to buildroot
A practical guide to buildrootA practical guide to buildroot
A practical guide to buildroot
 
U-Boot - An universal bootloader
U-Boot - An universal bootloader U-Boot - An universal bootloader
U-Boot - An universal bootloader
 
Getting started with BeagleBone Black - Embedded Linux
Getting started with BeagleBone Black - Embedded LinuxGetting started with BeagleBone Black - Embedded Linux
Getting started with BeagleBone Black - Embedded Linux
 
Embedded c
Embedded cEmbedded c
Embedded c
 

Similar a Embedded Android : System Development - Part IV

UplinQ - enhance qualcomm® snapdragon™ audio using android audio ap_is
UplinQ - enhance qualcomm® snapdragon™ audio using android audio ap_isUplinQ - enhance qualcomm® snapdragon™ audio using android audio ap_is
UplinQ - enhance qualcomm® snapdragon™ audio using android audio ap_isSatya Harish
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaAnne Nicolas
 
Multimedia on android
Multimedia on androidMultimedia on android
Multimedia on androidRamesh Prasad
 
OpenMAX Overview
OpenMAX OverviewOpenMAX Overview
OpenMAX OverviewYoss Cohen
 
Sound Recording Glossary
Sound Recording GlossarySound Recording Glossary
Sound Recording GlossaryAidenKelly
 
Ben white ig2 task 1 work sheet
Ben white   ig2 task 1 work sheetBen white   ig2 task 1 work sheet
Ben white ig2 task 1 work sheetBenWhite101
 
International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)ijceronline
 
Sound recording glossary imporved version
Sound recording glossary imporved versionSound recording glossary imporved version
Sound recording glossary imporved versionAidenKelly
 
System_on_Chip_SOC.ppt
System_on_Chip_SOC.pptSystem_on_Chip_SOC.ppt
System_on_Chip_SOC.pptzahixdd
 
A 32-Bit Parameterized Leon-3 Processor with Custom Peripheral Integration
A 32-Bit Parameterized Leon-3 Processor with Custom Peripheral IntegrationA 32-Bit Parameterized Leon-3 Processor with Custom Peripheral Integration
A 32-Bit Parameterized Leon-3 Processor with Custom Peripheral IntegrationTalal Khaliq
 
Android Audio & OpenSL
Android Audio & OpenSLAndroid Audio & OpenSL
Android Audio & OpenSLYoss Cohen
 
Raspberry pi glossary of terms dictionary extended
Raspberry pi glossary of terms dictionary extendedRaspberry pi glossary of terms dictionary extended
Raspberry pi glossary of terms dictionary extendedWiseNaeem
 

Similar a Embedded Android : System Development - Part IV (20)

UplinQ - enhance qualcomm® snapdragon™ audio using android audio ap_is
UplinQ - enhance qualcomm® snapdragon™ audio using android audio ap_isUplinQ - enhance qualcomm® snapdragon™ audio using android audio ap_is
UplinQ - enhance qualcomm® snapdragon™ audio using android audio ap_is
 
Choosing the right processor
Choosing the right processorChoosing the right processor
Choosing the right processor
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
 
Multimedia on android
Multimedia on androidMultimedia on android
Multimedia on android
 
OpenMAX Overview
OpenMAX OverviewOpenMAX Overview
OpenMAX Overview
 
Embedded I/O Management
Embedded I/O ManagementEmbedded I/O Management
Embedded I/O Management
 
Audio Drivers
Audio DriversAudio Drivers
Audio Drivers
 
Sound Recording Glossary
Sound Recording GlossarySound Recording Glossary
Sound Recording Glossary
 
Ig2 task 1
Ig2 task 1Ig2 task 1
Ig2 task 1
 
Ben white ig2 task 1 work sheet
Ben white   ig2 task 1 work sheetBen white   ig2 task 1 work sheet
Ben white ig2 task 1 work sheet
 
The CLAM Framework
The CLAM FrameworkThe CLAM Framework
The CLAM Framework
 
International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)
 
Linux Audio Drivers. ALSA
Linux Audio Drivers. ALSALinux Audio Drivers. ALSA
Linux Audio Drivers. ALSA
 
Sound recording glossary imporved version
Sound recording glossary imporved versionSound recording glossary imporved version
Sound recording glossary imporved version
 
Ig2 task 1 work sheet
Ig2 task 1 work sheetIg2 task 1 work sheet
Ig2 task 1 work sheet
 
System_on_Chip_SOC.ppt
System_on_Chip_SOC.pptSystem_on_Chip_SOC.ppt
System_on_Chip_SOC.ppt
 
A 32-Bit Parameterized Leon-3 Processor with Custom Peripheral Integration
A 32-Bit Parameterized Leon-3 Processor with Custom Peripheral IntegrationA 32-Bit Parameterized Leon-3 Processor with Custom Peripheral Integration
A 32-Bit Parameterized Leon-3 Processor with Custom Peripheral Integration
 
Android Audio & OpenSL
Android Audio & OpenSLAndroid Audio & OpenSL
Android Audio & OpenSL
 
Raspberry pi glossary of terms dictionary extended
Raspberry pi glossary of terms dictionary extendedRaspberry pi glossary of terms dictionary extended
Raspberry pi glossary of terms dictionary extended
 
Sound analysis draft 2
Sound analysis draft 2Sound analysis draft 2
Sound analysis draft 2
 

Más de Emertxe Information Technologies Pvt Ltd

Más de Emertxe Information Technologies Pvt Ltd (20)

premium post (1).pdf
premium post (1).pdfpremium post (1).pdf
premium post (1).pdf
 
Career Transition (1).pdf
Career Transition (1).pdfCareer Transition (1).pdf
Career Transition (1).pdf
 
10_isxdigit.pdf
10_isxdigit.pdf10_isxdigit.pdf
10_isxdigit.pdf
 
01_student_record.pdf
01_student_record.pdf01_student_record.pdf
01_student_record.pdf
 
02_swap.pdf
02_swap.pdf02_swap.pdf
02_swap.pdf
 
01_sizeof.pdf
01_sizeof.pdf01_sizeof.pdf
01_sizeof.pdf
 
07_product_matrix.pdf
07_product_matrix.pdf07_product_matrix.pdf
07_product_matrix.pdf
 
06_sort_names.pdf
06_sort_names.pdf06_sort_names.pdf
06_sort_names.pdf
 
05_fragments.pdf
05_fragments.pdf05_fragments.pdf
05_fragments.pdf
 
04_magic_square.pdf
04_magic_square.pdf04_magic_square.pdf
04_magic_square.pdf
 
03_endianess.pdf
03_endianess.pdf03_endianess.pdf
03_endianess.pdf
 
02_variance.pdf
02_variance.pdf02_variance.pdf
02_variance.pdf
 
01_memory_manager.pdf
01_memory_manager.pdf01_memory_manager.pdf
01_memory_manager.pdf
 
09_nrps.pdf
09_nrps.pdf09_nrps.pdf
09_nrps.pdf
 
11_pangram.pdf
11_pangram.pdf11_pangram.pdf
11_pangram.pdf
 
10_combinations.pdf
10_combinations.pdf10_combinations.pdf
10_combinations.pdf
 
08_squeeze.pdf
08_squeeze.pdf08_squeeze.pdf
08_squeeze.pdf
 
07_strtok.pdf
07_strtok.pdf07_strtok.pdf
07_strtok.pdf
 
06_reverserec.pdf
06_reverserec.pdf06_reverserec.pdf
06_reverserec.pdf
 
05_reverseiter.pdf
05_reverseiter.pdf05_reverseiter.pdf
05_reverseiter.pdf
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 

Último (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Embedded Android : System Development - Part IV

  • 1. Team Emertxe Android System Development Day-4
  • 3. Audio HAL (Overview) ● Connects higher-level, audio-specific framework APIs in android.media to the underlying audio driver and hardware ● Defines standard interface that audio services call into and that you must implement for your audio hardware to function correctly ● Interfaces are located in hardware/libhardware/include/hardware
  • 4. Audio Architecture *source : Android documentation
  • 5. Audio Architecture Application Application framework Native Framework Audio HAL Tiny Alsa Java C++ C Kernel ALSA
  • 6. Audio Architecture (Native Framework) Application framework Native Framework Audio HAL Tiny Alsa AudioTrack AudioRecord AudioEffect Audio Flinger AudioPolicy Service
  • 7. Audio HAL (Implementation steps) ● Implement interfaces described in audio.h, audio_effect.h files ● Create an audio policy configuration file – Describe audio topology and package the HAL implementation into a shared library ● Configure pre-processing effects such as automatic gain control and noise suppression
  • 8. Audio HAL (Interfaces) ● Main functions - – hardware/libhardware/include/hardware/audio.h – audio_stream_t – stream_callback_t – audio_stream_out_t – audio_stream_in_t – audio_hw_device_t ● Effects (downmixing, echo, or noise suppression) – hardware/libhardware/include/hardware/audio_effect.h – audio_effect_library_t – struct effect_interface_s
  • 9. Audio HAL (Interfaces) ● Reference implementation - – system/media/audio/include/system/audio.h – device/samsung/tuna/audio
  • 10. Audio HAL (Audio policy configuration) ● Naugat introduced new XML based audio policy – New audio policy configuration file audio_policy_configuration.xml – Location : /system/etc – Include build option USE_XML_AUDIO_POLICY_CONF := 1 in device makefile ● Old policy (audio_policy.conf) is deprecated – Location : device/<company>/<device>/audio/audio_policy.conf – Example : device/samsung/tuna/audio/audio_policy.conf
  • 11. Audio HAL (Audio policy – non-XML sample) global_configuration { attached_output_devices AUDIO_DEVICE_OUT_SPEAKER default_output_device AUDIO_DEVICE_OUT_SPEAKER } audio_hw_modules { primary { outputs { primary { sampling_rates 44100 channel_masks AUDIO_CHANNEL_OUT_STEREO formats AUDIO_FORMAT_PCM_16_BIT devices AUDIO_DEVICE_OUT_SPEAKER flags AUDIO_OUTPUT_FLAG_PRIMARY } } } } *frameworks/av/services/audiopolicy/audio_policy.conf
  • 12. Audio HAL (Audio policy configuration) ● XML files from other folders can be included using Xinclude element – Example : <xi:include href=”a2dp_audio_policy_configuration.xml”/> ● Audio policy files – A2DP: a2dp_audio_policy_configuration.xml – Reroute submix: rsubmix_audio_policy_configuration.xml – USB: usb_audio_policy_configuration.xml
  • 13. Audio HAL (Audio policy – XML sample) <audioPolicyConfiguration version="1.0"> <globalConfiguration speaker_drc_enabled="true"/> <module name="primary" halVersion="3.0"> <attachedDevices> <item>Speaker</item> <item>Built-In Mic</item> </attachedDevices> <defaultOutputDevice>Speaker</defaultOutputDevice> </module> <xi:include href="audio_policy_volumes.xml"/> <xi:include href="default_volume_tables.xml"/> </audioPolicyConfiguration> *frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml
  • 14. Audio HAL (Advantages of XML based policy) ● Audio profiles are now structured similar to HDMI Simple Audio Descriptors and enable a different set of sampling rates/channel masks for each audio format ● Explicit definitions of all possible connections between devices and streams – Previously, an implicit rule made it possible to interconnect all devices attached to the same HAL module, preventing audio policy from controlling connections requested with audio patch APIs – In XML format, topology description now defines connection limitations ● Support for includes avoids repeating standard A2DP, USB, or reroute submit definitions ● Customizable volume curves – Previously, volume tables were hard-coded – In XML format, volume tables are described and can be customized
  • 15. Audio HAL (shared library) ● Create a device/<company>/<device>/audio directory to contain your library's source files. ● Create an Android.mk file to build the shared library ● Make file shall contain – LOCAL_MODULE := audio.primary.<device> ● Create device.mk (see rpi3.mk in device/brcm/rpi/ directory)
  • 16. Audio HAL (Preprocessing Effects) ● Default pre-processing effects applied for each AudioSource are specified in the /system/etc/audio_effects.conf file ● To apply custom effects for every AudioSource, create a /system/vendor/etc/audio_effects.conf file and specify the pre-processing effects to turn on
  • 17. Audio HAL (Module) struct audio_module HAL_MODULE_INFO_SYM = { .common = { .tag = HARDWARE_MODULE_TAG, .module_api_version = AUDIO_MODULE_API_VERSION_0_1, .hal_api_version = HARDWARE_HAL_API_VERSION, .id = AUDIO_HARDWARE_MODULE_ID, .name = "Raspberry Pi Audio HW HAL", .author = "The Android Open Source Project", .methods = &hal_module_methods, }, }; ● Audio module shall be initialized as mentioned below ● Name shall be HAL_MODULE_INFO_SYM ● The hal_module_methods points to open function
  • 18. Audio HAL (hw_module_methods_t) static struct hw_module_methods_t hal_module_methods = { .open = adev_open, };
  • 20. Audio HAL (tinyalsa) ● ALSA is an open source sound architecture for Linux ● TinyALSA is a small ALSA library aimed to be used in Android ● Source code is available in “external/tinyalsa” directory ● Utility executables – tinyplay – tinymix – tinycap – Tinypcminfo ● Shared library - libtinyalsa
  • 21. TinyALSA vs ALSA # Feature TinyALSA ALSA 1 Control Interface Partly support Full Support 2 Mixer Interface No Full Support 3 PCM Interface Partly support Full Support 4 Raw MIDI Interface No Full Support 5 Sequencer Interface No Full Support 6 Timer Interface No Full Support
  • 22. Audio HAL (tinyalsa PCM APIs) *Path: external/tinyalsa/include/tinyalsa/asoundlib.h # API Description 1 pcm_open () Open PCM device 2 pcm_read () Read PCM audio data from PCM 3 pcm_write () Write data. This is start playback at first write. 4 pcm_close () Close driver 5 pcm_set_config () Set configuration parameters 6 pcm_get_config () Get configuration parameters 7 pcm_is_ready () Check if PCM driver is ready
  • 23. Audio HAL (tinyalsa Parameter APIs) *Path: external/tinyalsa/include/tinyalsa/asoundlib.h # API Description 1 pcm_params_get () Get parameters 2 pcm_params_get_mask () Get mask 3 pcm_params_get_min () Get min 4 pcm_params_set_min () Set Min 5 pcm_params_get_max () Get Max 6 pcm_params_set_max () Set Max 7 pcm_params_free () Free memory allocated for parameters 8 pcm_params_to_string () Human readable parameter string 9 pcm_params_format_test ()
  • 24. Audio HAL (tinyalsa MMAP APIs) *Path: external/tinyalsa/include/tinyalsa/asoundlib.h # API Description 1 pcm_mmap_write () Write to shared memory 2 pcm_mmap_read () Read from shared memory 3 pcm_mmap_begin () Request to access a portion of direct (mmap) area 4 pcm_mmap_commit () Completed the access to area requested (using begin) 5 pcm_mmap_avail () Number of frames ready to be read (capture) / written (playback) 8 pcm_prepare () Prepare the PCM substream to be triggerable 9 pcm_start () Start a PCM channel that doesn't transfer data 10 pcm_stop () Stop a PCM channel that doesn't transfer data 11 pcm_ioctl () ioctl function for PCM driver 12 pcm_wait () Interrupt driven API 13 pcm_get_poll_fd () Get poll file descriptor
  • 25. Audio HAL (tinyalsa Other APIs) *Path: external/tinyalsa/include/tinyalsa/asoundlib.h # API Description 1 pcm_get_error () Returns human readable reason (string) for the last error 2 pcm_format_to_bits () Returns the sample size in bits for a PCM format 3 pcm_get_buffer_size () buffer size that should be used for pcm_write 4 pcm_frames_to_bytes () buffer size that should be used for pcm_write 5 pcm_bytes_to_frames () buffer size that should be used for pcm_write 6 pcm_get_latency () Get the PCM latency in milliseconds 7 pcm_get_htimestamp () Returns available frames in pcm buffer to read (in stream) or write (out stream)and corresponding time stamp
  • 27. Camera HAL (Overview) ● Connects the higher level camera framework APIs in android.hardware to underlying camera driver and hardware ● The camera HAL provides interfaces for use in implementing camera pipeline components ● Refer to following files – camera.h source file – camera3.h source file – camera_common.h source file
  • 28. Camera Architecture Camera API (v1/v2) Native API (JNI) / Native Services Native Camera Library Camera Services Camera HAL Media Server Process Java C++ C
  • 29. Camera Architecture (APIs) Camera API (v1/v2) Android.hardware .camera Android.media .MediaRecorder Android.hardware .Camera2 .CameraDevice Android.hardware .Camera2 .CameraManager Android.hardware .Camera2 .ICameraDeviceUser Android.hardware .Camera2 .ICameraService ICameraService CameraService Native Camera Library Camera Service CameraDeviceClient JNI Camera Context Stagefright Native API Native Services
  • 30. Camera Architecture (Native Camera Library) JNI Camera Context Native Camera Library ICameraClient Camera ICamera CameraBase ICameraService Stagefright CameraService android.hardware .Camera2 .CameraManager android.hardware .ICameraService
  • 31. Camera Architecture (Camera Service) Camera Camera Services Camera HAL Device v1 ICameraClient ICameraDevice callbacks ICameraService Listner CameraDevice Client Camera2ClientCameraClient CameraService CameraHardware Interface Camera2Device Camera3Device Camera HAL Device v2 Camera HAL Device v3 Camera HAL Module Camera APIsICamera
  • 32. Camera Architecture (Camera Services) Camera Hardware Interface Camera HAL Camera HAL Device v1 Camera HAL Device v2 Camera HAL Device v3 Camera HAL Module Camera2Device Camera3Device Camera Service V4L2 (Linux Kernel)
  • 33. Camera HAL (Implementation) ● HAL sits between camera driver and Android framework ● HAL interface is defined in : – hardware/libhardware/include/hardware/camera.h – hardware/libhardware/include/hardware/camera_common.h ● Camera_common.h defines camera_module, a standard structure to obtain general information about the camera ● Declares a camera_device struct that in turn contains a camera_device_ops struct with pointers to functions that implement the HAL interface ● Camera parameters are defined in frameworks/av/include/camera/CameraParameters.h
  • 34. Camera HAL (Creating shared library) ● Create a device/<company_name>/<device_name>/camera directory to contain library's source files ● Create an Android.mk file to build the shared library ● Make file shall contain – LOCAL_MODULE := camera.<device_name> – LOCAL_MODULE_RELATIVE_PATH := hw ● Specify camera features by copying the necessary feature XML files in frameworks/native/data/etc directory with device.mk ● See reference file “device/samsung/tuna/device.mk”
  • 35. Camera HAL (Creating shared library) ● Declare camera’s media codec, format, and resolution capabilities in – device/<company_name>/<device_name>/media_profiles.xml – device/<company_name>/<device_name>/media_codecs.xml XML files ● Add media_profiles.xml and media_codecs.xml in device.mk ● Add Camera app in PRODUCT_PACKAGES variable in device.mk to be part of system image
  • 36. Camera APIs (v1, V2, V3) ● Supported camera HAL1 as many devices still rely on it ● Android camera service supports implementing both HALs (1 & 3) ● Useful when to support a less-capable front-facing camera with camera HAL1 ● Camera HAL2 is not supported as it was a temporary step on the way to camera HAL3 ● Single camera HAL module which lists multiple independent camera devices (each may have own version number) ● Camera module 2 or newer required to support devices 2 or newer
  • 37. Camera3 ● Re-designed to – Increase the ability of app to control camera – Be more efficient and maintainable ● Additional camera control enables – Develop high-quality camera app – Operate reliably across multiple products – Use device-specific algorithms whenever possible & maximize quality & performance ● Structures the operation modes into a single unified view
  • 38. Camera3 ● Single unified view results in better user control for – Focus and exposure – Post-processing, such as noise reduction, contrast and sharpening ● This simplified view makes it easier for app developers to use the camera's various functions
  • 40. HAL operation ● Asynchronous requests for captures come from the framework ● HAL device must process requests in order; for each request, produce output result metadata, & one or more output image buffers ● First-in, first-out for requests & results, & for streams referenced by subsequent requests ● Timestamps must be identical for all outputs from a given request, so that the framework can match them together if needed ● All capture configuration and state [except for 3A (auto-exposure, auto-white-balance, auto-focus) control routines] is encapsulated in the requests and results
  • 42. Framework operation ● Framework opens device – camera_module_t common.open()→ ● Framework checks version field & instantiates appropriate handler for that version of camera hardware device – camera3_device_t ops initialize()→ → ● Framework configure streams – camera3_device_t ops configure_streams()→ → ● Framework allocate stream buffers – camera3_device_t ops register_stream_buffers()→ →
  • 43. Framework operation ● Framework requests default settings for some number of use cases with calls to camera3_device_t ops construct_default_request_settings()→ → ● Framework construct a capture request and send it to HAL – camera3_device_t ops process_capture_request()→ → ● HAL notifies framework of a started capture request – camera3_callback_ops notify()→ ● HAL notifies framework of a finished capture request – camera3_callback_ops process_capture_result()→ ● Framework calls close the device – camera3_device_t common close() may be called to→ →
  • 45. Camera Devices ● LEGACY : These devices expose capabilities to apps through the Camera API2 interfaces that are approximately the same capabilities as those exposed to apps through the Camera API1 interfaces. The legacy frameworks code conceptually translates Camera API2 calls into Camera API1 calls; legacy devices do not support Camera API2 features such as per-frame controls ● FULL : These devices support all of major capabilities of Camera API2 and must use Camera HAL 3.2 or later and Android 5.0 or later ● LIMITED : These devices support some Camera API2 capabilities (but not all) and must use Camera HAL 3.2 or later
  • 46. Camera modes ● The camera 3 HAL device can implement one of two possible operational modes – Limited – Full ● Full support is expected from new higher-end devices ● Limited mode has hardware requirements roughly in line with those for a camera HAL device v1 implementation, and is expected from older or inexpensive devices ● HAL must indicate its level of support with the android.info.supportedHardwareLevel static metadata entry, with 0 indicating limited mode, and 1 indicating full mode support.
  • 47. Camera and HAL (versions) ● Camera API1 – The app-level camera framework on Android 4.4 and earlier devices, exposed through the android.hardware.Camera class ● Camera API2 – The app-level camera framework on Android 5.0 and later devices, exposed through the android.hardware.camera2 package ● Camera HAL – The camera module layer implemented by SoC vendors. The app-level public frameworks are built on top of the camera HAL ● Camera HAL3.1 – Version of the camera device HAL released with Android 4.4 ● Camera HAL3.2 – Version of the camera device HAL released with Android 5.0
  • 48. Enabling Camera ● Add following parameters in /boot/config.txt ● start_x=1 ● gpu_mem=256 (128 or more)
  • 49. Camera Interface (camera_device_ops_t) ● set_preview_window ● set_callbacks (notification and data) ● enable_msg_type ● disable_msg_type ● msg_type_enabled ● start_preview ● preview_enabled ● store_meta_data_in_buffers
  • 51. Camera Interface (camera_device_ops_t) ● set_parameters ● get_parameters ● put_parameters (to return memory to HAL) ● send_command (to driver) ● release (hardware resources) ● dump (state of camera)
  • 54. What is V4L2? ● An open source standard to capture real time video for linux systems ● Second version of video for linux ● V4L2 is two layer driver system ● Top layer is videodev module ● Lower layer is collection of several driver modules ● V4L2 drivers are clients of videodev
  • 55. V4L2 (Devices) Device Name Minor Number Description From To /dev/video0 /dev/video63 0-63 Video Capturer Devices /dev/radio0 /dev/radio63 64-127 AM/FM Radio Devices /dev/vtx0 /dev/vtx31 192-223 Teletext Devices /dev/vbi0 /dev/vbi15 224-239 VBI Devices
  • 56. V4L2 (Video Device) # Members Description char name[32] Name of the device int type Type of V4L2 device int minor Device minor number Pointer *fops File operations used Function pointer void (*release)(struct video_device *vfd) Release function used by the driver Void pointer priv The private data
  • 57. V4L2 (File operations) # Funcrion Description 1 int (*open)() Called when a file descriptor is opened on the device file (/dev/videoX) 2 int (*close)() Called on last close (release) of a file descriptor 3 int (*read)() Called to data (buffer) of size count (the number of bytes of data requested) 4 int (*write)() Called to write data of size count (the number of bytes of data to write) 5 int (*ioctl)() Called when the application calls ioctl() 6 int (*mmap)() Called when the application calls mmap() 7 int (*poll)() Called when the application calls select()
  • 58. V4L2 (Property Negotiation) ● First the application asks for the possibles values of some property ● Next chooses one of the possible values ● Next configures that value ● Finally checks right configuration of the value ● Important properties - Video Input, Video Output, Norm (only for input devices), Modulator (only for output devices), Input Channel, Window Size
  • 59. V4L2 (Pixel format negotiation) ● Pixel format is how every pixel is stored in memory ● Application need to know this format to allow the properly interpretation of that pixel ● There are two "families" of pixel formats RGB and YUV ● Mostly, devices capture natively in YUV formats ● Video is converted to RGB formats for displaying in the viewer
  • 60. V4l2 (Buffers) ● V4L2_MMAP – Memory mapping (allocated by the kernel) ● V4L2_USERPTR – User memory (allocated by user app) ● DMABUF, read/write – Direct Memory Access (GPU, OpenGL) – Can handle fullHD (1080p) at 60FPS
  • 61. V4L2 (Driver Compilation) ● Step 1 : Copy driver source files in following folder – kernels/rpi/deriver/media/platform/<device> ● Step 2 : Edit Makefile to add following lines – <driver_name>-obj := (add all file which required to build mofules with “.o” extantion) – obj-$(CONFIG_<unique word which easly identify and give information about driver>) +=<driver_name>.o ● Step 3 : Add following line in Kconfig – connfig <driver_name which show on menuconfig> – tristate “<write the purpose of module>” – default n (Must specify; other options y and m) – --help-- <write brief description about module to help user selection while building the kernel module>
  • 62. V4L2 (Driver Compilation and loading) ● Step 4 : make ARCH=arm menuconfig – Select driver with m option; save and exit ● Step 5 : Compile module from /kernel/rpi directory – make ARCH=arm CROSSCOMPILE=<absolute path of compiler> -j4 modules ● Step 6 : copy <driver>.ko file in target board – system/lib/modules/<kernel version>/kernel/media/v4l2-core ● Step 7 : Run following command – insmod <driver_name>.ko (to load driver) – rmmod <driver_name> (to remove driver)
  • 63. Stay connected About us: Emertxe is India’s one of the top IT finishing schools & self learning kits provider. Our primary focus is on Embedded with diversification focus on Java, Oracle and Android areas Emertxe Information Technologies, No-1, 9th Cross, 5th Main, Jayamahal Extension, Bangalore, Karnataka 560046 T: +91 80 6562 9666 E: training@emertxe.com https://www.facebook.com/Emertxe https://twitter.com/EmertxeTweet https://www.slideshare.net/EmertxeSlides