History log of /system/media/opensles/libopensles/IObject.c
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
d78ef68025c4de08bffaa318d0057d8affac81a1 07-Oct-2010 Glenn Kasten <gkasten@google.com> More tests and bug fixes

New tests:
- urimime.c tests audio player with URI data source and MIME data format
- dim.c tests DynamicInterfaceManagement
- engine.c new test cases:
- create more than one engine simultaneously
- exit application without destroying engine first

Bug fixes:
- Can't request SLBufferQueueItf or its alias SLAndroidSimpleBufferQueueItf
if the data source is not a buffer queue.
- BufferQueue interface is explicit on AudioPlayer.
- OutputMixExt is unavailable (internal) on AudioPlayer.
- There was a nested mutex lock when resuming a non-suspended interface.
- This implementation supports at most one engine, so check for that
- Class configuration table had wrong entry for DynamicInterfaceManagement
on 4 of 10 classes.

Restore most of the infrastructure for removing interfaces (code review):
- DynamicInterfaceManagement is included, but body of RemoveInterface is compiled
out, and replaced by FEATURE_UNSUPPORTED until all our deinit hooks are clean.
- Remove hook must be called with mutex locked, rather than unlocked as before.
The remove hook is called during IDynamicInterfaceManagement::RemoveInterface
and Object::Destroy, so the entry conditions must be the same.
- Add NULL remove hooks to the interface hook table.

Change-Id: I328dd254ed24a32b220996a6d9592cc8c0f4e943
Miscellaneous:
- Always memset object to garbage in Object::Destroy to catch broken applications.
- Add comments about how GetInterface manipulates the v-table pointer (code review).
- Re-enable DynamicInterfaceManagement for testing the example code.
/system/media/opensles/libopensles/IObject.c
9a889c24ace7bbc9659e1531d7a61dc43452d7c0 06-Oct-2010 Glenn Kasten <gkasten@google.com> Interface testing and bug fixes

Add some new tests, and fix the bugs they found.

New and improved tests:
Added output mix API test with focus on interfaces.
Add mute solo and seek test cases to the automated buffer queue test.
Buffer queue configuration test is now listenable:
Buffer queue configuration test now generates a sequence of sine
waves in order so that the listener can tell if each format is
supported correctly.

Bug fixes:
Engine::Create... was not checking if the interface was available
for a particular class. Fixing that bug showed some other bugs
in the class/interface configuration tables.
The effects interfaces is available on an output mix.
The Volume interface is not available on an output mix.
The Object interface can do GetInterface before realized.
OutputMix interface is available on an OutputMix;
needed by the demos/examples in back of book
OutputMix::ReRoute fails if number of output device IDs is not 1.
Improve interface checks on a buffer queue source.
Don't allow mute solo interface on a mono buffer queue.
The earlier code to check for seek interface on a buffer queue
compared by address, which didn't work if application
used a private copy of the GUID. Now compares using the
MPH which will work in all cases.
Buffer queue, effect send, and mute solo are explicit interfaces on audio player.
slCreateEngine was not publishing the engine object.

Miscellaneous cleanup:
Removed the hard-coded fake device ID constants in
OutputMix::ReRoute that were there just for testing.
In Engine::Create..., log an error for all unsupported interfaces, not just the first one.
Make hash generator build again:
It turns out interfaces.c is needed, even though it duplicates
OpenSLESUT.c. Restore from 1a6bb4f8e738c9387dc9629db294ea5de618a53c.
Remove some redundant comments.

Change-Id: Iddabe73e298b69a44f3b43ed224c918eb95961a1
/system/media/opensles/libopensles/IObject.c
2a25d97e40dbd5dd9195195a3a269095a4932097 05-Oct-2010 Glenn Kasten <gkasten@google.com> Object an interface initialization/destroy cleanup

Prior to this, object and interface fields were being initialized
and deinitialized in random places. This resulted in some real and
potential leaks, especially in the case of partial object construction.
There were even some places where fields were not being initialized
at all.

Details:

