AAudioService would fail if a null client was passed.
Two null checks were added. One where we know the null
client first appears. And one where the client is first used
in case other calls are passing null.
Bug: 116230453
Test: Bug has a POC apk that triggers the bug.
Test: Look for messages like:
Test: AAudio : BnAAudioService::onTransact() client is NULL!
Change-Id: Id9c4fc154226ab40df97335da8bc9361cfc99a73
bug: 131328009
bug: 129426284
test: test on 32bit Android Go device and see mediaswcodec starts on boot
Change-Id: I21c2b3d228dfa4916bbdbe4f899024f69fd0c77e
Do not force audio device changed callback when the client
(AudioTrack or AudioRecord) registers to AudioFlinger but only when
it starts playback or capture. Doing so prevents a spurious callback
happing at registration time where a stale device
(previously selected by AudioFlinger thread) but irrelevant to this
client is indicated. This causes a disconnection of AAudio streams
despite no real device change.
Bug: 128630993
Test: CTS: android.nativemedia.aaudio.AAudioTests, android.media.cts.RoutingTest
CTS Verifier: Audio Input/Output Routing Notifications Test
Change-Id: Ia7f1d11490989b0287c97479466c1c07a223aab3
The client must provide a unique Record ID (RIID) when creating
an AudioRecord. This RIID is passed down to AudioInputDescriptor
in AudioPolicyManager which sends configuration updates
via IAudioPolicyServiceClient callback.
By supplying RIID, the Audio Service can coalesce start / stop
events coming from clients (apps) with recording configuration
update events.
For AAudio MMap clients everything is handled at the server
side because they correspond directly to audioserver objects.
Bug: 123312504
Test: android.media.cts.AudioRecordingConfigurationTest
AudioRecordTest#testAudioRecordInfoCallback
MediaRecorderTest#testAudioRecordInfoCallback
manual testing using Oboe and Solo test apps
Change-Id: I3d32241752d9a747736606dc4cb1e068e6b7aa3b
This CL aligns the engineconfigurable PFW top file to the convention
adopted within parameter-framework.
Bug: 130284799
Test: make
Change-Id: I146430a1a6618d73273dbfd85b060d9fd04a6f9a
Signed-off-by: François Gaffie <francois.gaffie@renault.com>
This will more accurately track the read or write
position of the DSP.
The client sometimes aggregates multiple hardware bursts
to avoid waking up too often. This can make it look like the DSP has
processed a larger amount of memory than it really has.
With this change, the timing model will advance in sync with the hardware.
Bug: 117834966
Bug: 130911274
Test: see bug for repro steps
Change-Id: Id22f1f313e02f0514665ee5ac144cab4684e3bc1
OpPlayAudioMonitor was constructing a weak pointer to itself
in the constructor. This practice can lead to crashes due to
race conditions vs object destruction. This code is now moved
to onFirstRef method which is called when at least one strong
reference exists.
This change also reduces the number of created OpPlayAudioMonitor
objects by using a factory method.
Bug: 130038586
Test: enable / disable DND mode
Change-Id: I22e63a883ebaa25b9c96e79271bb9693b5ed75cd
The clear function of vector will release memory,
so mBins will use overflow.
Test: enable asan for cameraserver
Bug: 131103281
Change-Id: Iaaa353332d7ac3992f018aa667fb8ef20a810f20
Signed-off-by: zhangshuxiao <zhangshuxiao@xiaomi.com>
Do not systematically close all inputs when an input device is connected
or disconnected but only those affected by the change.
Also:
- refactor setDeviceConnectionStateInt() to align input and output
devices connection sequence
- remove unused "inputs" argument to checkInputsForDevice()
Bug: 126370328
Test: phone call, video call , camcorder, assistant, auto projected
Change-Id: I27734b32da97ad4790d6cd74eaaf866e414db211
Use only devices attached to primary HAL when capturing
for audio source HOTWORD as they have to be accessible by
the audio DSP.
Bug: 123311424
Test: capture use cases: phone calls, Duo, Camcorder, Assistant.
Change-Id: Ib54622b69612e6ed12f36193d4b1918ba892a2cd
AudioFlinger used to reject requests for the low latency FAST
path when the capacity was != mPipeFramesP2.
But if the caller requests < mPipeFramesP2 than we can just bump it
up to mPipeFramesP2 because the API allows that.
For example, on Pixel, mPipeFramesP2 is 4096
Bug: 80308183
Test: adb shell input_monitor_callback -pl -b4000 -m1
Test: should see performance mode 12 for LOW_LATENCY
Change-Id: I987067910de3194fb52370d0ea1626cffad6248c
This CL fixes the compilation issues met while generating configuration files.
@todo: TEMPORARY_DISABLE_PATH_RESTRICTIONS=true is still required to use
subprocess.Popen(["domainGeneratorConnector",...) on external/parameter-framework
@todo: CL mixing in parameter-framework leading to validation failure
Bug: 130284799
Test: make
Change-Id: I495026781af63f3c3a538b00fe467d39f58baa70
Signed-off-by: François Gaffie <francois.gaffie@renault.com>
Add pre processing effect management for concurrent capture scenarii.
When several clients on the same input stream have enabled audio effects,
only the effects attached to the top priotity client are active.
Other effects are suspended.
Add AudioFlinger API to suspend/restore audio effects build on top
of exisiting internal effect suspend mechanism.
RecordThread now supports more than one effect chain.
AOSP pre processing implementation supports more than one effect session
per input.
Refactor AudioPolicyManager::closeAllInputs() to call closeInput() on
all inputs instead of partially duplicated code.
Bug: 128419018
Test: make
Change-Id: I685286da4c2905a8894a4354679f9787b1400621
For a2dp hybrid mode, device retrieval is done through type / code pair.
When the device is connected, getDeviceDescriptor is called with allowToCreate
boolean. As a result, HwModuleCollection::createDevice will be called, invoking
getModuleForDeviceTypes as done laterly in setDeviceConnectionState.
This CL removes double call to these function.
Bug: 130284799
Test: make
Change-Id: I188f11e9325cfc6af2ae872e00485e00ccd9096b
Signed-off-by: Francois Gaffie <francois.gaffie@renault.com>
AudioPolicy used to hide activity of stream patch to prevent changing
the volume.
This CL replaces the filtering of the stream patch activity on the policy
by a full volume range within audio flinger.
It updates also product strategies example for automotive to add associated
strategy and full range volume.
Bug: 130284799
Test: make
Signed-off-by: François Gaffie <francois.gaffie@renault.com>
Change-Id: I6e77dc2cbed0289f0a1341f7597b1c25abee5f7d
No need to filter anymore the remote submix to engine as
both configurable and default engine take care of legacy remote
submix address (aka "0") and wont only care about type.
Bug: 130284799
Test: AudioPolicyEmulatorTests --gtest_filter=*.DynamicPolicyMixRecordInjectionTest.*
AudioPolicyEmulatorTests --gtest_filter=*.DynamicPolicyMixPlaybackReRoutingTest.*
Change-Id: Ia90c65ccfc51220a2344cecec2fbba7f2bad776a
Signed-off-by: François Gaffie <francois.gaffie@renault.com>
Reduce log spam and error logging as part of the Green Log effort.
Replace logging of addresses with integer IDs.
Bug: 36785118
Bug: 122073229
Bug: 130569151
Test: Open an AAudio stream at 44100 and look at logcat.
Test: adb shell write_sine_callback -pl -r44100
Test: adb logcat | grep -i aaudio | grep " E "
Test: Should see no "E" logs from AAudio.
Test: Should see no addresses from AAudio.
Change-Id: I1d4e0bc349095f818fad52603d2bb8e7317d3681
Merged-In: I1d4e0bc349095f818fad52603d2bb8e7317d3681
(cherry picked from commit 7ba46558fb)
Remove effect specific mutex (mEffectLock) in AudioPolicyService: Due to
concurrent capture (among other reasons), it is necessary that the audio
policy manager state preserved by mLock includes audio effects
registration and enabling.
Moved all audio policy API calls from audio flinger out of locked regions
for audio flinger, thread and effects mutexes to avoid cross deadlocks
between audioflinger and audio policy manager:
- centralized audio policy API calls in EffectModule::updatePolicyState()
- the enabled state now reflects the state requested by the controlling
handle, not the actual effect processing state: a suspended effect is
now considered enabled.
A new audio policy manager API moveEffectsToIo() is added to atomically
handle moving effects to a new input or output without having to call
unregister > register > enable sequence.
Also fix assert in setStreamVolume to match volume group refactoring
in audio policy manager.
Bug: 128419018
Test: CTS tests for audio effects.
Test: manual tests with Duo calls, Play Music, Youtube, notifications
with and without Bluetooth and wired headset.
Change-Id: I8bd3af81026c55b6be283b3a9b41fe4998e060fd
Add cpu hint for c2 sw codecs as well as omx.
bug: 130669553
test: manually test that when playing YouTube 1080pHDR
content, adb logcat shows traces from SchedulingPolicyService:
SchedulingPolicyService: Moving xxxx to group 5
Change-Id: Ie7afeb207fc0a898669bc7b98b270982471e6b65
- RAW capability can exist for multi-camera even if physical cameras are
of different sizes/capabilities.
- FOV for all processes streams must be the same regardless of logical
or physical streams.
- All metadata tags related to pixelArray/preCorrectionActiveArray/activeArray
needs to be mapped properly by the camera HAL.
- Do distortion correction mapping for physical subcamera as well.
Test: Build and read docs, camera CTS, ITS.
Bug: 118906351
Bug: 126220135
Change-Id: I29a61fc3a603561c1d74dc2261600ce4cd3d34cd
Allow at most one effect chain with same sessionId on mPlaybackThreads.
Test: poc, CTS effect tests
Bug: 123237974
Merged-In: Ide46cd23b0a9f4295f0dca2fea23379a76b836ee
Change-Id: Ide46cd23b0a9f4295f0dca2fea23379a76b836ee
(cherry picked from commit 1631f06feb)
(cherry picked from commit f963b2bfda)
It's possible that tracks with the same session id running on various
playback outputs, which causes effect chain being created on the same
session twice. As a result, the same effect engine will be released
twice as the same context is reused.
Output that has effect chain with same session id is more preferable.
Test: No regression with Play Music and Effects
Bug: 123082420
Bug: 123237974
Merged-In: I690ea3cb942d1fdc96b46048e271557d48000f43
Change-Id: I690ea3cb942d1fdc96b46048e271557d48000f43
(cherry picked from commit 9aeb1770d4)
(cherry picked from commit 5945746bca)
These things are ceaseless: /
code reviews, design docs - /
off-by-one errors making a mess
Test: atest CtsCameraTestCases
Bug: 129561652
Change-Id: I807d7ad4740ffe267053fe5da2080f9ecb45aa72
The haptic intensity for fast track should be initialized, or it will be
HAPTIC_SCALE_MUTE by default, which may result in no haptics.
Bug: 130312331
Test: play haptics stream with FastMixer enabled
Change-Id: If5a1ea12c563c4af1422b2e32451b80e69d2ef58
In call music played on remote is called an "exclusive" preferred
device. It may not be propagated to other client that may play locally.
The client of the exclusive preferred device is not routed as the
exclusive preferred device are ignored from findPreferredDevice helper.
This CL fixes the routing
Bug: 130284799
Test: AudioPolicyEmulatorTests --gtest_filter=FilteringExpliciRoutingTest*
Change-Id: Iec7e14cb170d0f67c8c0b231f8219c133d7d2185
Signed-off-by: François Gaffie <francois.gaffie@renault.com>
Engine is not only responsible of legacy remote submix for input
device selection (aka "0" adress) but also regular remote submix
with a given address. Filtering the remote submixes prevents engine
to select the remote submix for input stream in case a policy mix
rule has been set to record specific sources.
Bug: 130284799
Test: AudioPolicyEmulatorTests --gtest_filter=RecordInjectionSourceMatch/DynamicPolicyMixRecordInjectionTest
Change-Id: Iaafd1195b9ab5c82ad3bd2766061d982a10bb9da
Signed-off-by: Francois Gaffie <francois.gaffie@renault.com>
Clean up session effects in releaseOutput in case stopOutput
is not received before release.
Bug: 124689305
Test: start/stop cast screen while playing music
Change-Id: Ie0588dd3336d56d34c2d717268fcd0918cbf5717
The haptic data will be partially interleaved at the end of the buffer
after processing audio mixing. When processing audio effect, only audio
data will be handled. In that case, haptic data will be missed if there
is any audio effect. Copying haptic data directly from audio effect in
buffer to out buffer could help solve the problem.
Bug: 129956425
Test: play haptic with audio effect.
Change-Id: I2b48bb43bec10167d4eacbcaa5c27959e0d44c32
This reverts commit b4979c59d9.
Reason for revert: reland with fixes:
1) make OMXHarness use OMXClient, not directly IOMX wrappers.
2) fix ref of consumer listener interface in GraphicBufferSource.
bug: 129272021
Test: camera recording, aosp_x86 build
Change-Id: Idaaaf412c65cbe89c95a2cb54f3833ff1fc4c304
To improve camera launch performance, cache the proxy service
interface. System tracing indicates fetching the interface can take
up to 8-10 ms during real camera opens, which is a percent or two
of total camera startup time.
Test: atest CameraCtsTestCases
Bug: 130173970
Change-Id: Icdf5218b04f608b897dcbf2085f971b04a913f3b
This reverts commit 482f60cccc.
Reason for revert: b/130058749 camera recording hang
Bug: 130058749
Change-Id: I358bc9c62c48328c01c8611c7e6f77d16affff54
Using AUDIO_DEVICE_OUT_SPEAKER to replace AUDIO_DEVICE_OUT_SPEAKER_SAFE
for device match.
Bug: 129456342
Test: volume can adjust while previewing ringtone
Change-Id: I3015f811ac6d2e3f3cdd606f453348c4bc526935
Signed-off-by: Robert Lee <lerobert@google.com>
Fix a cross deadlock between thread and effect chain mutex introduced by
commit 446f4df5.
Bug: 130044136
Test: start/stop audio capture for voice communication in 2 different apps
Change-Id: I23bdbd203476d2bc0b3d8d87ab66e1a9c00f7bcd
- Make mediacodec service/libstagefright_omx not dependent
on libgui. Server should only reference bqhelper (which
currently still have a dependency on libgui, but could be
removed later as it's only used internally).
- Make libmedia_omx not dependent on libgui by moving the
IOMX wrapper code into a separately that's only used by
the platform.
- Move ConsumerListener references in GraphicBufferSource
to implementation only, so that other libs including
GraphicBufferSource doesn't need to link libgui.
- Remove bqhelper references from some client side libs.
- Remove IOMX ipc related code, as IOMX interface is no
longer used for ipc. It's only used as an interface on
client side.
bug: 129272021
test: builds;
atest CtsMediaTestCases -- --module-arg CtsMediaTestCases:size:small
Change-Id: I49d80bf72eba325ee80b223d4a5ba7b0c1ab4d35
As MMAP does not support APC, it is disabled when a render loopback
policy is installed.
Test: adb shell write_sine_callback -pl # mmap is used
adb shell audiorecorder --target /data/file1.raw &
adb shell write_sine_callback -pl # mmap is NOT used
Bug: 129948989
Change-Id: Ia90c24953890de7e19fd99485bf760788f81126d
Signed-off-by: Kevin Rocard <krocard@google.com>
(cherry picked from commit c1dde63140)
For Camera1-HAL3 shim, the camera ID filtering logic is revised to
handle case of multiple logical cameras facing the same direction,
and are backed by same/different set of physical camera IDs.
Example 1 (all facing back):
ID1 = ID3 + ID4
ID2 = ID5 + ID6
Example 2 (all facing back):
ID5 = ID1 + ID2
ID6 = ID3 + ID4
In both examples, only ID1 will be advertised to camera1 app.
Test: Check cameras on devices with multiple logical cameras
Test: Camera CTS
Bug: 113705942
Change-Id: I76f370938b3311bbe7adcac8eddf8b6cf08e4571
This would allow an app that successfully registered an invalid mix to
block all following mixes.
Test: none
Bug: 111453086
Change-Id: I3c1630b7b697dd70e08a5708d1515e097d683401
Signed-off-by: Kevin Rocard <krocard@google.com>
Package name will be cached in ModuleClient when attaching a client. It
will be used when querying permission of capturing hotword.
Test: test with logging.
Bug: 74078996
Bug: 122721589
Change-Id: Icd2911f5d331d243c9eb5d58003ce5525c70c81e
remove use of obsolete method streamToVolumeSource()
and replace it by toVolumeSource() which actually queries
the engine for stream to volume source mapping.
Bug: 129439600
Test: make
Change-Id: Ie4e4e93aa5925315078fa96a957bb3ed71e7dc76
Mute/unmute tracks according to changes in OP_PLAY_AUDIO for
the current usage.
In audio policy: always assign AUDIO_STREAM_ENFORCED_AUDIBLE
to sonification tracks with AUDIBILITY_ENFORCED flag.
Do not mute tracks from root / audio server.
Do not mute UI sounds on AUDIO_STREAM_ENFORCED_AUDIBLE
stream type.
Bug: 112339570
Test: enter DnD, play notifications, verify not heard
Change-Id: Ia5f1118481cf0573101acf2092fbd0ce2cf8c038
The mediaswcodec and mediaextractor use the scudo libraries as a
sanitizer. This has some downsides since it bypasses all of the normal
allocation handlers used by the rest of the system.
Switching from the plain sanitizer to a wrapper library libc_scudo.so
allows the use of the allocation handler code from
bionic/libc/bionic/malloc_common.cpp.
This is a temporary workaround, later versions of Android should
support scudo as a first class native allocator.
NOTE: The two libraries that make up the scudo override combined are
smaller than the libclang_rt.scudo-XXX.so library, so this is a space
win too.
Bug: 123689570
Test: Builds and boots. Verified that scudo is used as the allocator.
Test: Verified that the allocation limit is properly set for mediaextractor.
Test: Ran a few of the CtsMediaTestCases tests.
Change-Id: I3bdf76bfeea503b33da765e093e38818b620a481
This prevents the stream from getting suspended
if not read or written fast enough.
Bug: 129140370
Test: test_full_queue
Change-Id: Icc5ddc72c99fb3c518736f2a50d6c6a0276ee196
The life cycle of an IO profile on remote submix module
associated with a dynamic audio policy is different from other profiles
supporting removable devices with addresses: the profile must not be
cleaned up when the device is disconnected but when the dynamic policy
is unregistered.
Bug: 121200677
Test: phone call while connected to Android auto head unit simulator
Change-Id: I8c9f64697b736dab379a7d85b9d93568139e4e84
Exclude remote submix devices with non "0" (legacy) addresses from devices
returned to Engine by AudioPolicyManagerObserver::getAvailableOutputDevices()
and AudioPolicyManagerObserver::getAvailableInputDevices()
Bug: 129144725
Test: make
Change-Id: If1ce89acb2a35a6bede195f520b4047f92b928bd
Previously, ThreadBase::mLock was only acquired inside
ThreadBase::dumpBase method. That means, dumping of fields of
descendant classes, tracks, and effect chains was performed
without holding ThreadBase::mLock.
This patch changes the way of how dumping is driven. Now only
ThreadBase has a public 'dump' method which is non-virtual.
This method takes the lock and dumps all the fields, tracks, and
effect chains. It calls virtual methods for dumping the contents
of descendant classes.
Bug: 118842894
Test: compare audioflinger dumps A/B
Change-Id: Iaafc75d13935a6a92ca37f9567b7ac7c31374b3e
The dump code was not using AudioMixMatchCriterion class fields
correctly.
Bug: 112151391
Test: 1. run and pause AudioPolicyTest#testMixByUidCapturing
2. adb shell dumpsys media.audio_policy
Change-Id: I5f74a0e6dc1a7039eab1470402179b7f9d1cd962
Make sure the Engine is never aware of remote submix devices with non
"0" (legacy) addresses as the Engine does not have to deal with devices
only used by dynamic audio policies.
Bug: 129144725
Test: make
Change-Id: Ifa19c952e22ac18c5d47e731cbfa41f81fe5c32c
Fix missing log line in the case when there are no effects in
the chain.
Bug: 118842894
Test: adb shell dumpsys media.audio_flinger
Change-Id: I31fe4760caa61610de4f143b3a6ae185efb55baa
1. Change Camera3Device logs to ALOGV
2. In Camera3OutputStream, only log before we mark stream state
to STATE_ABANDONED
3. Also changed BUFFER_ERROR log to ALOGV
Test: manually check log of GCA mode switch
Bug: 125415787
Change-Id: Ibd83b7010932a8be25d85573d9c9dce9c394f6bb
The technique of bouncing lock attempts does not work well
in the case when another lock has higher priority and acquires
the lock frequently. Timed lock works better in this case
because the acquiring thread is then put in a queue and gets
the lock as soon as another thread releases it. The wait time
in the worst case (deadlock) is the same.
Bug: 118842894
Test: Run VOICE_COMMUNICATION capture + AEC effect, dump audioflinger
Change-Id: Idc4fc2b6f5faf6988979f9354dd92441af33e600
Fix use use of mAudioRecordClients instead of
mAudioPlaybackClients in doReleaseOutput().
Test: make.
Change-Id: I5c695582828300c0297f4f58bcba37e17b51bbbd
This makes the libaudioflinger build deterministic between
devices.
A few notes:
- the include-path-for include is obsolete, so it was removed
- the AUDIOSERVER_MULTILIB use was removed, as I believe it's
unused
Bug: 121208203
Test: make
Change-Id: I08eb0d7f53f1fbcef3e14faa3ea75b5326383ef8
Suppress first callback sent by startInput() as the input device is not
yet set and it results in a spurious AudioRecordingConfiguration callback
sent by RecordingActivityMonitor with a null audio device.
Also fix a bug in getInputForAttr() where the wrong audio attributes
were stored in the RecordClientDescriptor resulting in a failure to
create the audio patch when DEFAULT audio source is used.
Bug: 129287962
Test: cts-tradefed run cts-dev -m CtsMediaTestCases -t android.media.cts.AudioRecordingConfigurationTest
Change-Id: Ia67abfa56ea653cf69e68bfabbb3d19a12adc310
Apps were previously forced to set their allowed capture policy from
either their manifest which is not flexible or from each track which is
a very fine grain but difficult when using libraries like exoplayer.
Thus add an application level policy set with AudioManager.
Test: atest android.media.cts.AudioPlaybackCaptureTest
Bug: 111453086
Change-Id: Ic890b5b041affea757fbd3f2707ff2ce18771828
Signed-off-by: Kevin Rocard <krocard@google.com>
The opt-out was only present in the java API but not on the native ones.
Test: atest test_attributes
Change-Id: I1b84f1a428508e00de65e615b59405b9ee2ba009
Signed-off-by: Kevin Rocard <krocard@google.com>
For system application with the new permission CAPTURE_MEDIA_OUTPUT, or
CAPTURE_AUDIO_OUTPUT, allow to capture the audio of playing apps that
allow it.
Test: adb shell audiorecorder --target /data/file1.raw
Test: atest android.media.cts.AudioPlaybackCaptureTest
Bug: 111453086
Change-Id: I5bfca51e48992234508897c595a076d066db26b2
Signed-off-by: Kevin Rocard <krocard@google.com>
This fixes the case when the SwAudioOutputDescriptor is part of
duplicated output. In this case, APM::closeOutput finds the
duplicated output, deactivates all the clients for all outputs,
then calls 'close' on the descriptor. Since there are no active
clients, closing the descriptor does not stop it, leaving
pending 'active count' in the profile.
Bug: 128362999
Test: steps from b/124415601
Change-Id: I8fa60ef50efa74ca8cf6e3312e1075a9ec9c63f3
The physical camera device ID must be present as part
of the capture result extras in case of corresponding
result failure notification.
Bug: 128835627
Test: Camera CTS,
AImageReaderVendorTest
--gtest_filter=AImageReaderVendorTest.LogicalCameraPhysicalStream
Change-Id: I042af8bd85eaadd389b059c2833f352ceb2f40fc
- Fix accessibility service not able to get same policy as regular apps
when not using VOICE_RECOGNITION source b/126785297
- Make sure two captures from same app do not silence each other
(e.g two privacy sensitive captures concurrently)
- Ignore clients in idle state when considering priority active clients in
silencing logic.
- Prevent capture while in call if privileged permission CAPTURE_AUDIO_OUTPUT
is not granted
- Allow capture concurrently with privacy sensitive capture or call if
permission CAPTURE_AUDIO_OUTPUT is granted.
- Do not silence virtual sources when sensor privacy is enabled.
- Consider system persistent service as top app state.
Bug: 128419018
Bug: 126785297
Test: audio smoke tests
Change-Id: I7f8c7c511c674d4d46a815eaa7e9cf95e95cc3f9
Bug: 120407707
Test: CTS
Test: Use camera to take pictures / record videos (sanity)
Merged-In: I7b29c337d0e217d2eb6a62e2c75ccc550d795e61
Change-Id: I7b29c337d0e217d2eb6a62e2c75ccc550d795e61
(cherry picked from commit 7d355db285)
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
Bug: 120407707
Test: CTS
Test: Use camera to take pictures / record videos (sanity)
Change-Id: I7b29c337d0e217d2eb6a62e2c75ccc550d795e61
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
Switch to using a dynamically-linked library function to initialize
ICU, not a statically-linked function. This means the knowledge of file
paths stays in the runtime module.
Bug: 120493361
Test: build/boot
Exempt-From-Owner-Approval: It's just a cherry-pick
Merged-In: Ibe1d5ffd50e5cce76b1b01788954dcfb4762b1c6
Change-Id: Ibe1d5ffd50e5cce76b1b01788954dcfb4762b1c6