)]}'
{
  "log": [
    {
      "commit": "a949f46743a29b337ba15cedf9ffb6d813d1b4bd",
      "tree": "ac55a23cbbf5330f529f1c06c4d05d677c54e3e4",
      "parents": [
        "542906964badda8312c03464035dcb12698b0e95",
        "a7b4379046aca7ff9e08dc5f62ef0888423d6cc5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 16 17:31:13 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 16 17:31:13 2018 +0000"
      },
      "message": "Merge \"Update generation when there is device connection state changed.\""
    },
    {
      "commit": "332adf69b9cee8c261b321337b0b8efd57a69018",
      "tree": "53ff1343f02b92a6936040013b22d0a9a92d696a",
      "parents": [
        "da891a1e4a8e2bed310c2a42f4df795a1151f02f",
        "5babc4f104885c16a3dcfdfb5d99903c27ff2bd9"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 16 04:16:32 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 16 04:16:32 2018 +0000"
      },
      "message": "Merge \"audio policy: fix regression with duplicated output handle\""
    },
    {
      "commit": "5babc4f104885c16a3dcfdfb5d99903c27ff2bd9",
      "tree": "2f260fb33ee4424dcea806c3ba3d96faedb9b644",
      "parents": [
        "31832c60d57558c2d5ddb2e45e4c6111ce9e55bb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 15 12:33:44 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 15 17:36:04 2018 -0800"
      },
      "message": "audio policy: fix regression with duplicated output handle\n\nCommit fe2311274 made that IO Handle for duplicated outputs\nwere not allocated properly causing volume commands to be sent\nwith an invalid IO handle to audio flinger.\nWe then hit another problem with a legacy behavior which broadcasts volume\ncommands to all output threads if received with IOHandle 0.\n\nBug: 70332110\nTest: manual test.\nChange-Id: Ib133abab1575e3c90ba235f0a52d5ab845514719\n"
    },
    {
      "commit": "a7b4379046aca7ff9e08dc5f62ef0888423d6cc5",
      "tree": "e3f124d94d2619be8ae6418c8782a4e7e8c5768e",
      "parents": [
        "d8d4ef440fe25095d34e535e591edd8fa1457307"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Feb 15 16:04:46 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Feb 15 16:04:46 2018 -0800"
      },
      "message": "Update generation when there is device connection state changed.\n\nWhen there is device connection state changed, the available\ninput/output devices will change. If we don\u0027t update the generation, it\nmay cause the number of ports different with same generation, which may\ncause crash in jni layer.\n\nBug: 73077399\nTest: run com.android.bluetooth.hfp.HeadsetServiceTest\nChange-Id: Ic2e477552a71582bcd38227b9a449eef5b82b18c\n"
    },
    {
      "commit": "2c6a243319474e518824b872894e9c5f274b81b6",
      "tree": "27cd47ae36810416e2a74aaddc983e4e4c09c217",
      "parents": [
        "f51cb69506670403cf1da2c66a3290c2f47344b6",
        "b3733cf0932256c57c74fc6670bd0e5bdd0edb4d"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 15 22:27:31 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 15 22:27:31 2018 +0000"
      },
      "message": "Merge \"Revert \"Revert \"APM: Avoid route change mute of isolated sounds\"\"\""
    },
    {
      "commit": "b3733cf0932256c57c74fc6670bd0e5bdd0edb4d",
      "tree": "6f6e1187fa69cd0eefed4a91a4deede6434ae699",
      "parents": [
        "4a5b48197acdeaa397bf63a753af550bdea1b361"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Feb 15 19:17:50 2018 +0000"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Feb 15 19:17:50 2018 +0000"
      },
      "message": "Revert \"Revert \"APM: Avoid route change mute of isolated sounds\"\"\n\nThis reverts commit 4a5b48197acdeaa397bf63a753af550bdea1b361.\n\nReason for revert: original CL not at fault for b/70332110\n\nChange-Id: I3eef8a249305a66111e2f606155511a03b4d588a\n"
    },
    {
      "commit": "98c15702ca0c814fee9110efa14d70fc9937514e",
      "tree": "52b650fe7c6c07821b2543c62abde91de916747a",
      "parents": [
        "ec8d39d73a2a0167ae1c21edb005a62f87d2bd38",
        "4a5b48197acdeaa397bf63a753af550bdea1b361"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 08 21:56:12 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 08 21:56:12 2018 +0000"
      },
      "message": "Merge \"Revert \"APM: Avoid route change mute of isolated sounds\"\""
    },
    {
      "commit": "4a5b48197acdeaa397bf63a753af550bdea1b361",
      "tree": "c224cba0fe55a8dca9deff2519a2fc9fedd7e7ef",
      "parents": [
        "7c7124e693b20eafb4e0e86f996419c5597e0fbf"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Feb 08 17:22:32 2018 +0000"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Feb 08 17:22:32 2018 +0000"
      },
      "message": "Revert \"APM: Avoid route change mute of isolated sounds\"\n\nThis reverts commit 7c7124e693b20eafb4e0e86f996419c5597e0fbf.\n\nReason for revert: suspect for b/70332110\n\nChange-Id: Ia19a59018c705faa9ac521353da3d417dbbfe2ef\n"
    },
    {
      "commit": "c0c831a8811b438093ca7f1d01b0ccf8c2a345d3",
      "tree": "5cf5f9aa3c6d0e6c55a1dfec40a7e322e42414f4",
      "parents": [
        "3923b1b71628e668f9b11ed4891ed2840dd331cd"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Jan 29 17:55:15 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Jan 29 21:13:59 2018 -0800"
      },
      "message": "Fix explicit routing failed.\n\nIn AudioPolicyManager.getInputForAttr, we should get device descriptor\nfrom available input devices, but not output devices. When using output\ndevices, the explicit routing will never work.\n\nBug: 72670086\nTest: run cts\nChange-Id: Ib37ffb70334afc6c7c8ddd7baf6439b146205d45\n"
    },
    {
      "commit": "c3c1fc630e21f36d2e3f56fac3503c471fbc3a15",
      "tree": "921aa645df7244475712d172ba9349046aad2106",
      "parents": [
        "254d783c0db9d7af6b863ad1819f5c4a543a939d",
        "f317240cde612c3509c7d0950484516ed33fd664"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 24 17:41:23 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 24 17:41:23 2018 +0000"
      },
      "message": "Merge \"Trivial comment fix\""
    },
    {
      "commit": "f317240cde612c3509c7d0950484516ed33fd664",
      "tree": "a56d57db0c7e43b1e4d04cf0613bde8dde594995",
      "parents": [
        "4ca350708ba8152d2832e7177eb028c8fb1c591d"
      ],
      "author": {
        "name": "Scott Randolph",
        "email": "randolphs@google.com",
        "time": "Tue Jan 23 17:06:53 2018 -0800"
      },
      "committer": {
        "name": "Scott Randolph",
        "email": "randolphs@google.com",
        "time": "Tue Jan 23 17:08:15 2018 -0800"
      },
      "message": "Trivial comment fix\n\nAdded missing letter in a word in a comment\n\nTest: NA\nChange-Id: Ica94700c0d42b0f0703d3d6c4867679b313eaf18\n"
    },
    {
      "commit": "766fb020a50b64bf9a808bd80df60c54c2ca8cc3",
      "tree": "acb92cb201889d2b56f41bc2a437da1aaae72c4e",
      "parents": [
        "652f9299bb8a7a50148d57a75de6ede831bfed85"
      ],
      "author": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Sun Jan 07 12:18:03 2018 +0200"
      },
      "committer": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Mon Jan 22 23:05:23 2018 +0200"
      },
      "message": "Support routing audio playback to telephony uplink\n\nThis change enables phone apps to play audio to the uplink stream\nduring a call.\nThis change maks the AUDIO_OUTPUT_FLAG_INCALL_MUSIC_UPLINK flag to be added to the flags that are sent to the HAL when an ongoing call is active, the chosen output device is the TX telephony device, the stream type is music, and the calling app has the MODIFY_PHONE_STATE permission.\nFor this change to take place, the following changes were made to the signature of getOutputForAttr in IAudioPolicyService:\n  1. Add pid (process id) parameter to getOutputForAttr.\n  2. Make the flags parameter a pointer so changed value can be\n  examined by calling function.\n\nBug: 69973354.\nTest: tested manually.\nChange-Id: I74cef3f8b66de6e0e8f87b6235130c2cdf423da7\n"
    },
    {
      "commit": "65a438c6429c7f46cb0ab056c7f672ea0aa9e7f5",
      "tree": "d2b98e3247afd27d7272d23b226dc4e10fb8f5f9",
      "parents": [
        "2917aa469abba347a1ab1e6fa766d62721182788",
        "f4ddfefc8ba59a8486d91826154cc9447821409e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 20 04:09:36 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 20 04:09:36 2018 +0000"
      },
      "message": "Merge \"Don\u0027t record audio if UID is idle - media framework\""
    },
    {
      "commit": "f4ddfefc8ba59a8486d91826154cc9447821409e",
      "tree": "b24bb43846003ef5523f0d470e49389086138679",
      "parents": [
        "d6be64a3f22be3eceb0d6209c88dcad573c08191"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 16 07:37:58 2018 -0800"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Jan 18 00:17:52 2018 -0800"
      },
      "message": "Don\u0027t record audio if UID is idle - media framework\n\nTo protect user\u0027s privacy if a UID is in an idle state we allow\nrecording but report silence (all zeros in the byte array) and once\nthe process goes in an active state we report the real mic data.\nThis avoids the race between the app being notified aboout its\nlifecycle and the audio system being notified about the state\nof a UID.\n\nTest: Added - AudioRecordTest#testRecordNoDataForIdleUids\n      Passing - cts-tradefed run cts-dev -m CtsMediaTestCases\n                    -t android.media.cts.AudioRecordTest\n\nbug:63938985\n\nChange-Id: I1442a9dda1553e9ea7a4a654c50555ac1ec06aa0\n"
    },
    {
      "commit": "7c605f65099f4db2ece707e07b5e844d5eefc9a6",
      "tree": "d39eee50d13843d2027c6fe10db30746ccdcdd2f",
      "parents": [
        "49f36ba3b4624ddd3d7efa34c95128a73bda6208"
      ],
      "author": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Mon Dec 25 00:01:52 2017 +0200"
      },
      "committer": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Mon Dec 25 11:56:54 2017 +0200"
      },
      "message": "AudioPolicy: enable phone apps to mute VOICE_CALL stream\n\nThis change enables an app that has the MODIFY_PHONE_STATE\npermission to mute the VOICE_CALL stream.\nThe change adds specific handling in  AudioPolicyManager\nfor the case in which volume index is 0 and stream type is VOICE call.\nThe permission check is done in the AudioService Java code for the\ncalling process.\n\nBug: 71017199\nFixes: 71017199\nTest: Tested manually\nChange-Id: Ibbf3b6948a4384a963d00347ebd04ccf6d56ebd5\n"
    },
    {
      "commit": "49f36ba3b4624ddd3d7efa34c95128a73bda6208",
      "tree": "9427c132f2f998021c1ae06078174c3396bc5f54",
      "parents": [
        "b3ded702104331ae35597eef28f670e407a1b519"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 06 13:02:02 2017 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 22 20:05:46 2017 +0000"
      },
      "message": "Logs use either %#x or 0x%x for flags, channel mask, format, device\n\nPreferred is %#x but 0x%x is also permitted because it is widely used.\n\nThe benefit is that it reduces ambiguity and possible confusion,\nwithout needing to read the source code for each log.\n\nTest: builds OK and logs are less ambiguous\nChange-Id: Ie2404e071d22278b8bba1e094ad336887844212c\n"
    },
    {
      "commit": "bcbcb1bdda4f1970830fa4924e3a5f24171ae005",
      "tree": "9b1523a2e1e60e1a44582240f040581617fedaf0",
      "parents": [
        "823267338b2bee8c279306c07775feabfc2434a5"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 13 13:03:35 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Sat Dec 16 00:52:18 2017 +0000"
      },
      "message": "audiopolicy: Add more tests, fix issues found\n\nAdded tests that ensure correct initialization of APM.\n\nFixed issues:\n\n  -- UB in VolumeCurvesForStream::volIndexToDb due to not\n     checking that the pointer is non-null;\n\n  -- AudioInputDescriptor::open and SwAudioOutputDescriptor::open\n     were not checking that the returned IO handle is valid,\n     this was causing an infinite loop in\n     AudioPolicyManager::selectOutputForMusicEffects, added an\n     assertion.\n\n  -- Memory leak of VolumeCurves collection in APM.\n\nTest: audiopolicy_tests\nChange-Id: Ia4ecca1dd03b74d7f93720f042da05d5a0c74a6b\n"
    },
    {
      "commit": "ad3f8a1082c101f2c218be64e48ae615676952ea",
      "tree": "ec94ad27cebafe5eccc8e04fa9b80ad20932813d",
      "parents": [
        "ceedc87e48c92e248123b9a9476053456e62e006"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Dec 12 13:24:23 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 13 16:20:45 2017 -0800"
      },
      "message": "audiopolicy: Add unit tests build target\n\nThis change adds audiopolicy_tests target for running\nunit tests of AudioPolicyManager class.\n\nAudioPolicyManager class is modified to allow\nfiner control over the configuration loading.\n\nTest: audiopolicy_tests\nChange-Id: Icf0cd7ff5b3b8b827b4f6909ff2c138ac2a2b82e\n"
    },
    {
      "commit": "733ce945741b1fc12cee92d8133c3136b4e6e0e0",
      "tree": "fbf765136f3dcccf9595c49bdc949e426194c379",
      "parents": [
        "447d53631b7560eace6016b2711a75533339cbcc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 12:18:25 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 12:45:51 2017 -0800"
      },
      "message": "audio policy: fix HAL stream activity ref counting\n\ncommit f05fc906 did not take into account the specificities of duplicated\noutputs causing a crash when accessing the profile (null for duplicated outputs)\nand not counting activity resulting from duplicated output activity.\nAlso account for HW source activity when connected to an output mix.\n\nBug: 70319466\nTest: CTS tests for AudioTrack and AudioRecord\nTest: audio smoke tests\n\nChange-Id: Id0364170794302e42212a90e1b40e28c1e7193fe\n"
    },
    {
      "commit": "3974e3b22856ef35dd73760056ff38b7a4062176",
      "tree": "2d6d5c222659f327302f69a833744b5ba7e1f74f",
      "parents": [
        "ea5523d88c6dc9662621db5fc62bf50eff0fe4ba"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 17:58:43 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 12:45:51 2017 -0800"
      },
      "message": "Revert \"Revert \"audio policy: add open and active count for IO profiles\"\"\n\nThis reverts commit 7b0e95327267f08e36b38fdd8fb2624e251b8e97.\n"
    },
    {
      "commit": "53b810ead5b726994fe6a28c6fa955e7b8799aaa",
      "tree": "15653882b1b062369bc046d9ef92ccfdffbe1281",
      "parents": [
        "5fb93fa294ee05a25f86312e926b5ca4e0d1d3b2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Dec 10 17:25:10 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 11 14:30:37 2017 -0800"
      },
      "message": "audio policy: fix device address passed when opening HAL  streams\n\nCommit fe231127 caused a regression where the device address is\nnot passed properly to audio HAL by openInputStream() or\nopenOutputStream(). The address must be read from available\ndevice descriptors, not supported devices in profiles which do not\nhave the current device address for removable devices.\n\nBug: 70321528\nTest: audio smoke tests,CTS  AudioRecordTest\nChange-Id: I83211a31f86391b80c3c244b436a2e36923ccea0\n"
    },
    {
      "commit": "b567ba06331aeac314f74c87f2e7b9badb4d6518",
      "tree": "e94de3eaa72bdec82109bce2ed608fa95ba3a604",
      "parents": [
        "1b2a794a27caab3a1320d22b872b04ef73e96555"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 11:16:27 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 17:23:26 2017 -0800"
      },
      "message": "audiopolicy: Refactor AudioPolicyManager::updateCallRouting\n\nThe code of the function had almost identical paths for\nRx and Tx patches creation. Factored them out, now it\u0027s much\neasier to see what is common, and what differs.\n\nTest: audio in still present incoming and outgoing telephony calls\nChange-Id: Ia02179513d76809e33c65b2dad465358acdbfc63\n"
    },
    {
      "commit": "1b2a794a27caab3a1320d22b872b04ef73e96555",
      "tree": "79f53eef61b788a5f49aaf26b5c897d7a6dac49f",
      "parents": [
        "2773dd7219e6cdc56471501c90808a1bafc31d39"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 10:18:09 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 12:06:18 2017 -0800"
      },
      "message": "audiopolicy: Remove ; after namespace bracket\n\nSemicolons are not needed after the closing bracket of\na namespace, remove it.\n\nTest: compiles\nChange-Id: Ie82930365f738fd9c95a9163839a68b772e49d95\n"
    },
    {
      "commit": "2773dd7219e6cdc56471501c90808a1bafc31d39",
      "tree": "9a514d61c4b618a1a2599c766e0e5b088876e542",
      "parents": [
        "a5e165d3a9074c09b67df5a89aa26b153cf69562"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 10:12:11 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 12:03:28 2017 -0800"
      },
      "message": "audiopolicy: Use C++11 atomics, factor out handle generation\n\nUpdate the code to use C++11 atomics. Make sure that\nunsigned ints are used as id counters (signed ints have undefined\noverflow behavior). Factor out common code from AudioPatch\nand AudioPort.\n\nTest: compiles\nChange-Id: Ic359e97795a6282a2937d88bead8a1de27c8db7a\n"
    },
    {
      "commit": "a5e165d3a9074c09b67df5a89aa26b153cf69562",
      "tree": "c41079e712a68ff295d8bb7bf713885ca63a2682",
      "parents": [
        "22f920a8a520614d872024400bf0e371c77dcc7e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 17:08:02 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 12:01:19 2017 -0800"
      },
      "message": "audiopolicy: Make fields of HwModule private\n\nIt\u0027s a good practice not to expose fields of the class.\nUse getter / setter methods instead.\n\nTest: compiles\nChange-Id: I9d939d17fafdfff016a300d4f5a979bdc8414f2b\n"
    },
    {
      "commit": "cf84e596c53d5f85b64665a66ed2ec212ecff618",
      "tree": "37382644a3e514337cdbb1882ee6a272680758fd",
      "parents": [
        "7e22e94d0654d7ab4c31aee7f7120542e358a5ab"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 11:25:11 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 16:43:38 2017 -0800"
      },
      "message": "audiopolicy: Refactor and fix loops in AudioPolicyManager\n\n  -- Use range for loops where possible.\n\n  -- Replace some loops over DeviceVector with a call to already\n     existing search function.\n\n  -- Fix unsigned integer overflow in a loop that decrements\n     the loop counter.\n\nChange-Id: I2ab544b8176310c15c16c04b72c2800d8526e5a5\nTest: compiles\n"
    },
    {
      "commit": "7e22e94d0654d7ab4c31aee7f7120542e358a5ab",
      "tree": "4ac3687d1298ab0c5387f8346318272792c4e23e",
      "parents": [
        "4f1e084744ee82f29a8e6c04f99a1d915e44be12"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 10:04:29 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 16:40:20 2017 -0800"
      },
      "message": "audiopolicy: Minor cleanups\n\n  -- ensure opening bracket in \u0027for\u0027 loops is at the same line\n     with the loop statement;\n\n  -- remove \"-\" probably appeared from merge conflict resolution.\n\nChange-Id: I1ac5bc51def6f1a208042d55608e9f6e90ef8205\nTest: compiles\n"
    },
    {
      "commit": "7b0e95327267f08e36b38fdd8fb2624e251b8e97",
      "tree": "0c412e78c95e72016e18612167e463ccb3205da2",
      "parents": [
        "79e94ec95e5d2a8c13998c2f05ae63326f7468d0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 12:20:56 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 22:26:21 2017 +0000"
      },
      "message": "Revert \"audio policy: add open and active count for IO profiles\"\n\nBug: 70319466\n\nThis reverts commit f05fc9061254a3329bf0a3b40e27cac87b51b4cc.\n"
    },
    {
      "commit": "d4120148e72b2352f19f74dd493e903992371ef9",
      "tree": "fe81d9ec22eda9966fddaf89388c7870efb76a58",
      "parents": [
        "3a5608cf069994725f6e50950f0462e91dcd8c51"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 06 15:49:22 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 06 18:00:54 2017 -0800"
      },
      "message": "audiopolicy: Refactor HwModuleCollection\n\n -- make AudioPolicyManager::mHwModules to only store\n    loaded modules; all modules stored in mHwModulesAll;\n    this removes lots of checks for HwModule::mHandle;\n\n -- use \"for range\" loops when iterating over mHwModules;\n\n -- use HwModulesCollection::getModuleFromName for finding\n    the remote submix module;\n\n -- log statements print HwModule\u0027s name instead of index.\n\nTest: audio still works\nChange-Id: I2d86caae23e87e25b6a367cb4042741f0b32e99c\n"
    },
    {
      "commit": "1ac4db1cbe8ce9da74a54cad95879499d536ffb4",
      "tree": "9ad8fbe7c8ec9ef6959d87db08868f4e13687a42",
      "parents": [
        "261be854cf49b978d5591d669e9d7943749c6028",
        "f05fc9061254a3329bf0a3b40e27cac87b51b4cc"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 04 20:35:30 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Dec 04 20:35:30 2017 +0000"
      },
      "message": "Merge \"audio policy: add open and active count for IO profiles\""
    },
    {
      "commit": "9db89dcf3660ceb942a056f6642936522862b8e8",
      "tree": "1e9ab7f4836f6b72f868cc0fd0a0127511b49e05",
      "parents": [
        "9410a2f434162790badead38fa5e65e697b1674e",
        "fe23112742eeb6199c3aa1f3dfcf800fc2aa0e26"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 04 19:12:44 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Dec 04 19:12:44 2017 +0000"
      },
      "message": "Merge \"audio policy: refactor output and input opening\""
    },
    {
      "commit": "f05fc9061254a3329bf0a3b40e27cac87b51b4cc",
      "tree": "aa6f6c000bc5dcf7264e76cc24a354265fd53970",
      "parents": [
        "fe23112742eeb6199c3aa1f3dfcf800fc2aa0e26"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 21 12:08:15 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 28 09:35:17 2017 -0800"
      },
      "message": "audio policy: add open and active count for IO profiles\n\nRemove the hardcoded limit of one open output stream per IO profile\nand add a max open count per IO profile.\nSame thing for maximum number of active input streams per IO profile.\n\nNow both the maximum number of opened streams and active streams for\na given profile is stored in that profile.\n\nFor now only defaults are set corresponding to legacy behavior,\nbut these values will be loaded form the audio policy configuration file.\n\nTest: AudioTrack and AudioRecord CTS tests\n\nChange-Id: I5ebcc7f8a06b3f0a52815d241c561bb65e036026\n"
    },
    {
      "commit": "dd60115699e42811289432dddfecaf4ab8d187fe",
      "tree": "2c2d43e715fe3f475dd8fd52b19c168bc0072d1d",
      "parents": [
        "cd742b9174eac9f8b6a108512818f2d3a2392ea8"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 27 14:53:37 2017 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 27 14:53:37 2017 -0800"
      },
      "message": "When surround setting is ALWAYS, report all surround formats.\n\nBug: 37960084\nTest: Manually test on fugu\nChange-Id: Ie8c7289c85fdc63216e637352ac0e2bbe1097a4a\n"
    },
    {
      "commit": "fe23112742eeb6199c3aa1f3dfcf800fc2aa0e26",
      "tree": "5297ab7f4a098bd8c0c0e89e27a54e9fd450ce5a",
      "parents": [
        "a221a7c81776add538e6cd82cddfa427364beb79"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 17 17:48:06 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 21 14:14:49 2017 -0800"
      },
      "message": "audio policy: refactor output and input opening\n\nRefactor the way input and output streams are open so that common\nlogic is centralized in AudioOutputDescriptor and AudioInputDescriptor\nclasses.\n\nThis is in preparation of adding reference counting for ouputs and inputs\nopened for a given profile.\n\nTest: Manual\nChange-Id: Id806e23077eb41f6398400ab40aeaa694c7d5603\n"
    },
    {
      "commit": "c990152585f6b654ffe7e1dbff483d4ecddc019b",
      "tree": "0e64a122e3f6e0188d49e6ec3be64f17a57fbc52",
      "parents": [
        "97e8b37f946c024d9cad312fd7f1a30f56cb3302"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Nov 10 20:07:54 2017 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Nov 13 14:37:58 2017 -0800"
      },
      "message": "Check for valid format before match in AudioPolicyManager::selectOutput\n\nTest: MediaPlayerTest#testConcurentPlayAudio\nBug: 69054370\nChange-Id: I11763187d4e7b69f8b242547d1e9e27afe6223be\n"
    },
    {
      "commit": "f4e63452b37c799c9387a6a88b46e6191f6a5f7e",
      "tree": "5c46fb22c92c574b84335fedca13f98e13434db8",
      "parents": [
        "e198f26cae6f0b5c67340935c291363fdfff87f1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 06 19:31:46 2017 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 06 19:31:46 2017 +0000"
      },
      "message": "Revert \"Revert \"audio policy: refactor getOutput() method\"\"\n\nThis reverts commit e198f26cae6f0b5c67340935c291363fdfff87f1.\n\nChange-Id: I65eb2905adb45c3809a499d85c1a8ef68cec7ed5\n"
    },
    {
      "commit": "e198f26cae6f0b5c67340935c291363fdfff87f1",
      "tree": "a08455486befa3d1ed0ebd6d3eb8257f51dcfb7d",
      "parents": [
        "e1dd2075105317ef8ff2b924423c88856e8fe8ea"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Nov 04 00:13:42 2017 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Nov 04 00:13:42 2017 +0000"
      },
      "message": "Revert \"audio policy: refactor getOutput() method\"\n\nThis reverts commit e1dd2075105317ef8ff2b924423c88856e8fe8ea.\n\nChange-Id: I4b7a2177af5bff5013ec4fe7fcdeb722f6b158c5\n"
    },
    {
      "commit": "e1dd2075105317ef8ff2b924423c88856e8fe8ea",
      "tree": "5c46fb22c92c574b84335fedca13f98e13434db8",
      "parents": [
        "9a60e1ad4762bd428ddc158e5a50641649698ec4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 03 09:26:21 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 03 09:26:21 2017 -0700"
      },
      "message": "audio policy: refactor getOutput() method\n\ngetOtuput() was long replaced by getOutputForAttr() for the purpose of\nquerying an appropriate HAL output stream for a given playback use case.\nIt is now only used internally by AudioSystem to find an existing output\ncorresponding to a given stream type in limited cases.\n\nThis CL simplifies getOutput() by removing unused arguments and just\nreturning an output from already opened outputs.\nThis is in preparation of limiting access to audio policy binder calls\nto what is strictly needed by apps.\n\nTest: test main playback, capture and call use cases.\nChange-Id: I137c5526aa7e82303b43948326c77ec798f432f5\n"
    },
    {
      "commit": "7c7124e693b20eafb4e0e86f996419c5597e0fbf",
      "tree": "6f6e1187fa69cd0eefed4a91a4deede6434ae699",
      "parents": [
        "c56f27b269800c1e8441908c3d564c63e0257f56"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 20 12:03:34 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 23 11:42:29 2017 -0700"
      },
      "message": "APM: Avoid route change mute of isolated sounds\n\nTest: Notification and touch sound\nBug: 65497566\nChange-Id: I1ebe375dcac908ef3b9de18010366a59d041fdb2\n"
    },
    {
      "commit": "92197f86b1184133107ee66314467f4676850ab8",
      "tree": "2e35076e4f171f06c8d3e441dd7b3784226f917f",
      "parents": [
        "5d81cf35fb108d6a2412f770087861ad4be5020c",
        "282ca695834f9cf9f63536cab2d6592b18fc011a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 18 22:47:16 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 18 22:47:16 2017 +0000"
      },
      "message": "Fix various AAudio device selection issues am: ad2e7b902c\nam: 282ca69583\n\nChange-Id: I051d56560608444c47b5a827ef921b878e8f4a4e\n"
    },
    {
      "commit": "ad2e7b902c0432a0db40906a4b1f5b693ce439dd",
      "tree": "c4830cedbf63c641325e082fd30484a3bff58e49",
      "parents": [
        "b92c988ffc48f093ab8615896b02b8c8e10e19b2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 14 20:06:42 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 18 12:58:30 2017 -0700"
      },
      "message": "Fix various AAudio device selection issues\n\nBug: 65292224\n- Audio policy manager should not use an unavailable device when an explicit\nroute is requested. This causes a device selection made by a client to\nbecome sticky after device disconnection.\n\nBug: 64945845\n- Remove spurious device change callback occuring after registering a\nnew client to audio server by creating a specific configuration event\nfor client registration.\n- Do not keep strong references to device callback interfaces in\nAudioTrack, AudioRecord and AudioSystem.\n- Do not update selected device in AudioTrack and AudioRecord when\nnot active as the new device selection on the stream is because of other\nclients activity which is not relevant to an inactive client.\n\nBug: 65693340\n- Fix missing increment of SessionRoute ref count in getInputForAttr() for\nMMAP inputs\n\nTest: AAudio CTS tests\n\nChange-Id: I2a01b02e8b064d352004f6065495fd99aee55745\n"
    },
    {
      "commit": "0888c8495f51b7e1314bd24f5d7da8e738818dc1",
      "tree": "fff9cf38a16ca93862620e7b202a0cdf08b5a40d",
      "parents": [
        "53d72d1fe9add369b0dd35886e305d5d4ca30201",
        "469b161303e53d98b957e66247d013cc249b5b0e"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Aug 31 19:40:36 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Aug 31 19:40:36 2017 +0000"
      },
      "message": "Merge \"APM: invert priority of sonification and enforced routing strategies\" into oc-mr1-dev am: 12907260c6\nam: 469b161303\n\nChange-Id: I6034bd3ba8b492bde1fcbb72ad5c153b8c06d635\n"
    },
    {
      "commit": "12907260c63d0d2a4710804a8c2d60417ea22b55",
      "tree": "d00765f3e89da673f6290bf59450b4921bba9e70",
      "parents": [
        "c4a226e8584b3d87c2503ddfcde336f63e7c6487",
        "178683baaf6fd23d80ce926cee103b3af8f9a9a8"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Aug 31 16:59:20 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 31 16:59:20 2017 +0000"
      },
      "message": "Merge \"APM: invert priority of sonification and enforced routing strategies\" into oc-mr1-dev"
    },
    {
      "commit": "53d72d1fe9add369b0dd35886e305d5d4ca30201",
      "tree": "4a64dbaec5fb9e272b32b675b85b050ac0962d33",
      "parents": [
        "3f644e74f0974bae8a95b5e3a7624f6ebebb197c",
        "c986721b98341536b8f5cfd6f6f16ee4139faa30"
      ],
      "author": {
        "name": "Shuhei Miyazaki",
        "email": "Shuhei.Miyazaki@sony.com",
        "time": "Thu Aug 31 05:08:41 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Aug 31 05:08:41 2017 +0000"
      },
      "message": "Merge \"Set output volume for routing device in startSource()\" into oc-mr1-dev am: c4a226e858\nam: c986721b98\n\nChange-Id: If40a0218b9d648cd5af71ef56b37661a4c4ec2b9\n"
    },
    {
      "commit": "178683baaf6fd23d80ce926cee103b3af8f9a9a8",
      "tree": "f2911079deed6c66d5d7b2f0445ffde014d4fafd",
      "parents": [
        "aba0e98b085cc613003bf42dbfe1ad0a3bb2348e"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Aug 30 18:07:06 2017 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Aug 30 18:23:14 2017 -0700"
      },
      "message": "APM: invert priority of sonification and enforced routing strategies\n\nOn device where the SONIFICATION (alarm, ringtone) strategy is\n  supported by SPEAKER_SAFE, prevent switching output devices\n  when the ENFORCED_AUDIBLE (shutter sound) strategy starts\n  by having SONIFICATION at a higher priority than\n  ENFORCED_AUDIBLE.\n\nTest: take photos while phone rings\nBug: 64386853\nChange-Id: I2f7bb45599bd51b2142611eefb84789a985e8841\n"
    },
    {
      "commit": "6fe70331b17a513765153afd7f895f807518bb91",
      "tree": "ac948ab97018c984ff14339584efb7282b6a5fbd",
      "parents": [
        "da071c34f3378a36d39ee0f89cdef4e1f98c3750"
      ],
      "author": {
        "name": "Shuhei Miyazaki",
        "email": "Shuhei.Miyazaki@sony.com",
        "time": "Mon Jul 31 15:21:28 2017 +0900"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 30 17:55:21 2017 -0700"
      },
      "message": "Set output volume for routing device in startSource()\n\ngetNewOutputDevice selects a device by checking active strategy when\nstartSouce() is called. This behavior sometimes leads to set\nunsupported device volume index. For example, BT A2DP resume from combo\noutput. a2dp output only supports A2DP sound devices. If sonification\nstream is played via A2DP and Speaker during music playback, volume\nindex for speaker is applied as music volume when resume playback until\nsonification stream is closed. At this time, A2DP device is selected as\nrouting device, so volume and routed device does not match.\nTo avoid this situation, setting volume index from supported device\nin startSource().\n\nBug: 64053820\nTest: Check volume after alarm sound finish during music playback via BT.\nChange-Id: I71dae2c77d82abc0227ec45fc6c40bfd8f51c8c2\n"
    },
    {
      "commit": "faa10a64016300504691653f4beb451cb66ec197",
      "tree": "34cc0270e00b49fff76021e45874a89dd8d539f6",
      "parents": [
        "032d22e18a59941c9a03802a126a9577ab5d193b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 25 15:52:05 2017 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 28 14:50:58 2017 -0700"
      },
      "message": "Fix policy log typos\n\nTest: logs have space between values\nChange-Id: I9398d52db7e807e7d47254aacd6aaea33006070d\n"
    },
    {
      "commit": "3dff3e5a29391e7e4cee251dbc4a01c0b48a8a8f",
      "tree": "c82b02b0837272b7d6b64bf22dae9be9fd849bdf",
      "parents": [
        "a5ec8b0ec9c94fd9474fae1d1d1dc798ae6c4d2d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Aug 16 12:42:01 2017 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Aug 16 12:42:01 2017 -0700"
      },
      "message": "audiopolicy: Remove AUDIO_POLICY_TEST code\n\nThis code isn\u0027t used, should be removed.\n\nBug: 63715585\nChange-Id: Ie19e31d790fff08f3a99e4e3f2a8c8dacb840e07\nTest: make\n"
    },
    {
      "commit": "719a987e9d8cb54bc7da74941a8bfacbc844900d",
      "tree": "4632b96c5136184ffb14b243fbb44d713ca4a98a",
      "parents": [
        "ddef08e7254cd593881711b9f812e062676b4b3d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Sat Aug 05 13:51:35 2017 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Aug 07 12:25:57 2017 -0700"
      },
      "message": "APM: cap earpiece voice in call by voice volume\n\nThe volume curves between AUDIO_STREAM_VOICE_CALL and other streams\n  used during a call on AUDIO_DEVICE_OUT_EARPIECE can vary greatly,\n  particularly when the volume curve is used to tune the voice signal\n  going to earpiece, not just to select a desired curve shape.\nThis can be problematic during a call as a sound playing on a different\n  stream may be assigned a much louder attenuation value than that\n  of voice.\nThe fix consists in comparing the attenuation computed for earpiece\n  to the one for VOICE_CALL, and using the lowest value (with a 3dB\n  headroom).\n\nTest: see bug\nBug: 63395386\nBug: 63976807\nBug: 38194285\n\nChange-Id: Ia55e05e2a1d6fc55d45147f4234b693a905714cc\n"
    },
    {
      "commit": "72ad4b91d6ece44b7967080c44695227c6789147",
      "tree": "9024805bd48a40a394aaca464ba4ec16b1efc738",
      "parents": [
        "db5beef4cf663e01dcdd65e953dc136b06ac81f4"
      ],
      "author": {
        "name": "David Lin",
        "email": "dtwlin@google.com",
        "time": "Tue Jul 25 23:46:47 2017 -0700"
      },
      "committer": {
        "name": "David Lin",
        "email": "dtwlin@google.com",
        "time": "Tue Jul 25 23:46:47 2017 -0700"
      },
      "message": "audiopolicy: do not check for mode_in_communication for voip flags\n\nSome VoIP clients may choose to open the streams as soon as the phone\nstate is set to MODE_RINGTONE to allow lower start latency when the call\nis connected. This patch removes the unnecessary check conditions for\nMODE_IN_COMMUNICATION since the stream type is sufficient indicator for\nsetting the flags for VoIP calls.\n\nBug: 62782025\nTest: manual voip mo and mt calls tests\nChange-Id: Idc7e1b6f33921580c0937dee71b2b2105cbd31eb\nSigned-off-by: David Lin \u003cdtwlin@google.com\u003e\n"
    },
    {
      "commit": "cb4dae216758d9e9a28050f65097f1ce905c03e9",
      "tree": "4c3c49679384d70006675e9e06c7e8e8117e206c",
      "parents": [
        "0acb3209107802e2ab116f8374aab886579729bb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Jul 01 19:39:32 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 12 12:17:33 2017 -0700"
      },
      "message": "aaudio: indicate client UID and PID to audio flinger\n\nImplement correct indication of client UID and PID to audio flinger\nfor AAudio MMAP streams in both exclusive mode and shared mode.\n- Add start/stop client methods on MMAP streams used only when the MMAP\nstream is in AAudio service and carries a mix of shared streams.\n- Add \"In Service\u0027\" indication from \"client\" side to AAudioServiceStreamMMAP\nso that the behavior can be adapted accordingly.\n- Modify logic on audio flinger side with regard to mmap tracks and\naudio HAL stream activity:\n  - use same audio session for all clients on a same stream to match\n  audio policy logic to share same direct output stream for clients on same\n  session. This is also more consistent with current volume and effect\n  handling as all MMAP  clients sharing the same output stream have the\n  same volume and use case.\n  - start/stop the HAL when the stream is started/stopped with the initial client\n  handle (returned when the stream is opened) but do not create a track.\n  AAudioService implementation will always send an additional start command before\n  first client starts and a stop command after last client stops,\n  in both shared and exclusive mode.\n  - start/stop a track only if the start/stop stream command is received\n  with a handle different from the initial handle.\n- Allow more than one active client from the same UID on a MMAP input in audio policy.\n\nBug: 62950008\nTest: verify playback and capture in mmap mode\nMerged-In: I86151bbb637ff172d2fd5f813056eab13a7bcd3c\nChange-Id: I86151bbb637ff172d2fd5f813056eab13a7bcd3c\n"
    },
    {
      "commit": "83efe1c6bd6fa206560377960358ec95aa6a1c41",
      "tree": "5dd69d5f069370fffc9ae73660f9c8641017b636",
      "parents": [
        "15fb0ee6bd752ccde960b961dd1e9113c37e5f8b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 09 16:51:08 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 09 16:51:08 2017 -0700"
      },
      "message": "audio policy: fix audio device properties loading\n\nOnly load removable digital device properties from streams\nwith dynamic profiles. This avoids aggregating properties from\nother stream profiles when the device can also be reached via those\nprofiles.\n\nBug: 38423100\nTest: connect various USB devices and check properties are loaded\nproperly.\n\nChange-Id: Ie5eed397d3a475848a3d423d18ffae9d55917ac4\n"
    },
    {
      "commit": "81ccb8fec9eab4a05e94fc4a4f6dacc8348804e1",
      "tree": "9b60e65102b42e1056a62d842a52327a5a18fa25",
      "parents": [
        "5f1b1e7c18583905ce2348b64dbb7fee9ca01824",
        "2b8646482dc74cf1afef50a812691600aa229090"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jun 29 03:03:44 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 29 03:03:44 2017 +0000"
      },
      "message": "Merge \"prevent preempting overlapping sound trigger audio streams\" into oc-dr1-dev"
    },
    {
      "commit": "2b8646482dc74cf1afef50a812691600aa229090",
      "tree": "6cb571d5fa9e5b1e8620b06ae1b91d586b99423b",
      "parents": [
        "66feec9ff333bbf0b2590f1b321fbf880e1405a4"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Tue Jun 27 21:26:07 2017 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Wed Jun 28 13:34:47 2017 -0700"
      },
      "message": "prevent preempting overlapping sound trigger audio streams\n\nIf the sound trigger hal indicates that concurrent_capture is true, the\nstream should not be preempted when when another sound trigger stream is\nopened.\n\nTest: Verify that multiple streams are not closed when triggered by\ndifferent engines.\nBug: 35956563\n\nChange-Id: I3d5df136403e47fcc1280f63b25216f326b74d6f\n"
    },
    {
      "commit": "b7fdce6e1654e573c25ec19fa6dfeb79dc4e6597",
      "tree": "aa0e6704fa21540f3e1d359c41583f2e30074a1b",
      "parents": [
        "66feec9ff333bbf0b2590f1b321fbf880e1405a4"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jun 27 19:38:42 2017 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jun 27 19:38:42 2017 -0700"
      },
      "message": "Audio policy: fix volume change on DEVICE_OUT_SPEAKER_SAFE\n\nWhen changing stream volume, compare given device and current device\n  for stream both as filtered through Volume::getDeviceForVolume.\nThis behavior matters for Android devices playing notifications and\n  ringtones on the AUDIO_DEVICE_OUT_SPEAKER_SAFE, which is filtered\n  out for volumes (see Volume.h for getDeviceForVolume() method).\n\nTest: play a ringtone and modify volume with vol keys\nBug: 63004956\nChange-Id: I139099f34e0ab091fd0ea761c75949656549f77a\n"
    },
    {
      "commit": "66feec9ff333bbf0b2590f1b321fbf880e1405a4",
      "tree": "ebb1043a6aaf48ac109eb7022a999ae4bc31f0cc",
      "parents": [
        "d4ef5f1eafa099eb40e68a1dfc7b701e4a8d0b1a",
        "2ac7694396640821f6723672e25b2372220bf060"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 27 01:18:39 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 27 01:18:41 2017 +0000"
      },
      "message": "Merge \"Set initial audio device for AudioTrack and AudioRecord\" into oc-dr1-dev"
    },
    {
      "commit": "2ac7694396640821f6723672e25b2372220bf060",
      "tree": "0cd5a8c58898fcb145f4b879ea64aeb260266ce2",
      "parents": [
        "ffd80b92df8521dd28ab5fd08b1098a58cb280e8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 22 17:17:09 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 26 16:29:08 2017 +0000"
      },
      "message": "Set initial audio device for AudioTrack and AudioRecord\n\nBug: 62090113\nTest: run AAudio test and verify a valid device is reported just\nafter opening playback or capture streams in legacy mode.\n\nMerged-In: Ic8be42e1735690eb00c811ef0cb8b5abb36172d6\n\nChange-Id: Ic8be42e1735690eb00c811ef0cb8b5abb36172d6\n"
    },
    {
      "commit": "851d3ff273dcab849a617586c50a2e1392edefed",
      "tree": "13712e14c4f0b3965d91070c9e6d167574b6865f",
      "parents": [
        "5dd96d24e898701f6a37e0b49ef105d2bd637133"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Mon Jun 19 20:01:57 2017 -0700"
      },
      "committer": {
        "name": "David Lin",
        "email": "dtwlin@google.com",
        "time": "Tue Jun 20 11:44:17 2017 -0700"
      },
      "message": "APM: Allow VOIP_TX input selection\n\nSet flag to select VOIP_TX input profile if input source\nis VOICE_COMMUNICATION and phone state is MODE_IN_COMMUNICATION\n\nBug: 62495679\nTest: Hangout call\nChange-Id: I3b1bb9fbcdd5687ebb002facf0684983333e9a53\n"
    },
    {
      "commit": "ac9cef5f3288df6e65cb4488e2615cc3c07b70d0",
      "tree": "3369bd965510d5c3e8ea6257bb1368a677e535c6",
      "parents": [
        "3c1ba2cd6276ee4304ba082fbe40fd870c1746c8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 09 15:46:26 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 15 10:42:59 2017 -0700"
      },
      "message": "audio policy: add method to query dB attenuation for a certain volume and device\n\nBug: 62492975\nTest: Check dB value returned to AudioService when stream volume is\nchanged\n\nChange-Id: I8d0a945e9151d230b93634e4b9e57bab68f44fa8\n"
    },
    {
      "commit": "e0d4f6479b411fd89284d437ad46d96e3046cd55",
      "tree": "1e040c01b6189f10192801cfa4c72ff5070b3a7f",
      "parents": [
        "579b69e88270bcd3d7b128edb1c75b94722425b0",
        "6e8a79b46a590c564aac6713090144ee61f27f37"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 19 20:21:30 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 19 20:21:30 2017 +0000"
      },
      "message": "Merge \"audio policy manager: do not reapply same forced usage\" into oc-dev am: 6aa929c929\nam: 6e8a79b46a\n\nChange-Id: If8531ecf1314ab5a8df5818f23537f370614fb77\n"
    },
    {
      "commit": "6aa929c9296180abac526f594137f18c38620c62",
      "tree": "c88153335c7554d23aaf8979479dc541d41796a6",
      "parents": [
        "9d4d8f81f01c5dcc8cfdd667136ead8056180afc",
        "8dc87a60e69f462e0382d025c335e45699025b48"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri May 19 20:13:19 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 19 20:13:20 2017 +0000"
      },
      "message": "Merge \"audio policy manager: do not reapply same forced usage\" into oc-dev"
    },
    {
      "commit": "17037f9916134959ab6d5aa150389ac7e961f0f0",
      "tree": "109340c83e59f31f85d1ccbe4c9a7aaf739408d9",
      "parents": [
        "b5768ba3268deb18d291a1743d1580449b463e69",
        "be08ba90dfb26f7b7425d19a5db90c09756e7d17"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu May 18 21:50:41 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 18 21:50:41 2017 +0000"
      },
      "message": "Merge \"audiopolicy: Two session can not offload concurrently\" into oc-dev am: 46260c3742\nam: be08ba90df\n\nChange-Id: I9d36d30d9310e94d6c452d11f03d4cc6525e67f4\n"
    },
    {
      "commit": "8dc87a60e69f462e0382d025c335e45699025b48",
      "tree": "55e44b41c7092969c031dc32c189a0b232625595",
      "parents": [
        "38ad5e22885a4b02d0429ecb4c1b4446373a3551"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 16 19:00:40 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 17 14:38:47 2017 -0700"
      },
      "message": "audio policy manager: do not reapply same forced usage\n\nSkip systematic audio path and volume reevaluation when the new\nforced configuration for the selected usage is the same as current one.\n\nBug: 38276985\nTest: try repro steps in b/38276985. Check regressions with audio routing for music\nand calls over speaker, headset and Bluetooth\n\nTest: connect BT A2DP and launch CNN\nChange-Id: Id43a5270c666065e099d02d9e52de86b20cb8039\n"
    },
    {
      "commit": "84c621e937c82c25b5b6d633edee17616e08a61a",
      "tree": "2389cd0dcbc2d379d1ff5088ccb8d8ca9297c994",
      "parents": [
        "64892d86d0ceba1042e48fc276f4988a2857fd1e"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Tue Apr 25 11:41:50 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 12 18:36:47 2017 -0700"
      },
      "message": "APM: Check dedicated VOIP downlink profile\n\nCheck and select a dedicated VOIP downlink profile if available.\n\nTest: verify Hangouts call audio\n\nChange-Id: I7ef32a0e159f42c20ce5fb8ccc3548f3856a15cb\n"
    },
    {
      "commit": "169753cd5f71ba92560e993bb7cb461d2f094272",
      "tree": "7414ab09392201eb08c3ef966d40f2f88abd518f",
      "parents": [
        "9ec59fc5d016a609adffdb7e68236b9d5d05254d"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Mar 06 14:18:23 2017 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri May 12 16:39:22 2017 -0700"
      },
      "message": "audiopolicy: Two session can not offload concurrently\n\nPreviously the patch I98a8913d6faf5092a1e43a0bdd0f1ce1482221a9\nforbade two tracks from different application to be offloaded\nconcurrently.\n\nConcurrent offload is only needed for back to back playback...\nDetect this use case by checking the session id instead of the\nPID.\n\nTest: call \u0026 play music \u0026 assistant\nTest: run new CTS testConcurentPlayAudio\nBug: 35841692\nChange-Id: I2c09c54adedf12644205bef115f1a2e16b05de91\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "e301410b8495a3702e21019e92d44ade2a3f81d1",
      "tree": "bf4d84a4c9555c50b5ccafb4472c79d34f2972b7",
      "parents": [
        "9694ba347ac5e324ebc26c6130eb5954728b5115"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 03 11:15:43 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 03 12:59:13 2017 -0700"
      },
      "message": "audio policy: always provide a valid device address when opening a stream\n\nTreble audio HAL mandates that a valid device address is passed when\nopening an output or input stream and teh device type requires and\naddress.\n\nBug: 37905534\nTest: USB capture at various sampling rates. Audio playback and capture regression\nChange-Id: I12f2128120b1bbe8530e8c2428e3e2cba1ba1535\n"
    },
    {
      "commit": "5c1b4f3a1d42f1a9eeecb20881c28d48edec4f90",
      "tree": "d644e90ff0b93097fec02e4a8adaebe01baa83b6",
      "parents": [
        "f9abbf268759a84d24ffaecb860a63a73fec177e",
        "74708e7c4622d65a7798d5fa9347c55583d347fe"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 18 23:00:34 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 18 23:00:39 2017 +0000"
      },
      "message": "Merge \"audio policy: disable concurrent capture\" into oc-dev"
    },
    {
      "commit": "36829f97c0c547d9c6c918e248071cc616818616",
      "tree": "773244e0ca4c9f4d5cd4b63286deadd4e386204e",
      "parents": [
        "d9534fb35245b8bcd2489e717bdd1ad9269b3000"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 07 19:04:42 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 13 10:50:49 2017 -0700"
      },
      "message": "audio policy: fix global effect attachment\n\nFix logic for global music effects (e.g Visualizer) attachement to\noutput streams.\n- Consider only outputs with active music sessions first and then all\noutputs\n- Reevaluate effect attachment systematically on music playback start/stop\nand when outputs are opened/closed\n- Use the same logic every where.\n\nBug: 33397379\nTest: CTS: AudioEffectTest, VisualizerTest, EqualizerTest, BassBoostTest\n      Manual test with music playback with and without Effects in\n      offload and non offload mode on speaker, headset, BT A2DP.\n\nChange-Id: Iabc23bc8a24f36b68942b7f32749c535781497b4\n"
    },
    {
      "commit": "74708e7c4622d65a7798d5fa9347c55583d347fe",
      "tree": "6f8d2b0a75fc2467d7790e48e23c6d67c0e68723",
      "parents": [
        "d9534fb35245b8bcd2489e717bdd1ad9269b3000"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 07 17:13:42 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 12 18:17:22 2017 -0700"
      },
      "message": "audio policy: disable concurrent capture\n\nDisable concurrent capture until the corresponding UI is available.\nRestore preemption for HOTWORD audio source.\n\nBug:36891272\nTest: capture regression tests, run CTS AudioRecordTest, run GTS SearchHostTest\nChange-Id: I1b6c32c2a76ae0e004e14e46fedd596a8844c0d4\n"
    },
    {
      "commit": "904d632a24db8f94de83e44f7179d1c0af022b03",
      "tree": "e86d16495e3fe207153c0f2bcadcb00d14d76aec",
      "parents": [
        "93e29c0846e0f7583ae96edafbf5e8a3169711ee"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 17 17:20:47 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 22 14:40:29 2017 -0700"
      },
      "message": "Add support for USB headset device\n\nAdd missing rules for USB headset devices in routing, volume and effects\nmanagement.\n\nTest: playback and catpure regression tests.\nChange-Id: I42cd157f483deba2371a05d332cd11dceb2b2fa3\n"
    },
    {
      "commit": "05d19b08f3affa6fa8407e779f67e7ad1c1ca84f",
      "tree": "d2c99a03302a60a9ab3db1a9f5cc90640686009a",
      "parents": [
        "4ec4e6b1073b0dc1b608aeeaf4e3129ea1a725c8"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 28 16:28:19 2017 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 03 12:37:45 2017 -0800"
      },
      "message": "fallout of cleaning-up libutils includes\n\nTest: run \u0026 compile\nBug: n/a\nChange-Id: I63585ed5a764b9ce7af2187b79ca0c83e683fd7f"
    },
    {
      "commit": "0d4a6aff271586161a1fcd273572a00d2e01fe80",
      "tree": "d23995746d96791a28f00ee833c54c05b000acc7",
      "parents": [
        "67a155a2ee89e7fed3eb079cc7af929c74a21f7a"
      ],
      "author": {
        "name": "Jaekyun Seok",
        "email": "jaekyun@google.com",
        "time": "Fri Feb 17 17:10:17 2017 +0900"
      },
      "committer": {
        "name": "Jaekyun Seok",
        "email": "jaekyun@google.com",
        "time": "Sat Feb 18 05:25:19 2017 +0900"
      },
      "message": "Treblize audio policy xml config file location\n\nTreblization requires to locate partner-specific configs in its own\npartition. So the audio policy xml config file could be located in\n/odm/etc or /vendor/etc.\nThis CL is to support those locations for the config.\n\nTest: building succeeded and tested on sailfish.\nBug: 35369237\nChange-Id: Ie59db630456f7690bbeca08017bea8b174651394\n"
    },
    {
      "commit": "555530ab903504ad3586bc24cd8a4f200f5c39ae",
      "tree": "1c7904daf0e13a86bb225d2e52f791ef84ec85a5",
      "parents": [
        "c96fc852f010f9254a38a0073a4de7a848e33e44"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 07 18:17:24 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 09 21:09:55 2017 -0800"
      },
      "message": "audio: several concurrent capture fixes\n\nMake sure AudioRecord clients are invalidated synchronously\nwhen closing an input stream instead of when the capture thread\nexits.\n\nFix AudioPolicyManager::getInputForDevice() logic to make sure that\nnot only the first opened input encountered is considered when looking\nfor a compatible input to reuse for concurrent capture.\n\nBug: 22702906\nTest: run CTS test\nChange-Id: I7f69609d4ee70a37ab06753ff970b12df17d885b\n"
    },
    {
      "commit": "551061ab211e1da0f060d7c895617814618da5c2",
      "tree": "f8010b47611e50cf67eada7498a66cdee1259579",
      "parents": [
        "e2ce9366d1b138326035c643b7fec68cd2dc83c5"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Feb 06 15:59:29 2017 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Feb 09 10:29:05 2017 -0800"
      },
      "message": "audiopolicy: Two clients can not offload concurrently\n\nIf two application are playing a compatible offload stream at the same\ntime.\nEg: two games playing MP3. At least one not taking the audio\nfocus.\n\nThe audio policy was offloading both stream resulting in audio glitches\nand one stream being dropped.\n\nConcurrent offload streams is intended to be a transitioning state when\nan application wants back to back playbacks.\n\nIt should not be allowed for two different applications to stream at the\nsame time.\n\nTest: Play mp3 while mp3 is already offloaded.\nBug: 34012147\n\nChange-Id: I98a8913d6faf5092a1e43a0bdd0f1ce1482221a9\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "587b8dfdbc3d3b1dd9ffc1996b9a07cd9b284833",
      "tree": "414969fe779bf8825008188620e3ba4bb6eea8d7",
      "parents": [
        "a1ee4c28facd2e4ae0eb288178c8988bf1806148"
      ],
      "author": {
        "name": "vivek mehta",
        "email": "mvivek@codeaurora.org",
        "time": "Tue Jan 31 14:58:44 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 31 16:39:55 2017 -0800"
      },
      "message": "audio: fix audioSession null check\n\nTest: make\n\nChange-Id: Ied514f8fb7496143bad45504151ca16226c67767\n"
    },
    {
      "commit": "bb9480975322b0d1a09f76ef14f3285fc8af4e5f",
      "tree": "a32cac19e5e2f47e9808de74a00887e8e3d3c695",
      "parents": [
        "b9c28c72b91e464aa1155e972f74af14312191a8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 23 18:33:30 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 25 18:34:46 2017 -0800"
      },
      "message": "audio: enable concurrent capture for voice recognition\n\nAdd AUDIO_SOURCE_VOICE_RECOGNITION to the list of use\ncases allowed for concurrent capture. As AUDIO_SOURCE_HOTWORD is\nenabled for concurrent capture it makes sense to enable a client\nto transition to voice recognition after the hotword has been detected\nin a concurrent capture situation.\n\nAlso fixed some concurrent capture scenarii\n\nBug: 22702906\nTest: build and check \"OK Google\" detection\nChange-Id: Ic6dd41372fe74122395764beca7ca9a65197464b\n"
    },
    {
      "commit": "44344b05261cb9ad46a43e635f637b89aecc7afe",
      "tree": "f088a40f3512f177136b78f02e091d42db7d0934",
      "parents": [
        "38267b773f2cdec4d684b12fde73179bcc66e0c7"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Dec 13 11:21:02 2016 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jan 12 13:19:26 2017 -0800"
      },
      "message": "audio policy: allows dumping Audio Policy Mix\n\nThis patch adds the dump of AudioPolicyMix if registered.\nIt also adds the required conversion map to human readable strings\nof the types involved in Mixes.\n\nAdapted for the development branch from the AOSP patch:\nhttps://android-review.googlesource.com/#/c/309127/\n\nChange-Id: I91cf7afe6de5ff837970d9063ca437d4f6201e89\nTest: build, dumpsys media.audio_policy\n"
    },
    {
      "commit": "d7c5ec857930496bb8a1045dc8b87b2fdd99899c",
      "tree": "1febd0054f7833de4bfd877faea92b6c66a3d89a",
      "parents": [
        "67d0d7eb36e7c36d0a9dec9264c0cab832196d57",
        "4b058e7e5d58fb1bc6ba82eba94f7664e5b85706"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Jan 11 19:30:56 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jan 11 19:30:56 2017 +0000"
      },
      "message": "Merge \"Add missing nullptr checks for data.readCString() strings\" am: ce961d374f am: 238c48e42e am: 877f779979\nam: 4b058e7e5d\n\nChange-Id: Idc3298b161380e9ace8b7fcceb4339b0805a3123\n"
    },
    {
      "commit": "877f77997987212ae0fbfecb24b35c03a0573006",
      "tree": "784bda81ca3055da5341cb11f86e0e0fddc06d90",
      "parents": [
        "7ceeb44566c54be121136a456142143e6bc4c4ac",
        "238c48e42e9e4daafc4cde73bc5c1856e7c10614"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Jan 11 19:20:24 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jan 11 19:20:24 2017 +0000"
      },
      "message": "Merge \"Add missing nullptr checks for data.readCString() strings\" am: ce961d374f\nam: 238c48e42e\n\nChange-Id: I2e9cb8ec6752506cc5445aee3d38ae92e4f5e514\n"
    },
    {
      "commit": "c694ff449bef4ca1e45a6506f34e66c613757311",
      "tree": "36f66657e3389dbb6b30b7e122ff415f9ce5f40c",
      "parents": [
        "20adbc00032d6df980a3300f1ae974610f16f81f"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Mon Jan 09 23:27:29 2017 -0800"
      },
      "committer": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Jan 11 16:51:37 2017 +0000"
      },
      "message": "Add missing nullptr checks for data.readCString() strings\n\nProtect the Audio Policy Manager by adding extra checks\nfor data.readCString() strings when parsing / decoding\na Binder transaction.\n\nAlso:\n * Moved audio_is_output_device() / audio_is_input_device() checks\n   inside handleDeviceConfigChange()\n   from the AudioPolicyInterface to the AudioPolicyManager\n * Removed similar redundant checks inside\n    AudioPolicyService::setDeviceConnectionState()\n\nTest: code compilation\nChange-Id: Ib32a28ba2669b73aaf32b31bb18f41c8dd7d2605\n"
    },
    {
      "commit": "36867767ba86244b0d942255b9d241b092151309",
      "tree": "1fa1b0a4cf8fe6b7f780bb8950f6ad659ae7a5d5",
      "parents": [
        "af86dcee9d97e02e9069548684ef8c9db5190ff9"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Dec 29 12:03:28 2016 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Dec 29 12:35:25 2016 -0800"
      },
      "message": "USAGE_ASSISTANT/ACCESSIBILITY in audio policy manager\n\nAdd support for USAGE_ASSISTANT.\nFix stream type for USAGE_ACCESSIBILITY.\n\nTest: enable Talkback, check volume; make\nBug: 30947943\n\nChange-Id: Ie35adf0115dce1fac6d3deddc1e57e36b36913f6\n"
    },
    {
      "commit": "5fd7ccaeba88da7e170f067bfd754b3f64ff5566",
      "tree": "5e2a0f1495c8ea9a68598cea2028e3c092049e3a",
      "parents": [
        "0ce91633d8a4f5dcb3706a7734c02ddb5099eefd",
        "c6fe843463abc965f3082738c8812506cf5ba232"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Thu Dec 29 00:25:36 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Dec 29 00:25:36 2016 +0000"
      },
      "message": "Merge \"Add a mechanism for handling audio device configuration change\" am: 549e431947 am: a1b496ac35 am: fcc1132010\nam: c6fe843463\n\nChange-Id: I7812e3e4426e526b886c1a414ac8ddec7649291e\n"
    },
    {
      "commit": "fcc113201018703727a0d6b17dd165efce00db1a",
      "tree": "70eca9738ea18322a92ebc4bb94a0894e1735034",
      "parents": [
        "1121dfb5f30a04393ddce02fe7808589fa9e3e25",
        "a1b496ac35a8bbdcae6b0315e91a5cf52b2af00d"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Thu Dec 29 00:12:05 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Dec 29 00:12:05 2016 +0000"
      },
      "message": "Merge \"Add a mechanism for handling audio device configuration change\" am: 549e431947\nam: a1b496ac35\n\nChange-Id: Ie8871fad611dc16d7cd08a85e4cd748cf3c4650d\n"
    },
    {
      "commit": "f862bc6a7a35054e38cb50fa16ae7a07f683ee01",
      "tree": "12f33970e876ba71df008d7e38a58984c5b357b5",
      "parents": [
        "a05da2eea41306d526ce645ea44aa2e05054f651"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Mon Dec 26 18:57:22 2016 -0800"
      },
      "committer": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Dec 28 14:35:01 2016 -0800"
      },
      "message": "Add a mechanism for handling audio device configuration change\n\n* Added new call handleDeviceConfigChange() to the Media Framework.\n  That call can be used when there are device configuration changes\n  (e.g., Bluetooth A2DP codec configuration has changed).\n* Added new method AudioPolicyManager::handleDeviceConfigChange().\n  That method toggles the UNAVAILABLE/AVAILABLE connection state of the\n  device, so it can be reconfigured as appropriate - e.g., the audio\n  feeding parameters can be updated.\n* Fix ALOGVV compilation errors when extra logging is enabled.\n\nTest: A2DP streaming to headsets\nBug: 30958229\nChange-Id: I388abbbb3ec4d1a003b441cb0c77e00d80cad668\n"
    },
    {
      "commit": "6a308b02f138e358fb239ee2df5d54dd988f34fd",
      "tree": "730e19d7ae133e2086c37dcec42d0b88e77ba01b",
      "parents": [
        "0a2ea58394190408a3d532bfcc242ba64ca71538",
        "20b9ef0b55c9150ae11057ab997ae61be2d496ef"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 16 17:12:23 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 17:12:23 2016 +0000"
      },
      "message": "Merge \"Add unique audio port IDs to AudioTrack and AudioRecord\""
    },
    {
      "commit": "cc3237a31b293905423c7d71f5a3e8ea130e1a88",
      "tree": "024bfcdf659aa4c8dc8332a0b65def837653bb5d",
      "parents": [
        "8af5545d28f21ceeadd21113fe5b835c268ee49c",
        "f476960a2886e2a1c2a743aa235c868f01584f4d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Dec 14 20:46:53 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Dec 14 20:46:53 2016 +0000"
      },
      "message": "APM::updateCallRouting: ignore for stub output hal am: a76c7de622 am: 116160d668\nam: f476960a28\n\nChange-Id: Iaa58887ee83e5cb611d26bf61cadafb058245b03\n"
    },
    {
      "commit": "116160d6680a0eabeea6510463c863f9afbe2956",
      "tree": "cd06c867e8c3af531147739cf696933ee174c4bf",
      "parents": [
        "cffbc7d055bf70b233c042920aec9947f5d5cd24",
        "a76c7de622e6e29f8559921d8d2e9ef93eb37d1f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Dec 14 20:34:22 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Dec 14 20:34:22 2016 +0000"
      },
      "message": "APM::updateCallRouting: ignore for stub output hal\nam: a76c7de622\n\nChange-Id: Iee1637bcb01cd41daa70162684212c9eaf085763\n"
    },
    {
      "commit": "a76c7de622e6e29f8559921d8d2e9ef93eb37d1f",
      "tree": "11abc87a6a2041dba73ddc414c5317f908ed5248",
      "parents": [
        "a2e95f5c9b1613cce1d2bf0f0e35b0addd137906"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Dec 13 19:14:31 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Dec 14 11:18:28 2016 -0800"
      },
      "message": "APM::updateCallRouting: ignore for stub output hal\n\nBug: 33463233\nChange-Id: I9b6708bef087e3f4a97868b2d8f7a9b1558233d0\n"
    },
    {
      "commit": "20b9ef0b55c9150ae11057ab997ae61be2d496ef",
      "tree": "21bd57d748dd47600b1e62bfb18d4acb08e15438",
      "parents": [
        "8526d86ab12284135ed4ca27aeb816371c10c0e6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 05 11:03:16 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 12 12:29:41 2016 -0800"
      },
      "message": "Add unique audio port IDs to AudioTrack and AudioRecord\n\nThis will allow to track activity at the track level instead of\nat audio session level as only possible with current implementation.\n\nAudioTracks and AudioRecords will receive a unique audio port ID the\nfirst time they register to audio policy with\ngetOutputForAttr()/getInputForAttr() and keep this ID for their\nlifetime.\n\nThis CL is the first partial change and just updates the\naudio policy and audio flinger APIs used at track creation time.\n\nTest: basic regression test of audio playback and capture use cases\n\nChange-Id: I8d612e67738e120494f61e3f7c60bfd0b2c6a329\n"
    },
    {
      "commit": "99bb2f9afd956174785051827aa96d008b33faee",
      "tree": "f7e193c81b9a410b65b030760b20dbbf122ce58f",
      "parents": [
        "7fd5bdb5fa9db81f0293793b7b6d45dd833d05b2"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Nov 23 15:52:07 2016 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Nov 23 15:52:07 2016 -0800"
      },
      "message": "Do not hardcode media - a11y stream aliasing\n\nMedia and accessibility volume aliasing is now modal, and\n  now handled in AudioService.\n\nTest: see bug\nBug: 30448020\nChange-Id: Ie4e1775163fb65da2c0ed766b477cd9fc1c919d1\n"
    },
    {
      "commit": "05b345e504a0affd24eefa12686812c554b294ff",
      "tree": "a83b3f6cdd2f56fd9d3564c811923a0ea427345c",
      "parents": [
        "6507185f5c59d39deeda6598ce50ee4900723501"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 18 12:36:27 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 18 12:44:27 2016 -0800"
      },
      "message": "audio policy: fix sound trigger capture disabling in startInput()\n\nFix test on number of active sessions in startInput()\ndeciding of overall capture state indication to sound trigger service.\nAs session active count is incremented before the test, the count indicating\nthe first active session is 1 and not 0.\n\nBug: 3289438\nTest: verify OK google detection on Angler\n\nChange-Id: I0a6c5d6240942e978fefffb536577b9d7dc29961\n"
    },
    {
      "commit": "bf2e61f54c7dcc37c97b4908c9ed6871cf3d2b49",
      "tree": "c7630795f1623d784fb17e1e129fdd93bdabea6e",
      "parents": [
        "1e4d737fcd3129f3b3cf29499f344b42219c6bc7",
        "559d439c6fe8679e3c52f1cf265d46d7d2e65b68"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 24 16:52:08 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 24 16:52:08 2016 +0000"
      },
      "message": "Merge \"Use audio_patch_handle_t in startAudioSource() and stopAudioSource()\""
    },
    {
      "commit": "559d439c6fe8679e3c52f1cf265d46d7d2e65b68",
      "tree": "9e23625c0b55e45e79842d6605e027dba01f0fe0",
      "parents": [
        "bd0f59e493dbd67d1871b243ddad9cce3b50d7ce"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 29 13:42:57 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 19 18:19:29 2016 +0000"
      },
      "message": "Use audio_patch_handle_t in startAudioSource() and stopAudioSource()\n\nBug: 27903060\nChange-Id: Iafc2095f484b74978c6f080c54f548e293bf945e\n"
    },
    {
      "commit": "9ee0540d3a61bff03d561ca431a371c3d9335d2b",
      "tree": "1bf7817725f35ec9c0755e819cb5f58fdf0bf487",
      "parents": [
        "e7e8d636b486cf49487db1d8da5e8e7cb15d9549"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 13 15:58:17 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Oct 19 09:46:33 2016 -0700"
      },
      "message": "Remove last references to hardware/audio.h\n\nDeviceHalInterface transitioned to \"capabilities\" model\n(similar to the one already used by streams, e.g. \u0027supportsDrain\u0027).\nNo direct checking of the HAL version is needed.\n\nAudioPolicy uses its own version read from the configuration,\nand these values never checked against the actual HAL version,\nthus it does not need versions and macroses from hardware/*.\n\nTest: make \u0026 run on N6P\nChange-Id: Ic4a56bfa19a9a61edac2b9f9a163fd8f63a0ff87\n"
    },
    {
      "commit": "388360c786cdcbec650b79db65c734b8952dfec0",
      "tree": "a3ba18b19471046dddb8218a1461269b101bd1e0",
      "parents": [
        "61a4fac2e3ec271241e3a4f405d7357b7f6ca4c2"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Oct 17 17:09:41 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Oct 17 17:09:41 2016 -0700"
      },
      "message": "Brush up audio parameters usage\n\nIt is preferred to use the constants from AudioParameter\n(which can now serve as an abstraction layer similar to libaudiohal).\n\nGrepped for usages of defines and just string values\nand replaced with references to AudioParameter.\n\nSince the parameter definitions are being moved to system/audio.h,\nupdate includes in AudioParemeter and stagefright Utils.\n\nChange-Id: I2addb983707d866b16f39d45d0e14b802595e292\nTest: make\n"
    },
    {
      "commit": "00260b5e6996b0a4b12f71c5b84e44adea040534",
      "tree": "7e93a2e3cc5f918d8f7a7409d9c98712eed0d2fe",
      "parents": [
        "47677e3edda7b15bc0b48c6863a01ae052785e0c"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 13 12:54:24 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 13 14:02:38 2016 -0700"
      },
      "message": "Remove dependencies on hardware/audio_effects.h and EffectsFactoryApi.h\n\nAlso remove some outstanding dependencies on hardware/audio.h.\n\nMost of the time, only constants and structs from audio_effects.h\nare used, and no actual calls into HAL are made. Move these\ndefinitions into system/audio_effect.h, and generate constants\nfrom TREBLE HAL definition.\n\nFor parameters, always use values from AudioParameter class.\n\nThere are still some outstanding includes of hardware/audio.h\nin code that directly deals with audio modules. Need to extend\nlibaudiohal interfaces to support required functionality.\n\nTest: make\n\nChange-Id: I0bcdf8ae199485d4d65f3eeb7e7a3b9b5cdb6ab6\n"
    },
    {
      "commit": "cbc8f617c1aebef5d041fa40dcd38a5466690b99",
      "tree": "525470607c3e6436c5a73caac90830104fcde9ac",
      "parents": [
        "0c739c59dd1a3d52beb82a353c13b6c853d93f5f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 11 18:05:13 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 11 18:05:13 2016 -0700"
      },
      "message": "Eliminate dependencies on hardware/audio.h (trivial cases)\n\nframeworks/av must not depend on hardware/ (except for the code\nfrom libaudiohal that actually calls into HAL).\n\nThis CL deals with simple cases where depending on system/audio.h\nis enough.\n\nChange-Id: Ia2cb66cc8c92316ce5ab884a008d5e531263c2e4\nTest: make\n"
    },
    {
      "commit": "f7c50104b07091880019f4ecc70d977961148268",
      "tree": "4e6d9fe3a5b9d66723385205ef54afd845e183be",
      "parents": [
        "00c553db3e9c486b016fa030be00f5b53c6b0b8e",
        "a3de77f1a7c994cdf53d10889d78d69c36fc85f3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 30 15:19:43 2016 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 30 15:21:20 2016 -0700"
      },
      "message": "resolve merge conflicts of a3de77f to master\n\nChange-Id: Idb3346465ee7f47d95fd24e2dafdd66f3759c1be\n"
    },
    {
      "commit": "a3de77f1a7c994cdf53d10889d78d69c36fc85f3",
      "tree": "d7d7160dc9e267941fae40d7db40a091e6927edf",
      "parents": [
        "6011acd88b95931f8c5ed471f479c8ae18435eea",
        "9080e1791189a56c042286c5908760e4a46446b3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 30 19:35:18 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Sep 30 19:35:18 2016 +0000"
      },
      "message": "audio policy: fix capture indication to sound trigger service. am: 271a93e924\nam: 9080e17911\n\nChange-Id: I2131473eb29d7896cad0d1459807214d89b0d754\n"
    },
    {
      "commit": "271a93e924f46ccaf3f76a8fc38685afea40d3ee",
      "tree": "04c7e4d6c5315966d32b5c991ec9faba70cd77cd",
      "parents": [
        "429a052c35e3cca601889b12dd34edbd61eda61d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 29 14:47:06 2016 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 29 14:47:06 2016 -0700"
      },
      "message": "audio policy: fix capture indication to sound trigger service.\n\nOnly indicate active capture to sound trigger service\nwhen capturing from primay HW module.\n\nBug: 31826453\nBug: 31771879\nChange-Id: Idf92393d3e7dbf926b847ab23f670e7ab5dd5248\n"
    }
  ],
  "next": "ee4b2c9b3f63ed8a7acb7c6bba68dcd40b77bf8d"
}