Move destructor for AndroidEffectCapabilities from CEngine::Destroy
to IAndroidEffectCapabilities deinit hook.
Move destructor for equalizer preset names from CEngine::Destroy
to IEngine deinit hook.
In Object::Destroy, call deinitializer for each initialized interface,
regardless whether it was ever exposed.
Remove double initialization of mStepSize in IPlaybackRate constructor.
Remove obsolete logs.
Add expose hooks that are called when interface is requested in
Engine::Create... or by DynamicInterface::AddInterface.
Always initialize all interfaces, even if not exposed
Fix typos in same-line comments on INTERFACE_ constants.
Add new interface state INITIALIZED: uninitialized -> initialized -> exposed.
DynamicInterface::Remove sets interface state to initialized (but
not exposed), instead of uninitialized.
Add explicit constructor calls to initialize fields in C structs
(e.g. smart pointers), using placement new. See also build warning
which was turned off with -Wno-invalid-offsetof.
Add comments about per-instance fields not associated with an interface.
Add default initializations for all per-instance fields that are
not associated with an interface, in case the object is only partially
constructed and then needs to be destroyed due to an error.
Add placement new comments.
Update comments on private per-instance fields not associated with an interface.
Move effect clears from the containing object destructor
(CAudioPlayer_Destroy and COutputMix_Destroy) to the interface
destructor. In this process this caught a bug that environmental
reverb and preset reverb were not being destroyed properly for an
audio player.
Add comments on interface hooks.
Add entries for interface destructors.
Add placement new (explicit constructor) and explicit destructor calls
for C++ fields in C struct.
Fix template instantiation error.
Move explicit calls to IBufferQueue_Destroy (now renamed to
IBufferQueue_deinit) from CAudioPlayer_Destroy and CAudioRecorder_Destroy
to be implicit via the BufferQueue interface deinit hook.
ThreadSync interface destructor now logs a warning if
ThreadSync::EnterCriticalSection was active at Engine::Destroy
Add some comments.
Clean up gMonitorFp close code.
Fix typo in log message.
Fix DynamicInterface to handle distinction between UNINITIALIZED and
INITIALIZED states for an interface, and to call the optional expose hook.
Do not use memset per interface, because the size of the last interface is unknown.
Set the v-table pointer while lock is held.
Add curlies to if statements.
Log errors if interfaces active during Object::Destroy, instead of asserting.
Log a warning if interface requests an interface but it is not available,
and is optional.
Add log with the class name and address of each new object.
Mark only interfaces with init hooks as INITIALIZED; others are UNINITIALIZED.

Change-Id: Ibb9c1b5f21e6195af6b20b2f7a5c7157905b735b
/system/media/opensles/libopensles/IObject.c
ec3a5a5555af3ed612b70dc54ef96998a9256b9a 28-Sep-2010 Glenn Kasten <gkasten@google.com> Add MuteSolo checks for audio player and fix bugs

The specification says "This [SLMuteSoloItf] interface cannot be
exposed on a player whose audio format is mono." This has a lot of
implications ...

Deny an explicit interface request for SLMuteSoloItf at audio player
creation time if the player is known pre-realize to have mono channel
count (e.g. PCM buffer queue).

Deny a GetInterface on MuteSolo if channel count is known to be mono,
but allow it if the channel count is still unknown.

When DynamicSource (or its replacement) is implemented, it will be
possible for the application to have done a GetInterface successfully,
and then to change the source such that the MuteSolo interface is
no longer valid. In that case, return SL_RESULT_FEATURE_UNSUPPORTED
for most MuteSolo operations, if called when channel count is unknown
or is mono. We _do_ allow MuteSolo::GetChannelCount to succeed if
channel count is known to be mono.

Enhance the URI-based mute solo test to check some of the above,
and the interactive buffer queue test to get and test the channel count.

Add curly braces to if statements.

Other bug fixes:
- Do not rely on peek locks; they don't work on SMP.
- Channel count and sample rate were not being set correctly
for buffer queue data source audio players.
- CreateAudioPlayer and AudioRecorder were both referring to
application pointers more than once, with the possibility of
reading inconsistent data.

Change-Id: Ie0109cbddc0aff8a56c0b53d989fb2be823e627b
/system/media/opensles/libopensles/IObject.c
bd2fc031926582ee8b0df40673c66dfa4cc45a61 26-Sep-2010 Glenn Kasten <gkasten@google.com> Replace one configuration hack by another

