115 Commits

Author SHA1 Message Date
Glenn Kasten
eb70fe50dd Merge "AudioFlinger const methods and parameters" 2012-02-28 07:21:09 -08:00
Glenn Kasten
2b119a6336 Merge "AudioBufferProvider comments and cleanup" 2012-02-28 07:17:47 -08:00
Glenn Kasten
fa28f57f29 Merge "Fix tracking of hardware state for dump" 2012-02-27 13:23:51 -08:00
Glenn Kasten
0fccd35b32 AudioFlinger const methods and parameters
Change-Id: I93ec28024005ed23aa141518092a012a4a7c44c5
2012-02-24 16:34:43 -08:00
Glenn Kasten
2521a01970 Pull out duplicated copies of silent mode check
Also fix the error handling for the property_get.

This is part of preparation for the threadLoop() merge.

Change-Id: I6405190ea18146d1271575e1dfe9f279e8f36b17
2012-02-24 16:02:24 -08:00
Glenn Kasten
c2db119d0a AudioBufferProvider comments and cleanup
Add comments about which methods implement the AudioBufferProvider interface.

Simplified the definition of kInvalidPts.  <stdint.h> is very hard to work
with, there seems to be no way to use it reliably to get INT64_MAX without
having a separate source file, which is ugly because it means kInvalidPts
is not a compile-time constant.  So I just deleted AudioBufferProvider.cpp
and used a hard-coded constant instead.

Added a default constructor for Buffer so that the fields aren't random
(especially .raw which is used to determine if the buffer is valid).

Make the pts for getNextBuffer default to kInvalidPTS so code that
doesn't need a pts doesn't have to specify a value.

Rename the parameter to AudioMixer::setBufferProvider to make it clearer.

Change-Id: I87e7290884d4ed975b019f62d1ab6ae2bc5065a5
2012-02-24 13:42:13 -08:00
Glenn Kasten
23c9c74017 Fix tracking of hardware state for dump
At end of AudioFlinger::onFirstRef(), the hardware status was being left
in wrong state.  It should be AUDIO_HW_IDLE but was AUDIO_HW_INIT.

mHardwareStatus was being set to AUDIO_HW_OUTPUT_OPEN too early, and so
a return would leave it in the wrong state until next hardware operation.

Take the hardware lock for dev->get_parameters, and update mHardwareStatus
before and after.

Keep hardware lock only for the duration of the dev->set_parameters.

Rename two constants in enum hardware_call_state to have the prefix
AUDIO_HW so they follow the naming conventions.

Add comments.

Change-Id: I6c7450b11f9b13adaeef9cec874333e478a58fc0
2012-02-24 13:31:26 -08:00
Glenn Kasten
3526982c1d Remove TrackBase::mFlags
The bit-field TrackBase::mFlags was supposed to have track-specific
flags in the upper 16 bits, and system flags in the lower 16 bits.

The upper 16 bits of mFlags were initialized in the TrackBase
constructor from the flags parameter of IAudioFlinger::createTrack()
and IAudioFlinger::openRecord(), and the lower 16 bits were cleared.

However, the upper 16 bits of mFlags were never acccessed again.
So really there are no track-specific flags.  I left the flags
in the parameter list of createTrack() and openRecord() but made a
note that these should be removed eventually as they are dead.

This leaves only the one system flag "step server failed".  I replaced
the bit-field mFlags by bool mStepServerFailed, which is simpler and
slightly faster.

Change-Id: I6650f5487be72791b4a67d73adcd10ffa04e2aa5
2012-02-24 13:14:28 -08:00
Glenn Kasten
685c9ce3bd Avoid wp<>::unsafe_get() with a few exceptions
Avoid using wp<>::unsafe_get() except in a log, and other specific cases
when it's known to be safe.

Use more specific subclass types for parameters to avoid down-casts.

When a constructor or method parameter is "this" of an object that is
currently being constructed, it's better to use a raw pointer rather
than either sp<> or wp<>.

