Adapt the pipe size based on the sample rate.
Behavior is unchanged for the default sample rate (48kHz), size
is adjusted by the ratio relative to the default rate.
Bug: 141604269
Test: atest AudioHostTest#testTwoChannelCapturingMediaConversion
Change-Id: I0ba45af18ef02dc0ef77d480e1203d2cd1db9864
We no longer set force_pipe_creation after the removal of
legacy code for in-pipe conversions, so we remove it.
Test: TreeHugger
Bug: 141604269
Change-Id: I82393ba0ad3142aa75d482cc6b0edbaeebbd8116
Old hacky uses of this HAL required channel and sample
rate conversion, which were never expected when this HAL
is used for its real application as the backend for
dynamic audio policies. In that context conversions are
performed in audio_flinger in the mixer.
Bug: 141604269
Test: atest AudioHostTest#testTwoChannelCapturing
Change-Id: I333e981fb3db403ab2da6f77debe49bc7d132ebc
IStream.getCapturePosition becomes mandatory in
audio HAL V7. The legacy implementation must
provide it for the default HAL implementation.
Bug: 161253754
Test: atest VtsHalAudioV7_0TargetTest
Change-Id: I2f2094f0499ba85f53f291e0a269211981b4c9d8
This applies to the following types:
- audio_gain_mode_t;
- audio_flags_mask_t;
- audio_channel_representation_t;
- audio_channel_mask_t;
- audio_devices_t.
Enum types are distinct thus proper overloading on the type
is possible in C++. Also, assignments to enum types are
less prone to errors.
Bug: 169889714
Test: basic audio functionality
Change-Id: I8f1e6fa2bbad8900fdae66f01ac70c75953fd62c
Merged-In: I8f1e6fa2bbad8900fdae66f01ac70c75953fd62c
Fix the implementation to conform to VTS expectations.
out_get_next_write_timestamp must return "NOT_SUPPORTED" (-ENOSYS)
as it is not supported.
adev_get_input_buffer_size must return a non-zero
buffer size for supported formats, regardless of whether
there are any opened streams at the moment.
Bug: 141847510
Test: atest VtsHalAudioV6_0TargetTest
Change-Id: I322bf8cf42415fddb028c9cd10db0ac82089ce85
Do not block in out_write() when the peer input is in standby to avoid
remaining stuck when writing to the blocking mono pipe.
Bug: 141878993
Test: atest AudioHostTest#testTwoChannelCapturing
Change-Id: Ie92d59529ac1018a6785c3ac31696dcccdbb204a
The include path was needed because libnbaio_mono was missing
an include export for libaudioutils headers.
Test: make
Change-Id: I6d6aa2826ed259b682e8a417557fb6fdfb3caea6
Force mono pipe shutdown when all input stream clients are closed
so that a pending write is not stuck waiting for available buffer.
Bug: 119057550
Test: abort search on BLE remote
Merged-In: I4391e73874e502da5000b1746436fb61bb2fe869
Change-Id: I4391e73874e502da5000b1746436fb61bb2fe869
In remote submix audio HAL, Add null check on Pipe sink pointer
in out_get_presentation_position() and out_get_render_position().
Bug: 117183072
Test: manual test with capture from BLE remote mic.
Change-Id: I05aa87f414c69bcd08c7692918e6a215077b7ea2
Since rework of presentationTimestamp in AudioFlinger, it is expecting
to drain correctly before stopping an output.
When a MIX RECORDER is set,
1/ Dynamic Policy Mix is registered
2/ Extraction Sink Port is made available
3/ Player is started on this sink
4/ Extraction source port is connected upon start Output
4/ Capture may be launched on the source to be rerouted
5/ All Capture are stopped, player is stopped
6/ Extraction source port shall be disconnected on stopOutput
Step 6 does not happen as the track is never set as drained.
Upon capture stop, rxSink MonoPipe is put in shutdown state. Any further
write will discard the buffer. However, frames written shall be
incremented of these frame discarded to be able to set the track as
drained.
This CL fixes this issue.
Test: AudioPolicyEmulatorTests --gtest_filter=RecordInjectionSourceMatch/DynamicPolicyMixRecordInjectionTest.RecordingInjection/*
Bug: 130356101
Change-Id: I861c4867991da8bcc1090be56d64e69646d58dc2
Signed-off-by: François Gaffie <francois.gaffie@renault.com>
Force mono pipe shutdown when all input stream clients are closed
so that a pending write is not stuck waiting for available buffer.
Bug: 119057550
Test: abort search on BLE remote
Change-Id: I4391e73874e502da5000b1746436fb61bb2fe869
Revert "r_submix: Fix logspam on pipe corruption"
This reverts commit ab5b51838c.
Revert "r_submix: Use intermediate pipe in non-blocking mode"
This reverts commit 1df8a0039f.
Reason: breaks Android Auto projected mode
Bug: 74142786
Test: with Android Auto head unit simulator
Change-Id: I8e1bc146a131cb5b1ab88cf242b03a6b02a84339
Revert "r_submix: Fix logspam on pipe corruption"
This reverts commit ab5b51838c.
Revert "r_submix: Use intermediate pipe in non-blocking mode"
This reverts commit 1df8a0039f.
Reason: breaks Android Auto projected mode
Bug: 74142786
Test: with Android Auto head unit simulator
Change-Id: I8e1bc146a131cb5b1ab88cf242b03a6b02a84339
Prevent logging an error message on every attempt to write
if the FIFO backing up the MonoPipe got corrupted. This condition
can be detected by checking for -EIO error code.
Bug: 74067530
Test: make audio_utils_fifo_base::mIsShutdown to be set by default,
run r_submix_tests and observe logcat
Change-Id: I5d67997e902e834f04c10f9ffb39b16cba9c5739
Switch the pipe into non-blocking mode to prevent stalling
when attempting to close it.
Simulate circular buffer behavior by flushing old data if
there is no more space in the pipe.
This removes the need for "exiting=1" parameter.
Bug: 73175392
Test: r_submix_tests
Change-Id: Iff89980af71112892ff262030e471ae736b1f62a
From analyzing the coverage data, these tests seem to cover
all the critical functionality of the remote submix module.
Bug: 73175392
Test: r_submix_tests
Change-Id: I7f6be95245c6ab59611fc5e269e3f9f2079b8ee4
Add simple tests to verify remote submix behavior regarding
blocking writes. Currently one of the tests fails (does not finish),
this needs to be fixed.
Also fixed some minor issues in remote submix module code.
Bug: 73175392
Test: r_submix_tests
Change-Id: Ic88d0c385c0102e35b4f751f9c5cd8a6488949c8
audio.h and its dependencies (audio-effect.h, sound_trigger.h...)
used to be shared between system and vendor code.
This led to multiple problems:
1) Such sharing contradicts the Treble policy of
strict independence of framework and vendor code.
2) When audio.h was changed, every vendor needed to update
its code in the next release. This meant that audio*.h
headers were mostly changed in backward compatible manner.
Nevertheless, for P the HIDL interface and thus the audio.h
interface are changed in backward incompatible way.
(Some enum are becoming 64 bit long).
3) As the headers were common, some API used only by the framework
needed to be visible to the vendors (mostly enum values).
4) Treble policy is to support at least one previous HAL version
As a result the audio*.h headers are now duplicated,
one set for the framework, and one for the vendor.
Each set will evolve independently. After this split,
the framework-only APIs will be removed from the vendor headers
and vice versa.
The split is implements as such:
+ for system code
- NOT moving the libaudio_system_headers
Eg: system/audio.h and system/audio_effects/effect_equalizer.h
are still in system/media/audio
- the legacy audio HAL API that were in libhardware headers
are now in libaudiohal_legacy_headers
Eg: hardware/audio.h and hardware/audio_effect.h
are now in frameworks/av/media/libaudiohal/legacy/
+ for vendor code
- moving libaudio_system_headers and the legacy audio HAL API
that were in libhardware_headers in
android.hardware.audio.common.legacy@2.0
Note that those headers are now versioned, so migrating to a @4.0
HIDL HAL will mean changing the legacy dependency too.
Eg: system/audio.h, system/audio-effect.h, hardware/audio.h
are now in hardware/interfaces/audio/common/2.0/legacy
- the legacy audio effect HAL API that was in libaudioeffects
is now moved in android.hardware.audio.effect.legacy@2.0
Eg: audio_effects/effect*.h are now in
hardware/interfaces/audio/effect/2.0/legacy
- the legacy sound trigger HAL API that were in libhardware_headers
is now moved in android.hardware.soundtrigger.legacy@2.0
Eg: hardware/sound_trigger.h is now in
hardware/interfaces/audio/effect/2.0/legacy
libaudioutil being used by both system and vendor, had
to be renamed for system to libaudioutil_system.
Vendor libs that now depend on the audio.h of a specific
version and are not extensively referenced in non google code,
append @2.0 to their name.
Note that headers that are not expected to change in the 4.0 HAL are
left in all-versions folder to avoid duplication.
This is an implementation detail as the versioned libraries export
the all-versions headers.
Note that strict vendor-system separation is enforced by the
build-system. The system headers are not available for vendor
libs and vice-versa.
Note that this patch is split between numerous git repository (>10),
all the commits having the same Change-id for searchability.
Note that audio_policy.h is no longer exposed to vendors
as the legacy audio policy HAL API was never officially supported.
As a result the audiopolicy stub implementation has been removed.
Test: compile taimen-userdebug walleye-userdebug
sailfish-userdebug marlin-userdebug
gce_x86_phone-userdebug gce_x86_phone
full-eng aosp_arm aosp_x86-eng
Test: check that the emulator booted and played audio
Test: full QA on sailfish-userdebug and taimen-userdebug
Bug: 38184704
Change-Id: I950f4e0a55613d72e32eba31bd563cb5bafe2d1a
Signed-off-by: Kevin Rocard <krocard@google.com>
* Remove unused local variables.
* Remove or comment out unused static functions.
* Fix trivial bugs found by unused value warnings.
Bug: 66996870
Test: build with WITH_TIDY=1
Change-Id: I99389b883c89551850180d25241a35a40bb77b26
When the vndk is enabled (BOARD_VNDK_VERSION=current),
vendor libraries must only link against vendor variants
in the build system. This means that they receive restricted
sets of headers and that automatic global headers are restricted.
Test: build audio_remote_submix with BOARD_VNDK_VERSION=current
Bug: 37342627
Change-Id: I1170443466df58fa7b66096241e881a38f8cf1ac
Libraries under /hardware/libhardware/modules should go to /vendor/.
These are conventionl HALs for default implementations, most of them
are not used.
Camera and thermal are already moved in other CLs.
Bug: 35907904
Test: Compiled and checked install path. Verified on Sailfish with
$ lsof | grep default.
Change-Id: Ibde574001c01cbfea014a20a0fbbb3265e6cdc8a
Count number of frames that have been written, reset on standby.
The presentation position is the number of written frames minus
the frames still in the pipe (they were written but not presented).
Bug 21198864
Change-Id: I00ef10f56a825555e7a970cce1504a9bd3744e04
When reading from a pipe, the output may have been previously
closed, therefore the output state should only be read if it
is still available.
This fixes a race condition observed between in_read() (which
accesses the output stream) and adev_close_output_stream()
(which sets the output reference to NULL).
No issue with out_write() which checks the input reference.
Bug 16009464
Change-Id: I979bc12c8fe91fad9b6f6c9e0be107c1bacae360
The implementation for "remote submix" supported only one pipe
to capture the output of a mix.
This CL adds support for multiple pipes to support capturing
multiple audio routes.
The structure for the r_submix audio device holds an array
of route configurations (route_config), each referencing
the input and output of the pipe dedicated to this route.
Each route is associated to a unique address. Standby
status is maintained per stream.
Bug 16009464
Change-Id: Ie164c4ad2a6d8138f825484e7faf29a974ccf82e
The "remote submix" HAL uses a MonoPipe instance to "pipe" audio
from the sink of this virtual device HAL to its source.
The life-cycle of this pipe is:
- creation when either the input or output stream is open
- destruction when both input and output are closed.
Changes are:
Fix test for pipe destruction: destroy pipe when both
input and output streams are NULL.
Count how many read errors went into the logs and cap them
so as not to spam the logs when the pipe is not properly
set up. Less 'I' logs, 'D' logs instead.
When opening input stream, check for non-null sink before
checking if it's shutdown.
Bug 16653334
Bug 17111907
Change-Id: I634b4192b00f9b74a5109f42242423e9c8cb4c7c