104 Commits

Author SHA1 Message Date
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
Glenn Kasten
452d6d6efe Use enum effect_state consistently
Also fix indentation

Change-Id: I393ef9e37ffceed5ad4a78df439726ae1fe139df
2012-01-26 14:20:34 -08:00
Glenn Kasten
563562032d Use enum track_state consistently
Change-Id: Ie5ebb7befa092e1de1e4df9c6e2d51e6bcfd176a
2012-01-26 14:13:43 -08:00
Glenn Kasten
34f9f8bb83 Remove AudioFlinger dependencies on client
Change-Id: Ibb591e41a3ca5d7015e2b66b98b8fef5f415fb37
2012-01-20 17:12:59 -08:00
Glenn Kasten
0a204ed0f5 Use audio_format_t consistently, continued
Was int or uint32_t.

When AudioFlinger::format can't determine the correct format,
return INVALID rather than DEFAULT.

Init mFormat to INVALID rather than DEFAULT in the constructor.
Subclass constructors will set mFormat to the correct value.

Change-Id: I9b62640aa107d24d2d27925f5563d0d7407d1b73
2012-01-20 14:41:34 -08:00
Eric Laurent
3562931af9 resolved conflicts for merge of 05683c85 to master
Change-Id: I7846b7da8c5813b7a9b1f3f71aede0229689ff0d
2012-01-19 10:00:02 -08:00
Eric Laurent
71c4496a97 AudioFlinger: mix track only when really ready (2)
This problem due to the way audio buffers are mixed when
low power mode is active was addressed by commits 19ddf0eb
and 8a04fe03 but only partially. As a matter of fact, when more
than one audio track is playing, the problem is still present.
This is most noticeable when playing music with screen off
and a notification or navigation instruction is played: in this case,
the music or notification is likely to skip.

The fix consists in declaring the mixer ready if all active tracks
are ready. Previous behavior was to declare ready if at least one track was
ready. To avoid that one application failing to fill the track buffer blocks other
tracks indefinitely, this condition is respected only if the mixer was ready
in the previous round.

Issue 5799167.

Change-Id: Iabd4ca08d3d45f563d9824c8a03c2c68a43ae179
2012-01-18 12:27:38 -08:00
Glenn Kasten
8df33080f9 Remove dead setVolume() and mVolume[2]
Change-Id: I94b835434093e920432614eb5007101e87758f32
2012-01-17 13:33:33 -08:00
Glenn Kasten
fb6b5bdcea Merge "Use audio_mode_t consistently" 2012-01-17 11:32:53 -08:00
Glenn Kasten
6e987a46f4 Check stream type in AudioFlinger::createTrack
A bad parameter to AudioFlinger::createTrack could cause mediaserver to crash.

Other AudioFlinger stream type cleanup:
 - Simplify range check for audio_stream_type_t
 - Add comment about mStreamTypes array initialization.

Change-Id: Ia33aa1cce0fdd694b08d9288816ffc097a9543d0
2012-01-17 07:45:07 -08:00
Glenn Kasten
c80f407829 Merge "Fix locking for mMasterVolume and mMute" 2012-01-17 07:28:14 -08:00
Glenn Kasten
8c17a2f088 Merge "Use size_t for frame size" 2012-01-17 07:27:46 -08:00