summaryrefslogtreecommitdiffstats
path: root/modules/audio_remote_submix
Commit message (Collapse)AuthorAgeFilesLines
* Reroute submix HAL: fix race condition on output stateJean-Michel Trivi2014-12-091-3/+4
| | | | | | | | | | | | | | 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
* Support multiple pipes for reroutingJean-Michel Trivi2014-11-171-140/+295
| | | | | | | | | | | | | | | | 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
* Fix remote submix crash on null sinkJean-Michel Trivi2014-10-151-12/+30
| | | | | | | | | | | | | | | | | | | | | | 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
* audio HAL: add parameters to open streamEric Laurent2014-07-281-2/+5
| | | | | | | | Pass device address (and audio source for inputs) to open_output_stream() and open_input_stream() audio HAL functions. Bug: 14815883. Change-Id: I5535677db3f3027917a31a7ed5c0a4c6bc013639
* Add audio_input_flags_t to HAL open_input_streamGlenn Kasten2014-07-161-1/+2
| | | | Change-Id: I3519bfa45809e064d19473ebe6489c5249d306a8
* audio: different frame size calculation for input and outputEric Laurent2014-07-031-13/+19
| | | | | Bug: 15000850. Change-Id: I7813e99a0b7ce613cc3b7d7c95be0525cb2d6c81
* audio: fixed channel count determination from channel maskEric Laurent2014-07-011-20/+12
| | | | | | | Do not use popcount() to derive channel count from channel mask. Bug: 15000850. Change-Id: I4d803dc3e1cb680baa0022e539e6f9eab3ffef1a
* Fixed submix buffering when input and output stream formats differ.Stewart Miles2014-06-101-14/+31
| | | | | | | | | | | | | | | | | | | When channel conversion is enabled and the pipe is opened with less channels (e.g 1) than the output stream's channels (e.g 2) the input stream's buffer size was calculated incorrectly which resulted in the input stream buffer size being larger than the output stream buffer size in terms of time. This changes the pipe size to take into the account maximum frame size so the output stream buffer size will be greater or equal to the input stream buffer size. In addition, if the pipe is created when the input stream is opened and the output stream is opened at a different sample rate (e.g input = 8KHz, output = 48Khz) the pipe will incorrectly rate limit writes to the pipe resulting in gaps of silence in the data read from the pipe by the input stream. Bug: 15291446 Change-Id: I01480edff7ef3a199f509866c1e95ecd4c437a92
* Added basic resampling of submix data on read from the input stream.Stewart Miles2014-05-191-6/+124
| | | | | | | | | | | | As described in If592270a17e08c5852b00b730bb9c5166c746ad2 the audio mixer doesn't work correctly when sending data to an output device that supports a sample rate that is more than 2x different to the source data rate. This modifies the remote submix module to resample data from the pipe when it's read from the input stream. Bug: 11273000 Change-Id: I9c4b3710bcebf3a2df045965dfdafdd9855b0b25
* Add optional logging of input and output streams to the submix HAL.Stewart Miles2014-05-191-0/+50
| | | | | | | | | In order to aid debugging of issues with streaming data in the submix HAL this change introduces a compile time option to log the input and output streams to files for offline inspection. Bug: 11273000 Change-Id: Ib2d929d7ba66f63b719e6996df9016f73c9080aa
* Implemented mono->stereo, stereo->mono channel conversion in submix HAL.Stewart Miles2014-05-161-11/+101
| | | | | | | | | | | | The AudioFlinger service currently will only open stereo streams from mono AudioTracks since all mixing is performed in stereo and then sent to the HAL stream. In order to allow a process to record a mono stream from the submix HAL, this change implements channel conversion in the submix HAL so that it's possible to open the output stream in stereo and the input stream in mono. Bug: 11273000 Change-Id: I840ce0be3cf7e5bc8a4c6de63a70d5408d60b716
* Modified submix HAL to drop data to the output stream if the pipe could block.Stewart Miles2014-05-161-0/+19
| | | | | | | | | | | | Since it's possible to open an output stream on the submix HAL before the input stream is open, writes to the output stream that fill the shared pipe result in indefinitely blocking the thread writing to the stream. This change modifies the behavior of writes to a submix output stream such that if a write would result in blocking the thread and an input isn't open, the pipe is flushed of the appropriate amount of data such that the write will not block. Bug: 11273000 Change-Id: Ic81c50e4b44b777273191a1bc8cdf52181c3d2a0
* Modify submix HAL to allow either input or output streams create the pipe.Stewart Miles2014-05-161-141/+232
| | | | | | | | | | | | | This change is primarily being made as a short term solution to allow an input audio stream received over the network to be fed into an audio input stream (e.g the MIC stream) when a physical audio input device isn't present. This makes both the input and output streams owners of the pipe so that creation order no longer matters. In addition, it works around a memory leak caused by applications that never close input streams. Bug: 11273000 Change-Id: I5a3fb0b6f2148c113b2f3050b72ff2a8979a3e6d
* Allow submix module streams to use any NBAIO format.Stewart Miles2014-05-141-43/+211
| | | | | | | | | | | This modifies the submix module to allow the internal buffer to be any NBAIO format. This is useful when sending audio of arbitrary formats between processes. AudioFlinger continues to enforce format restrictions as specified by the device specific audio_policy.conf so the submix streams will have the same restrictions as before. Bug: 11273000 Change-Id: I2cd4ff383c5c75e491ab22bc1949c835f04e230f
* Modified submix buffer size accessors to use the pipe configuration.Stewart Miles2014-05-141-45/+87
| | | | | | | | | | | | | This change stores the period size (fraction of the pipe buffer size) in the submix device's configuration which is then used to calculate the input and output stream buffer size. In addition, accessors for the input / output stream format have been modified to use the pipe format in the device configuration rather than returning hard coded values. Bug: 11273000 Change-Id: I9c14f8d549f4b4a6d7f77a9aeab4edfa5ba6bd1a
* Implemented accessors for derived submix HAL objects.Stewart Miles2014-05-131-65/+109
| | | | | | | | | | | | | | | | | | | | | | This change cleans up casting from contained to container structures. Such that if.. struct child { struct parent; int child_data; }; is changed to... struct child { int child_data; struct parent; }; functions that cast from "parent" to "child" will continue to function correctly. Change-Id: I88d70930d4d4df2e291239e562971b07d8b92f94
* Added a compile time option to enable / disable verbose submix logging.Stewart Miles2014-05-121-30/+104
| | | | | | | | Along with the following minor changes: * Fixed all referenced variable compiler warnings. * Ordered headers in alphabetical order. Change-Id: I122ef67d25b78056a60b85baf897005293a9efa0
* am 6322562d: am c070bad4: Merge changes I672d4ee8,I6a2183b5,If0c0135eColin Cross2014-04-212-7/+8
|\ | | | | | | | | | | | | * commit '6322562d0f1387c08109f706f381a3818114f91f': usbaudio: allow compiling for 64-bit audio_remote_submix: allow compiling for 64-bit audio: allow compiling for 64-bit
| * audio_remote_submix: allow compiling for 64-bitColin Cross2014-04-182-7/+8
| | | | | | | | | | | | | | | | Fix a few 64-bit warnings and set -Wno-unused-parameter, which makes the directory warnings-clean on 32-bit and 64-bit. Remove LOCAL_32_BIT_ONLY. Change-Id: I6a2183b5bb0cdf438a04de967995da7b1e2e3854
* | am 9f7332d4: am 5106ad0c: Merge "Audio HALs are 32-bit only"Glenn Kasten2014-03-141-0/+1
|\ \ | |/ | | | | | | * commit '9f7332d442bf57a77820229703b8f0ae7527101e': Audio HALs are 32-bit only
| * Audio HALs are 32-bit onlyGlenn Kasten2014-03-131-0/+1
| | | | | | | | Change-Id: I97eef87849312610d82bc3f82e168bb40604e646
* | NBAIO::Format_from_SR_C requires audio_format_t parameterGlenn Kasten2014-03-071-1/+2
|/ | | | Change-Id: I8bdfbd227dbfd4a46eb7ffc82ec7064582a626d0
* hardware/libhardware: convert LOCAL_MODULE_PATH to LOCAL_MODULE_RELATIVE_PATHColin Cross2014-01-241-1/+1
| | | | | | | LOCAL_MODULE_PATH doesn't work for multiarch builds, replace it with LOCAL_MODULE_RELATIVE_PATH. Change-Id: I4e4ceec61d026bbe74ba604554c06104bde42e5e
* Merge "Fix file permissions" into klp-devGlenn Kasten2013-08-221-0/+0
|\
| * Fix file permissionsGlenn Kasten2013-08-201-0/+0
| | | | | | | | Change-Id: Iffc2941d98ee16796cf3d44dec1cfa376d9362bb
* | remote submix: fix test on sampling valid ratesEric Laurent2013-08-221-4/+4
|/ | | | Change-Id: I4e9e378940bb56202a6e6882f561b3293ad7225d
* Use strong pointers and scopeJean-Michel Trivi2012-12-211-51/+46
| | | | | | | | Rely on strong pointers and scope rather than the more error prone incStrong / decStrong approach which can cause object leaks. No change in functionality. Change-Id: I1bfc7f0cdeeac022e4120482cd3521e52ffea94e
* Fix buildGlenn Kasten2012-11-021-2/+1
| | | | Change-Id: I17094052b67f2069d80ea140442e5a969bd4e96f
* Shutdown audio pipe when closing input streamJean-Michel Trivi2012-10-301-2/+16
| | | | | | | | | | | | | | | Writing to the audio pipe for the remote submix is blocking, unless the audio output pipe is in shutdown mode. The playback thread could stay blocked on the write if the input stream has already been closed. The change consists in shutting down the pipe also when the input stream gets closed. When the pipe is in this state, simulate timing in the write operation so we don't drain the output faster than realtime. Bug 7424646 Change-Id: I5feb3be642b0ee7eef10dee0141308684ee9c811
* bug 7253033 Add "exiting" state to remote audio submix moduleJean-Michel Trivi2012-09-302-2/+30
| | | | | | | | Support receiving a parameter that sets the remote audio submix module in a state where the audio pipe will unblock any current write operation and not block anymore. Change-Id: Ia3119cd79972afff0de24187dae627855a468ebf
* Remote submix: fix sink/source reference count handlingJean-Michel Trivi2012-09-171-5/+5
| | | | | | | | | The reference count on the strong pointers to the audio sink and source should be done on the object retrieved from the device structure, not by accessing the corresponding fields, as they can be cleared while reading or writing audio data. Change-Id: I446a2c7bdcb0758b4013b0ad75450a15203fb9da
* Turn off logs in remote submix audio moduleJean-Michel Trivi2012-09-171-1/+1
| | | | Change-Id: I61cd15534b1cd764b06f615569cdf02edbba909c
* Remote audio submix: blocking writes and sleeping reads.Jean-Michel Trivi2012-09-171-80/+144
| | | | | | | | | | | | Change how the remote audio submix is handling piping audio through the pipe: - use a MonoPipe as audio sink for blocking writes, - use a MonoPipeReader as audio source for non blocking reads, and keep track of when recording started to align the time at which the in_read() call should return with the projected time of the recording duration. Change-Id: I8b0f8c56a0486806101e272dfbf9c6d2d1c11112
* Remote submix audio module: sleep less, log errorsJean-Michel Trivi2012-09-131-13/+34
| | | | | | | | Neither write nor read are blocking, but write simulates timing by checking the clock between two writes and computing how long the next sleep should last. Change-Id: I495ae6d44b0cf75a24fe4b70662cfac679049c67
* update audio remote submix API revisionEric Laurent2012-09-101-12/+1
| | | | | | | Update remote submix audio HAL API revision to 2.0 (new audio device enums). Change-Id: I61d5faf498144002929e570ee50375b059fb17c5
* Add audio module for remote submixJean-Michel Trivi2012-09-062-0/+753
New definitions of audio devices for remote submix: one representing a sink for writing the audio buffers that won't be played directly locally, another representing the audio source that can be read from to obtain the audio mix. New audio hardware module encapsulating the submix loop functionality. Create a Pipe to serve as non-blocking audio ring buffer between the output device (the sink) and the input device (the source). Change-Id: I527f4721a69ced0430a99ebba3b4db7d419f2bb2