Previous hack allowed an application to call GetInterface for any
interface prior to Realize. The new hack allows an application
to do so only for interfaces which have a "pre-realize OK"
relationship to their associated class. Currently this is
SL_IID_ANDROIDCONFIGURATION.
Reduce logging in record test.
Allow default tracing level to be set in makefile.
Line length 100.

Change-Id: Id17c55ee7284dca108e0eab379a8f987963fd8c4
/system/media/opensles/libopensles/IObject.c
51cb31b09f6af53402b3fbe7e9de29badc1155a2 21-Sep-2010 Glenn Kasten <gkasten@google.com> As part of API review, disable incomplete profiles

Don't compile dead code relating to unsupported features, but keep profiles for CT.
Move whole file conditionals from the source code to Android.mk,
by just not compiling the module for unsupported features.
There must an interface initialization hook present to expose an
interface implicitly or explicitly at object creation time, or
to dynamically add an interface after the object is created. As
a safety check, we also double-check for the initialization hook
when the application does a GetInterface.

Miscellaneous bug fixes:
- Fix warning "variable may be used uninitialized in this function".
- Fix build errors on SDL.
- Was using the wrong conditional for SDL.
- Fix typo mInterfaceContinued -> mInterfaceStates2 in AudioRecorder.
- Fix typo in IEngineCapabilities_init.

Other cleanup:
- Move ugly SDL-specific stuff out of the portable code.
- Combine duplicated code in CAudioPlayerDestroy and
CAudioRecorder_Destroy for freeing buffer queue memory.
- Add curlies to if and do statements.
- Line length 100.
- Decrease engine voices from 32 to 30 (based on max of 32 objects, 1 engine, 1 output mix).
- Disable IRecord_init log.
- Add symbolic link for Android configuration header file.
- Enable trace on Android.
- sl_int64_t is now unconditionally defined rather than only if
ANDROID defined, because it is used by OpenSLES_Android.h which
might be included by SDL also.
- Removed symlink for Android headers

Change-Id: I1a6389257bca09e3819923129a1193473e16669b
/system/media/opensles/libopensles/IObject.c
31df22b193ea7c7c331d26a27fa6756a89c8ec3c 17-Sep-2010 Glenn Kasten <gkasten@google.com> Improve reliability of Object::Destroy / Create

Separated object construction from publishing, for better safety
with respect to the sync and debugger thread. Unpublished objects
exist and have an ID slot reserved, but the ID is not assigned.
Destroy of an unpublished object does the right thing.

Add pre-destroy checks:

- COutputMix all platforms: add check for players attached to
output mix. Object:: Destroy on an output mix that has at least
one attached player is a no-op, but will log an error.

- COutputMix for SDL: now asks the mixer callback to unlink output
mix from engine, and then blocks until SDL mixer callback
acknowledges the request; this avoids a race condition where the
SDL thread calls the mixer during destroy.

- C3DGroup: add check for players in group.
Object::Destroy on a 3D group that contains at least one player
is a no-op, but will log an error.

Object::Destroy on an audio player that is part of a 3D group now
removes the player from the 3D group during destroy.

Remove redundant field:

- CAudioPlayer.mOutputMix duplicated a field in DataSink.DataLocator_OutputMix;
removed mOutputMix and replaced by function CAudioPlayer_GetOutputMix
which gets the output mix from the data sink.

Remove dead code:

- IOutputMixExt_Destroy was obsolete.

Miscellaneous changes not related to destroy:
- Fixed an ancient bug in the class table for Listener object -
was using wrong offset for interfaces.
- Add curly braces around if, else, for bodies
- Add parentheses around complex conditionals
- Add some logging
- Fix indentation.
- Line length 100

Change-Id: I0035fe356e2a28c1932b5d265f881377aa77dc58
/system/media/opensles/libopensles/IObject.c
de8654b40c7701ea213c157448cbb96c29522e39 14-Sep-2010 Jean-Michel Trivi <jmtrivi@google.com> Implement SLAndroidConfigurationItf on AudioRecorder.

Enable the use of the configuration interface before the
AudioRecorder object is realized to set the recording
preset. Recording presets map to the Android
AudioRecord input source.

