0bd6ec5bc06b869131ee0facf38ff02f81f65c10 |
|
26-Jul-2011 |
Hugo Hudson <hugohudson@google.com> |
Playback now handles any sample rate and channel combo. Main stuff - Delayed construction of audio player until after sample rate and channels have been read from the first callback. - Removed all sample rate and channels from outward facing api. - Remove pause playing and prefetch duration and sample rate hacky code. - Fixes handling of any sample rate by removing switch statement. - Fixes a HORRIBLE bug introduced in last cl where I was creating the callback context on the stack inside a method call, and using it a pointer to it long after the object had been erased from the stack. [worse yet: it still mostly worked fine!] Other - Fixes an obvious failure case of all tests - duh - I was calling setUp() before setting the executor properly, so they were giving NPEs. - Correct calculation of totalDuration now done on first decode callback. - This will let us remove MediaPlayer from prepare() in follow up. - Initializing the engine outside of the PlaybackRunnable, is cleaner. - Adds static methods for reading duration and position, again so that follow up can have accurate get current position rather than best guess. - Buffers in use for decoding also not created until first decode callback. - Introduces some wicked-cool OpenSL macro to log api calls, make the api calls and check the result value. Bug: 5048252 Bug: 5048257 Change-Id: I60705fa6c6ab29a35740f22bef76450e8c1d25a2
/frameworks/ex/variablespeed/tests/src/com/android/ex/variablespeed/VariableSpeedTest.java
|
9730f15ebbf4b64cd48e0777850e56cb516a9ed4 |
|
25-Jul-2011 |
Hugo Hudson <hugohudson@google.com> |
Adds tests for Variable Speed code. The test changes: - Adds many, many test cases against a MediaPlayerProxy, checking that it behaves to the contract of a MediaPlayer. - Adds the RealMediaPlayer class to check a real MediaPlayer. - Adds the VariableSpeed class, to check a VariableSpeed instance against the same contract as the MediaPlayer. - Adds an Android.mk for the unit tests. - Adds also an AndroidManifest.xml for the unit tests. - Adds some test asset media files (3gpp file and mp3 file). Required for the test changes: - Adds a DynamicProxy class to adapt a MediaPlayer as a MediaPlayerProxy class, i.e. to test the implementation of MediaPlayerProxy, required to avoid writing an adapter. - Adds a couple of listeners, OnErrorListener and OnCompletionListener, that can be waited for synchronously in unit tests. Improvements as a result of the tests: - During the testing, fixes the case where we weren't throwing IllegalStateException if asked for the duration on released player. - Refactored the create engine, create and realize output mix, create and realize audio player, get play interfaces and callbacks, all separated into their own static methods. - This allows me to create the audio player during the main while loop actually after the decoding has begun rather than before starting. This work is a precursor to using the decoder's report on sample rate and channels as the input to these methods. - slSampleRate and slOutputChannels no longer computed in the constructor, but computed when needed in the construction and realization of the audio player. Other changes: - Remove some overly verbose logs on getDuration() and getCurrentPosition(). - Adding the decoder interface to the callback. - Extract metadata from decoder method now takes the metadata interface, so this will be usable from the decoder callack in a follow up. - Temporarily stop getting the metadata out of the decoder, I'm going to be doing it on the decoding callback instead. - Renames the comment in AndroidManifest.xml to describe the correct invocation to run the common tests. Bug: 5048252 Bug: 5048257 Change-Id: Icdc18b19ef89c9924f73128b70aa4696b4e727c5
/frameworks/ex/variablespeed/tests/src/com/android/ex/variablespeed/VariableSpeedTest.java
|