4bb650bb3c4f15789232f3f3cf778c5441122360 |
|
09-Sep-2016 |
Phil Burk <philburk@google.com> |
AudioFlinger: flush direct tracks that are paused Normally the flush is processed on ObtainBuffer. But that is not called when the track is paused. So it was not possible to flush and re-prime a track that was paused. Now we flush synchronously for inactive tracks, and flush from prepareTracks_l for active tracks. Bug: 19193985 Bug: 27791443 Change-Id: I39a7e4921e45041c3a51cf91fd3995b5edee6dd4 Signed-off-by: Phil Burk <philburk@google.com>
/frameworks/av/include/private/media/AudioTrackShared.h
|
ea2b9c07b34079f0dbd8610a511e006e69a15adc |
|
13-Feb-2016 |
Andy Hung <hunga@google.com> |
Implement client playback timestamps with 64 bit accuracy Provide server timestamps if the HAL doesn't provide it. Provide monotonic - boottime translation. Bug: 17472992 Bug: 26682703 Bug: 27749434 Change-Id: I6c9b213d9f9284092e34d57f52870e02c72df62a
/frameworks/av/include/private/media/AudioTrackShared.h
|
fc1337d079ba7e6ffd7ce07706cfeeeb355c0200 |
|
18-Mar-2016 |
Phil Burk <philburk@google.com> |
Merge "AudioTrack: fix stall if setBufferSizeInFrames() called before play()" into nyc-dev
|
e8972b0a27fac327c997fceb20d9abae1dc1d899 |
|
04-Mar-2016 |
Phil Burk <philburk@google.com> |
AudioTrack: fix stall if setBufferSizeInFrames() called before play() The server was waiting for a full buffer. But the buffer was only getting partly filled. So the stream was not starting. The fix involves having the server look at the adjustable threshold. Bug: 27505889 Change-Id: I5dbf686413e670dacbbecc9e0f838744e465f44f Signed-off-by: Phil Burk <philburk@google.com>
/frameworks/av/include/private/media/AudioTrackShared.h
|
4d231dc0ee34380956c71cbe18a750e487a69601 |
|
12-Mar-2016 |
Eric Laurent <elaurent@google.com> |
audio: Fix race condition in AudioTrack underrun. When audio flinger mixer removes an AudioTrack from the active list in case of underrun, it is possible that the client has written a full buffer just after the underrun detection and is blocked waiting for more space to write. In this case, the client will never detect the DISABLED flag and the track never be restarted. Also implement missing DISABLE flag detection in server side audio tracks (OutputTrack and PatchTrack). bug: 27567768 Change-Id: I8d0753429d4113498258b1f61bd8ac5939a612f0
/frameworks/av/include/private/media/AudioTrackShared.h
|
818e7a32ce3633980138aff2c2bfcc5158b3cfcc |
|
17-Feb-2016 |
Andy Hung <hunga@google.com> |
Implement server side playback timestamps with 64 bit accuracy Provide server timestamps if the HAL doesn't provide it. Provide monotonic - boottime translation. Integrate record timestamps and playback timestamps together. Bug: 17472992 Bug: 22871200 Bug: 26400089 Bug: 26682703 Change-Id: If1974f94232fcce7ba0bbcdf63d9e54ed51918ff
/frameworks/av/include/private/media/AudioTrackShared.h
|
6ae5843c281301a9ffd1059d185620a9337e15a2 |
|
17-Feb-2016 |
Andy Hung <hunga@google.com> |
Enable FastTrack timestamps Bug: 26413951 Change-Id: Id54c32cb0f0be83d443f6cf1007181ebc461c586
/frameworks/av/include/private/media/AudioTrackShared.h
|
8ce8e264d0bf09ec131e4a7701fe1ebc3a678f8b |
|
16-Feb-2016 |
Eric Laurent <elaurent@google.com> |
Revert "Enable FastTrack timestamps" This reverts commit b3a486fecddc9e9264fe63d356eca0812493db27. Reverting while investigating the root cause. Bug: 27186414
/frameworks/av/include/private/media/AudioTrackShared.h
|
b3a486fecddc9e9264fe63d356eca0812493db27 |
|
05-Aug-2015 |
Andy Hung <hunga@google.com> |
Enable FastTrack timestamps Bug: 26413951 Change-Id: I99a69241a0bcd69f6bfebf785cac6d9ee1e2cd5f
/frameworks/av/include/private/media/AudioTrackShared.h
|
3f0c902beb53a245c9db35e871607dba05b8d391 |
|
16-Jan-2016 |
Andy Hung <hunga@google.com> |
Add AudioRecord timestamps Bug: 13569372 Bug: 22886739 Change-Id: Ibc81afefb733d23676a632a0f2da31163fdbe05f
/frameworks/av/include/private/media/AudioTrackShared.h
|
bbe98f009fc2c3181a8d4ab71b3e145f76c01755 |
|
17-Jan-2016 |
Phil Burk <philburk@google.com> |
Merge "AudioTrack: Add getUnderrunCount()"
|
c0adecb800b197cb8c028513130ebabf2d0f37ba |
|
08-Jan-2016 |
Phil Burk <philburk@google.com> |
AudioTrack: add setBufferSizeInFrames() Also add getBufferCapacityInFrames(). These can be used to dynamically raise or lower latency. Bug: 21019153 Signed-off-by: Phil Burk <philburk@google.com> Change-Id: I02ca7f6f5cc4e089fcd81cc8a2b6ff234e0381a8
/frameworks/av/include/private/media/AudioTrackShared.h
|
2812d9ea3a3a33142dd8e23c9d949c498d6f7a12 |
|
04-Jan-2016 |
Phil Burk <philburk@google.com> |
AudioTrack: Add getUnderrunCount() This allows an app to detect application-level output glitches. Underrun counts survive track recreation. Change-Id: I8eb14e92f6fc1007718a29b0666ab51ace30cdb8 Bug: 25641253 Signed-off-by: Phil Burk <philburk@google.com>
/frameworks/av/include/private/media/AudioTrackShared.h
|
59950b403076a94828668902d30215ac5a733902 |
|
20-Aug-2014 |
Glenn Kasten <gkasten@google.com> |
Remove unused ClientProxy::getFramesFilled() Change-Id: Ib3cf5a6b61572a1bff89bdd62262fdcf9f09aedc
/frameworks/av/include/private/media/AudioTrackShared.h
|
90e8a97dd5c9d391d7a2ea6a2290ed976f928379 |
|
10-Nov-2015 |
Andy Hung <hunga@google.com> |
Use modulo position variables in AudioTrack and AudioRecord More type safety, plus correct treatment for sanitization. Bug: 25569906 Bug: 25232421 Change-Id: Id852277b81a1792c5e67392cd74bc39cba7ed1ad
/frameworks/av/include/private/media/AudioTrackShared.h
|
5a8a95de6dad1a3bcf3da5a37b35766e89086e13 |
|
18-Apr-2015 |
Ricardo Garcia <rago@google.com> |
Use AudioPlaybackRate to hold TimestretchBufferProvider parameters Use this struct to handle the parameters for TimestretchBufferProvider all across the system. Add stretch mode and fallback mode to TimestretchBuffer Provider. Change-Id: I19099924a7003c62e48bb6ead56c785cb129fba2
/frameworks/av/include/private/media/AudioTrackShared.h
|
8edb8dc44b8a2f81bdb5db645b6b708548771a31 |
|
27-Mar-2015 |
Andy Hung <hunga@google.com> |
Add playback rate to AudioTrack Bug: 19196501 Change-Id: I6411e1d3ce652b711a71a6d9df020cb5f60d4714
/frameworks/av/include/private/media/AudioTrackShared.h
|
f59497bd3c190e087202043de5450ef06e92b27d |
|
27-Jan-2015 |
Glenn Kasten <gkasten@google.com> |
Update comments Change-Id: I37d3c4ce22b74fe8581a886fe5a7f9fef8266dad
/frameworks/av/include/private/media/AudioTrackShared.h
|
a18eb9ea913e2cd19df9fe0f1b2a667339006581 |
|
12-Jan-2015 |
Glenn Kasten <gkasten@google.com> |
Merge "Move roundup from frameworks/av to system/media"
|
53dbe77b9f50cdd0de88b9d25dd643e90c8ba68b |
|
06-Jan-2015 |
Glenn Kasten <gkasten@google.com> |
Move roundup from frameworks/av to system/media Change-Id: I1083ab739e445e5bd3e3082fc1d3a20cc19601d5
/frameworks/av/include/private/media/AudioTrackShared.h
|
4ede21d9c1f957baf5e561849ff9bbe4bcbefc20 |
|
13-Dec-2014 |
Andy Hung <hunga@google.com> |
Fix loop and position restoration in static AudioTracks Allow restoration of loop and position. Make position and loop synchronously readable. Bug: 17964637 Change-Id: I8cfb5036e665f55fdff5c67d27e1363ce9a8665d
/frameworks/av/include/private/media/AudioTrackShared.h
|
9b4615887c23548438fd0d8e3d8f04ac21912850 |
|
02-Dec-2014 |
Andy Hung <hunga@google.com> |
Fix loop and position setting in static AudioTracks Allow independent setting of position and loop. Bug: 17964637 Change-Id: I8b3bd97a244b932728b68da7684044f2636984a5
/frameworks/av/include/private/media/AudioTrackShared.h
|
b187de1ada34a9023c05d020a4592686ba761278 |
|
30-Dec-2014 |
Glenn Kasten <gkasten@google.com> |
Line length 100 Change-Id: I6c8fe626a3825fa9e139319656d682a57b887c97
/frameworks/av/include/private/media/AudioTrackShared.h
|
cb2129b3b568a4e31bcbda3545a468024bc972fe |
|
11-Nov-2014 |
Andy Hung <hunga@google.com> |
Fix missing loop count for static tracks. StaticAudioTrackServerProxy::framesReady() previously returned only the contiguous frames, update to return the total available frames. This resolves short-count looping in SoundPool for FastTracks. Also (1) Removes the racy condition of reading two variables and (2) Fixes buffer->mNonContig to return the correct value and (3) Restores behavior that loop count of 1 goes back to loopStart once during playback. Bug: 11830751 Bug: 12070295 Bug: 17456842 Change-Id: I64906e6036bb00a1d7375b03efe6deb69d6478ca
/frameworks/av/include/private/media/AudioTrackShared.h
|
83b8808faad1e91690c64d7007348be8d9ebde73 |
|
21-Jun-2014 |
Eric Laurent <elaurent@google.com> |
audio flinger: add patch connection between hw modules Add support for audio device connections between different audio hw modules. The patch is performed by creating a bridge between the playback thread connected to the sink device and the record thread connected to the source device using a pair of specialized PlaybackTrack and RecordTrack. - Added PatchTrack and PatchRecord classes. - Added TrackBase type to indicate more clearly the track behavior. - A TrackBase can allocate the buffer or reuse an existing one. - Factored some code in openOutput() and openInput() for internal use by PatchPanel. Bug: 14815883. Change-Id: Ib9515fcda864610458a4bc81fa8f59096ff4d7db
/frameworks/av/include/private/media/AudioTrackShared.h
|
c56f3426099a3cf2d07ccff8886050c7fbce140f |
|
22-Mar-2014 |
Glenn Kasten <gkasten@google.com> |
Pass stereo gains as packed minifloat This will allow (eventually) a greater dynamic range for gains. However there are still a few remaining places in effects and mixer that will also need to be changed in order to get the full benefit. Also fixes a minor bug: was not checking for NaN in AudioTrack C++. Change-Id: I63bce9e82e0a61546d8ff475fb94bcb700d99c96
/frameworks/av/include/private/media/AudioTrackShared.h
|
fdac7c00f9201bb3a9862069145f01d37e39755b |
|
28-Jan-2014 |
Glenn Kasten <gkasten@google.com> |
Replace size_t in shared memory by uint32_t Eventually we may want to use uint64_t, but will need to confirm atomicity. Bug: 12381724 Change-Id: Ia2c591d262d22b47b6f7dab4b9d9faa14b86d865
/frameworks/av/include/private/media/AudioTrackShared.h
|
74935e44734c1ec235c2b6677db3e0dbefa5ddb8 |
|
19-Dec-2013 |
Glenn Kasten <gkasten@google.com> |
Replace control block frameCount_ by explicit in/out parameter in IAudioFlinger::createTrack and IAudioFlinger::openRecord Change-Id: I09c644c80e92c8e744b1b99055988a2588b2a83d
/frameworks/av/include/private/media/AudioTrackShared.h
|
a153b68f2260a8ed7fbb236fa659b13264ac5ac0 |
|
19-Oct-2013 |
Glenn Kasten <gkasten@google.com> |
am 77177fa2: am 95c03858: Merge "Allow releaseBuffer after flush" into klp-dev * commit '77177fa20773d02b4f9c4147ecb98107f019fa7d': Allow releaseBuffer after flush
|
2e422c472c91aa7912befd0fc038d1e11f354bc1 |
|
18-Oct-2013 |
Glenn Kasten <gkasten@google.com> |
Allow releaseBuffer after flush After AudioTrack start checks for pending flush, allow releaseBuffer on any previously obtained buffer. For example, this can happen if the resampler has obtained a buffer but not released the whole buffer yet. Note that the resampler will be reading obsolete data. Bug: 11285590 Change-Id: I0614fbb62e43604aac3089cce4b7797c87a306b5
/frameworks/av/include/private/media/AudioTrackShared.h
|
771f1b6d196b7924707fc44177ac3a88fc31fa9e |
|
17-Oct-2013 |
Eric Laurent <elaurent@google.com> |
am 7f8c3973: am 120a8847: Merge "AudioTrack: fix head position after restore" into klp-dev * commit '7f8c397378a7ee5abd395413be71388ad36d3ed2': AudioTrack: fix head position after restore
|
cc21e4f1e41dfa17e7e2bef995fcd22c45f6bcd0 |
|
17-Oct-2013 |
Eric Laurent <elaurent@google.com> |
AudioTrack: fix head position after restore The head position transfered to the new track by restoreTrack_l() must take into account the frames that are dropped from the old track to avoid a non recoverable offset in the playback head position returned to applications. Bug: 11230062. Change-Id: I51143a08b95e8f264ed709ae2054360315f2b8b1
/frameworks/av/include/private/media/AudioTrackShared.h
|
16f3201d2fe99a39a8a9bb478528ae9003645dfe |
|
18-Sep-2013 |
Glenn Kasten <gkasten@google.com> |
am 11454092: am 18f86140: Merge "Fix underruns when fast track denied due to SRC" into klp-dev * commit '11454092e4a94d3c8b4576c981595339abdfac0d': Fix underruns when fast track denied due to SRC
|
ce8828a016b082f730152af2204b8ea3610dc1ec |
|
17-Sep-2013 |
Glenn Kasten <gkasten@google.com> |
Fix underruns when fast track denied due to SRC OpenSL ES requests a fast track. If sample rate conversion is needed, the request is denied by server, and a larger client buffer is used to handle the higher latency of a normal track. However the client notification period was calculated based on buffer being divided into 2 sub-buffers. That resulted in the notification period being too long. The server pulls chunks that are smaller than half the total buffer. So now the client uses 3 sub-buffers when there is SRC. Also removed the 'defer wake' optimization because it was incorrect. This optimization attempted to reduce the number of wakeups of client, when server releaseBuffer knows that another releaseBuffer will be following. But there is no way for the first releaseBuffer to predict how soon the second releaseBuffer will occur. In some cases it was a long time, and the client underran. So now the client is woken up immediately if the total number of available frames to client is >= the minimum number the client wants to see (the notification period). Also fix bug where minimum frame count was not being used in the calculation of notification period. Bug: 10342804 Change-Id: I3c246f4e7bc3684a344f2cf08268dc082e338e2a
/frameworks/av/include/private/media/AudioTrackShared.h
|
f557872b594d15599bdb65efd91eb5adeb1d0840 |
|
30-Aug-2013 |
Glenn Kasten <gkasten@google.com> |
am 908d3c09: am 51ec03c2: Merge "Implement Track::getTimestamp()" into klp-dev * commit '908d3c09ca7f2ccb280aa5dc8d876099ff9a9d0f': Implement Track::getTimestamp()
|
bd096fd9d8e5fc0e62f98807f4818a06f70d0812 |
|
23-Aug-2013 |
Glenn Kasten <gkasten@google.com> |
Implement Track::getTimestamp() using a new timestamp latch in PlaybackThread, and AudioTrackServerProxy::framesReleased() which returns mServer. Change-Id: I1ebfba968c773faaab95648c272fd3ebd74718d6
/frameworks/av/include/private/media/AudioTrackShared.h
|
e198c360d5e75a9b2097844c495c10902e7e8500 |
|
13-Aug-2013 |
Glenn Kasten <gkasten@google.com> |
Whitespace Change-Id: Id3ccc183a03421330d0498faaa62a45915cdc3d6
/frameworks/av/include/private/media/AudioTrackShared.h
|
82aaf94a5b18939e4d790bbc752031f3070704a3 |
|
18-Jul-2013 |
Glenn Kasten <gkasten@google.com> |
Report underruns for fast tracks also This fixes a regression that was introduced earlier by commit 9f80dd223d83d9bb9077fb6baee056cee4eaf7e5 called "New control block for AudioTrack and AudioRecord". That commit broke underrun reporting for fast tracks. Also remove Track::mUnderrunCount, which counted the number of underrun events, and was only used by dumpsys media.audio_flinger. Now dumpsys media.audio_flinger reports the number of underrun frames, Isolated underrun-related control block accesses via the proxy, so that the server is not directly poking around in the control block. The new proxy APIs are AudioTrackServerProxy::getUnderrunFrames() and AudioTrackServerProxy::tallyUnderrunFrames(). getUnderrunFrames() returns a rolling counter for streaming tracks, or zero for static buffer tracks which never underrun, but do a kind of 'pause' at end of buffer. tallyUnderrunFrames() increments the counter by a specified number of frames. Change-Id: Ib31fd73eb17cbb23888ce3af8ff29f471f5bd5a2
/frameworks/av/include/private/media/AudioTrackShared.h
|
d054c32443a493513ab63529b0c8b1aca290278c |
|
12-Jul-2013 |
Glenn Kasten <gkasten@google.com> |
Move control block mName to createTrack() output This is part of a series of CLs to clean up the shared memory control block, by removing any fields that don't have to be there. Change-Id: I6e51003a1293b6800258c31b22cff2eba42162e7
/frameworks/av/include/private/media/AudioTrackShared.h
|
96f60d8f04432a1ed503b3e24d5736d28c63c9a2 |
|
12-Jul-2013 |
Glenn Kasten <gkasten@google.com> |
Rename control block flags to mFlags Change-Id: I7b6d31e24531954ab1ecdf3ed56c19433700bd89
/frameworks/av/include/private/media/AudioTrackShared.h
|
f20e1d8df84c5fbeeace0052d100982ae39bb7a4 |
|
12-Jul-2013 |
Glenn Kasten <gkasten@google.com> |
Rename control block server to mServer and add comments Change-Id: Ieabd91acee92d0e84e66fbd358df5282b856306e
/frameworks/av/include/private/media/AudioTrackShared.h
|
b1a270d1e926fb9a01b4265a7675ed0c2c8f4868 |
|
14-May-2013 |
Richard Fitzgerald <rf@opensource.wolfsonmicro.com> |
libmedia: offloaded playback support - start() returns a status so that upper layers can recreate a non offloaded track in case of error. - Added states to handle offloaded tracks specific: - waiting for stream end (drain) notification by audio flinger - allow pause while waiting for stream end notification - getPosition() queries the render position directly from audio HAL. - disable APIs not applicable to offloaded tracks - Modified track restoring behavior for invalidated offloaded tracks: just send the callback and wait for upper layers to create a new track. - Added wait for stream end management in audio track client proxy. Similar to obtainBuffer and should be factored in. Change-Id: I0fc48117946364cb255afd653195498891f622bd Signed-off-by: Eric Laurent <elaurent@google.com>
/frameworks/av/include/private/media/AudioTrackShared.h
|
bfb1b832079bbb9426f72f3863199a54aefd02da |
|
07-Jan-2013 |
Eric Laurent <elaurent@google.com> |
AudioFlinger: offload playback, non-blocking write - Added specialized playback thread class for offload playback, derived from directoutput thread. This thread type handles specific state transitions for offloaded tracks and offloading commands (pause/resume/drain/flush..) to audio HAL. As opposed to other threads, does not go to standby if the track is paused. - Added support for asynchronous write and drain operations at audio HAL. Use a thread to handle async callback events from HAL: this avoids locking playback thread mutex when executing the callback and cause deadlocks when calling audio HAL functions with the playback thread mutex locked. - Better accouting for track activity: call start/stop and release Output methods in audio policy manager when tracks are actually added and removed from the active tracks list. Added a command thread in audio policy service to handle stop/release commands asynchronously and avoid deadlocks with playback thread. - Track terminated status is not a state anymore. This condition is othogonal to state to permitted state transitions while terminated. Change-Id: Id157f4b3277620568d8eace7535d9186602564de
/frameworks/av/include/private/media/AudioTrackShared.h
|
7db7df0e8d9d7cee8ba374468cdbfa0108e3337c |
|
26-Jun-2013 |
Glenn Kasten <gkasten@google.com> |
AudioTrackShared cleanup Maintain unreleased frame count on client side also (was already there on server side). Assertion failure instead of BAD_VALUE status for incorrect usage of APIs. Clean up error handling code. Change-Id: I23ca2f6f8a7c18645309ee5d64fbc844429bcba8
/frameworks/av/include/private/media/AudioTrackShared.h
|
ad3af3305f024bcbbd55c894a4995e449498e1ba |
|
25-Mar-2013 |
Richard Fitzgerald <rf@opensource.wolfsonmicro.com> |
Public API changes for audio offload support. NOTE: this does _not_ include all private member variables added to classes as part of offload support. Only public/protected functions and stubs functions/variables needed to make the changes buildable. - isOffloadSupported() added to audio policy service A stub implementation is required to build, this always returns false - setParameters() added to IAudioTrack A stub implementation is required to build, this always returns INVALID_OPERATION - CBlk flag for stream end - Change AudioSystem::getRenderPosition() to take an audio_output_t so caller can specify which output to query - Add AudioSystem::isOffloadSupported() This is fully implemented down to the AudioFlinger function AudioPolicyServer::isOffloadSupported() which is just a stub that always returns false. - Add EVENT_STREAM_END to AudioTrack interface. STREAM_END is used to signal when the hardware has actually finished playing all the data it was sent. - Add event type enumeration to media player interface AudioSink callbacks so that the same callback can be used to handle multiple types of event. For offloaded tracks we also have to handle STREAM_END and TEAR_DOWN events - Pass audio_offload_info_t to various functions used for opening outputs, tracks and audio players. This passes additional information about the compressed stream down to the HAL when using offload. For publicly-available APIs this is an optional parameter (for some of the internal and low-level APIs around the HAL interface it is mandatory) - Add getParameters() and setParameters() API to AudioTrack Currently dummy implementations. - Change AudioPlayer contructor so that it takes a set of bitflags defining what options are required. This replaces the original bool which only specified whether to use deep buffering. - Changes to StageFright class definition related to handling tearing-down of an offloaded track when we need to switch back to software decode - Define new StageFright utility functions used for offloaded tracks Currently dummy implementations. - AudioFlinger changes to use extended audio_config_t. Fills in audio_offload_info_t member if this info is passed in when opening an output. - libvideoeditor changes required to add the new event type parameter to AudioSink callback functions - libmediaplayerservice changes required to add the new event type parameter to AudioSink callback functions Change-Id: I3ab41138aa1083d81fe83b886a9b1021ec7320f1 Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com> Signed-off-by: Eric Laurent <elaurent@google.com>
/frameworks/av/include/private/media/AudioTrackShared.h
|
0d09a9bec07b3bec78bd473ff0bfcf0a261f3f25 |
|
24-Jun-2013 |
Glenn Kasten <gkasten@google.com> |
Use mFutex as an event flag rather than semaphore An event flag can be more fault-tolerant in case of loss of synchronization, as it cannot overflow. It also allows more bits to be used in the future. See http://en.wikipedia.org/wiki/Event_flag Change-Id: I01ca25d951eb263124da54bb4738f0d94ec4a48b
/frameworks/av/include/private/media/AudioTrackShared.h
|
9f80dd223d83d9bb9077fb6baee056cee4eaf7e5 |
|
19-Dec-2012 |
Glenn Kasten <gkasten@google.com> |
New control block for AudioTrack and AudioRecord Main differences between old and new control block: - removes the mutex, which was a potential source of priority inversion - circular indices into shared buffer, which is now always a power-of-2 size Change-Id: I4e9b7fa99858b488ac98a441fa70e31dbba1b865
/frameworks/av/include/private/media/AudioTrackShared.h
|
e3aa659e9cee7df5c12a80d285cc29ab3b2cbb39 |
|
04-Dec-2012 |
Glenn Kasten <gkasten@google.com> |
Start isolating control block accesses in a proxy The proxy object will eventually be the only code that understands the details of the control block. This should make it easier to change the control block in the future. Initial set of control block fields that are isolated: - sample rate - send level - volume Prepare for streaming/static separation by adding a union to the control block for the new fields. Fix bug in handling of max sample rate on a track. It was only checking at re-configuration, not at each mix. Simplify OutputTrack::obtainBuffer. Change-Id: I2249f9d04f73a911a922ad1d7f6197292c74cd92
/frameworks/av/include/private/media/AudioTrackShared.h
|
b603744e96b07b1d5bf745bde593fb2c025cefcf |
|
14-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Don't use control block frame count after create This is part of a series to clean up the control block. Change-Id: I7f4cb05aef63053f8e2ab05b286d302260ef4758
/frameworks/av/include/private/media/AudioTrackShared.h
|
22eb4e239fbe9103568147d566d7482e480350b8 |
|
07-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Update audio comments Change-Id: I85d7d2f6381b251db5695202fec75128883a8662
/frameworks/av/include/private/media/AudioTrackShared.h
|
b36a7a68af073b1e7fd5cad6aa2c52223fd30efd |
|
13-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Simplify AudioRecord::restoreTrack_l() Finish removing CBLK_RESTORING and CBLK_RESTORED from control block flags, and remove constant RESTORE_TIMEOUT_MS. Also minor cleanup: - Cache mCblk in local variable cblk and make cblk allocatable in a register. - Use "iMem" for sp<IMemory>. - Add missing error log to AudioRecord; it was already in AudioTrack. This is part of a series to clean up the control block. Change-Id: Ia5f5ab4763c392bc06a45851b167ddaee29e3455
/frameworks/av/include/private/media/AudioTrackShared.h
|
83a0382dc17364567667a4e6135db43f5bd92efc |
|
12-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Move frame size out of the control block This is part of a series to clean up the control block. Change-Id: Ifab1c42ac0f8be704e571b292713cd2250d12a3f
/frameworks/av/include/private/media/AudioTrackShared.h
|
b929e417853694e37aba1ef4399f188987b709d9 |
|
08-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Move buffers pointer out of the control block This is part of a series to clean up the control block. Change-Id: Ie474557db7cb360f2d9a0f11600a68f5a3d46f07
/frameworks/av/include/private/media/AudioTrackShared.h
|
a47f3165f53c8e8fb8907a94de7417e2c3047eeb |
|
07-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Simplify AudioTrack::restoreTrack_l() Remove CBLK_RESTORING and CBLK_RESTORED from control block flags, for AudioTrack only. They are still used by AudioRecord. This is part of a series to clean up the control block. Change-Id: Iae4798f5b527c492bdaf789987ff3a1dadd0cb37
/frameworks/av/include/private/media/AudioTrackShared.h
|
864585df53eb97c31e77b3ad7c0d89e4f9b42588 |
|
07-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Remove CBLK_DIRECTION from control block flags This is part of a series to clean up the control block. Change-Id: I0265fece3247356b585d4d48fbda6f37aea8a851
/frameworks/av/include/private/media/AudioTrackShared.h
|
e0b07179a48ee50fda931d2aa1b3c751d167e4d7 |
|
07-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Remove CBLK_FAST from control block flags This is part of a series to clean up the control block. Change-Id: Ic881a3560d9547cb63fcc0cefec87aa3da480e0d
/frameworks/av/include/private/media/AudioTrackShared.h
|
9c5fdd83f9b9f49be35107971feb33528d60b945 |
|
05-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Simplify control block flag names Use only one symbol per flag Change-Id: Ia3582e2134abd60c896d11337face65383e79c7c
/frameworks/av/include/private/media/AudioTrackShared.h
|
85ab62c4b433df3f1a9826bed1c9bec07a86c750 |
|
01-Nov-2012 |
Glenn Kasten <gkasten@google.com> |
Line length 100 Change-Id: Ib28fd7b9ce951a6933f006e7f8812ba617625530
/frameworks/av/include/private/media/AudioTrackShared.h
|
0c9d26d187017f7fb028ab52a0fbc6395142faa4 |
|
31-May-2012 |
Glenn Kasten <gkasten@google.com> |
Log track name on obtain/releaseBuffer warnings This should help diagnose problems by allowing us to correlate the logs with the dumpsys media.audio_flinger output. Change-Id: I8c7c592b4f87d13b0f29c66ce7a2f301a0f063c9
/frameworks/av/include/private/media/AudioTrackShared.h
|
3acbd053c842e76e1a40fc8a0bf62de87eebf00f |
|
28-Feb-2012 |
Glenn Kasten <gkasten@google.com> |
Configure policy of mediaserver threads Change-Id: Ifd825590ba36996064a458f64453a94b84722cb0
/frameworks/av/include/private/media/AudioTrackShared.h
|
99e53b86eebb605b70dd7591b89bf61a9414ed0e |
|
19-Jan-2012 |
Glenn Kasten <gkasten@google.com> |
Update comments We no longer put the filename at start of file. Change-Id: Ic435b159a23105681e3d4a6cb1ac097bc853302e
/frameworks/av/include/private/media/AudioTrackShared.h
|
1a0ae5be3d1273cba12584b33830d859510fbf82 |
|
03-Feb-2012 |
Glenn Kasten <gkasten@google.com> |
Don't double destruct audio_track_cblk_t Fortunately audio_track_cblk_t doesn't have a destructor, but for clarity remove the double destruction. Also add warning not to add any virtuals to audio_track_cblk_t. Change-Id: I70ebe1a70460c7002145b2cdf10f9f137396e6f3
/frameworks/av/include/private/media/AudioTrackShared.h
|
83d86538c4c479a9225c75ab27938e8f05abb9c8 |
|
17-Jan-2012 |
Glenn Kasten <gkasten@google.com> |
Make AudioTrack control block volume field private This is part of the process of abstracting the control block to make it easier to maintain. Change-Id: Idb8f461e68dab3bcf268159cc0781651c6fb7094
/frameworks/av/include/private/media/AudioTrackShared.h
|
b1cf75c4935001f61057989ee3cf27bbf09ecd9c |
|
17-Jan-2012 |
Glenn Kasten <gkasten@google.com> |
Track volume cleanup Always read and write track volumes atomically. In most places this was already being done, but there were a couple places where the left and right channels were read independently. Changed constant MAX_GAIN_INT to be a uint32_t instead of a float. It is always used as a uint32_t in comparisons and assignments. Use MAX_GAIN_INT in more places. Now that volume is always accessed atomically, removed the union and alias for uint16_t volume[2], and kept only volumeLR. Removed volatile as it's meaningless. In AudioFlinger, clamp the track volumes read from shared memory before applying master and stream volume. Change-Id: If65e2b27e5bc3db5bf75540479843041b58433f0
/frameworks/av/include/private/media/AudioTrackShared.h
|
613882293184e575a44bff681a3decaefe889e69 |
|
17-Jan-2012 |
Glenn Kasten <gkasten@google.com> |
Merge "Use size_t for frame size"
|
05632a5fa4b88ca474294887fc92a9fcdf0e2352 |
|
03-Jan-2012 |
Glenn Kasten <gkasten@google.com> |
AudioTrack and AudioFlinger send level cleanup Add an API to control block for getting/setting send level. This allow us to make the mSendLevel field private. Document the lack of barriers. Use 0.0f to initialize floating-point values (for doc only). Change-Id: I59f83b00adeb89eeee227e7648625d9a835be7a4
/frameworks/av/include/private/media/AudioTrackShared.h
|
b9980659501d0428d65d8292f3c32da69d37fbd2 |
|
11-Jan-2012 |
Glenn Kasten <gkasten@google.com> |
Use size_t for frame size except in the control block, where we don't have room. In AudioFlinger::ThreadBase::TrackBase::getBuffer, read the frame size from control block only once. Change-Id: Id6c4bccd4ed3e07d91df6bbea43bae45524f9f4e
/frameworks/av/include/private/media/AudioTrackShared.h
|
362c4e697d8e9c034e964ac7b40227e054491547 |
|
14-Dec-2011 |
Glenn Kasten <gkasten@google.com> |
Audio C++ comments Change-Id: I84906ebb9dfcfa5b96b287d18364b407f02a30c1
/frameworks/av/include/private/media/AudioTrackShared.h
|
c6854100cea4fcd0f20cb2ac8235c02d1849b3a1 |
|
02-Jun-2011 |
Glenn Kasten <gkasten@google.com> |
Remove unnecessary level of priority indirection Change-Id: I942d43973c20a7ace8b0d3f78b4da97e45e996c6
/frameworks/av/include/private/media/AudioTrackShared.h
|
0d255b2d9061ba31f13ada3fc0f7e51916407176 |
|
25-May-2011 |
Jean-Michel Trivi <jmtrivi@google.com> |
Use channel mask instead of channel count for track creation Record and playback objects (resp AudioRecord and AudioTrack) are created using a channel mask, but this information is lost in the mixer because only the channel count is known to AudioFlinger. A channel count can always be derived from a channel mask. The change consists in: - disambiguiting variable names for channel masks and counts - passing the mask information from the client to AudioFlinger and the mixer. - when using the DIRECT ouput, only verifying the format of the track is compatible with the output's for PCM. Change-Id: I50d87bfb7d7afcabdf5f12d4ab75ef3a54132c0e
/frameworks/av/include/private/media/AudioTrackShared.h
|
38ccae2c0324daa305f3fe77d25fdf5edec0b0e1 |
|
29-Mar-2011 |
Eric Laurent <elaurent@google.com> |
New fix for issue 4111672: control block flags The first fix (commit 913af0b4) is problematic because it makes threads in mediaserver process block on the cblk mutex. This is not permitted as it can cause audio to skip or worse have a malicious application prevent all audio playback by keeping the mutex locked. The fix consists in using atomic operations when modifying the control block flags. Also fixed audio_track_cblk_t::framesReady() so that it doesn't block when called from AudioFlinger (only applies when a loop is active). Change-Id: Ibf0abb562ced3e9f64118afdd5036854bb959428
/frameworks/av/include/private/media/AudioTrackShared.h
|
1703cdfee717b1b312bf8979816a9e2f16a82e5d |
|
07-Mar-2011 |
Eric Laurent <elaurent@google.com> |
Fix issue 3439872: video chat and bluetooth SCO This change fixes the stability problems experienced when using a bluetooth headset supporting both A2DP and SCO. Problems occur when starting the video chat at which time the A2DP output is being stopped to start SCO. At that time, active AudioTracks are invalidated by AudioFlinger so that a new AudioTrack binder interface can be recreated by the client process on the new mixer thread with correct parameters. The problem was that the process to restore the binder interface was not protected against concurrent requests which caused 2 binder interfaces to be created sometimes. This could lead to permanent client deadlock if one of the client threads was waiting for a condition of the first created binder interface while the second one was created (as the AudioFlinger would only signal conditions on the last one created). This concurrent request situation is more likely to happen when a client uses the JAVA AudioTrack as the JNI implementation uses simultaneously the native AudioTrack callback and write push mechanisms. By doing so, the code that checks if the binder interface should be restored (in obtainBuffer()) is much more likely to be called concurrently from two different threads. The fix consists in protecting the critical binder interface restore phase with a flag in the AudioTrack control block. The first thread acting upon the binder interface restore request will raise the flag and the second thread will just wait for a condition to be signaled when the restore process is complete. Also protected all accesses to the AudioTrack control block by a mutex to prevent access while the track is being destroyed and restored. If a mutex cannot be held (e.g because we call a callback function), acquire a strong reference on the IAudioTrack to prevent its destruction while the cblk is being accessed. Modified AudioTrack JNI to use GetByteArrayElements() instead of GetPrimitiveArrayCritical() when writing audio buffers. Entering a critical section would cause the JNI to abort if a mediaserver crash occurs during a write due to the AudioSystem callback being called during the critical section when media server process restarts. Anyway with current JNI implementation, either versions do not copy data most of the times and the criticial version does not guaranty no data copy. The same modifications have been made to AudioRecord. Change-Id: Idc5aa711a04c3eee180cdd03f44fe17f3c4dcb52
/frameworks/av/include/private/media/AudioTrackShared.h
|
44d9848d6656777a18019223e0d35f2fcc67719a |
|
01-Oct-2010 |
Eric Laurent <elaurent@google.com> |
Issue 3032913: improve AudioTrack recovery time This issue showed that when an AudioTrack underruns during a too long period of time and is therefore disabled by audioflinger mixer, it takes an additional delay of up to 3 seconds to recover. This fix adds a simple mechanism to recover immediately when the client application is ready to write data again in the AudioTrack buffer Also throttle warnings on record overflows Change-Id: I8b2c71578dd134b9e60a15ee4d91b70f3799cb3d
/frameworks/av/include/private/media/AudioTrackShared.h
|
be916aa1267e2e6b1c148f51d11bcbbc79cb864c |
|
02-Jun-2010 |
Eric Laurent <elaurent@google.com> |
Issue 2667801: [Audio Effect Framework] AudioFlinger, AudioMixer AudioTrack modifications. First drop of audio framework modifications for audio effects support. - AudioTrack/AudioRecord: Added support for auxiliary effects in AudioTrack Added support for audio sessions Fixed left right channel inversion in setVolume() - IAudioFlinger: Added interface methods for effect enumeraiton and instantiation Added support for audio sessions. - IAudioTrack: Added method to attach auxiliary effect. - AudioFlinger Created new classes to control effect engines in effect library and manage effect connections to tracks or output mix: EffectModule: wrapper object controlling the effect engine implementation in the effect library. There is one EffectModule per instance of an effect in a given audio session EffectChain: group of effects associated to one audio session. There is one EffectChain per audio session. EffectChain for session 0 is for output mix effects, other chains are attached to audio tracks with same session ID. Each chain contains a variable number of EffectModules EffectHandle: implements the IEffect interface. There is one EffectHandle object for each application controlling (or using) an effect module. THe EffectModule maintians a list of EffectHandles. Added support for effect modules and effect chains creation in PlaybackThread. modified mixer thread loop to allow track volume control by effect modules and call effect processing. -AudioMixer Each track now specifies its output buffer used by mixer for accumulation Modified mixer process functions to process tracks by groups of tracks with same buffer Modified track process functions to support accumulation to auxiliary channel Change-Id: I26d5f7c9e070a89bdd383e1a659f8b7ca150379c
/frameworks/av/include/private/media/AudioTrackShared.h
|
d1b449aad6c087a69f5ec66b7facb2845b73f1cb |
|
14-May-2010 |
Eric Laurent <elaurent@google.com> |
Fix issue 2553359: Pandora does not work well with Passion deskdock / Cardock. The problem is due to a too big difference between the buffer size used at the hardware interface and at the A2DP interface. When no resampling occurs we don't notice problems but the timing is very tight. As soon as resampling is activated, the AudioTrack underruns. This is because the AudioTrack buffers are not resized when moving the AudioTrack from hardware to A2DP output. The AudioTrack buffers are calculated based on a hardware output buffer size of 3072 bytes. Which is much less than the A2DP output buffer size (10240). The solution consists in creating new tracks with new buffers in AudioFlinger when the A2DP output is opened instead of just transfering active tracks from hardware output mixer thread to the new A2DP output mixer thread. To avoid synchronization issues between mixer threads and client processes, this is done by invalidating tracks by setting a flag in their control block and having AudioTrack release the handle on this track (IAudioTrack) and create a new IAudioTrack when this flag is detected next time obtainBuffer() or start() is executed. AudioFlinger modifications: - invalidate the tracks when setStreamOutput() is called - make sure that notifications of output opening/closing and change of stream type to output mapping are sent synchronously to client process. This is necessary so that AudioSystem has the new stream to output mapping when the AudioTrack detects the invalidate flag in the client process. Previously their were sent when the corresponding thread loop was executed. AudioTrack modifications: - move frame count calculation and verification from set() to createTrack() so that is is updated every time a new IAudioTrack is created. - detect track invalidate flag in obtainBuffer() and start() and create a new IAudioTrack. AudioTrackShared modifications - group all flags (out, flowControlFlag, forceReady...) into a single bit filed to save space. Change-Id: I9ac26b6192230627d35084e1449640caaf7d56ee
/frameworks/av/include/private/media/AudioTrackShared.h
|
45df6a2a25ff36606a5301155d8d97e9bf80d00b |
|
14-May-2010 |
Eric Laurent <elaurent@google.com> |
AudioFlinger: rename variables to clarify reference to track channel count or channel mask Some variables and structure members should be renamed to reflect the fact that they contain the number of channels in a track (channel count) or the actual channels used by a track (channel mask). Especially member "channels" of track control block (struct audio_track_cblk_t) is actually the number of channels (channels count). Change-Id: I220c8dede9fc00c8a5693389e790073b6ed307b8
/frameworks/av/include/private/media/AudioTrackShared.h
|
c2f1f07084818942352c6bbfb36af9b6b330eb4e |
|
17-Jul-2009 |
Eric Laurent <elaurent@google.com> |
Fix issue 1795088 Improve audio routing code Initial commit for review. Integrated comments after patch set 1 review. Fixed lockup in AudioFlinger::ThreadBase::exit() Fixed lockup when playing tone with AudioPlocyService startTone()
/frameworks/av/include/private/media/AudioTrackShared.h
|
573266210fb2b2e7d86fbd46d0dfe16763611d91 |
|
07-Jul-2009 |
Eric Laurent <elaurent@google.com> |
Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate to twice of the ouputSR Store sample rate on 32 bits instead of 16 bits in audio_track_cblk_t. Removed sampleRate() methods from AudioTrack and AudioRecord: replaced by getSampleRate(). AudioTrack::setSampleRate() no returns a status.
/frameworks/av/include/private/media/AudioTrackShared.h
|
1179bc9b0e3d17c984e8f4ad38561c049dd102fa |
|
19-Mar-2009 |
The Android Open Source Project <initial-contribution@android.com> |
auto import from //branches/cupcake_rel/...@140373
/frameworks/av/include/private/media/AudioTrackShared.h
|
89fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5 |
|
04-Mar-2009 |
The Android Open Source Project <initial-contribution@android.com> |
auto import from //depot/cupcake/@135843
/frameworks/av/include/private/media/AudioTrackShared.h
|
15f767b960b38059a74a42a33e16d8df2aec8bc1 |
|
04-Mar-2009 |
The Android Open Source Project <initial-contribution@android.com> |
auto import from //depot/cupcake/@135843
/frameworks/av/include/private/media/AudioTrackShared.h
|
e5198b620a9a208ec59ea8457282404725f8ff6e |
|
20-Jan-2009 |
The Android Open Source Project <initial-contribution@android.com> |
auto import from //branches/cupcake/...@127101
/frameworks/av/include/private/media/AudioTrackShared.h
|
7b5eb023f8d87cca6d830ae6c11c6aadbe02aca8 |
|
18-Dec-2008 |
The Android Open Source Project <initial-contribution@android.com> |
Code drop from //branches/cupcake/...@124589
/frameworks/av/include/private/media/AudioTrackShared.h
|
2729ea9262ca60d93047e984739887cfc89e82eb |
|
21-Oct-2008 |
The Android Open Source Project <initial-contribution@android.com> |
Initial Contribution
/frameworks/av/include/private/media/AudioTrackShared.h
|