Change-Id: I804095a0b39e4676862f6bc8e7fbaa0ba63b9336
/system/media/opensles/libopensles/IObject.c
4f924ff768d761f53db6fa2dbfb794ba7a65e776 10-Sep-2010 Glenn Kasten <gkasten@google.com> Fix some race conditions and deadlocks.

Use strong reference counts to fix race conditions in these object dependencies:
- audio player on 3D Grouping
- MIDI player (or more specifically, the data sink locator) depends on LED or Vibra device
- audio player (or more specifically, the data sink locator) depends on output mix
Fix build errors on non-Android platforms.
Fix incorrect result code for EnvironmentalReverb::SetDensity.
Continue work on making Destroy more reliable:
- Destroy calls a pre-destroy hook, e.g. for Android audio players.
- Add new internal object state DESTROYING which is set when the pre-destroy hook returns.
- Abort (called by Destroy) now blocks until all async operations complete or are aborted.
Add curly braces around simple if and for statements.
Add extra parentheses around complex if expression in if statements.
Add more error logging in checkDataLocator.
Add Doxygen comments.
Remove spurious log entry when SL_DATALOCATOR_ANDROIDFD used.
Disable the unused Resume hooks, which are currently unused.
Remove some dead code in audio player create for Android.
Line length 100.
Prepare for fixing race condition in OutputMixExt by
moving mActiveMask and mTracks from IOutputMix to IOutputMixExt.
Update comments.
Continued work on Destroy reliability:
Do not poke around in mixer's data structures directly during
Object::Destroy for an audio player; instead ask the mixer nicely
and wait for it to do the job.
Move master copy of computed gains from Track to AudioPlayer, and then
let the mixer copy the gains locally when it needs them.
Add resume and predestroy hooks everywhere.
Predestroy hook returns a boolean.
/system/media/opensles/libopensles/IObject.c
b0a0555e2fcad41d3ee0c45f0f75ed556dbee282 01-Sep-2010 Glenn Kasten <gkasten@google.com> Verify that no extant objects at engine shutdown

Log the total count and ID numbers of any stragglers.
Fix the order of steps in engine shutdown.
Add more comments.

Change-Id: I12b531bcd43c288f9988768193274bad6984748a
/system/media/opensles/libopensles/IObject.c
66f75c45c9aea410b1f913d76995661e72571b67 31-Aug-2010 Glenn Kasten <gkasten@google.com> Fix problems found by the mute solo test.

Bug fixes for USE_OUTPUTMIXEXT (desktop):
- SL_PLAYEVENT_HEADATNEWPOS was broken
- GetPosition is now accurate, with or without seeking
- Fix race condition between AudioPlayer and Track
- Duration is updated if initial estimate is too low (e.g. if unknown is reported as zero)
- GetPosition while pending Seek now returns that value so the Seek appears synchronous
- Remove useless code to retry Enqueues; now drop decoded data if Enqueue fails
For all source files touched, add curlies to the "if" statements.

Change-Id: I1f70d8e683bc92831848af20857347d45c6407a9
/system/media/opensles/libopensles/IObject.c
974aacf14bfe6869b7d0cda3abcaef46af335487 26-Aug-2010 Glenn Kasten <gkasten@google.com> Fix bugs in BufferQueue automated test and related

Fix test bugs:
Clean up the player, mixer, and the engine (must be done in that order).
Re-enable 2 more tests; all 9 tests pass now.

Fix engine bugs:
IObject now has a de-init hook, which cleans up condition variable and mutex.
Run the de-initializers in reverse order so that IObject de-init hook is run last.
Replace the dedicated mEngine.mShutdownCond by the shared IObject condition variable.
Forgot to iniitalize mShtudownAck.
Unlocking the object mutex during CEngine_Destroy was bogus.

Miscellaneous logging and debugging improvements:
Track the source code location of the most recent mutex unlock.
Add more trace log options for detailed leave reasons.
Improve performance of trace log when disabled.
Turn on assert checking.
Check return value of pthread_cond_destroy and pthread_mutex_destroy.
Add comment.
Line length 100.