Using the raw pointer is safe, provided either:
 - it is "this" of an object being constructed (which has sp<> refcount of 0),
 - or the caller already holds an sp<>

The raw pointer is simpler and faster, and it avoids the problem of the
sp<> reference count being incremented and then decremented to zero on
scope exit, which would cause the object's destructor to run while the
object is still being constructed.

Also removed some dead code per a review comment.

Change-Id: I7375f64da3aec11b928c33cb01faff186252ef5e
2012-02-22 13:19:26 -08:00
Glenn Kasten
7d3be3a3c1 Simplify code
Use DefaultKeyedVector::valueFor to avoid extra test
Make local variables as local as possible
No double parentheses
No typedef for single use
No parentheses around indirect function call
No AudioFlinger:: prefix when not needed
Remove unnecessary casts
Remove block with only one line

Saves 128 bytes

Change-Id: I3a87430eeb01b81e7b81a1c38f6fdd3274ec48f3
2012-02-17 09:39:07 -08:00
John Grossman
d8cf2960d0 Upintegrate Audio Flinger changes from ICS_AAH
Bring in changes to audio flinger made to support timed audio tracks
and HW master volume control.

Change-Id: Ide52d48809bdbed13acf35fd59b24637e35064ae
Signed-off-by: John Grossman <johngro@google.com>
2012-02-16 13:45:11 -08:00
Glenn Kasten
05bd19f608 Merge "Fix races related to volume and mute" 2012-02-14 09:44:47 -08:00
Glenn Kasten
b3db213eb5 Update comments
We no longer put the filename at start of file.

Change-Id: Ic435b159a23105681e3d4a6cb1ac097bc853302e
2012-02-14 09:17:59 -08:00
Glenn Kasten
6a20b26d99 AudioRecord and AudioTrack client tid
Inform AudioFlinger of the tid of the callback thread.

Change-Id: I670df92dd06749b057238b48ed1094b13aab720b
2012-02-14 07:30:48 -08:00
Glenn Kasten
ad8d175b40 mAudioHwDevs and related cleanup
Inline AudioFlinger::initCheck and remove unnecessary lock.

Remove redundant check of mAudioHwDevs.size().

No need to lock mHardwareLock for each device separately
during initialization.

Use size_t not int to loop through Vector, since size() returns size_t.

Add missing hardware lock for get_mic_mute() and get_input_buffer_size().

Add comments.

Change-Id: Iafae78ef78bbf65f703d99fcc27c2f4ff221aedc
2012-02-10 15:36:46 -08:00
Glenn Kasten
da639f5438 Merge "Simplify ThreadBase::exit() aka requestExitAndWait" 2012-02-10 15:32:16 -08:00
Glenn Kasten
d335c1cc4f Merge "Move header declarations around for clarity" 2012-02-10 15:31:07 -08:00
Glenn Kasten
3ebf95bb52 Merge "Camel case readability & private disconnect(bool)" 2012-02-10 15:30:15 -08:00
Glenn Kasten
761286f65b Simplify ThreadBase::exit() aka requestExitAndWait
We can remove mExiting and use Thread::exitPending() instead.

The local sp<> on "this" in exit() is not needed, since the caller must
also hold an sp<> in order to be calling us. (Unless it was using a raw
pointer, but that would be dangerous for other reasons.)

Add comment explaining the mLock in exit().

Change-Id: I319e5107533a1a7cdbd13c292685f3e2be60f6c4
2012-02-10 15:02:44 -08:00
Glenn Kasten
c1513f42ee Merge "Move declaration of stream_type_t up earlier" 2012-02-10 13:33:31 -08:00
Glenn Kasten
00931bbfd2 Move header declarations around for clarity
Put IAudioFlinger methods in binder opcode order.
Move hardware call state closer to where it is used.
getMode() and btNrecIsOff() are private.

