)]}'
{
  "log": [
    {
      "commit": "f0de5ce5d1629cd18effe1b70ed6500c1d648955",
      "tree": "92f059c8bff4024c0ebb112a4d93e69121372340",
      "parents": [
        "06a3967bee29fcfd0dde8fbdfff795e7e705c0f4"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Feb 05 09:28:44 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 08 22:39:10 2019 +0000"
      },
      "message": "Restrict APC to usages and opt-in streams\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: I17d48bfa89f3187535d211ef1c9ba6cb435fd777\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "cc423d49c662a03627d7f855f8111c5938f0cf11",
      "tree": "570bc367e3eb5caa28d44f6904bea6065afa8edb",
      "parents": [
        "0cefb10674a51e975cbe1c5d090198786614a31c",
        "3fff3f502d536f8a35744c859cc93823ad29a8cc"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 08 19:02:45 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 08 19:02:45 2019 +0000"
      },
      "message": "Merge \"AudioPolicy: make mixes const correct\""
    },
    {
      "commit": "0cefb10674a51e975cbe1c5d090198786614a31c",
      "tree": "c00b9229485006c69e1c609e34fde5e0cc0470f7",
      "parents": [
        "9fcae9fdc6102ac7e92cb91777d79114f7996452",
        "f4f5c817ed4ba6f10287cb37b9f71f6c27723359"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 08 19:01:40 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 08 19:01:40 2019 +0000"
      },
      "message": "Merge \"AudioPolicy: make input attributes parameter const\u0026\""
    },
    {
      "commit": "f4f5c817ed4ba6f10287cb37b9f71f6c27723359",
      "tree": "695ece5a81488ca3e98992707e01c9b4a0675a8b",
      "parents": [
        "d6454722c21495fb5effae4176cc689ec8900f9a"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Feb 05 09:28:02 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 08 01:11:13 2019 +0000"
      },
      "message": "AudioPolicy: make input attributes parameter const\u0026\n\nTest: compile\nBug: 111453086\nChange-Id: I3b08d11481471dc080ed2ab89ae59e6268542c25\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "3fff3f502d536f8a35744c859cc93823ad29a8cc",
      "tree": "1d7e0807ecd9d2701cf94c3208ebbcca595f3352",
      "parents": [
        "d6454722c21495fb5effae4176cc689ec8900f9a"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Feb 05 09:24:40 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 08 01:09:26 2019 +0000"
      },
      "message": "AudioPolicy: make mixes const correct\n\nTest: compile\nBug: 111453086\nChange-Id: Ic3b1e414bcf0e2de20bdecebdd71920030ecc1ec\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "ba2cf0f2e39d8302babbda3a98127daaf2ea7376",
      "tree": "4a86852dbc034802d93ab5528591dc941a68c01c",
      "parents": [
        "ffb2516cc730b5ac621ad8a92e827faf4e86b8ca"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Dec 12 16:40:25 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 07 11:20:57 2019 -0800"
      },
      "message": "audiopolicy: fix dynamic device \u0026 explicit routing management\n\nWhile a playback is ongoing using explicit routing\nand the device is disconnected, setOutputDevices() will bail out\nif the new device is incompatible with the io profile. So the device\nwill not be reset in the output.\nMoreover, if another device of the same type/address is connected,\nthis device will have a new unique ID.\nIf a track wants to use it as explicit, as the first playback/capture is still\non going, the function findPreferredDevice will return the previous device id.\n\nThis CL enforces:\n-setOutputDevices() to check if new device is not compatible AND previous devices\nare still available\n- When a device is disconnected, go over all clients to clear any preferred device\nreferring to the device being removed.\n- Sanitize preferred device received by get\u003cOutput|Input\u003eForAttr() according to\nconnected devices.\n\nTest: AudioPolicyTests --gtest_filter\u003dDynamicAddressOutputDevice/DeviceConnectionTest.DeviceConnectionState/*\nTest: audio smoke tests\nTest: CTS tests for AudioTrack, AudioRecord, AudioRouting\n\nChange-Id: Ib3a2d54d902def0fcfc2a623c25bb92d65b1ab98\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "153f92d57b6a1d2fdc7fa601bbc86db31646a8f9",
      "tree": "0d380f13a58ff8fdf073dd974dcb55e4d18ef75c",
      "parents": [
        "45986c74cd5253bcc81b1b4954e3ff3300f7e6d8"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Dec 18 18:33:28 2018 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 06 15:49:11 2019 -0800"
      },
      "message": "Add secondary output to audio tracks\n\nThe secondary are returned from mixes (from DAP loopback\u0026render),\nfrom getOutputForAttr.\nAll getOutputForAttr* of the stack are update.\nInternal getOutputForAttr use descriptor, external one use handles.\n\nThe secondary output are saved in each track and the track is\ninvalidated if the list of secondary output changes.\n\nIn audio flinger, create a pair of recordTrack \u0026 patchTrack to pipe\nthe intercepted audio audio to the secondary output.\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: Id6523d9e383c15a0e39313d5f355df809b7e72fe\n"
    },
    {
      "commit": "ba98acb34e60b2bf2dac5a55c4acbb80b5408568",
      "tree": "e55683923a4060bbfd59f87f1030b0218371ef18",
      "parents": [
        "1086b05f7d3cb296d55facd88621f16c2737cf33"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Dec 18 16:51:44 2018 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 06 09:38:23 2019 -0800"
      },
      "message": "Audiopolicy: Move AudioPolicyMixCollection in helper function\n\nNo functional changes\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: I300450742a3d6f0b22f69a25eeda7800e0a27943\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "1086b05f7d3cb296d55facd88621f16c2737cf33",
      "tree": "58254c1bc6f07d5d9f8645ae32b131239e74ffa8",
      "parents": [
        "0435a4dcb66366da53cf4544c941a40ed2b9c2bd"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Dec 18 17:52:55 2018 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Feb 05 17:19:46 2019 -0800"
      },
      "message": "Add MIX_ROUTE_FLAG_LOOP_BACK_RENDER\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: I276a10921aac9f5e709c0a44c661cbbdc94e49db\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "0435a4dcb66366da53cf4544c941a40ed2b9c2bd",
      "tree": "d0963c6f1081a0f6008a56fbc03f6f5f33ae3505",
      "parents": [
        "f63dbf127223716fad9de179862eb4fde4fd64e7"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 01 18:17:25 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 05 02:31:49 2019 +0000"
      },
      "message": "Audiopolicy: Fix DeviceVector::getDevice logic\n\nIt was currently ignoring address even if the default format was passed.\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: I44a17fa32c4dd32c426d20bf0902bd406682743c\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "6054a7765cfd65c34d49a5a435bee1d0cdfb2d32",
      "tree": "37390182206a6401daead33e48e1d60d6336d521",
      "parents": [
        "f579db5aa9e1cbbe5a8b7689e319913e154cda3b"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Nov 06 13:10:58 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Feb 02 10:43:22 2019 -0800"
      },
      "message": "audiopolicy: engine: remove deprecated APIs\n\nTest: make\n\nChange-Id: Idfcb060095da92adb286706d4eaf9b9a78a8c61a\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "f579db5aa9e1cbbe5a8b7689e319913e154cda3b",
      "tree": "8cbb24a261decd14aad3fcbfa4e5e32abe607686",
      "parents": [
        "c005e569c7bae3f8c49660c9388c3076046069f5"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Nov 13 11:25:16 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Feb 02 10:43:22 2019 -0800"
      },
      "message": "audiopolicy: exclusive Preferred Device\n\nIt allows to force the routing of music during call without\naffecting clients that does not explicitely requested to use\nanother device than the one decided by the policy during call\n(which is TELEPHONY TX).\n\nIt fixes differently Bug 111467967.\n\nTest: make\n\nChange-Id: I6034f0d2568e1b2a1e600d9ae1453fd0c60ed02e\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "c005e569c7bae3f8c49660c9388c3076046069f5",
      "tree": "8612dc3a3d69c018b303bf8e56aa142db5465e8e",
      "parents": [
        "d0ba9ed06c61ab3e66627e027fbc34ba998140ee"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Nov 06 15:04:49 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Feb 02 10:31:32 2019 -0800"
      },
      "message": "audiopolicy: apm: switch to new Engine APIs\n\nTest: make\nChange-Id: Iedc2268852ee0bce32b67cfd324395c48cb33424\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "d0ba9ed06c61ab3e66627e027fbc34ba998140ee",
      "tree": "49948f80335bea4a358c7f455dfd6a5e59a94e30",
      "parents": [
        "7188f1ad365cd9d475723b639d521b491eaca389"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Nov 05 11:50:42 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 01 18:05:54 2019 -0800"
      },
      "message": "audio policy service: Add introspection API to retrieve AudioProductStrategies\n\nThis CL adds required introspection APIs to deal with product strategies:\n\n-getter of the collection of product strategies\n-helper function to return the strategy associated to a given attributes.\nThis API is mandatory to avoid duplicating the logic that compiles the strategy\nfor a given Audio Attributes structure.\n\nTest: make\n\nChange-Id: I0e107570a44227bb52a4f359954c93215d4f8bae\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "dc7553ff1bf7ec88e17a8577b94bb9dd9a1cbb43",
      "tree": "e51119764c576e4e051cef763280f8d35c7a7b27",
      "parents": [
        "612be7ff334b6c2c1051bd6dbb4088922af0336e"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Fri Nov 02 10:39:57 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 01 18:05:21 2019 -0800"
      },
      "message": "audiopolicy: engine: Add ProductStrategy common code\n\n-Adds new Engine APIs for Product Strategy management\n-Adds a common engine code to handle product strategies\n-Adds a parsing configuration library to feed the strategies\n-Prepare both engine for the switch\n\nTest: make\nChange-Id: I00f57ece798893bc6f9aa9ed54a3e5237e8d5cf1\n"
    },
    {
      "commit": "dddc39e44c6bc1c8658e5f3fd6c087abad017fdd",
      "tree": "2149b7d6ef7555bd11912481982f76f8a11569d1",
      "parents": [
        "642f662a0dba2732cacf05774758723f09aa188e",
        "f86268a0aa3c98cc5acdd18f43de82e780772b5b"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 31 23:53:10 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 31 23:53:10 2019 +0000"
      },
      "message": "Merge \"Prepend instead of append for criterias to remove\""
    },
    {
      "commit": "4df18892dca915d1b737043baab2dc74c9f7d96a",
      "tree": "820afce3906a04e5fc576a009b581ece84158856",
      "parents": [
        "760e6c2581b49a95abced90730319d3d248a1518",
        "f024a9eb29122a42179608372cb25129d1158e3b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jan 31 02:28:22 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 31 02:28:22 2019 +0000"
      },
      "message": "Merge \"AudioPolicyManager: Fix nullptr device check\""
    },
    {
      "commit": "f86268a0aa3c98cc5acdd18f43de82e780772b5b",
      "tree": "198997a295d7b62c19fc58392350f3a0db08d9c5",
      "parents": [
        "1c0a9fb458cc97a2b3e7b93e58c02bf11512b950"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Wed Jan 30 16:52:10 2019 -0800"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Wed Jan 30 17:22:47 2019 -0800"
      },
      "message": "Prepend instead of append for criterias to remove\n\nBug: 123661699\nTest: manually call removeUidDeviceAffinity\nChange-Id: I729b02bbc45125638baefdccdedfaf046e146dd2\n"
    },
    {
      "commit": "f024a9eb29122a42179608372cb25129d1158e3b",
      "tree": "8b95f2175e985295dd9c266785a76e5409a26600",
      "parents": [
        "a3e4fe3fd4f24ebcf9e69de52e2f0d3e2be3a816"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 30 16:01:02 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 30 16:41:07 2019 -0800"
      },
      "message": "AudioPolicyManager: Fix nullptr device check\n\nRegression from commit 11d301045991dd66bf3f64ba510e069b7c09fedb\n\nTest: CTS AudioRecordTest passes\nBug: 123597808\nChange-Id: I3b1de479ebd8a279309d33f58db3e40b851f98e4\n"
    },
    {
      "commit": "308d50bf3b08f8197d7fed76a75f43d7398fc5a1",
      "tree": "adfaa79def42c27e6ee83e379bc9af6af94b3bc2",
      "parents": [
        "0684bf1ac795c8a112cdc168004cdf0bad6a6647"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 30 11:57:16 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 30 11:59:26 2019 -0800"
      },
      "message": "audio policy: fix regression in USB audio\n\nFix regression in audio device selection introduced by\ncommit 4e4647077f\n\nBug: 123500997\nTest: play music over USB and BT A2DP\nChange-Id: I9a86e1a8f34f3b02f0dbb53b719884ab6c567265\n"
    },
    {
      "commit": "0ac26a451483ddea3be4fafe620b8fa01669149b",
      "tree": "a811b5d3b33e090c45899cf8a4f8b2c0f67a9bb3",
      "parents": [
        "0d405c1e55c9a1b9dbf898724dd1b6dc41fa8c46",
        "d84e8f7fdf1a61956953660d3af226c3b147e3bb"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 26 04:58:28 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 26 04:58:28 2019 +0000"
      },
      "message": "Merge \"audio policy: fix legacy Ad2P with advanced codecs\""
    },
    {
      "commit": "0d405c1e55c9a1b9dbf898724dd1b6dc41fa8c46",
      "tree": "806b6c042782871d7aa81095fccc103682b79fd8",
      "parents": [
        "911ef8fd5231d990de15bc1e16dd937b7e81f5f7",
        "dcbda2a2efc838cf5b9597e6d346b3603e48bc40"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 26 02:28:33 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 26 02:28:33 2019 +0000"
      },
      "message": "Merge \"audio policy: fix recording activity reporting\""
    },
    {
      "commit": "d84e8f7fdf1a61956953660d3af226c3b147e3bb",
      "tree": "f2c1784fa749f8ba511cb333d404ec296eb438b4",
      "parents": [
        "049aa255f9c1746f22cd9c562bd9cb8faaddb3d2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 25 18:15:35 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 25 18:15:35 2019 -0800"
      },
      "message": "audio policy: fix legacy Ad2P with advanced codecs\n\nThe changes for hybrid A2DP broke advanced codec support for devices\nrunning a HAL V4.0 and no A2DP offload.\n\nFix: consider that if no encoded format is explicitely listed in the\ndevice descriptor in audio policy configuration file, then no rule on\nencoded format should be enforced.\n\nBug: 123399421\nTest: connect Sony MDR-1 headphones and play music.\nChange-Id: Idd13cf0e0cdeb71554b23d178e61cc1d82abea60\n"
    },
    {
      "commit": "5cc71c5fedf82cccf701ce24db79818cbce20b64",
      "tree": "ac1a064c9e621e1258ab33915be69f76ed22e9bf",
      "parents": [
        "5b723961c9456aa46ea3315bbcc80a3f6d0acc70"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jan 25 14:10:42 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jan 25 16:16:11 2019 -0800"
      },
      "message": "AudioPolicyManager: fix offload playback for speaker and BT\n\nWithout this, deep buffer playback is used.\nFixes regression from commit 4e4647077f00c47650d6ecd66cd812073371bd10\n\nTest: Play music with Speaker and BT\nBug: 123371431\nChange-Id: Ic5d23c6863223f5456414c887c14fda90aa06f5f\n"
    },
    {
      "commit": "dcbda2a2efc838cf5b9597e6d346b3603e48bc40",
      "tree": "f7d655a341e386c1eb045f98d08444719496b2cc",
      "parents": [
        "049aa255f9c1746f22cd9c562bd9cb8faaddb3d2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 24 18:36:37 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 24 18:36:37 2019 -0800"
      },
      "message": "audio policy: fix recording activity reporting\n\nAdd missing active clients management when an output or input\nis force closed by the audio policy manager. This resulted in\nstale activity monitoring entries in AuduiService.\n\nBug: 123312504\nTest: connect and disconnect a headset while recording a video\nChange-Id: I66fe96daed2475ae6ada700ef1210d38ad099da2\n"
    },
    {
      "commit": "0121b9ecee64ba42b8bc26c224f1bb3af73e37bf",
      "tree": "f564596d5a75e2b5c2cddd64e086fb68233b6779",
      "parents": [
        "ad36699c757285227810b809658c3ca2a0d22229",
        "2c93e51abf2bf6b30ed69f02892287f40e64f5df"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 24 03:28:32 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 24 03:28:32 2019 +0000"
      },
      "message": "Merge changes I57d364f7,I6668cffa,Id62ab388\n\n* changes:\n  audiopolicy: engineconfigurable: fix legacy remote submix\n  audiopolicy: apm: Fix default bus device issue\n  audiopolicy: apm: updateCallRouting shall use SW Bridging if no external route support\n"
    },
    {
      "commit": "7b91592726928f879fceeb3d3248892d273dbcd2",
      "tree": "9c45779b427ffc5f9490ff5f2e717a68dd2a6c5b",
      "parents": [
        "87c117f9d6e91262ce7e11ece4147c469140d27c",
        "fe0fb8b050e0acc8f749bcee482b8c157ed8233b"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 24 00:12:25 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 24 00:12:25 2019 +0000"
      },
      "message": "Merge changes from topic \"new_formats_huawei\"\n\n* changes:\n  audiopolicy: fix wrong volume db value for voice call stream\n  audio: add new audio formats\n"
    },
    {
      "commit": "fe0fb8b050e0acc8f749bcee482b8c157ed8233b",
      "tree": "facb2d56b33c78e715b6eff77cbcce828dbe5ef4",
      "parents": [
        "d55083d1449834d523cd3d9b5976b7e5011dce03"
      ],
      "author": {
        "name": "Revathi Uddaraju",
        "email": "revathiu@codeaurora.org",
        "time": "Thu Jul 27 17:05:37 2017 +0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 23 11:45:26 2019 -0800"
      },
      "message": "audiopolicy: fix wrong volume db value for voice call stream\n\nWhen apply mute for voice stream, vol index 0 is set, while\nvoice stream minimum vol index is 1. This will cause negative\nvol index is calculated and maximum db value is set.\n\nEnsure vol index is valide to calculate.\n\nAlso add range check in rescaleVolumeIndex().\n\nBug: 123063166\nTest: make\nCRs-Fixed: 2056642\nChange-Id: I89ee64d0914a971194a72b4de483d88b5029d80e\n"
    },
    {
      "commit": "0c1c7a2351f73a76bb8cabe2eb134cca98b7965d",
      "tree": "24088dfed6bf52c501fff781690ecb3475059428",
      "parents": [
        "e75dca3feec77fac58f1fa5f7a9b1195b4898368"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jan 17 14:58:28 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jan 23 11:11:18 2019 -0800"
      },
      "message": "audiopolicy: Read supported encoded formats from config file\n\nAdds reading of \u0027encodedFormats\u0027 attribute in \u0027devicePort\u0027.\nKeep fallback for an empty value for HDMI in case the framework\nruns against pre 5.0 audio HAL.\n\nAdd generic (example) APM config files for TV devices.\n\nBug: 120860184\nTest: on a TV device\n      tested that Pixel 1 a_p_c.xml file is not updated\nChange-Id: I85013a9e6172decd6ad72079d9c77e5f80e29d19\n"
    },
    {
      "commit": "a807ef99610c73ace4627ca65b4c3eb4ed84b604",
      "tree": "78f1fbc56d67403452a25ce2e694ccaf7ccfd62a",
      "parents": [
        "9eb18550939321e37affd2260e3bb72716cb33d6"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Nov 05 10:44:33 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 22 19:18:23 2019 -0800"
      },
      "message": "audiopolicy: apm: Fix default bus device issue\n\nWhen a bus device is used as default, when calling setForceUse,\na given SwOutputDescriptor might be asked to switch to another\nbus device (the default), violating the Policy Mix rule.\n\nTest: see below\n -start an automotive device with PolicyMix registered and\n  bus device as the default.\n -Consider having a system bus for system sound and media for music.\n -Play touch sound (check played in system bus).\n -launch music player.\n\nResult:\n -Music shall be played on media bus device\n -Touch sound still played on system bus device\n\nChange-Id: I6668cffa525af51af6ed0838745658f72ae00a62\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "4e4647077f00c47650d6ecd66cd812073371bd10",
      "tree": "db114451fc37f571667f8fab24e88b142f49eee2",
      "parents": [
        "fa66483acb53c575fc476f04bebf0d0463752297"
      ],
      "author": {
        "name": "Aniket Kumar Lata",
        "email": "alata@quicinc.com",
        "time": "Thu Jan 10 23:38:46 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jan 20 21:32:16 2019 +0000"
      },
      "message": "audiopolicy: Add support for hybrid mode on A2DP\n\nAdd support in AudioPolicyManager to select a module,\ndevice or output based on device type and codec.\nImplement hybrid mode with A2DP which enables runtime\nswitching between HALs for A2DP based on offload support\nfor specific A2DP codecs.\nOptimize A2DP active device change and device config\nchange in AudioPolicyManager.\n\nBug: 111812273\nTest: make\nChange-Id: I246d71dd08bacbca6ed9b0012e7d7698bd8a0953\n"
    },
    {
      "commit": "1cbfc5d16ad592d9aea60d1a4ffcb9dd369f66cd",
      "tree": "fdb774c86e61e23e9315019174ba5913fae0a873",
      "parents": [
        "bf06f7afdbd7019614c9e31ce43301457a3a7d55",
        "b141c526eac14ad0f92c9ec6aae6a3b3ebc35708"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 17 22:19:08 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 17 22:19:08 2019 +0000"
      },
      "message": "Merge changes Ic9ecd592,I5e809296,I822097f1\n\n* changes:\n  audiopolicy: apm: Fix segfault when using bus device without Policy Mix\n  audiopolicy: fix rsubmix / device with dynamic address regressions\n  audiopolicy: apm: Prepare the future: use DeviceDescriptor/DeviceVector\n"
    },
    {
      "commit": "ae4b6ecfbcbea56cca160715a2ef710d8d87a40f",
      "tree": "124f24314b3f95b48a47dc8cc6f4ab0a6a0cc88e",
      "parents": [
        "96024c18126150259ba123ef48d180c6e0a2cf7e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 15 18:34:38 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 16 09:52:55 2019 -0800"
      },
      "message": "add new audio sources for audio capture\n\nThis commit adds the following audio capture sources:\n- AUDIO_SOURCE_VOICE_PERFORMANCE: for real time live performances like Karaoke.\n- AUDIO_SOURCE_ECHO_REFERENCE: for capturing the reference signal to suppress by an echo\ncanceller. Protected by privileged permission CAPTURE_AUDIO_OUTPUT.\n\nAlso added device AUDIO_DEVICE_IN_ECHO_REFERENCE selected when the requested\ncapture source is AUDIO_SOURCE_ECHO_REFERENCE.\n\nBug: 118203066\nTest: CTS tests for audio capture\n\nChange-Id: Ieb159ea82a7b81acf762506a44e24ec80111609f\n"
    },
    {
      "commit": "716e1435b2b0af38c801f2bf3872b9edc2ba7c33",
      "tree": "f1ef7a9110c4ff61e73f2da9a9cec97b15ea9254",
      "parents": [
        "11d301045991dd66bf3f64ba510e069b7c09fedb"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Jan 14 16:58:59 2019 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 15 11:09:13 2019 -0800"
      },
      "message": "audiopolicy: fix rsubmix / device with dynamic address regressions\n\nOrphan devices (aka devices not declared in configuration file) used to be\nmanaged by apm::mAvailable\u003cOutput|Input\u003eDevices and affinity with profile\nwas done by type only.\nAs the device affinity with profile is now enforced by checking with descriptor\nrather than with type, profile\u0027s supported devices list shall be dynamically\nupdated.\n\nTest: manual audio smoke tests\nChange-Id: I5e8092968bbdb03ac7dc1aa1a3f15a0bc1b09251\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "11d301045991dd66bf3f64ba510e069b7c09fedb",
      "tree": "d9aa2e368424bc164a81f5bdcddef1fe328cdca1",
      "parents": [
        "526aa572bbc5dd1fa1b103a98d9f91a758d8d5c4"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Fri Nov 02 16:09:09 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 15 11:08:17 2019 -0800"
      },
      "message": "audiopolicy: apm: Prepare the future: use DeviceDescriptor/DeviceVector\n\nThis patch updates the policy manager and common to widely use (vector of)\ndevice descriptor rather than the device type mask each time it is possible.\nIt will allow taking into account the address of the device.\n\nTest: manual audio smoke tests\nChange-Id: I822097f1240d379b2f89aaad1e6609059942e61c\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "2b6834483ea55538b87f840f1f2294d7cc9b6c03",
      "tree": "9b8ea443e9b782044a1dd93d840c3cc762a711f4",
      "parents": [
        "9a2e50be1cb1e5cbbae5e33c0f62f5f03ebabe77",
        "17dc17828f0aedb037cf974daeb44645f390cb49"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 15 02:54:20 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 15 02:54:20 2019 +0000"
      },
      "message": "Merge \"Audio policy: uid device affinity deterministic rule\""
    },
    {
      "commit": "beab72f726d2e18cf2cbd4d74819cf146a2f3fdc",
      "tree": "9226eb49e7c37e93b81747d00dc942ab87a591ca",
      "parents": [
        "8292a716361d0f02de2b79242aec4630664bc770",
        "df2e359d5c19c142fe400980cd15b0b60bea507b"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 15 00:19:32 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 15 00:19:32 2019 +0000"
      },
      "message": "Merge \"AudioPolicy: Add unit tests for the MSD use cases\""
    },
    {
      "commit": "df2e359d5c19c142fe400980cd15b0b60bea507b",
      "tree": "5fbb45d0a3f448e60b2c1464eaf0bc5f9bf4c28a",
      "parents": [
        "ff7397bb08bf9953615d7b3416f4839bc0b1d2ff"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 19 14:27:42 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jan 11 21:01:07 2019 -0800"
      },
      "message": "AudioPolicy: Add unit tests for the MSD use cases\n\nTest the following scenarios:\n  - inputs / outputs update due to setForceUse change;\n  - MSD device selection and downstream patch creation\n    when an output for a supported format is opened;\n  - default device selection and downstream patch teardown\n    when an output for an unsupported format is opened;\n  - swiching outputs depending on the format.\n\nBug: 121048134\nTest: audiopolicy_tests\nChange-Id: I3a07c758ea7fd87250f425c27fbf0c38eb5bf8b5\n"
    },
    {
      "commit": "17dc17828f0aedb037cf974daeb44645f390cb49",
      "tree": "a269ec1665e47843b76ef33fde2ffcc1c57f5e02",
      "parents": [
        "33d6adcebbac541a803a08013db15a84e4b82bcf"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Jan 10 19:00:05 2019 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Jan 10 19:00:05 2019 -0800"
      },
      "message": "Audio policy: uid device affinity deterministic rule\n\nWhen setting a uid device affinity, make the rules deterministic\n  by applying an \"exclude\" rule on all mixes that don\u0027t reach\n  the devices (existing), but also a \"match\" on the mixes that\n  do (new).\nBug: 111647296\nTest: requires device with routing policy started by CarService\n\nChange-Id: I3bb844156ade75e4b9576c1e18200ca90ce26cf9\n"
    },
    {
      "commit": "ce727fe64f379a0fced2d3b0713e5323806c6ffa",
      "tree": "e9e109f5d6aa58158dec15abbfd39b20066fa97e",
      "parents": [
        "435ba2e250da24bed173d4ca7415f5adb5f7846b"
      ],
      "author": {
        "name": "Victor Chang",
        "email": "vichang@google.com",
        "time": "Wed Jan 09 12:59:02 2019 +0000"
      },
      "committer": {
        "name": "Victor Chang",
        "email": "vichang@google.com",
        "time": "Wed Jan 09 15:33:00 2019 +0000"
      },
      "message": "Remove unused ICU4C dependency in audio policy\n\nBug: 117094880\nTest: m droid\nChange-Id: I8ba3db496f11630eebabb7184c532d59237279b0\n"
    },
    {
      "commit": "bda70da1f0fb32d37abd704ff8618e55661be0a9",
      "tree": "a850374439d404da29938e2b038457926197d826",
      "parents": [
        "abf2929e8d084d2ca99d4d8712abbf31c2cb5178"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Dec 19 07:30:15 2018 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jan 02 12:27:35 2019 -0800"
      },
      "message": "Dynamic audio policies: multi-zone through uid/device affinity\n\nSetting audio device affinity for a given uid augments all\n audio mix criteria that do not route to the given devices\n to exclude the uid.\nAudioPolicyManager: after changing the device affinity,\n check the outputs addressing the devices to re-evaluate\n audio routing\n\nBug: 111647296\nTest: requires device with routing policy started by CarService\nChange-Id: I72de54ae067151fe6ac2ec43b78fe544a9fd9888\n"
    },
    {
      "commit": "a9f86651eaaf2f702b3759ec38dbb64ca8858356",
      "tree": "913a55b14107e7f94335bec0ad6705f9557255a0",
      "parents": [
        "c241b0dfc49014087123dae92f7341db8d30d443"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 28 17:23:11 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 19 18:05:00 2018 -0800"
      },
      "message": "audo policy: more info in onRecordingConfigurationUpdate\n\nReport more information in onRecordingConfigurationUpdate() callback:\n- For client:\n  - Port ID\n  - Enabled effects\n  - Silenced by policy\n- For stream:\n  - Active effects\n  - Active audio source\n\nBug: 111438757\nTest: make\nChange-Id: I34c3d0ee6251576de7d793bfaa2bc2c34efa2319\n"
    },
    {
      "commit": "c241b0dfc49014087123dae92f7341db8d30d443",
      "tree": "9662b3ddd3860f1043da86eea159698331dfb81f",
      "parents": [
        "424993f0655c18f91562efc9d127f0ac970da6fa"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 28 09:08:49 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 19 12:45:47 2018 -0800"
      },
      "message": "audo policy: add effects to record clients\n\nAdd list of active effects on input streams and record\nclients for further reporting in AudioRecordingConfiguration.\n\nBug: 111438757\nTest: make and dumpsys\nChange-Id: I1ae00d2431c80b053f67e2b780f368d5a4822b01\n"
    },
    {
      "commit": "aca677cf5fbd2a2d5aaccae3af4da6c1d700eb93",
      "tree": "c331bde769a019c47dccc80c09a0c3f8190a8661",
      "parents": [
        "2b167173e145d8846c9a248039f0f4dc423ade73"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu May 03 10:47:50 2018 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 13 17:24:46 2018 -0800"
      },
      "message": "audiopolicy: common: add several helper function on DeviceDesc\n\n-Add another DeviceVector constructor to simplify usage\n-report tagname as port name\n-migrate API from apm\n-search/filter helpers\n\nTest: Audio smoke tests.\nTest: CTS tests for AudioRecord, AudioTrack and AudioEffect\n\nChange-Id: Ie37a2d9db2e8a15a37743e7129159fa77a4c6b51\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "2b167173e145d8846c9a248039f0f4dc423ade73",
      "tree": "395f2c76fd05edb48c42ab76f5c2eb6994a04675",
      "parents": [
        "83d789d6234f5cd5eb90f02a47ab04d4f6ea8299"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Jun 04 16:05:14 2018 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 13 17:24:46 2018 -0800"
      },
      "message": "audiopolicy: update type convertion library\n\nTest: Audio smoke tests.\nTest: CTS tests for AudioRecord, AudioTrack and AudioEffect\n\nChange-Id: I3ed8c7d7ee8a97f0bd41a5ae9f28d673994d7f07\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "99896dab5f368916c86acb97e82bf72c86a14922",
      "tree": "67cc39b5e30b396ce6f62cbac583e373c9919515",
      "parents": [
        "d00c4607a5f7d25dfe925a20a1fc5fd7cfcee67a"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Apr 09 11:05:33 2018 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 13 17:21:41 2018 -0800"
      },
      "message": "audiopolicy: Fix sofware bridge creation for AudioHAL supporting routing APIs\n\nAudioPolicy roughly checks if HAL supports routing APIs 3.0 to enable or\nnot software bridge in case of device to device patch requests.\n\nHowever, Audio HAL declares in XML file routes supported. AudioPolicy\nshall refine its decision upon information available in the policy configuration\nfile.\n\nTest: Audio smoke tests.\nTest: CTS tests for AudioRecord, AudioTrack and AudioEffect\n\nChange-Id: Idc2e1ccd7d9fb6385f9a05ee002bec045e608232\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "d0f1bffe98354848dc23f4492d8f86987459f179",
      "tree": "516eb8f048077f2672ecfa749c7c617bde4df602",
      "parents": [
        "6c5157eaa8682ee60db576c49fcf56a3d61174f0",
        "a46bedb84a6c972f128e17e7bed114ad0863b0b3"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 11 03:34:44 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 11 03:34:44 2018 +0000"
      },
      "message": "Merge changes I2fc54853,If58ff214\n\n* changes:\n  audio policy: fix capture policy for assistant\n  Revert \"Revert \"audio policy: concurrent capture\"\"\n"
    },
    {
      "commit": "4eb58f1f36606ad7af392a920e1d029a5fb1e797",
      "tree": "c1599fda024344eaf6da5e1d33fc410384127550",
      "parents": [
        "5a2048c3095478482a5ac16639514d3a0a214713"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 07 16:41:02 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 10 14:10:05 2018 -0800"
      },
      "message": "Revert \"Revert \"audio policy: concurrent capture\"\"\n\nThis reverts commit df628924e691e01da190c1ac5db173304442e54a.\n\nBug: 120588242\nBug: 111438757\nTest: make\nChange-Id: If58ff2143fdb744678bb84394598104ced01f5b9\n"
    },
    {
      "commit": "100f0121068605a10b0a254b7ee5784409d09229",
      "tree": "07435569751b97014e448e3162ca28b02926187f",
      "parents": [
        "0422892023dcd4616f00028fd223fef056bc0e16"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Nov 29 11:22:16 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Dec 10 09:25:14 2018 -0800"
      },
      "message": "APM: Improve surround formats management, include MSD\n\nThis is what this change does:\n\n1) Renames APM::mSurroundFormats into mManualSurroundFormats\n   and avoids modifying it in modifySurroundFormats, because\n   multiple surround-capable devices are possible.\n   modifySurroundFormats logic is also a bit simplified.\n\n2) Changes the way APM::getSurroundFormats reports enabled\n   formats, after the change  1).\n\n3) Includes MSD module into consideration as a surround-capable\n   device.\n\n4) Changes APM::dump to only show mManualSurroundFormats\n   when surround sound is enforced into manual management.\n\n5) Adds Dolby AC-4 to the list of surround formats.\n\n6) Declares surround formats on the devicePort of MSD.\n\nBug: 117602867\nTest: Surround Sound settings with MSD module\nChange-Id: I5cdd3c012a3febcf7170cc5fa7378224b3ef9e4f\n"
    },
    {
      "commit": "0422892023dcd4616f00028fd223fef056bc0e16",
      "tree": "11dfbf1d69b4357e8c940e1ee12405d59b9797b3",
      "parents": [
        "07567d630dbda88b9a25a439a5936e507d1caeca",
        "df628924e691e01da190c1ac5db173304442e54a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 07 16:39:03 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 07 16:39:03 2018 +0000"
      },
      "message": "Merge \"Revert \"audio policy: concurrent capture\"\""
    },
    {
      "commit": "df628924e691e01da190c1ac5db173304442e54a",
      "tree": "e2dda15a881c963a14520117128b5b9857834759",
      "parents": [
        "4c1ef4b64d113be6ee1106375bd10cdc643e80d8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 06 21:45:51 2018 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 06 21:45:51 2018 +0000"
      },
      "message": "Revert \"audio policy: concurrent capture\"\n\nThis reverts commit 4c1ef4b64d113be6ee1106375bd10cdc643e80d8.\n\nReason for revert: b/120588242\n\nBug: 120588242\nChange-Id: Iac41f371cb739c54d5ce519232688bebe2285c72\nTest: Launch QSB and capture from mic icon\n"
    },
    {
      "commit": "d5e180520a5b7aeb970bc796abc3ef8070d5174c",
      "tree": "485ebba16f82af8928f02e627773fd02963dcf95",
      "parents": [
        "71738ebf94589faa5aef3c1ba8d53cd17b7fec0f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Nov 30 14:55:45 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 06 18:25:48 2018 +0000"
      },
      "message": "Audio Policy: Parametrize encoded formats supported by device\n\nFor various reasons, we need to store the list of audio\nformats supported by devices. Here we add support for this\ninto DeviceDescriptor. We don\u0027t read them yet from\nthe APM config file, but we will eventually.\n\nAlso in this change, use the formats list for parametrizing\nthe behavior of surround sound configuration. The special\nlogic for AC3 and IEC69137 formats used to be hardcoded\ninto \u0027filterSurroundFormats\u0027 function, now it is\nparametrized by the device descriptor information.\n\nFix behavior of \u0027filterSurroundFormats\u0027 in \u0027manual\u0027\nmode, where it was removing PCM formats from the list.\n\nRename \u0027filterSurround...\u0027 functions to \u0027modifySurround...\u0027\nsince they can both add and remove items from the provided\nlist.\n\nBug: 67479735\nBug: 117602867\nTest: compare A/B APM dumps while modifying Surround Sound\n      settings; tested with a HDMI sink that doesn\u0027t support\n      any surround, and with an AV receiver\nChange-Id: Ie46480d5e9519366b1f3553645c9ca20f64bdc80\n"
    },
    {
      "commit": "4c1ef4b64d113be6ee1106375bd10cdc643e80d8",
      "tree": "203b9b1ca84efc9342514175d616c0a7c22150ad",
      "parents": [
        "973db02ac18fa1de9ce6221f47b01af1bdc4bec2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 13 16:46:26 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 04 12:06:37 2018 -0800"
      },
      "message": "audio policy: concurrent capture\n\nImplement concurrent capture in audio policy manager:\n- Attach AudioRecord client to already opened input when possible\ninstead of systematically opening a new input for each client.\n- Always allow inputs to start even in case of concurrency.\n- Clients are selectively silenced based on their app state by audio\npolicy service.\n- In case of concurrency on a given input stream, device and source is\nchosen based app states and source priority.\n\nBug: 111438757\nTest: Manual capture tests with solotester and Camera, Assistant and Duo\nTest: CTS tests for AudioRecord\n\nChange-Id: I302710ff545f67361d9aca89e81de40771ce7fb0\n"
    },
    {
      "commit": "dfa1e8ab20ce54f3cde479e1305861867abcdbea",
      "tree": "fa10b8bfcbc2e3378249a7a67afc2fdd455c5c93",
      "parents": [
        "7a9f05a68512926f81339d3e42def2ecd9adffa0"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Oct 26 16:42:07 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Nov 30 09:44:42 2018 -0800"
      },
      "message": "Policy config parser: migrate to BP and drop legacy format\n\nMigrate to android.bp as test need to use the library.\nAs bp do not support conditional statement, and this format has been\ndeprecated for 3 years, drop the pre-treble .conf parser.\n\nAUDIOSERVER_MULTILIB is no longer use as it does not make sense for a\nstatic lib.\n\nBug: 114303641\nBug: 111681420\nTest: compile, boots\nChange-Id: I9f429b306ecfbb80116445ba6297a4b3d6dc57f6\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "4515129c59206406322d2efb4581cf0dcd66096d",
      "tree": "ecd075adb351fc3cc59b31fc71e189b377ccd2a7",
      "parents": [
        "eb8b659add93161d169edbe1f94243939df953a6"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Nov 20 16:37:29 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Nov 20 16:43:37 2018 -0800"
      },
      "message": "audiopolicy: use an exact match for MMAP input\n\nAudioFlinger was returning a stereo input if mono was requested\nbut not supported.\nBut AAudio did not know it was stereo so the data was corrupted.\nSo if MMAP input is requested, do an exact match in\nisCompatibleProfile().\n\nBug: 119518992\nTest: see bug for repo steps\nTest: adb shell aaudio_loopback -tm -pl -Pl -x -X -C1\nChange-Id: I925efecca9c99b8a2b7bde3826da4d9e9e663ee1\n"
    },
    {
      "commit": "00987aac7d29168b94cb8263af7d9783f62ef6b5",
      "tree": "1835dca88b28b82d24cf760450187674a578bcbb",
      "parents": [
        "a1e48aa38987cd0460bbfc57e2b0fc513df17283"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Oct 10 15:59:33 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Oct 10 17:49:41 2018 -0700"
      },
      "message": "AudioPolicyManager: Update StreamDescriptor dump to fix warning/build break\n\nFix for partner-q-fs-release-generic-fs mini_arm64-userdebug\nwhich doesn\u0027t define USE_XML_AUDIO_POLICY_CONF.\nThis define must be removed otherwise StreamDescriptor.cpp\nisn\u0027t compiled.\n\nTest: compile with removed USE_XML_AUDIO_POLICY_CONF\nBug: 117574496\nChange-Id: Ic196739ed26b81092d14fbc2779b89a7ec9ecba8\n"
    },
    {
      "commit": "24bf51ae92285202bdbe3fa00c7c83e93c5a03e2",
      "tree": "a5a5b4eb56e7edefcb3ffc1c6742f2e6f1c16404",
      "parents": [
        "72b9ee114d4b5b0017578afe826e8431f0362f96",
        "9baf44fbba5b0e794cb9f2cbe0c7cbe154b27e98"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 09 19:34:53 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 09 19:34:53 2018 +0000"
      },
      "message": "Merge \"AudioPolicyManager: Abort on input descriptor inconsistency\""
    },
    {
      "commit": "72b9ee114d4b5b0017578afe826e8431f0362f96",
      "tree": "1d110a34c0f7b6442be8e316c1936294a7fac87c",
      "parents": [
        "b003ba18ad8746ef945d0622586b140f3dfadcbe",
        "c29d82b089c3a6409640c697c4832eb5de357a54"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 09 17:32:16 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 09 17:32:16 2018 +0000"
      },
      "message": "Merge \"AudioPolicyManager: Convert dump to use String8 (part 2)\""
    },
    {
      "commit": "b003ba18ad8746ef945d0622586b140f3dfadcbe",
      "tree": "4a6052b8a04ee6b14e262b8aa30a7a0e964560cb",
      "parents": [
        "7e8b1832c6f99a7998f81b942472f456efd24830",
        "bb54e20ba9afcf61cc6b41500ff8ab3dfc897203"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 09 17:07:14 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 09 17:07:14 2018 +0000"
      },
      "message": "Merge \"AudioPolicyManager: Convert dump to use String8 (part 1)\""
    },
    {
      "commit": "c29d82b089c3a6409640c697c4832eb5de357a54",
      "tree": "3e61976439f1942204d30a084a602a081b0ea918",
      "parents": [
        "bb54e20ba9afcf61cc6b41500ff8ab3dfc897203"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 05 12:23:17 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 08 13:11:51 2018 -0700"
      },
      "message": "AudioPolicyManager: Convert dump to use String8 (part 2)\n\nTest: dumpsys of APM, diffs.\nBug: 117333182\nChange-Id: I18761416ec9dc97418b41054f85af67e6eb59f3a\n"
    },
    {
      "commit": "bb54e20ba9afcf61cc6b41500ff8ab3dfc897203",
      "tree": "99d0c86990fbf905083d4f41c215311ec75c4e09",
      "parents": [
        "d10b735cfd4eea74846bb5f53d37c8c2a3114d58"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 05 11:42:02 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 08 12:59:33 2018 -0700"
      },
      "message": "AudioPolicyManager: Convert dump to use String8 (part 1)\n\nTest: dumpsys of APM, diffs.\nBug: 117333182\nChange-Id: Ic046acb491efa363423b38a389b046c09ae9d5c9\n"
    },
    {
      "commit": "9baf44fbba5b0e794cb9f2cbe0c7cbe154b27e98",
      "tree": "0bdd4f54a8972b4bee5e4b2aa87c3f4b9383a88e",
      "parents": [
        "4cc873cc1dcf9e69572c2e52b68af1aebea0ad98"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 05 17:58:00 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 08 19:34:25 2018 +0000"
      },
      "message": "AudioPolicyManager: Abort on input descriptor inconsistency\n\nTest: audio sanity\nBug: 116415490\nChange-Id: I8e1953f75af5d886a6109c05473234eb4268ac5b\n"
    },
    {
      "commit": "778bc1f6393c5437acb45943866d88607c67b1e5",
      "tree": "31e6043ab875d05a18636faa5da5d3f6313f3b2b",
      "parents": [
        "b4e880abdcde87ff89937f4f8de819af0cfe371f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 14 16:28:52 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 05 09:32:51 2018 -0700"
      },
      "message": "audiopolicy: Move surround configuration to xml\n\nMove the configuration for supported surround formats\ninto APM xml config file.\n\nBug: 116356348\nTest: on elfin\nChange-Id: Ifba218fa2c03136a3a59eeee8077b00fba77c069\n"
    },
    {
      "commit": "39efb7a1267ac8b1131eecab260a7ae2887a9b0c",
      "tree": "c47ad805bdc6aa615b9d84e4632f3320267362a3",
      "parents": [
        "af036dab1e2075e1277883ef696a48f47d974413"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 26 15:39:28 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 02 20:05:13 2018 -0700"
      },
      "message": "AudioPolicyManager: abort when client is removed while active\n\nThis can result in a refcount mismatch. It is safer to\nabort immediately.\n\nTest: Audio sanity, phone call\nBug: 112067674\nChange-Id: I7835e75342b4c1aa3d6d910ee782d3bc818bd553\n"
    },
    {
      "commit": "af036dab1e2075e1277883ef696a48f47d974413",
      "tree": "bc775cb5a2823dbe73354b5f36dd5fd0acaaf518",
      "parents": [
        "bbbfdd69d89ca651f855777c3c66b12793dc85ae"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 21 10:46:21 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 02 18:18:11 2018 -0700"
      },
      "message": "AudioOutputDescriptor: improve refcount logging\n\nImprove refcount to match exact client descriptor\nAbort on invalid client descriptor refcounts\nLog changes to active clients and refcounts\n\nTest: dumpsys of media.audio_policy\nBug: 112067674\nChange-Id: I5fe4d3e7135efbf9bc5bffb258374115d87c24e6\n"
    },
    {
      "commit": "43c386c8c686b73c4a9a7ffc3537753aa3d1a56d",
      "tree": "aa5c33e07c114985173a6af230b9342ac62af18c",
      "parents": [
        "a77c9edb91589d8673d3af6e2243b6f087430a11"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 19 12:38:29 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 28 20:17:33 2018 +0000"
      },
      "message": "audiopolicy: More XML deserializer refactorings\n\n -- use root and cur argument names consistently;\n\n -- replace \u0027while\u0027 loops with \u0027for\u0027 loops;\n\n -- avoid passing around of \u0027xmlDoc\u0027;\n\n -- get rid of PtrElement, parametrize adding to collections.\n\n -- make possible to return immutable elements via Return\u003c\u003e\n    container from android::hardware.\n\nTest: Compare dumpsys media.audio_policy A/B, check audio\nChange-Id: I5e499bdd7196703c4f788d881f331eb9629bf790\n"
    },
    {
      "commit": "e754a45738ac25ff23790e86431503be23525016",
      "tree": "6219140fc4ff41e8cb3bac88185b24ee2c3771eb",
      "parents": [
        "e84a3e65acb3e77404dd2007947f364197952cdd"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Thu Sep 20 17:08:23 2018 -0700"
      },
      "committer": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Thu Sep 20 18:12:09 2018 -0700"
      },
      "message": "Remove invalid constexpr until we get to C++17.\n\nframeworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp:236:16: error: constexpr variable cannot have non-literal type \u0027const android::(anonymous namespace)::(lambda at frameworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp:236:38)\u0027\nconstexpr auto xmlDeleter\u003cxmlChar\u003e \u003d [](xmlChar *s) { xmlFree(s); };\n               ^\nframeworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp:236:38: note: lambda closure types are non-literal types before C++17\nconstexpr auto xmlDeleter\u003cxmlChar\u003e \u003d [](xmlChar *s) { xmlFree(s); };\n                                     ^\n\nBug: http://b/110779387\nBug: http://b/111067277\nTest: Builds with new compiler.\nChange-Id: Ia7ed01bf0ff064f422be2cf6026cfe8329c404bf\n"
    },
    {
      "commit": "a289aea016a66fd8929e120e46268da8cf5a2f34",
      "tree": "677b63bd14f4c341eb707d003db0acdab46ebb1c",
      "parents": [
        "05fa8856abaa1e050c3c8e6ba97fc8878ed7600a"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Sep 17 15:26:23 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Sep 20 09:11:24 2018 -0700"
      },
      "message": "audiopolicy: Refactor XML deserializer for the APM config\n\n -- Move deserialization traits classes into the .cpp file;\n\n -- Use unique_ptr for managing libxml objects lifetime;\n\n -- Define node and attribute names inline. This makes them\n    inlined in the code, but that\u0027s OK since they are typically\n    only used once.\n\n -- Avoid using reference types for \"out\" parameters.\n\n -- Check the status of deserializing collections.\n\n -- Misc renamings and generalizations for clarity.\n\nTest: Compare dumpsys media.audio_policy A/B, check audio\nChange-Id: Ib188964dee94acbccd701a58d45d3df206487d81\n"
    },
    {
      "commit": "bd9b5935fdbd67d3eaf124e3e80470b8cae1ecd1",
      "tree": "d8aeb92342d15ec51bf074630fcd2e5ec54cbc83",
      "parents": [
        "ca7988602fe3b281bdc814e549d84d15557b99ac",
        "36fc92d5c30b0cae6aea48f85b9d4cc11eae696b"
      ],
      "author": {
        "name": "Hochi Huang",
        "email": "hochi.huang@mediatek.com",
        "time": "Sun Sep 16 08:09:15 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sun Sep 16 08:09:15 2018 -0700"
      },
      "message": "Merge \"audio policy: fix getOutputFromId and getInputFromId\" am: f8d13dee65 am: 4d9a25ccf0\nam: 36fc92d5c3\n\nChange-Id: I0eb25c089d36a36c2546b017cee33c4c7492adc7\n"
    },
    {
      "commit": "36fc92d5c30b0cae6aea48f85b9d4cc11eae696b",
      "tree": "c712fcf42f0135f875f5b57d278bdacf81ccc2eb",
      "parents": [
        "6ff79a0dd1cc27302c466764bf9b9d4f21502e1a",
        "4d9a25ccf002a9eec0dc3d69767418379bdf871e"
      ],
      "author": {
        "name": "Hochi Huang",
        "email": "hochi.huang@mediatek.com",
        "time": "Sun Sep 16 08:03:02 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sun Sep 16 08:03:02 2018 -0700"
      },
      "message": "Merge \"audio policy: fix getOutputFromId and getInputFromId\" am: f8d13dee65\nam: 4d9a25ccf0\n\nChange-Id: I676995ac79a1900df5ccee86a9f36fbed70fb0b7\n"
    },
    {
      "commit": "f731de72e9eff742fcb1f860321aa15fae7dccd9",
      "tree": "17bdda0c0f45e4546f6a0486f02a805b390296b1",
      "parents": [
        "79b9d483d346fc2c2bd680c2154569adf199f26b"
      ],
      "author": {
        "name": "Hochi Huang",
        "email": "hochi.huang@mediatek.com",
        "time": "Wed Sep 05 22:03:19 2018 +0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Sun Sep 16 14:47:27 2018 +0000"
      },
      "message": "audio policy: fix getOutputFromId and getInputFromId\n\nIt should return NULL instead of the last descriptor handle\nif mismatching specific output/input id.\n\nBug: 115474937\nTest: manual test.\nChange-Id: I37ff9622392f3fa3fbfd0c2a3362c704340bd72c\n"
    },
    {
      "commit": "227342aa95b7994dc6fa361aea2f1cc4f039be46",
      "tree": "f0bc62cf5bda69988481513c1d1aed8c7446f4e7",
      "parents": [
        "c5fee0a8854f5decd3b567d2383cd38f0aada4f4"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 14 11:42:37 2018 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 14 11:42:37 2018 -0700"
      },
      "message": "Add missing SPEAKER_SAFE device in DEVICE_CATEGORY_SPEAKER\n\nExplicitly list AUDIO_DEVICE_OUT_SPEAKER_SAFE in getDeviceCategory\n  function, so it\u0027s not relying on default case.\n\nTest: build\nChange-Id: If465311694c405a35aa8a5d36bfe16948a3b56b4\n"
    },
    {
      "commit": "592dd7bf150cee7990958632425c411366252083",
      "tree": "4cee35a646c148839ed4839a96d03a2464b425ba",
      "parents": [
        "8f42ea1fd1c813d9ed97ade72d7514e883cf7cb9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Aug 05 18:58:48 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 10 14:07:45 2018 -0700"
      },
      "message": "audiopolicy: refactor playback activity ref counting\n\nPlayback activity ref couting is now based on active state\nof PlaybackClientDescriptor.\n\nThe active reference count per stream on each output is still\nused because it provides a simple implementation for duplicated output.\n\nTest: CTS tests for AudioTrack and Routing\nTest: manual audio smoke test\n\nChange-Id: Ifadb1d24131581461aace14a5b25e7c7582c57cb\n"
    },
    {
      "commit": "8f42ea1fd1c813d9ed97ade72d7514e883cf7cb9",
      "tree": "4a6c16fd8b856a10fd122170d55a93899cc2613c",
      "parents": [
        "97ac871cd4f075b3d4b47557a81e9e05ad7762ec"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 08 09:08:25 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 10 14:07:45 2018 -0700"
      },
      "message": "audio policy: remove AudioSession class\n\nNow that clients are tracked individually, tracking by\naudio session is no needed anymore.\nModify management of client activity, preempted sound trigger\nsessions and silenced uids to rely on RecordClientDescriptor\ninstead of AudioSession.\n\nTest: CTS test for AudioRecord\nTest: manual capture audio tests for all use cases\n\nChange-Id: Ieef3e05daea98aec9320412393f912bd6bd7e046\n"
    },
    {
      "commit": "97ac871cd4f075b3d4b47557a81e9e05ad7762ec",
      "tree": "a6a547e02e4d736e45f275b4c93c2576ef30e675",
      "parents": [
        "dd6f1835aa352c167d04f4280289988faed7f590"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 27 18:59:02 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 10 14:07:45 2018 -0700"
      },
      "message": "audio policy: refactor preferred route implementation\n\nRemove SessionRoute class and replace by use of\npreferredDevice and active state in ClientDescriptor\n\nAlso fix the behavior for other clients using same strategy as\nclient with preferred route: the preferred route is only used if\nno other clients using the same strategy are active without a preferred\nroute.\nIf all clients have a preferred route, the route of the last active\nclient is used.\n\nAlso fixed getOutputForAttr() to return correct selected device ID when\ndynamic policies are used.\n\nTest: CTS RoutingTest, AudioPlayRoutingNative, AudioRecordRoutingNative\nTest: Manual: AudioExplicitRouting, UplinkMusicSampleApp\n\nChange-Id: Id342c2241ace3e1a359ea74f4a539a395f793b86\n"
    },
    {
      "commit": "ea8ebd5fcbfe399c7876909e2e680d59fba59cf0",
      "tree": "ad95f8981f1b2ee6c8124a10624925d947285ea3",
      "parents": [
        "6497af909a1218a842ae65f12f7d1f4c98159580"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 23 14:15:40 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 30 21:16:14 2018 +0000"
      },
      "message": "audio policy: fix regression in Audio MMAP device selection\n\nCommit f3a5a601 caused a regression for AAudio MMAP playback use case\nwhere disconnecting currently selected device does not generate a\ndisconnect callback to client causing silent audio until the\nstream is closed and reopened.\n\nThis CL fixes a logical flaw in method SessionRouteMap::getActiveDeviceForStream()\nintroduced by commit f3a5a601 causing a stale forced device to be\nreturned after this device was disconnected.\n\nBug: 111711159\nBug: 79878501\nTest: CTS tests for audi routing and AAudio. Audio smoke tests\nMerged-In: Ibb16e26bc59b9e3f99bc74eb944601c6be5026dd\nChange-Id: Ibb16e26bc59b9e3f99bc74eb944601c6be5026dd\n"
    },
    {
      "commit": "3e6c7e15913a812b8658504105100063d57d1d6e",
      "tree": "2ec1571636c46201df600aa9c25f57a727617b48",
      "parents": [
        "f344afa981e537b5f354352284272a8a51cf6759"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 27 17:09:23 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 30 11:34:53 2018 -0700"
      },
      "message": "audio policy: refactor HW audio sources\n\nRefactor management of hardware audio sources to make use of\nClientDescriptor class:\n- HW sources are now tracked by port ID and not audio patch handle.\n- startAudioSource() and stopAudioSource() APIs are updated to use\naudio_port_handle_t as source identifier.\n- AudioSourceDescriptor class is deleted and replaced by\nSourceClientDescriptor class deriving from TrackClientDescriptor\n\nTest: make.\nChange-Id: Ie418b566519a591f036b538a77319f8e30aa99a8\n"
    },
    {
      "commit": "fa69dc61def2931f01a1e14a3b385ffc56a4f2bc",
      "tree": "d2b183d167be035424bb641ae2052000316d0efb",
      "parents": [
        "93adab132cfdd6e71cee2af14eea711b49a4c76d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 27 09:58:58 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 27 16:30:29 2018 -0700"
      },
      "message": "audiopolicy: Add AudioProfileVector::findBestMatchingOutputConfig\n\nAssuming that the call target AudioProfileVector contains\ninput profiles, the method finds the best matching config\nfrom provided AudioProfileVector of output\nprofiles. Matching is performed according to the given\npreferences for audio formats and channel masks.\n\nBug: 63901775\nTest: MSD prototype\nChange-Id: Id005aad9de8bfe8cea5cb6291efc278d6260210c\n"
    },
    {
      "commit": "93adab132cfdd6e71cee2af14eea711b49a4c76d",
      "tree": "b0bd97d6a7e070d6142a0cd15b12c51c87e45faa",
      "parents": [
        "23e617d032700449f4a24521cc89734e514a6bf6",
        "e50f628034f4b0b5a87f8e9f9eb3c170eef62955"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 27 00:47:08 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 27 00:47:08 2018 +0000"
      },
      "message": "Merge \"audio policy: Refactor AudioProfile\""
    },
    {
      "commit": "23e617d032700449f4a24521cc89734e514a6bf6",
      "tree": "d26b170b13b8f19c4f440882f22d7635e0c56ed4",
      "parents": [
        "9366193e6ba8e2c554de747a3ab58a336297c067",
        "8fc147b21a7627eeda6383ae501add4dc903634e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 27 00:06:24 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 27 00:06:24 2018 +0000"
      },
      "message": "Merge \"audio policy: use client descriptors\""
    },
    {
      "commit": "8fc147b21a7627eeda6383ae501add4dc903634e",
      "tree": "a2f8b9232c40384188296887ab22a66d8200ce54",
      "parents": [
        "fa4fd528583279049b334a75e3782c12e832403b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 22 19:13:55 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 27 00:05:08 2018 +0000"
      },
      "message": "audio policy: use client descriptors\n\nFirst step in implementing use of ClientDescriptor class to keep track\nof playback and capture activity:\n- update AudioPolicyInterface methods to just use port ID as\nclient identifier\n- add list of clients in input and output descriptors and update list\nwhen clients are added and removed.\n- list clients in audio policy manager dump.\n\nTest: Audio smoke tests. CTS tests for AudioTrack, AudioRecord, routing, recording and playback configurations\n\nChange-Id: Ia0f62f295d421fb845d57afcaa0ce77cd2c58775\n"
    },
    {
      "commit": "e50f628034f4b0b5a87f8e9f9eb3c170eef62955",
      "tree": "5b2c96e36150dc75c89a4fadc4747028f59d89dd",
      "parents": [
        "19283e9de83b5ade80a93b43589ea9a799414290"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 16:20:43 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 16:20:43 2018 -0700"
      },
      "message": "audio policy: Refactor AudioProfile\n\n * Move non-trivial method definitions into .cpp file;\n * Re-organize method definitions by name and by functionality;\n * Update and sort includes.\n\nThe code of the methods left unchanged.\n\nBug: 63901775\nTest: make\nChange-Id: Ic1b1c456983a23f078947dd84a837dc194bd48cc\n"
    },
    {
      "commit": "9366193e6ba8e2c554de747a3ab58a336297c067",
      "tree": "f6d9fe9e7cbe37902d023b33c24463f99d26b3fd",
      "parents": [
        "19283e9de83b5ade80a93b43589ea9a799414290"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 14:37:41 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 14:37:41 2018 -0700"
      },
      "message": "audiopolicy: Refactor DeviceVector::getDevicesFromHwModule\n\nRename method audio_devices_t DeviceVector::getDevicesFromHwModule\ninto getDeviceTypesFromHwModule.\n\nIntroduce method DeviceVector DeviceVector::getDevicesFromHwModule.\n\nBug: 63901775\nTest: make\nChange-Id: Ieec0c116fa0a6ff20241d61f65202a8eaf9f0674\n"
    },
    {
      "commit": "5a7913b405ac893998591fbad1242d7d9b7b2a62",
      "tree": "ab285ef604cf9c459e3abf56b7d68ecdcadefd01",
      "parents": [
        "fa4fd528583279049b334a75e3782c12e832403b"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 24 12:35:06 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jul 25 11:21:05 2018 -0700"
      },
      "message": "Add utility functions to AudioProfile\n\nAdded AudioProfileVector::getFirstValidProfileFor for retrieving\nfirst valid profile supporting the given format.\n\nAdded ChannelsVector::as{In|Out}Mask for reversing direction on all\ncontained channel masks.\n\nBug: 63901775\nTest: make\nChange-Id: Ib4a816abd9a3904a552f670ee75266e7dd890011\n"
    },
    {
      "commit": "fa4fd528583279049b334a75e3782c12e832403b",
      "tree": "efc7f94b1ade01d7c87aa85f161795e40ca58e4c",
      "parents": [
        "3fcfb3c014335da69e381cef47d0065ef01350e6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 20 18:23:34 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 24 19:09:40 2018 -0700"
      },
      "message": "audio policy: add client descriptors\n\nAdd client descriptors to keep track of opened AudioTrack and\nAudioRecord individualy. Client descriptor contains audio attributes,\nsampling rate, format, channels, uid, session, preferred route etc...\n\nTest: make.\n\nChange-Id: I785bdf7548670769f463549a3245114ac4c86e41\n"
    },
    {
      "commit": "a18d8004284b7fb0e0372f595716974141cc6e79",
      "tree": "1e286ccfb6943b979fc5f6706c6c69a7756237c7",
      "parents": [
        "0f7d299c5e308bc32333766590797992e7690966",
        "a18dced5af77307be66d8c05ac05e6160ab8d8ed"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 24 22:20:00 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 24 22:20:00 2018 +0000"
      },
      "message": "Merge \"audio policy: refactor record activity tracking (AudioSession)\""
    },
    {
      "commit": "bc3ee5af87c5815a92aa67729c2d2ed540f4163e",
      "tree": "3dbc1a73978ea1148b45d39bfe3270afd5d696e8",
      "parents": [
        "9f50e3af9ee18973576cd3e161c515461001ec92",
        "04ff947b07f0b4becacfa0668862b2d48437a6be"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 24 17:24:05 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 24 17:24:05 2018 +0000"
      },
      "message": "Merge \"audio policy: fix regression in Audio MMAP device selection\""
    },
    {
      "commit": "9de8bd18b21642f6f1fb4e3ef75e44a2cc79f3ce",
      "tree": "3be2f968af8f8c7b3b52ae8fa52e7a052fa80fee",
      "parents": [
        "a2a19382e5870fb133b56dacc7ff3048cdaa407d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 23 16:41:31 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 24 08:52:14 2018 -0700"
      },
      "message": "AudioPolicy: Reuse SortedVector comparison from AudioProfile\n\nOperation for comparing sorted vectors was defined twice in APM code:\nonce in AudioProfile.h as operator\u003d\u003d, then in APM as \u0027vectorsEqual\u0027\nmethod. Remove the latter and use the operator instead.\n\nTest: make\nChange-Id: I0697843aabb13539b7b552773d96dbb7fb56daa4\n"
    },
    {
      "commit": "04ff947b07f0b4becacfa0668862b2d48437a6be",
      "tree": "b1e0ca42b6fb7478bb8f130dcd147b1e1da2e748",
      "parents": [
        "a2a19382e5870fb133b56dacc7ff3048cdaa407d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 23 14:15:40 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 23 18:15:09 2018 -0700"
      },
      "message": "audio policy: fix regression in Audio MMAP device selection\n\nCommit f3a5a601 caused a regression for AAudio MMAP playback use case\nwhere disconnecting currently selected device does not generate a\ndisconnect callback to client causing silent audio until the\nstream is closed and reopened.\n\nThis CL fixes a logical flaw in method SessionRouteMap::getActiveDeviceForStream()\nintroduced by commit f3a5a601 causing a stale forced device to be\nreturned after this device was disconnected.\n\nBug: 111711159\nBug: 79878501\nTest: CTS tests for audi routing and AAudio. Audio smoke tests\nChange-Id: Ibb16e26bc59b9e3f99bc74eb944601c6be5026dd\n"
    },
    {
      "commit": "a18dced5af77307be66d8c05ac05e6160ab8d8ed",
      "tree": "f23e3ffe92d2753871f194de45d8a69a60180726",
      "parents": [
        "68234ec840e4eefdb9d0bf400c745a09a07156c9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 20 15:14:54 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 20 15:30:25 2018 -0700"
      },
      "message": "audio policy: refactor record activity tracking (AudioSession)\n\nRefactor input activity ref counting and callbacks to align\nwith implementation for output.\n\nThis will help migration to per client activity tracking.\n\nTest: audio smoke test, CTS for AudioRecord\nChange-Id: I8806446f33d3090f1042e0956df81318646d5285\n"
    },
    {
      "commit": "21b43364f0eb3916264d046718d74c7fb98efe59",
      "tree": "e7b6c3754aa85e33329225a41a06c02b91490751",
      "parents": [
        "20bd30baf9fcd59e7000e7c626cc8bc1e85637bc"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jun 04 10:37:09 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jun 04 17:04:21 2018 -0700"
      },
      "message": "APM test: Fix default config, add test for \u0027dump\u0027\n\n - Fix AudioPolicyConfig::setDefault so the config is valid again;\n\n - Enhance the default config with dynamic profiles;\n\n - Factor out the code for creating a full dynamic profile;\n\n - Add a method to unit test that verifies calling APM::dump.\n   This is also useful to examine how the default config looks\n   like.\n\nTest: audiopolicy_tests\nChange-Id: I102071e160b835da50ed5806bd2d62102a10d775\n"
    },
    {
      "commit": "e20a509ebdc7209af3d5031efe7b8b81f8179d7b",
      "tree": "073eea80be14f750ef9308942de7401fc397b4af",
      "parents": [
        "e53b517372983b6efdb50abcc3517d09216c2a48",
        "708e038f7e6c452de8186e2d6981de7540495094"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 01 22:37:24 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 01 22:37:24 2018 +0000"
      },
      "message": "Merge \"audiopolicy: Brush up DeviceVector::getDevice... methods\""
    },
    {
      "commit": "708e038f7e6c452de8186e2d6981de7540495094",
      "tree": "fef4228ffb73cd20eb8a2a921ee6df687c92adc2",
      "parents": [
        "f4d3741b3a721f8e1f72ec3ca2684efe22526d80"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 30 09:53:04 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jun 01 12:39:15 2018 -0700"
      },
      "message": "audiopolicy: Brush up DeviceVector::getDevice... methods\n\nThe semantics of these methods wasn\u0027t consistent and wasn\u0027t clear\nfrom their names (and aggravated by the fact that audio_devices_t can\nbe used either as a single device, or as a mask):\n\n * sp\u003cDeviceDescriptor\u003e getDevice(type, address) -- \u0027type\u0027 is a single\n   device; if \u0027address\u0027 is an empty string, and no matching device\n   with an empty address is found, returns any device of this type;\n\n * DeviceVector getDevicesFromType(type) -- \u0027type\u0027 is a mask,\n   device addresses get ignored;\n\n * DeviceVector getDevicesFromTypeAddr(type, address) -- \u0027type\u0027 is\n   a single device, address is matched exactly. So in practice, only\n   1 device could be returned.\n\nChanges:\n\n * \u0027getDevicesFromType\u0027 renamed to \u0027getDevicesFromTypeMask\u0027 --\n   emhpasizes the fact that \u0027type\u0027 can be a mask;\n\n * \u0027getDevicesFromTypeAddr\u0027 removed, usages replaced with a call to\n   \u0027getDevice\u0027. There were just 2 usages, and their intent seem\n   to be covered by the semantics of \u0027getDevice\u0027.\n\nTest: verified basic audio functionality and Auto with simulator\nChange-Id: If3e42e4c06f42573fd33ba1303febe0625e079e6\n"
    },
    {
      "commit": "32abc2bfbf3bc8db0bdcbdc0f700350d7a5bc547",
      "tree": "15f2b1791e1d27b28779b330392c7c1f0f97f5e4",
      "parents": [
        "f4d3741b3a721f8e1f72ec3ca2684efe22526d80"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 24 12:57:11 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 30 15:48:58 2018 -0700"
      },
      "message": "Use the new audio_port_config.flags field\n\n- When filling out audio_port_config from AudioPortConfig and\n  AudioFlinger\u0027s threads, populate audio_port_config.flags when needed.\n\n- When creating software patches, apply the flags provided\n  in audio_port_config_flags to the created threads.\n\nBug: 63901775\nTest: use USB headset for telephony on sailfish\nChange-Id: I7704797a84427f7a9431e5132b8f5c51538f9217\n"
    },
    {
      "commit": "bd1a7046c0ad30f5a6ca214023c618a6080da04e",
      "tree": "a4720becac883cefd1f37444986eb94a98397196",
      "parents": [
        "150bbbc71adc612b45264ad7a5fa180e8deef4ef",
        "c65863d32ed0bf83128b72346bdbd8ec1fd791d4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 24 12:25:31 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 24 12:25:31 2018 -0700"
      },
      "message": "Merge \"audio polcy: fix explicit device routing in call\" into pi-dev am: 944c05e857\nam: c65863d32e\n\nChange-Id: I291dc90b37f3ac07135ab2bfa7f2e748c16c0304\n"
    },
    {
      "commit": "7be71d225fd6d44cc38eaef532c2eb502dcadb91",
      "tree": "fd930e9c5f1f45015264e9548c75301b7e16cc61",
      "parents": [
        "85599801bae7907bd1bc0e4cad1b834d16920776"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 23 16:51:46 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 23 17:15:11 2018 -0700"
      },
      "message": "Zero initialize audio_port_config and containing structs\n\nAdd zero initialization for struct audio_port_config and\nthe structures that contain it: audio_port and audio_patch.\n\nLeft intact places where the struct is overwritten completely\nor memset\u0027d right after declaration.\n\nTest: make\nChange-Id: I889e55fd7c7b8810ef840090a9f0a85d55eaedb3\n"
    },
    {
      "commit": "f3a5a6014a8bf7915bcf9297d536c707c212086d",
      "tree": "36e3815839146def5e5a0e1584a3a5bdf2f2bd8d",
      "parents": [
        "c2d0641bc02e08a74c458002d9460299cd1ff490"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 22 18:42:55 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 23 08:51:46 2018 -0700"
      },
      "message": "audio polcy: fix explicit device routing in call\n\nMake sure tracks with an explicit routing request are not systematically invalidated\nwhen starting while another track on the same strategy is already active.\n\nAlso fix a problem where explicit routing is not taken into account by\ngetNewOutputDevice() when in call because the strategy with the\nexplicit routing is not evaluated.\n\nBug: 69680975\nBug: 79878501\nTest: voice call regression, CTS for explicit audio routing, test case\nfor b/79878501\n\nChange-Id: I99b83f8a3304549bf327c3c327f6671f777cfb4b\n"
    },
    {
      "commit": "4dbb7193c5fde752707bee899a018511e872f1e5",
      "tree": "e1b3fe47323886a0fd5751aafe35ce7dc5add0d6",
      "parents": [
        "815fc56caa35b91df0c8a4bb4659438e59e91152",
        "dc769682023ba8a8a5da07c3e3a3adfabe4bd612"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 16 17:47:25 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 16 17:47:25 2018 +0000"
      },
      "message": "Merge \"audio_server: Unify audio_patch creation\""
    },
    {
      "commit": "dc769682023ba8a8a5da07c3e3a3adfabe4bd612",
      "tree": "6f6a0991e71927cda302c4c489f69bd239023597",
      "parents": [
        "f1040d20210338eb850b000d4344ddc9a04eb493"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 15:34:08 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 16 09:43:33 2018 -0700"
      },
      "message": "audio_server: Unify audio_patch creation\n\nProvide PatchBuilder helper class instead of fiddling with\nstruct audio_patch directly.\n\nRename \u0027getAudioPortConfig\u0027 methods of AudioFlinger helper\nclasses into \u0027toAudioPortConfig\u0027 to match classes\nof AudioPolicyManager.\n\nFactor out common code in AudioPolicyManager that was\nadding audio patches. For that, AudioOutputDescriptor now inherits\nfrom AudioSessionInfoProvider, and the latter has been extended\nwith \u0027setPatchHandle\u0027 method.\n\nTest: switch to/from Bluetooth on phone calls and media playback,\n      use camcorder\nChange-Id: Idd99645dc6943ed078c4d94d0197fead7831ab4d\n"
    },
    {
      "commit": "7ced919cddad4f8db132da56737a2527f9e0e242",
      "tree": "25ff97a06c0d5fac0ed8ed01e02d7f7cd7ca9be3",
      "parents": [
        "99c58a82ce17440d3b050c8efbaa99f6db3f0668"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 10 17:07:20 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 10 17:07:20 2018 -0700"
      },
      "message": "AudioPolicy: Improve audio patches dump\n\nWas:\n\n    Audio Patches:\n      Audio patch 1:\n      - handle:  5\n      - audio flinger handle: 12\n      - owner uid: 1041\n      - 1 sources:\n        - Mix ID 1 I/O handle 13\n      - 1 sinks:\n        - Device ID 3 AUDIO_DEVICE_OUT_SPEAKER\n\nNow:\n\n    Audio Patches:\n      Patch 1: owner uid 1041, handle  5, af handle 12\n        [src  1] Mix ID 1 I/O handle 13\n        [sink 1] Device ID 3 AUDIO_DEVICE_OUT_SPEAKER\n\nTest: adb shell dumpsys media.audio_policy\nChange-Id: I164ab9b384e77929ef44dae019b7ec15239dceaa\n"
    }
  ],
  "next": "1ed007c1e1d1a400cbfa55c4ea649dd48eab09ef"
}