Change-Id: I23b7b495d439894b2fd31295a38cb73ef7b6be2e
/system/media/opensles/libopensles/IObject.c
3190a0da044e122c1c617e30d1d364701fb27110 23-Aug-2010 Glenn Kasten <gkasten@google.com> Fix bug with nested lock.

Add object lock debugging.
Replace !NDEBUG by USE_DEBUG.
Remove $(JNI_H_INCLUDE) and $(TOP).

Change-Id: I61217b82a7edc42d37dacf443ad0ca852ee0dfe9
/system/media/opensles/libopensles/IObject.c
04bd7e37c043835a177bedc7cc7520c30d32951a 17-Aug-2010 Glenn Kasten <gkasten@google.com> Clean up interface visibility.

Fix the interface visibility for occurences of an instance within an object.
Check all known interface codes in switch statements for safer error
detection in case of future changes to the list of enum constants.
Replace USE_CONFORMANCE by USE_BASE, USE_GAME, USE_MUSIC, USE_PHONE, USE_OPTIONAL.
Move comment to Khronos bug

Change-Id: I11892db12590db6d2d6db5191aac5b62ab4f67bd
/system/media/opensles/libopensles/IObject.c
9c03f04a9c6cc2a821182c8be8f2efe964a27efe 13-Aug-2010 Glenn Kasten <gkasten@google.com> Make internal implicit interfaces safer.

Add IsInterfaceInitialized.
Don't directly manipulate a buffer queue.
Call the interface via it's named entry points, not the v-table as it may not be initialized/available.
GetInterface enables the v-table not init.
Update Doxygen comments.
Line length 100.
Allow bool, true, and false in C code.
Add a verbose option to seek torture test.

Change-Id: I37c42834422759b881d2ffe4b171d9aa284fde98
/system/media/opensles/libopensles/IObject.c
f51f5c6ec99ebc8f2c833a68f232bc1c874a7f2f 09-Jul-2010 Glenn Kasten <gkasten@google.com> Bug fix and general code cleanup.

Trace debug now uses Android logging by LOGV/LOGE.
Added SL Utility Toolkit for OpenSL ES, similar to OpenAL UT.
Add a -DUSE_TRACE instead of -DNDEBUG and add it commented out to Android.mk.
LOGE for error returns, LOGV for all entry and exit.
Rename debug.c to trace.c.
slutPrintIID prints the symbolic name if known.
Fix bug in slQueryNumSupportedEngineInterfaces and
slQuerySupportedEngineInterfaces which were not
skipping over unavailable interfaces.
Use USE_CONFORMANCE to return SL_RESULT_FEATURE_UNSUPPORTED when not supported
and make some interfaces unavailable depending on USE_CONFORMANCE.
Move most FIXME to separate bug/to-do list.
Fix possible intermediate overflow in duration computation for sndfile.
Line length 100.
Address code review comments, disable LOG.
/system/media/opensles/libopensles/IObject.c
f156301680273e71e56e898f98798f5b5b2431f6 03-Jul-2010 Glenn Kasten <gkasten@google.com> Trace debug support.

Add Enter/Leave interface macros for trace debugging.
3D interface methods do not block for now.
Line length 100.
Add blank lines between interface methods for clarity.

Change-Id: I412936e8574f95308731e41f8b854fe342cb04b6
/system/media/opensles/libopensles/IObject.c
c37c934e00a96afe18aaadd9f9a1863c721bf8ea 30-Jun-2010 Glenn Kasten <gkasten@google.com> Fix miscellaneous bugs.

I3DCommit::Commit should block until generation count is updated.
IDeviceVolume_SetVolume and IDeviceVolume_GetVolume work on more device IDs.
Implement IEngine_CreateListener.
IEngine_Create3DGroup return correct status code.
IIDs were out of order in IID_to_MPH.c and OpenSLES_IID.c.
Comment out deadlock in Volume::SetMute.
Supply at least one codec descriptor for each supported codec.
Add object_cond_broadcast for use by 3DCommit::Commit.
EngineCapabilities allocates memory -- questionable.
Claim all 3 profiles temporarily.
AudioIODeviceCapabilities::GetDefaultAudioDevices should handle default audio devices.
Object::GetInterface needs to return correct status code.
Vibra interfaces are implicit not optional.
Line length 100.
Fix Android portability bug.
Update MPH perfect hash function.
MPH constants should not be ifdef.
MPH_to_index tables needed additional entries at end.
Interface ID and name tables should not be ifdef.
OUTPUTMIXEXT should not be advertised publicly.
For certain locator types, the format is permitted to be undefined.
Remove temporary workaround for Khronos bug 6331.
Engine::QueryNumSupportedInterfaces and Engine::QuerySupportedInterfaces skip unavailable interfaces.
Address code review comments.
More clear device ID handling.
Use symbolic constants instead of 0 for null data locator and data format.
Add comments about 3D commit.