Change-Id: Ie50340b396c39c763f2b155cbc08da8a0d0f2424
2012-02-09 17:29:26 -08:00
Glenn Kasten
29441ff5fd Camel case readability & private disconnect(bool)
Change-Id: If66516ed2703e048c5e6ccc6cd431446a024f4a1
2012-02-09 16:43:39 -08:00
Glenn Kasten
8b02b99434 Fix races related to volume and mute
Fix race conditions when setting master volume, master mute, stream
volume, stream mute for a playback thread, and when reading stream
volume of a playback thread.  Lock order is AudioFlinger, then thread.

Rename streamVolumeInternal to streamVolume_l, comment, and use it to
implement streamVolume().

Code size reduction:
 - Remove dead code: AudioFlinger::PlaybackThread::masterVolume, masterMute, streamMute.
 - Change return type of non-binder methods that always succeed from status_t to void.
 - Remove virtual from volume and mute methods that don't need it.

This change saves 228 bytes but decreases performance of binder operations
due to the added locks.

Change-Id: Iac75abc1f54784873a667d1981b2e08f8f31e5c9
2012-02-08 17:01:49 -08:00
Glenn Kasten
3773334fbd Move declaration of stream_type_t up earlier
stream_type_t is used by AudioFlinger class, so it should be declared there.
This way we don't have to peek into PlaybackThread to get the declaration.

Change-Id: Ie08bab1604699214d1e8df2d48d3fbfbbc436e96
2012-02-08 12:54:31 -08:00
Glenn Kasten
aae26c8de4 Rename type() to streamType()
This avoids possible confusion with thread's type().
Also remove redundant cast "(audio_stream_type_t)".

Change-Id: I320b9177b6c267a102d215f002228bcf988c437a
2012-02-08 12:52:00 -08:00
Glenn Kasten
803a86a546 Combine duplicate code & document wp<> in mClients
Change-Id: Iea8cfe8e57563337fb2484a1246ef79d6ad3db18
2012-02-08 10:24:54 -08:00
Glenn Kasten
39d00cb442 Use audio_io_handle_t consistently instead of int
Other:
 - add a comment to nextUniqueId
 - made ThreadBase::mId const, since it is only assigned in constructor.

Change-Id: I4e8b7bec4e45badcde6274d574b8a9aabd046837
2012-02-08 10:06:32 -08:00
Glenn Kasten
6731333584 Effect UUID inputs passed by pointer are const
Change-Id: I1f5c338bcb7368e3dd8cd5f804b2e6d9fbe087f8
2012-02-08 09:21:39 -08:00
Glenn Kasten
cd330e7f38 Merge "AudioFlinger methods const and inline" 2012-02-08 08:39:39 -08:00
Glenn Kasten
cbe8b72247 Merge "Use virtual destructors" 2012-02-08 08:33:41 -08:00
Glenn Kasten
16d64ad699 Merge "Declare more IAudioFlinger methods const" 2012-02-08 07:39:27 -08:00
Glenn Kasten
4fc616192a Remove dead code
mFormat is unused in resampler
mClientTid is unused
local variable pid is unused in dump

Change-Id: Ib156e38029366620bfeff2a13e73471867155a5b
2012-02-03 16:09:30 -08:00
Glenn Kasten
3f6d83a68a Declare more IAudioFlinger methods const
This is just documentation, as C++ method const-ness doesn't mean anything
for a binder API.  Instead, here const means "no side effects".

Change-Id: Iaa9cd2fe477db10ae9a40cac4f79f0faa9b4e5e6
2012-02-03 15:40:56 -08:00
Glenn Kasten
eabd94aa7d AudioFlinger methods const and inline
This saves 1063 bytes and probably improves performance.

Change-Id: I11cf0dfd925fbaec75e3d1b806852a538eae5518
2012-02-03 15:25:24 -08:00
Glenn Kasten
b16313812a Use virtual destructors
It turns out to be just a comment, as all except AudioMixer are RefBase.

There are only a few performance-sensitive cases where it's worth thinking
about whether you need a virtual destructor, and the headache usually
outweighs the benefit.

