Previously, if we had disconnected at the high watermark,
the read immediately following a seek would fail, and would
not be retried, resulting in an error.
Change-Id: I45a53563fe17d6b54893815abc7750a7dfb0a124
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
Improve volume management by keeping track of volume for each type
of device independently.
Volume for each stream (MUSIC, RINGTONE, VOICE_CALL...) is now maintained
per device.
The main changes are:
- AudioService now keeps tracks of stream volumes per device:
volume indexes are kept in a HashMap < device , index>.
active device is queried from policy manager when a volume change request
is received
initalization, mute and unmute happen on all device simultaneously
- Settings: suffixes is added to volume keys to store each device
volume independently.
- AudioSystem/AudioPolicyService/AudioPolicyInterface: added a device argument
to setStreamVolumeIndex() and getStreamVolumeIndex() to address each
device independently.
- AudioPolicyManagerBase: keep track of stream volumes for each device
and apply volume according to current device selection.
Change-Id: I61ef1c45caadca04d16363bca4140e0f81901b3f
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
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
Output-only parameters should use =r or =&r constrains, never +r.
This avoids a warning about the variable 'result' being used
uninitialized.
This avoids loading the uninitialized value into the register,
before it is overwritten by the multiplication.
Change-Id: I0ef6179e133c35d290feb8e12bea180ecae11a05
Output-only parameters should use =r or =&r constrains, never +r.
This fixes a lot of warnings about the variable 'result' being
used uninitialized.
Change-Id: Ie689fce8c6ecd874d4fc66e87687c67551d9ab6a
Also don't require LINUX to be defined, enable the MSVC typedefs
only within _MSC_VER.
This fixes a lot of warnings about dereferencing pointer 'winPtr'
breaking strict aliasing rules.
Change-Id: I4afbe0ed81295ebe6e5ee2c7f0fb0cc2dc83c89b
Currently, a pointer to a Word32 is used as a pointer to Word16, which
doesn't work as intended on big endian architectures.
This change needs to be analyzed and tested properly so that it doesn't
cause issues with overflows in these variables. Another solution would be
to change all the scf arrays to 32 bit instead.
Change-Id: I53d9eb83bdaf8d3b1530eb5064dd10b08bce737a
This reduces the amount of ifdefs needed, into something that
works on both gcc and MSVC. This removes one occurrance of the
LINUX ifdef, simplifying compiling on various platforms.
Change-Id: I1e2af6c2517410dc280197ba922df877cf7afbd5
At native level it was a mixture of audio_stream_type_t, int, uint32_t,
and uint8_t. Java is still int. Also fixed a couple of hard-coded -1
instead of AUDIO_STREAM_DEFAULT, and in startToneCommand a hard-coded 0
instead of AUDIO_STREAM_VOICE_CALL.
Change-Id: Ia33bfd70edca8c2daec9052984b369cd8eee2a83
One of the source files here is including <cutils/tztime.h> which
itself includes <bionic_time.h>, a private C library header used
to define the strftime_tz() extension (which used to be declared
in <time.h> but was moved there instead).
Add a missing C include path to let our code compile as usual.
Change-Id: I6aac2f1d3d15ad182679c81ff3f4febff74eb671
This avoid lengthy/duplicate sniffing for drm plugins when a decrypt session is opened
o The change is backward compatibile in that no update is required
for existing drm plug-ins if they do not plan to provide separate
sniffer/extractor
related-to-bug: 5725548
Change-Id: I7fc4caf82d77472da4e2bc7b5d31060fb54fd84c
This was applied in AOSP master earlier, in commit
b21611e5b0f1797e39e781d91ade023bac87637f, but when merged
into the Google internal tree in
88c2d4d26d79384f32a25bd775cf873cb678b12a, none of these
changes have been brought in. (The diff of this merge commit
and its first parent, d94b71d, is empty.)
Therefore, reapply the rest of these changes on the files
that still are present in the current version.
Change-Id: I645a9b9134769958a11808a06163123d28d83e46
Since the settings (notifications, ringtones, and alarms) request
rowId after inserting into DB, do not use bulk insert for them.
(Bulk insert does not return the rowId)
Change-Id: I8faf993f8ac2da96672594a1c92ddc917f964d6f
A long pathname would corrupt the heap due to incorrect use of strncpy.
Also was using hard-coded constant 256 instead of PATH_MAX.
Change-Id: Iba382bbb38624fbc41fec91449f9814f77d4ac0d
AudioSystem::setMode previously allowed negative modes, but these were
then rejected by AudioFlinger.
Now negative modes (including AUDIO_MODE_INVALID and AUDIO_MODE_CURRENT)
are explicitly disallowed.
Change-Id: I0bac8fea737c8eb1f5b6afbb893e48739f88d745