Change-Id: I8d31ded6c877e71b6f5ef1e90446035da809d9a6
/system/media/opensles/libopensles/IObject.c
15f9f5e609265dff9d6036af38bea084c42a702a 24-Jun-2010 Glenn Kasten <gkasten@google.com> Gain and transport attributes at mutex unlock.

Update both interface and player copies of mute/solo.
Move synchronous gain and transport updates to mutex unlock exclusive.
Update sync thread logic.
Keep track of player position using tracks in PCM frame units.
Implement solo.
Various volume-related fixes.
Mute solo fields are only in IMuteSolo, but IMuteSolo is
immediately after IVolume to make it easier to find.
Move Android volume fields into audio player.
Fix printf missing newline.
Only one copy of mute and solo.
Clean up comments.
Line length 100.
SDL gain and transport updates are synchronous.
Fix unused variable warnings.
Use symbol for number of stereo channels.
Rearrange fields to save memory.
Add comments.
Fix problems introduced during the last merge.

Change-Id: I121fcbe4189b06850983941f540942a745fc51fb
/system/media/opensles/libopensles/IObject.c
3cdc48ac145e12a40b0ff0f90e8c01bec269bc38 16-Jun-2010 Glenn Kasten <gkasten@google.com> Add limited volume support for USE_SNDFILE platform.

Fix build warnings.
Remove obsolete FIXME.
/system/media/opensles/libopensles/IObject.c
32a32a4674ed760e1ab6bf4b4349216bbfa75735 17-Jun-2010 Glenn Kasten <gkasten@google.com> Fix two long-standing FIXMEs: O(n) and mThis.

Replace some O(n) algorithms by O(1) using ctz.
mThis was redundant for IObject.

Change-Id: Ic2cd0345498992af06495e9f3a13211dfeb3910e
/system/media/opensles/libopensles/IObject.c
bcf6e4f2a46544f599f6c77354650c6aad91ea5d 14-Jun-2010 Glenn Kasten <gkasten@google.com> More work on asynchronous operations.

Improve interface handling.
Interface state is kept using array of 4-bit fields instead of
separate bit-masks; this is simpler and uses less memory.
Better error handling in EffectSend.
Keep track of interfaces that have been gotten.
Asynchronous AddInterface and ResumeInterface.
Closures are now allocated dynamically.
Add resume hook.
Fix 2 bugs introduced during last effort.
Line length 100.
Continue asynchronous DynamicInterfaceManagement.
Implement asynchronous Object::Resume.
AbortAsyncOperation for Realize and Resume phase 1.
Implement asynchronous abort during phase 1.
ThreadPool bug fixes.
When destroying ThreadPool, free memory used by pending closures.
Don't enqueue additional closures while ThreadPool is shutting down.
Update comments and assertions.
Use 8-bits per interface state instead of 4-bits.
List official object states explicitly.
Add comments.
/system/media/opensles/libopensles/IObject.c
437f9ab9914ea61112aa496a047162a0d22194cd 07-Jun-2010 Glenn Kasten <gkasten@google.com> Add note about bug in IMuteSolo channel count.

Change-Id: Iccb78019bbbffaa98eaa8877258d88a77c979e48

Remove spurious NDEBUG, init in same order as .h.

Change-Id: Ia30b30ce4dbc8f074632c275583b7ef6069141dc

Implement asynchronous Object.Realize

Added ThreadPool mechanism for asynchronous operations.
Fixed off-by-one bug in BufferQueue that didn't use the last buffer.
Added engine hooks for Realize and Destroy.
Realize hook and callback are now called with mutex unlocked.
Added new Object states realizing 1 and realizing 2, mapped to unrealized.
Asynchronous realize on an engine is forced to be synchronous.
Engine initialization now done at Realize, not during CreateEngine.