Change-Id: I716292f9556ec17c29ce8c76ac8ae602cb496533
2012-02-03 14:42:43 -08:00
Glenn Kasten
f55bc56490 Merge "Use audio_in_acoustics_t consistently" 2012-02-03 08:31:01 -08:00
Glenn Kasten
7bd4f6f4d0 Merge "For performance, return large objects by reference" 2012-02-03 07:46:42 -08:00
Glenn Kasten
dc3ac85009 Constructor initialization and const fields
In constructors, initialize member fields in the initialization list
rather than constructor body where possible.  This allows more fields
to be const, provided they are never modified.

Also initialize POD fields in constructor, unless it's obvious they
don't need to be initialized.  In that case, put a comment instead.

Remove explicit clear() in destructors on fields that are now const.

Give AudioSessionRef a default constructor, so it's immutable fields can
be marked const.

Add comment about ~TrackBase() trick.

Initialize fields in declaration order to make it easier to confirm that
all fields are set.

Move initialization of mHardwareStatus from onFirstRef() to constructor.

Use NULL not 0 to initialize raw pointers in initialization list.

Rename field mClient to mAudioFlingerClient, and getter from client()
to audioFlingerClient().

Change-Id: Ib36cf6ed32f3cd19003f40a5d84046eb4c122052
2012-02-03 07:37:14 -08:00
Glenn Kasten
a12b6d1d44 Merge "Cleanup thread types" 2012-02-03 07:26:28 -08:00
Glenn Kasten
9704026ccb For performance, return large objects by reference
Change-Id: Ibf737018ef1d3c7d717584615dcb2d4ecdb50c99
2012-01-30 13:01:17 -08:00
Glenn Kasten
1f812f720f Fix const sp<>& in parameter list and return value
EffectModule::addHandle and Client::heap() were declared incorrectly.

As a parameter, an sp<> should be & for efficiency, and for input
parameters it should also be const to protect the caller's value.

But as a return value, an sp<> should have neither const or &.  The "e"
in "return e;" might be located on the stack, and if there is "&" then
the caller would see the address of a variable which no longer exists.
Also, an & would make it hard to do "return 0;".
A "const" without & is meaningless in the return type.
(In this particular case, the "e" is a member field, so it was safe.)

Change-Id: I3df5f294214eb15a9d4d596c6d5ef29de97b5c27
2012-01-30 10:31:09 -08:00
Glenn Kasten
882c0a20c5 Use audio_in_acoustics_t consistently
Change-Id: I0a9dd668fb2e57b1c3ece3190588194974b99062
2012-01-27 13:31:54 -08:00
Glenn Kasten
c1f63ddba7 Merge "AudioStreamIn and AudioStreamOut" 2012-01-27 07:22:30 -08:00
Glenn Kasten
6562dadf3c Merge "Declare methods in binder opcode order" 2012-01-27 07:19:53 -08:00
Glenn Kasten
591993f162 Merge "Use enum effect_state consistently" 2012-01-27 07:19:10 -08:00
Glenn Kasten
86012869b8 Merge "Use enum track_state consistently" 2012-01-27 07:18:23 -08:00
Glenn Kasten
5b0135e41b AudioStreamIn and AudioStreamOut
These are immutable, so make the fields const.
getOutput() and getInput() methods are now const.

Change-Id: I128246ebd56ea50b3e542be43f2aa1bcb55f1373
2012-01-26 15:58:07 -08:00
Glenn Kasten
efd511a925 Cleanup thread types
Use type_t instead of int for thread types.
Initialize ThreadBase::mType in constructor and make it const.

Change-Id: I43d141388b9639e4783c30b97dbda5688bf7555f
2012-01-26 15:45:12 -08:00
Glenn Kasten
0ae4d97689 Declare methods in binder opcode order
This makes it easier to compare interface and implementation.

Change-Id: Ie060e43dec348902abcf40f5a610cec639d6d0d3
2012-01-26 14:34:30 -08:00
Glenn Kasten
789fef1f83 Use enum mixer_state consistently
Change-Id: I5b71ed20f939dfc4b98143334b7aa064d282f584
2012-01-26 14:23:47 -08:00