treble_patches: Update all patches per BlissRoms Source
Change-Id: I1371da94679a6c859e08f86b4a17b14281dfae81
Signed-off-by: Jackeagle <jackeagle102@gmail.com>
diff --git a/patches/platform_frameworks_av/0002-FIH-devices-Fix-Earpiece-audio-output.patch b/patches/platform_frameworks_av/0002-FIH-devices-Fix-Earpiece-audio-output.patch
new file mode 100644
index 0000000..dbdbf37
--- /dev/null
+++ b/patches/platform_frameworks_av/0002-FIH-devices-Fix-Earpiece-audio-output.patch
@@ -0,0 +1,78 @@
+From 7e9375da9c53bebe4e7390044b7c8cbd4d1f9d88 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Tue, 24 Apr 2018 00:14:28 +0200
+Subject: [PATCH 2/5] FIH devices: Fix "Earpiece" audio output
+
+On some FIH devices (confirmed on Razer, and probably on Aquos SS2),
+Earpiece is not listed in attachedDevices, and devicePort's profile
+mentions it is AUDIO_CHANNEL_IN_MONO, instead of AUDIO_CHANNEL_OUT_MONO.
+
+Detect such cases (output device, but got only AUDIO_CHANNEL_IN_MONO),
+and fix both channelMasks and attachedDevices
+
+Change-Id: I4a88ba6d34d0fcd346eeea2ca903772f0271040a
+---
+ .../common/managerdefinitions/src/Serializer.cpp | 25 +++++++++++++++++++---
+ 1 file changed, 22 insertions(+), 3 deletions(-)
+
+diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+index a253113..380e2f8 100644
+--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+@@ -191,16 +191,25 @@ const char AudioProfileTraits::Attributes::name[] = "name";
+ const char AudioProfileTraits::Attributes::samplingRates[] = "samplingRates";
+ const char AudioProfileTraits::Attributes::format[] = "format";
+ const char AudioProfileTraits::Attributes::channelMasks[] = "channelMasks";
++static bool fixedEarpieceChannels = false;
+
+ status_t AudioProfileTraits::deserialize(_xmlDoc */*doc*/, const _xmlNode *root, PtrElement &profile,
+- PtrSerializingCtx /*serializingContext*/)
++ PtrSerializingCtx serializingContext)
+ {
++ bool isOutput = serializingContext != nullptr;
+ string samplingRates = getXmlAttribute(root, Attributes::samplingRates);
+ string format = getXmlAttribute(root, Attributes::format);
+ string channels = getXmlAttribute(root, Attributes::channelMasks);
++ ChannelTraits::Collection channelsMask = channelMasksFromString(channels, ",");
++
++ //Some Foxconn devices have wrong earpiece channel mask, leading to no channel mask
++ if(channelsMask.size() == 1 && channelsMask[0] == AUDIO_CHANNEL_IN_MONO && isOutput) {
++ fixedEarpieceChannels = true;
++ channelsMask = channelMasksFromString("AUDIO_CHANNEL_OUT_MONO", ",");
++ }
+
+ profile = new Element(formatFromString(format, gDynamicFormat),
+- channelMasksFromString(channels, ","),
++ channelsMask,
+ samplingRatesFromString(samplingRates, ","));
+
+ profile->setDynamicFormat(profile->getFormat() == gDynamicFormat);
+@@ -326,7 +335,10 @@ status_t DevicePortTraits::deserialize(_xmlDoc *doc, const _xmlNode *root, PtrEl
+ }
+
+ AudioProfileTraits::Collection profiles;
+- deserializeCollection<AudioProfileTraits>(doc, root, profiles, NULL);
++ if(audio_is_output_devices(type))
++ deserializeCollection<AudioProfileTraits>(doc, root, profiles, (PtrSerializingCtx)1);
++ else
++ deserializeCollection<AudioProfileTraits>(doc, root, profiles, NULL);
+ if (profiles.isEmpty()) {
+ sp <AudioProfile> dynamicProfile = new AudioProfile(gDynamicFormat,
+ ChannelsVector(), SampleRateVector());
+@@ -491,6 +503,13 @@ status_t ModuleTraits::deserialize(xmlDocPtr doc, const xmlNode *root, PtrElemen
+ }
+ children = children->next;
+ }
++ if(fixedEarpieceChannels) {
++ sp<DeviceDescriptor> device =
++ module->getDeclaredDevices().getDeviceFromTagName(String8("Earpiece"));
++ if(device != 0)
++ ctx->addAvailableDevice(device);
++ fixedEarpieceChannels = false;
++ }
+ return NO_ERROR;
+ }
+
+--
+2.7.4
+