Change-Id: I9c11461dbeab97aec04f8266f268cfd16086b5a7

Port to Android.

Change-Id: I0fff9f32e4d374230ab940e00fe6b8429b143ed3

Shutdown the sync thread when engine is destroyed.

Change-Id: I197267e5eaa4a49cacb34bc6e6f9c6fa92b381b5

Mutex unlocked during the initialization phase of DynamicInterfaceManagement.AddInterface.

Change-Id: I16000a2c4f1f9e93075f08ac2eaad6a8f12ba9da

Dynamic interface removal is done with mutex unlocked.

Change-Id: I5317d859dee680ca1c96e803388f2475f7795099

Normalize SLboolean input parameters.

Store non-zero boolean value as SL_BOOLEAN_TRUE rather than original value.
Line length 100.

Change-Id: I867ae8dd328b1427be98dfd148e32fcba38ce409

More input parameter checks.

Line length 100.
Fix a few build warnings.

Change-Id: I78fb1415fed649e05a370cf60e015a7fe13ffe8c

Address code review comments.

Change-Id: Ic7f2c70ded42f3d0e5e92f173cf80e084e54fc89
/system/media/opensles/libopensles/IObject.c
99cd40bd94b21ff01fa9391b04d8dd1fa7a05da7 04-Jun-2010 Glenn Kasten <gkasten@google.com> Improve portability.

Change-Id: I67643ff9807fcb0459322b36d2b5406ae15903a7
/system/media/opensles/libopensles/IObject.c
d55d250a016c1400cc00b5e1ac5baaa095702585 04-Jun-2010 Glenn Kasten <gkasten@google.com> Continue preparations for implementing async ops.

Centralize object destroy.
Record an object instance ID for use by debugger user interface.
Track all object instances associated with an engine, for use by sync thread and debugger.

Change-Id: Id8b7d0d1acd43f9524443f1bdcfb70ede7b66bfb
/system/media/opensles/libopensles/IObject.c
09f49a84b259d8b8c49a4d71b42ea801b2a9e8f2 02-Jun-2010 Glenn Kasten <gkasten@google.com> Improve resource recovery.

Better cleanup in AudioPlayer.Destroy.
Avoid mallocs in LEDArray and Equalizer.
Line length 100.

Change-Id: I2d22880b27ccf7e9038b398cae9287781fd82253

Continued work on threading.

Lay the groundwork for true asynchronous realize.
Call all callbacks with mutex unlocked.
C volatile is meaningless.
Start adding support for suspend/resume on interfaces.
Line length 100.

Change-Id: I631cb4f123143e4ef79c6c491d12b1e559857cab
/system/media/opensles/libopensles/IObject.c
4c0d2128c7c0a8b40803026d92083b6affc417d2 02-Jun-2010 Glenn Kasten <gkasten@google.com> Simplify initialization of AudioPlayer.

Clear whole object at initialization. Remove spurious NDEBUG.

Change-Id: Idb116722d95526f8204200d14ca1bafbedd19936
/system/media/opensles/libopensles/IObject.c
8a47ad52488855f50b95da649744dde3a254698b 28-May-2010 Jean-Michel Trivi <jmtrivi@google.com> Rename RealizeHook to AsyncHook.

Change-Id: I9a01c438bba7d18a214f90912620847a3d72d3f2
/system/media/opensles/libopensles/IObject.c
4cf440cd9f6106db00571345af7aa02529c9a10a 28-May-2010 Jean-Michel Trivi <jmtrivi@google.com> Add async field to the object-specific implementation of Realize
and Resume functions.

Change-Id: Ib9854a4ba06ebbc6a9e2a58274db2bfe47d46f35
/system/media/opensles/libopensles/IObject.c
050feed71109208b772e5be2e1a637b82f9d05fc 26-May-2010 Jean-Michel Trivi <jmtrivi@google.com> Move OpenSL ES library implementation to the libopensles folder.
Add an Android makefile for libopensles.

Change-Id: I1480bf46c7165cd35bb55aef1f11fb0a04fff88e
/system/media/opensles/libopensles/IObject.c