)]}'
{
  "log": [
    {
      "commit": "90e776378afb43385d8759fa1169acab92f8ed94",
      "tree": "0225cee9d8bcb3c57bd8a49084902c7cade42479",
      "parents": [
        "c55cdbafff6450155d4282a30ef025d6cecf5b3e"
      ],
      "author": {
        "name": "Oscar Azucena",
        "email": "oscarazu@google.com",
        "time": "Wed Nov 27 17:12:28 2019 -0800"
      },
      "committer": {
        "name": "Oscar Azucena",
        "email": "oscarazu@google.com",
        "time": "Thu Jan 23 00:33:17 2020 +0000"
      },
      "message": "Added audio policy api to do route based on user.\n\nAdded new API to audio policy to route audio output streams based on\nAndroid user id. The routing remains similar to uid rules, with only\nusing USERID_EXCLUDE_USERID to decide on the user id base routing.\nApplication uid and stream usage routing remain the same with the added\ndifference that user id will be taken in to consideration if available.\nBug: 139365417\nTest: atest\ncom.google.android.gts.audio.AudioHostTest#testUserIdDeviceAffinity\nTest: atest AudioPlaybackCaptureTest\nChange-Id: Ib817eb8ae19ed7dea8451e8a8584a20b9b6f5042\n"
    },
    {
      "commit": "524159db6d53cecc93de4133e0875be937437883",
      "tree": "37358040ec4d8deacf9486f9312a61ba3e3ebefc",
      "parents": [
        "ff1725382653dfa2db8536edc38a6b1f2c166f2a"
      ],
      "author": {
        "name": "Hayden Gomes",
        "email": "haydengomes@google.com",
        "time": "Mon Dec 23 14:41:47 2019 -0800"
      },
      "committer": {
        "name": "Hayden Gomes",
        "email": "haydengomes@google.com",
        "time": "Thu Jan 16 15:59:19 2020 -0800"
      },
      "message": "Adding support for new System Usages\n\nAdding system usages to native layer functions including 4 new usages\nand setSupportedSystemUsage API\n\nBug: 141006627\nTest: Built, ran, and verified types showed up in dumpsys\nChange-Id: I282c6b40ed9256ced5efb59b42da95a8fb0a6398\n"
    },
    {
      "commit": "39415ab6bc1260796a9af9de834cabb859d29c1e",
      "tree": "82345485e87d7f92831e34511dd80f4e66573396",
      "parents": [
        "b215d7f2ab7828b5fc2e9097a70462c78376341d",
        "8b0bfd91473eea4c33946347d98fb356eac15867"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 15 22:06:12 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 15 22:06:12 2020 +0000"
      },
      "message": "Merge \"AudioFlinger: Propagate uid info for AudioSession references\""
    },
    {
      "commit": "b215d7f2ab7828b5fc2e9097a70462c78376341d",
      "tree": "965b0d650b0b3f8838fe6e07dace737e69cc870a",
      "parents": [
        "fd6abf57789c60a03ee63e1d821a18e3d79a5cd4",
        "000c3e44f3c449de255974965ca31b8ab7d3dc1a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 15 20:03:03 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 15 20:03:03 2020 +0000"
      },
      "message": "Merge \"Support multiple error callbacks\""
    },
    {
      "commit": "8b0bfd91473eea4c33946347d98fb356eac15867",
      "tree": "62482792139dcb6c21a70f8bf2656af6c944137f",
      "parents": [
        "255f610f5ab71b5e36d93744dfe058daf6c96041"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 23 13:11:11 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 14 20:08:09 2020 -0800"
      },
      "message": "AudioFlinger: Propagate uid info for AudioSession references\n\nEnables better tracking of permission.\nImproves dumpsys of global AudioSession references.\n\nTest: Clarity effects\nTest: adb shell dumpsys media.audio_flinger\nBug: 129355845\nChange-Id: Ia0226c7047bb38b74e8b0cb67f12ec581b496631\n"
    },
    {
      "commit": "2623d365228384ccab82169f65f2c5971cfedf60",
      "tree": "ae5698609bd6d7231958ac53ba16feaff2a2f2b3",
      "parents": [
        "f0a91423d480c4634e647c4e4a1fe760580f7ff2",
        "f41599b115c9b3fc13a5fe00186067885a31c3ba"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 11 03:10:52 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 11 03:10:52 2020 +0000"
      },
      "message": "Merge \"APM: support querying of audio playback routing\""
    },
    {
      "commit": "f41599b115c9b3fc13a5fe00186067885a31c3ba",
      "tree": "b35290ea7ef244758abf9ead2cdce78b1614c4ec",
      "parents": [
        "684e4758669bacea71379735d49bdc74807772f3"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jan 07 14:22:08 2020 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Jan 10 12:35:43 2020 -0800"
      },
      "message": "APM: support querying of audio playback routing\n\n  Add support for querying the audio devices used for playback\nrouting for the given audio attributes.\n  Take into account registered dynamic policies but disregard\nsecondary output descriptors as they are used for playback\ncapture.\n\nBug: 144440677\nTest: atest AudioServiceHostTest\nChange-Id: I102c57b432b044dc6b0ead49e0a30d8e9094411d\n"
    },
    {
      "commit": "000c3e44f3c449de255974965ca31b8ab7d3dc1a",
      "tree": "dbc9d63e8fdcd34b4223b70ca4fe2f5c26c0e980",
      "parents": [
        "ab2ff056ad282cb9b8198a0dc7089d41d86c1f6e"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Jan 09 15:26:40 2020 -0800"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Jan 09 15:26:40 2020 -0800"
      },
      "message": "Support multiple error callbacks\n\nMove from a single callback model to allow multiple registrations.\nCreated a separate mutex to guard the callback in order to simplify\nthe process of invoking the callbacks safely without holding the\nmain lock.\n\nChange-Id: Id09aedda785e99b31c70cba1681a2ee392e9b06c\n"
    },
    {
      "commit": "a51151aacfc820122b45a875a0b6fe0dba60b756",
      "tree": "5250165a3a49942645caf75ade6634fa5c825e22",
      "parents": [
        "bd9f1ed08bb948af54600eb60f13fd6e05068375"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jan 07 13:37:47 2020 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Jan 08 11:21:31 2020 -0800"
      },
      "message": "Link with actual headers instead of symlinks\n\nand remove the symlinks.\n\nBug: 143245419\nTest: build\nChange-Id: I70e450d9db0f65048f86391c4d3f341659cd213f\n"
    },
    {
      "commit": "b605e91283ad520733dc2400684a5e6efc8602c1",
      "tree": "3f5f5e53cd643678e15d0316a98644dd952b49c0",
      "parents": [
        "8992814204970acbda49d1280f2783f9c16a4165",
        "ba703d6492a66fbf3a8517209b9a5adb208d30dd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 20 15:01:29 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 20 15:01:29 2019 +0000"
      },
      "message": "Merge \"Fix race condition in AudioRecord::releaseBuffer()\""
    },
    {
      "commit": "7c3cc27c455e317bb4ef2b6d34e4919e54cdeace",
      "tree": "b526cf0dce1ee40d09bf867a33c717ef048e0927",
      "parents": [
        "60f0f304bcd573581e7c6bf1cbd05cad36f97c67",
        "fc02f71bf131e17a31364f2cd10bbf9ba05378e1"
      ],
      "author": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Dec 20 02:46:35 2019 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Dec 20 02:46:35 2019 +0000"
      },
      "message": "Merge \"AudioSystem: no error log for virtual source conversion to stream\" am: 0287b5bfb8 am: bc63ac7941 am: fc02f71bf1\n\nChange-Id: Ie5697aa724095ecf2dedaefa4d85e99cebf1e05a\n"
    },
    {
      "commit": "ed678652c776f1284dd94779594582bf6e3325f9",
      "tree": "abfe24f0df61502c33583097b4d4ec411373b262",
      "parents": [
        "c1a82b91f050f4b496b2d373046cb4c9fc32c8eb"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Dec 19 13:39:30 2019 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Dec 19 13:46:43 2019 -0800"
      },
      "message": "AudioSystem: no error log for virtual source conversion to stream\n\nWhen converting audio attributes to stream type, do not log an\nerror if no product strategy support USAGE_VIRTUAL_SOURCE.\n\nBug: 146558301\nTest: check logs after using AudioPolicy for injection\nChange-Id: I8313b9d27583934e7a64edbfe49d52bad587f372\n"
    },
    {
      "commit": "ba703d6492a66fbf3a8517209b9a5adb208d30dd",
      "tree": "5cd0d0f230a5a8004db96e8097afb6bfec213212",
      "parents": [
        "39260a69ca1f66f29f250f30fde07fd628785708"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 13 11:13:42 2019 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 19 10:32:38 2019 -0800"
      },
      "message": "Fix race condition in AudioRecord::releaseBuffer()\n\nIgnore releaseBuffer() if it is for a different IAudioRecord than was\nused for obtainBuffer().\n\nBug: 136268149\nTest: at bug comments #26 and #27\nChange-Id: I2a08c30bf9187b35535318761eaac7856da68c11\n"
    },
    {
      "commit": "94e872e6894dce7d89954d0515c140ec626d20ba",
      "tree": "3b8a0acc0c514e139b767f255e77a23fbf7d55c2",
      "parents": [
        "990cc725040484dfd233280eedeb7de2da4f72e4",
        "f27e987d277c186010e8bdd1d5e781158b31f9af"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Tue Dec 17 22:52:33 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 17 22:52:33 2019 +0000"
      },
      "message": "Merge \"Naming consistency: MediaAnalytics to MediaMetrics\""
    },
    {
      "commit": "f27e987d277c186010e8bdd1d5e781158b31f9af",
      "tree": "87703f33fe40f06c2faa78daa4105bb6cb8db79d",
      "parents": [
        "b7b870db0c6cc0c6375b154400a813b84f5056b4"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Sat Dec 07 06:28:46 2019 -0800"
      },
      "committer": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Tue Dec 17 11:20:57 2019 -0800"
      },
      "message": "Naming consistency: MediaAnalytics to MediaMetrics\n\nBug: 145780674\nTest: build, boot, dumpsys media.metrics\nTest: atest mediametrics_tests CtsNativeMediaMetricsTestCases\nChange-Id: Icbfa98da9e61702aee9a1d807b5e126b4b9c6458\n"
    },
    {
      "commit": "a32e60121e1cd626f300fb894f4e1bc5715d3d41",
      "tree": "8c1c54476ec517388b8fe998b59ac0d87d85e5f6",
      "parents": [
        "fa12f52ba2c0f528277bfe7d7543f5f53361850c"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Mon Oct 28 15:39:16 2019 -0700"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Dec 12 15:14:18 2019 -0800"
      },
      "message": "Make IAudioPolicyService::{acquire,release}SoundTriggerSession work remotely\n\nPreviously those calls were reserved for local calling only and rejected\notherwise. They now need to be accessible remotely, since sound trigger\nis moving to a different process.\n\nChange-Id: Iadd26006b8d310b9c5d1fdbefc70c861dfa809f0\nBug: 142070343\n"
    },
    {
      "commit": "0c56c527ca7a3f92b6d09842720995f0ca1b913e",
      "tree": "b0b58dd2c3578b8544f441ca7a2d7597c42960be",
      "parents": [
        "a473e074ffcf55fb1a8dfcdbbc0bc625970cc2ce",
        "94876034876afd6f642dd1a0ad7c60aee05504d9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 11 21:25:53 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 11 21:25:53 2019 +0000"
      },
      "message": "Merge \"AudioEffect: add device descriptor to AudioEffect constructor\""
    },
    {
      "commit": "2deb47896c1a3604468f9b9144c7114f5d678b33",
      "tree": "5e952f128a421748aa32dc22f16e86ecad15a972",
      "parents": [
        "f6cd76eef99409ea943e995e3c8fae92a787fb36"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Nov 01 11:04:15 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Dec 10 14:21:48 2019 -0800"
      },
      "message": "APM: support product strategy routing\n\n  Audio policy engine supports receiving a preferred device to use\nfor a given strategy (Engine superclass). Use of the preferred\ndevice intervenes at the level of the each engine implementation,\nhere in the default engine in getDevicesForProductStrategy() method\nso it is saved in the routing cache, and respects existing routing\npriorities.\n  Refactor the loops for call and output rerouting into a new\nupdateCallAndOutputRouting() method.\n\nBug: 144440677\nTest: atest AudioServiceHostTest#testPreferredDeviceRouting\n\nChange-Id: Ic4c690e1b0d8020c4335979e40e14e6df5887879\nMerged-In: Ic4c690e1b0d8020c4335979e40e14e6df5887879\n"
    },
    {
      "commit": "6d9f56dd70cd0d98b3477c86d27f31b40550dfbf",
      "tree": "8afc9b6653ff3ee405b9972cd5a8360e7e03e949",
      "parents": [
        "24003dc83687516cebd38153e318c2b1b6c37729",
        "30857159e8c143aac18aa1c0db3cffd47d8e207d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Dec 10 19:49:59 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 10 19:49:59 2019 +0000"
      },
      "message": "Merge \"APM: support product strategy routing\""
    },
    {
      "commit": "30857159e8c143aac18aa1c0db3cffd47d8e207d",
      "tree": "fa694fe4ca82413e2de5cca3066643571d46a611",
      "parents": [
        "a2adc8aa6c06f0e1d06c1bb6535be15f30ba26fd"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Nov 01 11:04:15 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Dec 09 12:22:47 2019 -0800"
      },
      "message": "APM: support product strategy routing\n\n  Audio policy engine supports receiving a preferred device to use\nfor a given strategy (Engine superclass). Use of the preferred\ndevice intervenes at the level of the each engine implementation,\nhere in the default engine in getDevicesForProductStrategy() method\nso it is saved in the routing cache, and respects existing routing\npriorities.\n  Refactor the loops for call and output rerouting into a new\nupdateCallAndOutputRouting() method.\n\nBug: 144440677\nTest: atest AudioServiceHostTest#testPreferredDeviceRouting\n\nChange-Id: Ic4c690e1b0d8020c4335979e40e14e6df5887879\n"
    },
    {
      "commit": "94876034876afd6f642dd1a0ad7c60aee05504d9",
      "tree": "f695fedbfa6e930d034dfdb0f61e485b5292a67c",
      "parents": [
        "b7a56c52e001d2e361140b07ee1baad4c56e5b2c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 13 12:45:28 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 09 09:46:17 2019 -0800"
      },
      "message": "AudioEffect: add device descriptor to AudioEffect constructor\n\nAdd the possibility to specify a target audio device when\ncreating an audio effect by passing its type and address to\nAudioEffect constructor.\nWhen doing so, the session ID must be AUDIO_SESSION_DEVICE.\n\nBug: 136294538\nTest: make\nChange-Id: I2a2eba340d3c2537285c091e9a53f305ff161a2b\n"
    },
    {
      "commit": "3f75a5bc38894cb6635837c49247c3fa50ed6c47",
      "tree": "a6a256606f82ae742012ec1532ef22009ab0ab25",
      "parents": [
        "602e1ae3a3d4e2ffe158dacfd268547d94a06b38"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 15:55:51 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 06 17:22:42 2019 -0800"
      },
      "message": "AudioFlinger: add audio session for device effects\n\nAdd specific audio session ID for effects applied to a\nparticular audio device.\nDevice specific effects will be attached to a particular audio sink or\nsource device identified by its unique audio port ID and will all use\nthis same session ID.\nOnly one session of this type exists on a given playback or record\nthread.\nAll effects in this session apply to the same device ID and are created/released\nwhen the routing (audio patch) of this thread output or input stream is updated.\n\nBug: 136294538\nTest: make\n\nChange-Id: I4e3a55ed1244b918429dd9e217b6efecc1ec6449\n"
    },
    {
      "commit": "630f74baaf5280a78350fa1ecb7283768a5c4bf9",
      "tree": "e20620e03a8ef5db88b55dfe70edfaa926ef6c43",
      "parents": [
        "643a5692fb1d1b7b0e2c90faa217816f7b524c51",
        "d17c85023ac2058233121b8a94603687c855c997"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 06 19:21:53 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 06 19:21:53 2019 +0000"
      },
      "message": "Merge \"Add explicit private audio recording request\""
    },
    {
      "commit": "b680e955f474a2f81ed35383da67209bcbdd7d10",
      "tree": "8fd48d3bca98f5cc5d96415255711817fc209553",
      "parents": [
        "9e1e25dd418773ad5e574441962dcc771d3ec2a3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 27 15:40:33 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Dec 05 13:00:07 2019 -0800"
      },
      "message": "media utils: dump audio HAL service before restarting audioserver\n\nAdd request to create tombstones of audio HAL servers before restarting\naudioserver process when the watchdog triggers.\n\nAdd audio device factory HAL interface API to retrieve HAL process pids when\npossible (on debug builds).\n\nAdd AudioFlinger service API to set audio HAL process pids from\nJAVA AudioService.\n\nBug: 141528385\nTest: Force watchdog and verify tombstone creation\nChange-Id: I68c1e8fb4db23e5952ad0c93d7d0b9d121b8ec18\nMerged-In: I68c1e8fb4db23e5952ad0c93d7d0b9d121b8ec18\n"
    },
    {
      "commit": "d17c85023ac2058233121b8a94603687c855c997",
      "tree": "39fc63d6f1037eafb71dc8046aefedfadfee9b53",
      "parents": [
        "d203cb92c9c9628b3bead45ec08f826544c1d649"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 24 15:58:35 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 04 17:58:34 2019 -0800"
      },
      "message": "Add explicit private audio recording request\n\nAdd the possibility for apps to indicate that their\ncapture use case is private and that a privileged Assistant\nshould not be able to capture concurrently.\nThis allows to override the default behavior tied to the audio\nsource (e.g VOICE_COMMUNICATION is private by default but\nUNPROCESSED is not).\n\n- Add AAudio API to set and get privacy sensitive mode on input stream\n- Add MediaRecorder API to set and get privacy sensitive mode\n- Modify AudioSource constructor to accept audio attributes instead of an\naudio source to specify the use case.\n- Modify audio policy concurrent capture logic to use audio attributes\nflag instead of audio source to decide of a capture client has\nrequested privacy mode or not.\n\nBug: 137850106\nTest: CTS AudioRecordTest and MediaRecorderTest, manual audio smoke tests\n\nChange-Id: I250ea5da4c1da809ceac0da22ae9bee15b937001\n"
    },
    {
      "commit": "c010683e081f48eb72e21cbcf0458efc17184e6b",
      "tree": "74e8898a4399b0b2fb3693379fcf80b5be1c9199",
      "parents": [
        "8d7522888db87e9533b286431f59c7e0b804a514"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 24 14:58:31 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:42:00 2019 -0800"
      },
      "message": "Refactor opening output interface between AF and AP.\n\nRefactor interface between audio flinger and audio policy. Use device\ndescriptor instead of audio device type and address. DeviceDescriptor\ncan contain more information that may be useful when opening an output\nstream.\nIn audio policy, if multiple audio devices are passed in when opening\nan output stream, one device is extracted using the same strategy as\nwhen selecting a device for volume application. When starting source,\naudio policy manager will call audio flinger to create audio patch. In\nthat case, multiple devices will still be patched to the output stream.\n\nTest: atest AudioTrackTest AudioPlaybackCaptureTest\nTest: atest audiopolicy_tests, audio smoke test\nChange-Id: I46dc2da621614f8716c6c73cf807fe7d2d672cda\nMerged-In: I46dc2da621614f8716c6c73cf807fe7d2d672cda\n"
    },
    {
      "commit": "8d7522888db87e9533b286431f59c7e0b804a514",
      "tree": "ee1a14f6ddd4dea80dac7945c356599cfb5c9628",
      "parents": [
        "020b0dc578cbc5779293e27311c23099996690e0"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Oct 18 15:49:48 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:41:16 2019 -0800"
      },
      "message": "Move libmediahelper into a new folder.\n\nThis change mainly aims at refactoring libmediahelper. Libmediahelper\ndoesn\u0027t need to be stored in media folder. In that case, move\nlibmediahelper related file to a new folder. In the meantime, move\nAudioParameter.h from libaudioclient to libmediahelper. There is no\nneed to keep AudioParameter.h in libaudioclient while AudioParameter.cpp\nis in libmediahelper.\n\nTest: make\nBug: 135621476\nChange-Id: Icce6615b7e3a68be8b7492f2a91922ab04464ca2\nMerged-In: Icce6615b7e3a68be8b7492f2a91922ab04464ca2\n"
    },
    {
      "commit": "5b78141fb60bb73ee9339497cce5b5111413927e",
      "tree": "4be7b7f377d843dd25f2ce2beef43c34d9908d49",
      "parents": [
        "ea64c67d2c2ecc6921fea5769d66f52301601857"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 04 14:10:42 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:13:50 2019 -0800"
      },
      "message": "Move AudioDeviceTypeAddr to libaudiofoundation.\n\nMove AudioDeviceTypeAddr from AudioPolicy.h to libaudiofoundation.\nAudioDeviceTypeAddr is a class that contains audio device type and\naddress. It can be used not only in audio policy, but also other places.\n\nBug: 135621476\nTest: make, atest AudioHostTest\nChange-Id: Ib257859891c647c07f22771012efdada438a4ff5\nMerged-In: Ib257859891c647c07f22771012efdada438a4ff5\n"
    },
    {
      "commit": "abab522d57a88875189ab8a00876528b30c698e1",
      "tree": "145449c5e6b8bf62688bda83fc3fa852ab6ba942",
      "parents": [
        "493a55d11183402fd06315b32e640b7ce75abe63"
      ],
      "author": {
        "name": "Judy Hsiao",
        "email": "judyhsiao@google.com",
        "time": "Sat Nov 09 18:14:58 2019 +0800"
      },
      "committer": {
        "name": "Judy Hsiao",
        "email": "judyhsiao@google.com",
        "time": "Wed Nov 20 13:58:46 2019 +0800"
      },
      "message": "AudioFlinger: Fix getInputBufferSize() calculation\n\n1. Query 44100 and 48000 SR if proposed SR is not supported\n2. Query AUDIO_CHANNEL_IN_MONO and AUDIO_CHANNEL_IN_STEREO if\nproposed channel_mask is not supported\n3. Return with bytes rather than frames\n4. Fix destinationFramesPossible usage\n\nTest: run cts\nandroid.media.cts.AudioRecord_BufferSizeTest#testGetMinBufferSize\nBug: 144245613\nBug: 144245318\nBug: 144000030\n\nChange-Id: I0fa90eb1bef63bd441724cdb0fa7f9172f503364\n"
    },
    {
      "commit": "42896a0774caae74ea8c982417ecbefb21913bc8",
      "tree": "6e352631b91856d118f052b8c180085837e4f07a",
      "parents": [
        "484d6119d3ca9140d415dc1841d4c0c500d76a20"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 27 15:40:33 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 08 15:26:09 2019 -0800"
      },
      "message": "media utils: dump audio HAL service before restarting audioserver\n\nAdd request to create tombstones of audio HAL servers before restarting\naudioserver process when the watchdog triggers.\n\nAdd audio device factory HAL interface API to retrieve HAL process pids when\npossible (on debug builds).\n\nAdd AudioFlinger service API to set audio HAL process pids from\nJAVA AudioService.\n\nBug: 141528385\nTest: Force watchdog and verify tombstone creation\nChange-Id: I68c1e8fb4db23e5952ad0c93d7d0b9d121b8ec18\n"
    },
    {
      "commit": "0c3ab34456d0fb31f29459bb1a3d24008753b422",
      "tree": "368a5533b9f178eb1a230fe35b30ff7d626b3f7d",
      "parents": [
        "dc0e389aac274d94fc3702cf858d0c47fa8ddd43",
        "8340e67185e852b7de1d68eb86ca0c46b1affb98"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 08 22:39:10 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 08 22:39:10 2019 +0000"
      },
      "message": "Merge \"audio policy: Add call screen audio mode.\""
    },
    {
      "commit": "05b5edd08b0b846f6ffb749805a7b8bce31ce4f8",
      "tree": "49058f5bd3c2f4cf2321713374958ad68b84e19e",
      "parents": [
        "517734d665d69ed36c7a6cf5297452318aa517ec"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 04 14:10:42 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 06 13:52:55 2019 -0800"
      },
      "message": "Move AudioDeviceTypeAddr to libaudiofoundation.\n\nMove AudioDeviceTypeAddr from AudioPolicy.h to libaudiofoundation.\nAudioDeviceTypeAddr is a class that contains audio device type and\naddress. It can be used not only in audio policy, but also other places.\n\nBug: 135621476\nTest: make, atest AudioHostTest\nChange-Id: Ib257859891c647c07f22771012efdada438a4ff5\n"
    },
    {
      "commit": "8340e67185e852b7de1d68eb86ca0c46b1affb98",
      "tree": "fdb9098c48aedf7e3763f6dc2c5122bf16a5bd34",
      "parents": [
        "cd606f3f18e974ad02679ff9a6ffb98e71714b05"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 06 11:01:08 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 06 11:06:34 2019 -0800"
      },
      "message": "audio policy: Add call screen audio mode.\n\nAdd new audio mode AUDIO_MODE_CALL_SCREEN allowing call screening\nto take place while other audio use cases are still active.\n\nAlso add API and audio policy configuration attribute to\nindicate if the platform supports this audio mode.\n\nBug: 140384450\nTest: make\nChange-Id: If2fc56dbbd10aae2cf1498480471b35de0940228\n"
    },
    {
      "commit": "8c5bb45d25c2dd4299f544b03e905c7a4e83ca35",
      "tree": "30868af19a7aa7a25108167776fee3dc607458dd",
      "parents": [
        "200d15a9c8df0421e665b9135354610019eebdba",
        "4381040f77c2907c9a0ba27ece2e00241daadf0e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Oct 28 23:42:11 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 28 23:42:11 2019 +0000"
      },
      "message": "Merge \"Refactor opening output interface between AF and AP.\""
    },
    {
      "commit": "4381040f77c2907c9a0ba27ece2e00241daadf0e",
      "tree": "b559f2cf74926949bd9f846c627ede38b734158f",
      "parents": [
        "c6fe9c424669d640d8bbe0fc7e130a34bab0b4bd"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 24 14:58:31 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Oct 28 10:38:13 2019 -0700"
      },
      "message": "Refactor opening output interface between AF and AP.\n\nRefactor interface between audio flinger and audio policy. Use device\ndescriptor instead of audio device type and address. DeviceDescriptor\ncan contain more information that may be useful when opening an output\nstream.\nIn audio policy, if multiple audio devices are passed in when opening\nan output stream, one device is extracted using the same strategy as\nwhen selecting a device for volume application. When starting source,\naudio policy manager will call audio flinger to create audio patch. In\nthat case, multiple devices will still be patched to the output stream.\n\nTest: atest AudioTrackTest AudioPlaybackCaptureTest\nTest: atest audiopolicy_tests, audio smoke test\nChange-Id: I46dc2da621614f8716c6c73cf807fe7d2d672cda\n"
    },
    {
      "commit": "77819b82784e4a0a9ef4ccea7618c886f175817e",
      "tree": "ed83084e698b6494774dc0cd5b9cfe4815d899f3",
      "parents": [
        "57cf28f79c1d24ed259bcd8ca6227bb06952c24c",
        "00900336c1e2a67fb852758f9790fbf8050c19c5"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 13:30:40 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Oct 25 13:30:40 2019 -0700"
      },
      "message": "Merge \"Remove more header symlinks\" am: a2bc7eada8 am: ec565c575d am: ef6bd3e3a5\nam: 00900336c1\n\nChange-Id: I1ee034dda7407c84110b8fa92a38a427d58203b5\n"
    },
    {
      "commit": "6b2859450f91f1cdd8b3ca2435df4dd37907cd8a",
      "tree": "4accc947ac99fa7246f5f7fc54f35b3c960636b1",
      "parents": [
        "35f148bc5a1cb1efffd9aee0223a06720a303329"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Oct 21 14:52:30 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 24 21:25:53 2019 +0000"
      },
      "message": "Remove more header symlinks\n\nTest: build\nBug: 143245419\nChange-Id: I9bb03d54c7792625b73602f2d3721e29f8f929be\n"
    },
    {
      "commit": "bbb382312e7c8b78dc007ab6ed3020b69346dae4",
      "tree": "e6ab4705e0b5e4afe880a178f3b44259e5ab9442",
      "parents": [
        "a0877dc731067dd95635b2be3e893f1fe60bf3a1"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Oct 23 21:02:41 2019 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Oct 23 21:02:41 2019 +0000"
      },
      "message": "Revert \"Revert \"Move libmediahelper into a new folder.\"\"\n\nThis reverts commit a0877dc731067dd95635b2be3e893f1fe60bf3a1.\n\nReason for revert: Should work with go/pag/1465463 merging to master.\n\nChange-Id: I17217744eacabf15621d4a5aac9dd1678e37e4ba\n"
    },
    {
      "commit": "a0877dc731067dd95635b2be3e893f1fe60bf3a1",
      "tree": "eceafbd995bb43bfcd277bcd421df42e099cbc6e",
      "parents": [
        "c8888660b53647ef1a9608493ab1a5dc93ba9b0d"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Oct 23 16:05:56 2019 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Oct 23 16:05:56 2019 +0000"
      },
      "message": "Revert \"Move libmediahelper into a new folder.\"\n\nThis reverts commit c8888660b53647ef1a9608493ab1a5dc93ba9b0d.\n\nReason for revert: Broke elfin build\n\nChange-Id: Idfd67b064b28abf32da332149bdce212249345d8\n"
    },
    {
      "commit": "c8888660b53647ef1a9608493ab1a5dc93ba9b0d",
      "tree": "e6ab4705e0b5e4afe880a178f3b44259e5ab9442",
      "parents": [
        "f6581aaac9469864be4bd915bca0c1ae9f37d55d"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Oct 18 15:49:48 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Oct 22 17:20:54 2019 -0700"
      },
      "message": "Move libmediahelper into a new folder.\n\nThis change mainly aims at refactoring libmediahelper. Libmediahelper\ndoesn\u0027t need to be stored in media folder. In that case, move\nlibmediahelper related file to a new folder. In the meantime, move\nAudioParameter.h from libaudioclient to libmediahelper. There is no\nneed to keep AudioParameter.h in libaudioclient while AudioParameter.cpp\nis in libmediahelper.\n\nTest: make\nBug: 135621476\nChange-Id: Icce6615b7e3a68be8b7492f2a91922ab04464ca2\n"
    },
    {
      "commit": "3686203afbfa2e3a59255a9280e3f9175d3fdd7c",
      "tree": "fae91b412fdf5f69ff822fff96dc98feb24c7d6d",
      "parents": [
        "40143b19a0dbb2cf3d24f100bf3844f8a4a60f8d"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Oct 10 10:52:19 2019 +0100"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Oct 10 10:00:10 2019 +0000"
      },
      "message": "Propagate sample rate to static audio track\n\nBug: 136691300\nTest: playback on static buffer track\nChange-Id: Ib11c39e381a1b78450ab8a688310453aa3f1daf7\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "32f0d1689bd2eea6f43d7fb53faaedc23bd101d7",
      "tree": "3144c04d2bba1d717b30fe54fb4e4f08c478f982",
      "parents": [
        "a4f00e2aeadc9dc5c2f4970cd61ace72438136d4"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 30 14:42:32 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "libaudioprocessing: Extract vendor-available part of AudioMixer\n\nSplit AudioMixer into the base part which doesn\u0027t rely on\nthe framework and can be used in vendor code and the derived part\nwhich is intended to be used by Audioflinger.\n\nTest: A/B compare output from test scripts, manual testing on the phone\nMerged-In: I24c390f67f20baa8109902099359ca6e34eebcfd\nChange-Id: I24c390f67f20baa8109902099359ca6e34eebcfd\n"
    },
    {
      "commit": "a4f00e2aeadc9dc5c2f4970cd61ace72438136d4",
      "tree": "0cad5d0e9d535b38da7d03253141cc7606e45220",
      "parents": [
        "9b6599e1e10232e9c6e67e1d6d26265b8e8da885"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jul 31 14:53:29 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "AudioMixer: Cleanups\n\n- remove unused ARRAY_SIZE;\n\n- fix indentation for TIMESTRETCH in setParameter;\n\n- move trackNames method implementation and BLOCKSIZE constant\n  into .cpp file;\n\n- whitespace fixes.\n\nTest: make\nMerged-In: Idc5da55c8c3af0d59b9a7a12d081747b0a99dafc\nChange-Id: Idc5da55c8c3af0d59b9a7a12d081747b0a99dafc\n"
    },
    {
      "commit": "9b6599e1e10232e9c6e67e1d6d26265b8e8da885",
      "tree": "2543d4ef40ca7a67df0f493acf071cb773af7306",
      "parents": [
        "52a42dde3627544fabc6691afcc67df73ed6b5e7"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 29 15:23:21 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "libaudioprocessing: Trivial dependency cleanups\n\n- Remove unused dependencies on libnbaio and libnblog;\n\n- Move dependencies on libaudiohal and libsonic to libaudioprocessing\n  as AudioMixer implementation does not use them.\n\nTest: make\nMerged-In: I258a450725bdacb4fcf437b6f86582d51d40e622\nChange-Id: I258a450725bdacb4fcf437b6f86582d51d40e622\n"
    },
    {
      "commit": "138b0a3840db6207654d8a9b3d88a383b100b9b0",
      "tree": "4109899967f1de3c9fd2a120172bbedd54495a89",
      "parents": [
        "bb3b160486da21dab7611de44c85ad85e73e69c9"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 05 11:11:38 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 03 09:46:29 2019 -0700"
      },
      "message": "Restore stream [dis]connect parameters in deprecated state\n\nSince AudioParameter.h is vendor-available, some vendors may\nstill use the old parameters. Leave the old parameters there\nbut mark as deprecated.\n\nBug: 138868195\nTest: make\nChange-Id: I6d12b7ac360309014a240a321c3cd32b39d8f740\nMerged-In: I6d12b7ac360309014a240a321c3cd32b39d8f740\n"
    },
    {
      "commit": "bb3b160486da21dab7611de44c85ad85e73e69c9",
      "tree": "266b8068d8e1714bb4b4100d2e31c0a95cc9e16c",
      "parents": [
        "3e9dd76e813cf04c9dd35a8c2e813c174e5b435e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 08 15:28:43 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Oct 02 16:31:34 2019 -0700"
      },
      "message": "Fix the name of the constant for device [dis]connect parameter\n\nDuring the transition to Treble, \"device connect\" / \"disconnect\"\nparameter was erroneously attributed to audio streams. This\nissue got fixed in Audio HAL V4.0, but AudioParameter file\nwas still using incorrect name for the constant.\n\nTest: make\nChange-Id: I4056ad9e98af6dadd017d22bc4bde031cac75631\nMerged-In: I4056ad9e98af6dadd017d22bc4bde031cac75631\n"
    },
    {
      "commit": "3230ed8235a39adef82d7c3873e6a87007799ff8",
      "tree": "158042769963aa698a8fbd240d2abfc352220c3d",
      "parents": [
        "6dc75fb0cde69661a1d2d915c1520b251ebdfbbb"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Sep 26 11:20:54 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Sep 27 12:12:46 2019 -0700"
      },
      "message": "Remove symlinks from include dir\n\nTest: build\n\nChange-Id: Ibe4eee4fe49b7884e6d720e626d88125bbee0eb2\nMerged-In: Ibe4eee4fe49b7884e6d720e626d88125bbee0eb2\n"
    },
    {
      "commit": "cf90b4931734e42c6092318991f213b76d7e849e",
      "tree": "3c0c685cb75bbdc37172d24113f6c0dbcbf3dfb4",
      "parents": [
        "d2dc18b063c548d9646dd1127fea97ccebdba079"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Sep 26 11:20:54 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Sep 27 09:02:30 2019 -0700"
      },
      "message": "Remove symlinks from include dir\n\nTest: build\n\nChange-Id: Ibe4eee4fe49b7884e6d720e626d88125bbee0eb2\n"
    },
    {
      "commit": "7dd39723b34c8378fc5eabb4d4ccacf32f55ffe2",
      "tree": "222de47bcb84931d714d250fe51d3249771edc18",
      "parents": [
        "61d4a093f4b4041b145fbd7a3ab5ec04679f87d9"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Sep 05 15:14:30 2019 -0700"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Fri Sep 13 10:59:51 2019 -0700"
      },
      "message": "Improve visibility of IMemory security risks\n\nThis change renames the IMemory raw pointer accessors to\nunsecure*() to make it apparent to coders and code reviewers\nthat the returned buffer may potentially be shared with\nuntrusted processes, who may, after the fact, attempt to\nread and/or modify the contents. This may lead to hard to\nfind security bugs and hopefully the rename makes it harder\nto forget.\n\nThe change also attempts to fix all the callsites to make\neverything build correctly, but in the processes, wherever the\ncallsite code was not obviously secure, I added a TODO requesting\nthe owners to either document why it\u0027s secure or to change the\ncode. Apologies in advance to the owners if there are some false\npositives here - I don\u0027t have enough context to reason about all\nthe different callsites.\n\nTest: Completely syntactic change. Made sure code still builds.\nChange-Id: I5fb99aa797c488406083178a6b05355d98710d3b\n"
    },
    {
      "commit": "5ada82ee2511a31c6846c67e455ffb2c9989b623",
      "tree": "38845fc352b781bb00cfe7bf56cf1cfc23c2af37",
      "parents": [
        "dba03231c2fb2c54c8a7b313786c7bc7d3471908"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 29 17:53:54 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 30 18:07:18 2019 -0700"
      },
      "message": "audio policy: allow silencing capture per port\n\nAdd the possibility to silence a particular AudioRecord\nclient rather than silencing all clients sharing the same UID.\n\nTest: AudioRecordTest#testRecordNoDataForIdleUids\n\nChange-Id: Ic472045cd45c7222ca3a88ccf131435fd1e26475\n"
    },
    {
      "commit": "f85d129bf9365d46991cb5348d04c2a1c8d20f6f",
      "tree": "c451ee6c68d336aeb11acf8fb9b5f68ce5f36b53",
      "parents": [
        "34bbfc447ad5c3b615acf9e924a97b2a3d678ab7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 21 14:45:41 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 21 14:45:41 2019 -0700"
      },
      "message": "AudioFlinger: Clear effect_uuid_t in case of short read\n\nBug: 139417189\nTest: native test, see bug\nChange-Id: I9ef0e58e2e73089eb9a347d5357e040ac69bbdd1\n"
    },
    {
      "commit": "c6c78b6cb224a7985c61d47c6b3c2e39180831c3",
      "tree": "1db168b81debf2730a748470d146500df4e93590",
      "parents": [
        "4e00f928aee8a10d2c62920d21ade19aec14d343",
        "7075dc6a21f7439d6d3189b32a88f1adf7f87ed6"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Aug 14 10:42:40 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 14 10:42:40 2019 -0700"
      },
      "message": "Merge \"Move ExtendedAudioBufferProvider and SingleStateQueue\" am: 2a70a39f4c am: 72d2412c27 am: 1cae73f318 am: 5fdaa0f7d2\nam: 7075dc6a21\n\nChange-Id: I2b775d9274b8d0e0e5419c5e945a67a089bb8149\n"
    },
    {
      "commit": "72d2412c271237aa6dfa2a75c41c8c0f69999b34",
      "tree": "5a4e3e6534daafd5c8bdf61be5cacfb21d73c084",
      "parents": [
        "5369de1fd662aa373cbbf4cf5368c66da74d51db",
        "2a70a39f4c88c531be1a7087e6b241532ee0024d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Aug 14 10:14:49 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 14 10:14:49 2019 -0700"
      },
      "message": "Merge \"Move ExtendedAudioBufferProvider and SingleStateQueue\"\nam: 2a70a39f4c\n\nChange-Id: I993318e2a9a5bba3aa65ee8319d80bebb537df50\n"
    },
    {
      "commit": "9f3c02d15167b98b9208687e7e30e07149efbf2d",
      "tree": "60cb2b95b2a1eb630697b5014a05713e4c899366",
      "parents": [
        "646a332acfc525e94e6c1898544201052efa4fc8"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 12 11:36:05 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 12 11:47:19 2019 -0700"
      },
      "message": "Move ExtendedAudioBufferProvider and SingleStateQueue\n\nMove ExtendedAudioBufferProvider.h to libaudioclient. This is\na more appropriate location because EABP extends AudioBufferProvider.\n\nMove SingleStateQueue.h to libnbaio_mono. This is a more appropriate\nlocation because SSQ is a non-blocking queue.\n\nThis allows to remove the dependency of libnbaio on libmedia\nwhich is a good thing because libnbaio provides more low-level\nabstractions than libmedia.\n\nAlso, replace a dependency of libnbaio on libbinder with\na dependency on libaudiohal header library.\n\nTest: make\nChange-Id: Ie48b523790cd8230695ec2e4710e50981b616289\n"
    },
    {
      "commit": "2207c0565403e89a3e03e49b9062e07806662c4d",
      "tree": "251861ae6021449a302c15879ee3865e312ba938",
      "parents": [
        "ce4b00e79f4bde61c3474ce001825eb34b4d1b58"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 05 11:11:38 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 05 13:33:12 2019 -0700"
      },
      "message": "Restore stream [dis]connect parameters in deprecated state\n\nSince AudioParameter.h is vendor-available, some vendors may\nstill use the old parameters. Leave the old parameters there\nbut mark as deprecated.\n\nBug: 138868195\nTest: make\nChange-Id: I6d12b7ac360309014a240a321c3cd32b39d8f740\n"
    },
    {
      "commit": "32925cc4374ba577f7b5d38867b11db1a582b967",
      "tree": "52c652b0c4b22b18dfdff953157ee5ef4cd5545a",
      "parents": [
        "2687b89978140e096f958fb37df53d65eecb9aaf"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 29 15:00:21 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 29 20:47:46 2019 -0700"
      },
      "message": "Move AudioMixer.h and BufferProviders.h into correct location\n\nThe implementation files are in libaudioprocessing,\nthus the header files also belong there.\n\nTest: make\nChange-Id: I78ba4ed480413c0a1b871e80971ef5ce1d0c6755\n"
    },
    {
      "commit": "f23fcf683cc0ec5efb8eae471141af162ac00035",
      "tree": "f592028f9bac9137b6edba29a33eef87c25faf41",
      "parents": [
        "1b03fc43bd922333dde02bc3be8fa44b1333d341"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 08 15:28:43 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 08 15:28:43 2019 -0700"
      },
      "message": "Fix the name of the constant for device [dis]connect parameter\n\nDuring the transition to Treble, \"device connect\" / \"disconnect\"\nparameter was erroneously attributed to audio streams. This\nissue got fixed in Audio HAL V4.0, but AudioParameter file\nwas still using incorrect name for the constant.\n\nTest: make\nChange-Id: I4056ad9e98af6dadd017d22bc4bde031cac75631\n"
    },
    {
      "commit": "c2a5c62475ef33075c062c0d2cd7aff93f21b8c7",
      "tree": "41f470cfa45804f49caa3d8465a1b71330389769",
      "parents": [
        "75f28c3b3eb2cb87672a168ed9ec6a7232cad4bc",
        "a24e4d451ba7f7c44030fdf7c8f252219d0c62a8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 18:43:05 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 11 18:43:05 2019 -0700"
      },
      "message": "Merge \"audioservice: add RTT mode observer\" into qt-dev am: e81a326d90 am: cdc2f7cb34\nam: a24e4d451b\n\nChange-Id: I63fe67eb0affdf9e9cccce5b7bc05864511a6396\n"
    },
    {
      "commit": "cdc2f7cb3480f528d79966044013cea47296deb9",
      "tree": "4deef1c8ff0b99122c8497464282c281af855a5d",
      "parents": [
        "1c23036f6c55e4f38653b330bbebd05fd8fcba17",
        "e81a326d90dfce1249917b796f69b48fe1c59971"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 18:31:59 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 11 18:31:59 2019 -0700"
      },
      "message": "Merge \"audioservice: add RTT mode observer\" into qt-dev\nam: e81a326d90\n\nChange-Id: I9490f8b940629a09cf62cd5211c4f626e2d4079c\n"
    },
    {
      "commit": "6ede98f9b3e3e1988f401d79b625ead653027ccc",
      "tree": "2306e3b551752f70ec01a6d8ed87824743c2ef81",
      "parents": [
        "e0092766d214720c1fd22b8c08ccc7ceeaf4a700"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:50:30 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:55:25 2019 -0700"
      },
      "message": "audioservice: add RTT mode observer\n\nEnable audio capture by the Assistant when RTT is ON during a call\nsimilarly to when an accessibility service is in the foreground.\n\nAlso remove log when permission checked for hotword\nand audio output capture fail as those checks are now done\nsystematically.\n\nAlso do not check permission to bypass interruption policy if\nbypass flags are not set.\n\nBug: 132976361\nTest: use voice input during a call with RTT enabled.\nChange-Id: Iff45b0816dac889262ec29ea115f74dea4dc6b6d\n"
    },
    {
      "commit": "1224227e19b418b42056cd9eb4e03ce9d68fce35",
      "tree": "ef669193bb2bdea5dbd10c4b09f37cf9e2d5aca6",
      "parents": [
        "e8a9a230ac79a42ccd629f5fcfbdadb4ed60f872",
        "c283c5f3110032827da6c4e12a3ba1be8149f956"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 05 22:50:25 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 05 22:50:25 2019 +0000"
      },
      "message": "Merge \"Match src paths with aidl package name\""
    },
    {
      "commit": "1be8c1deb22c7b6c4e811dfeaa11bd4c72575a32",
      "tree": "35e1586f78666b072f1c9e015f1f5ff0bbf052bb",
      "parents": [
        "c0be275ae5761e2c67bed5dfab3134c90c6220a4",
        "a68d87c8e520073b65af8aefee0b575f5dc2c02e"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Jun 05 14:34:47 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jun 05 14:34:47 2019 -0700"
      },
      "message": "Merge \"Match src paths with aidl package name\" into qt-dev-plus-aosp am: f4f4ab3857\nam: a68d87c8e5\n\nChange-Id: I9e20f774b68a6ede6da884603179ae355b4a1473\n"
    },
    {
      "commit": "c283c5f3110032827da6c4e12a3ba1be8149f956",
      "tree": "75621ed27c59b25edba5b1856013fccc65a01d91",
      "parents": [
        "daba8f4f19568a2cd8bf67c5e1dadb65409a7e6a"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Sep 14 21:17:46 2018 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Jun 05 16:53:14 2019 +0000"
      },
      "message": "Match src paths with aidl package name\n\nIn order for the build system to track updates to the header files\nduring incremental builds, always specify the src files using the same\npath as the package for C++ compilations.\n\nBug: 112114177\nTest: m\nChange-Id: I5fb25124a26f190c462e2e60fc75a88d48643c10\nMerged-In: I5fb25124a26f190c462e2e60fc75a88d48643c10\n"
    },
    {
      "commit": "faeab0faa7ff42eba8935d90e3f69581229002da",
      "tree": "eb041abb352aeaa1b9726ca4fd6450c40351acb2",
      "parents": [
        "5ae7d9b0ad7203944401297bf04b828c9a00f610"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Sep 14 21:17:46 2018 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Jun 05 09:41:53 2019 -0700"
      },
      "message": "Match src paths with aidl package name\n\nIn order for the build system to track updates to the header files\nduring incremental builds, always specify the src files using the same\npath as the package for C++ compilations.\n\nBug: 112114177\nTest: m\nChange-Id: I5fb25124a26f190c462e2e60fc75a88d48643c10\n"
    },
    {
      "commit": "b864e51cade27bd6965fd923d0329d3d7e5b785e",
      "tree": "9c8d06e5586586264d92b66a6a0d9e3f556cc641",
      "parents": [
        "ad0c3a7b7a9f54d6a51887cba75126a7fecb4e36",
        "745bba2da7efb7013d2c235706e226f8afa4c3a4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat May 11 03:37:34 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat May 11 03:37:34 2019 -0700"
      },
      "message": "Merge \"audio policy: add permission check for privileged attributes flags\" into qt-dev am: 68f7b18e8e\nam: 745bba2da7\n\nChange-Id: I61cddde9a77ef20dca969177787ff1e6b56e5647\n"
    },
    {
      "commit": "526d23f2b1c88af42d57105903360c3f24c32a51",
      "tree": "4486ed28861b98f9b9cc940499ea157ea1db218a",
      "parents": [
        "1a903f96ed1d3b29c82ef252136ebe1a90bb90c4",
        "5f5158fe34d8ff5b119d46ad261225b1d8d689f3"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Sat May 11 01:15:32 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat May 11 01:15:32 2019 -0700"
      },
      "message": "Merge \"APM: uid-device affinity: fix for multiple concurrent apps\" into qt-dev am: b09f621af6\nam: 5f5158fe34\n\nChange-Id: Ic766a8ef35f7d4826819ca53a51def1f6c659882\n"
    },
    {
      "commit": "68f7b18e8edaabf6c6c67b350d3126c11ba590ff",
      "tree": "d4e8c5fe2157ef8843fb31baa6b49744ca294254",
      "parents": [
        "d4e2ab1785d813aa336479a57de634f30fb13a92",
        "429844193f7149f3b642f1f260a7f20398eb3778"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat May 11 02:47:56 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat May 11 02:47:56 2019 +0000"
      },
      "message": "Merge \"audio policy: add permission check for privileged attributes flags\" into qt-dev"
    },
    {
      "commit": "b09f621af65848cb1c9336091d857ba2a8e6fdf8",
      "tree": "d0affd474b5da86022507ff88fbb82f9a748b4da",
      "parents": [
        "b14e4295b2cd6aebb77d67108dc6b639f24d25d2",
        "e2f34be1b70a564a9e7866934f0b626e98be999f"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri May 10 23:20:58 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 10 23:20:58 2019 +0000"
      },
      "message": "Merge \"APM: uid-device affinity: fix for multiple concurrent apps\" into qt-dev"
    },
    {
      "commit": "429844193f7149f3b642f1f260a7f20398eb3778",
      "tree": "96fc240567b6c528242f4a88582b587e7ba09c48",
      "parents": [
        "459e59820f8914a10c1d015fb4fa09b723cacaca"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 09 17:57:03 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 10 15:38:12 2019 -0700"
      },
      "message": "audio policy: add permission check for privileged attributes flags\n\nAdd check for privileged permission if attributes\nflags BYPASS_INTERRUPTION_POLICY or BYPASS_MUTE are set.\n\nBug: 131873101\nTest: Manual smoke tests for audio playback.\nTest: Emergency cell broadcast in\nChange-Id: I073cf669f606f0d081ff5c8d19f39b5e12efe297\n"
    },
    {
      "commit": "e2f34be1b70a564a9e7866934f0b626e98be999f",
      "tree": "e57d0b82ebd689f5734c8bedd84ecbe091d3dd72",
      "parents": [
        "3350096bf8e52b2d96f7b7ba95642d92c05e8f09"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu May 09 12:31:06 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri May 10 09:52:56 2019 -0700"
      },
      "message": "APM: uid-device affinity: fix for multiple concurrent apps\n\nAudio mix rules that contain both a match and exclude for a uid\n  or usage are ignored for routing evaluation. The implementation\n  of the uid-device affinity caused uid matches and exclusions to\n  be added to any mixes, causing previously valid mixes to be\n  discarded in the routing logic.\nThe fix consists in implementing the uid-device affinity by only\n  applying uid exclusions on mixes that:\n  a/ are compatible with the concept (mixes of players that are\n     render only),\n  b/ do not route to the selected devices\n  c/ do not have a uid match rule (such mixes are already exclusive\n     to the uid to match)\n  d/ do not already have a uid exclusion for the uid\nFix removeUidDeviceAffinities() that skipped the wrong mixes.\n\nBug: 124319394\nBug: 131180578\nTest: atest AudioHostTest#testUidDeviceAffinity\nChange-Id: I813c4cfb15956e56599740948775c32562266c21\n"
    },
    {
      "commit": "861cd6a99749555088475a71d1f36b6cbbd167f4",
      "tree": "07ff47b5224643de633770ead55c311f798cf5cd",
      "parents": [
        "6a8628239377220569e9a7b2e50ebfb41eade686",
        "b9362eeb449e9950c817288bdc6277c1b6c1e470"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 09 14:23:04 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 09 14:23:04 2019 -0700"
      },
      "message": "Merge \"audioclient: Release a recorder when AudioRecord dies\" into qt-dev am: 3965961180\nam: b9362eeb44\n\nChange-Id: I2c943a69d7105141b246f687ed7b21f97a8b7756\n"
    },
    {
      "commit": "2a49bc31d02b65c412b2af17b09eda90291606e9",
      "tree": "bccc276429e9b6b0985619e1f259fe5c1254892f",
      "parents": [
        "e6f3293b77b38867f553987e24dc82ee004071af"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 09 08:59:07 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 09 09:13:26 2019 -0700"
      },
      "message": "audioclient: Release a recorder when AudioRecord dies\n\nWhen AudioRecord object is destroyed, it must unregister\nwith AudioManager so it removes the tracker from\nthe tracking list.\n\nBug: 123312504\nTest: start and stop audio recording, check \"dumpsys audio\"\nChange-Id: Ida71512cb811d7602da349a58a91c95111078ef4\n"
    },
    {
      "commit": "35d253b72c1689f8e26e2818d41f9ee4c47547e0",
      "tree": "ee3f5dd73754897905a6ececa9b04a68f095d105",
      "parents": [
        "56ce52547018df9b8b581d8c7e73f9020803482d",
        "e97440646eaabf658a8e961ac6f68652beeb943b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 01 17:30:51 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 01 17:30:51 2019 -0700"
      },
      "message": "Merge \"AudioTrack: Fix callback timing if less than one AF mixer period.\" into qt-dev am: ed6032042b\nam: e97440646e\n\nChange-Id: I7b7a6659b4ca5459a00870a580f2cbe03ef8afc3\n"
    },
    {
      "commit": "ed6032042bad063d7907c35d45a062f68eb2aeca",
      "tree": "9f64b445b5289ad813795cb108ffc4da11108685",
      "parents": [
        "12d07c503a8ec317b4d5e7aef49036a1c36600a8",
        "eb6e65034b3ac0979bfe8b5161d57cc279a3b945"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 01 16:47:57 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 01 16:47:57 2019 +0000"
      },
      "message": "Merge \"AudioTrack: Fix callback timing if less than one AF mixer period.\" into qt-dev"
    },
    {
      "commit": "4857b03336df01e66ad13246ab245ad0b21022b1",
      "tree": "7576aed7969312ad6f0d44a230c40a77df442b13",
      "parents": [
        "f59675a4114cdd7091fae4395e4f936415837b7d",
        "a444666e1afe87a15f4d572bde7dc2375134f3bf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 30 11:59:55 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Apr 30 11:59:55 2019 -0700"
      },
      "message": "Merge \"audio: improve audio routing callbacks\" into qt-dev am: 9f5591ac13\nam: a444666e1a\n\nChange-Id: I9913d8e1a969001737906b2ec1e68a53c1fa4951\n"
    },
    {
      "commit": "eb6e65034b3ac0979bfe8b5161d57cc279a3b945",
      "tree": "1b0869da92a82e2038f053d29258458e1db79d4c",
      "parents": [
        "2f7a6072bbafd4faba8cbaf170d3cb72e37e3454"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 29 13:47:40 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 30 10:52:12 2019 -0700"
      },
      "message": "AudioTrack: Fix callback timing if less than one AF mixer period.\n\nCallback may wait nearly the entire period when double buffered\nwhich can lead to random glitches.  Limit this to half the mixer period.\n\nTest: aaudio test write_sine_callback -pl -n1 -r44100 -s20\nBug: 129545307\nBug: 131601263\nChange-Id: I6b7478728fe7ead570251662ee48a8f8adad0d5d\n"
    },
    {
      "commit": "1efa1cdb869954a043ee73131f0d1cb0875e0c18",
      "tree": "a69d22c8ef7781189252dd9a41dee2adebd4c640",
      "parents": [
        "3ee6b7a5bc0cee813bb80456ca46dade0b479937",
        "852261034a37d0078c2ed2e41f1b4daa847ec1c9"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Apr 29 16:14:57 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Apr 29 16:14:57 2019 -0700"
      },
      "message": "Merge \"AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\" into qt-dev am: 66ea392903\nam: 852261034a\n\nChange-Id: Ife2c560625df40e9ae1de84f39b53934ba5f6239\n"
    },
    {
      "commit": "09f1ed2cb4479c93859557f5b4d40e1c3732f6f2",
      "tree": "27f2c1c23755b45acdfd0832bb9e493f6b890aaa",
      "parents": [
        "2f7a6072bbafd4faba8cbaf170d3cb72e37e3454"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 24 17:45:17 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 29 09:59:31 2019 -0700"
      },
      "message": "audio: improve audio routing callbacks\n\nDo not force audio device changed callback when the client\n(AudioTrack or AudioRecord) registers to AudioFlinger but only when\nit starts playback or capture. Doing so prevents a spurious callback\nhapping at registration time where a stale device\n(previously selected by AudioFlinger thread) but irrelevant to this\nclient is indicated. This causes a disconnection of AAudio streams\ndespite no real device change.\n\nBug: 128630993\nTest: CTS: android.nativemedia.aaudio.AAudioTests, android.media.cts.RoutingTest\n      CTS Verifier: Audio Input/Output Routing Notifications Test\n\nChange-Id: Ia7f1d11490989b0287c97479466c1c07a223aab3\n"
    },
    {
      "commit": "66ea39290308e4851a5c6fe149e576b7d6249e5f",
      "tree": "f0fe4950c8d77207be8ce281623f9345e448e478",
      "parents": [
        "09940bbc0e7eb687c1b08c1ba0252852752f68ab",
        "2996f67767ff90617cc5f7801c7bd8dc67c9dd66"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 25 18:01:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 25 18:01:03 2019 +0000"
      },
      "message": "Merge \"AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\" into qt-dev"
    },
    {
      "commit": "2996f67767ff90617cc5f7801c7bd8dc67c9dd66",
      "tree": "d20af841b6537ca44a0b1bf7a839e0ba3f9c7a91",
      "parents": [
        "3208826f676b1be78e1c04692d7f17249e45c3ea"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 18 12:29:59 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Apr 24 14:49:52 2019 -0700"
      },
      "message": "AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\n\nThe client must provide a unique Record ID (RIID) when creating\nan AudioRecord. This RIID is passed down to AudioInputDescriptor\nin AudioPolicyManager which sends configuration updates\nvia IAudioPolicyServiceClient callback.\n\nBy supplying RIID, the Audio Service can coalesce start / stop\nevents coming from clients (apps) with recording configuration\nupdate events.\n\nFor AAudio MMap clients everything is handled at the server\nside because they correspond directly to audioserver objects.\n\nBug: 123312504\nTest: android.media.cts.AudioRecordingConfigurationTest\n      AudioRecordTest#testAudioRecordInfoCallback\n      MediaRecorderTest#testAudioRecordInfoCallback\n      manual testing using Oboe and Solo test apps\n\nChange-Id: I3d32241752d9a747736606dc4cb1e068e6b7aa3b\n"
    },
    {
      "commit": "599c1511cc3bc4db3d6fac2dba0ba41ce4139e7e",
      "tree": "aeb98f0388e66aa56e6a795c19cda15b9336f61d",
      "parents": [
        "f9268d7b76961102ae70105302330f14aa9d7b27",
        "00cd54e46f633f43475cf4e2045a551e7c0f1a49"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 22 10:36:18 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Apr 22 10:36:18 2019 -0700"
      },
      "message": "Merge \"AudioTrack: Fix timestamp spam\" into qt-dev am: 85ff88512c\nam: 00cd54e46f\n\nChange-Id: Iddb5366a348f330100dcff08aa7bb015dd9fa86c\n"
    },
    {
      "commit": "cf3b71546d5bb04ba45d1d784108f1681f75c827",
      "tree": "1adddca53fd68c81789997a7f6636477209dadac",
      "parents": [
        "8263e3519b6801f019e471efe4a6045b7046e4d3"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 19 18:29:21 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 19 18:39:40 2019 -0700"
      },
      "message": "AudioTrack: Fix timestamp spam\n\nTest: logcat check during Photos playback, seek, etc.\nBug: 130586209\nChange-Id: I71c5e6b83f94485be8f2e9bb164314756a16c87a\n"
    },
    {
      "commit": "d1e3315b12e1e7bcbfe1bd116c527d0a30a6a925",
      "tree": "44ce59cc4657cb70b782707c3a2e8a4f3c26a395",
      "parents": [
        "4e9661c889f728339f37cc2c16bdd9af4402dcff",
        "a74392b1adb6f6e026752b25069796fd7b33d65f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 18 13:14:09 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Apr 18 13:14:09 2019 -0700"
      },
      "message": "Merge \"audio policy: concurrent capture effects\" into qt-dev am: df8638b4c4\nam: a74392b1ad\n\nChange-Id: I4fc5ecb19a8a5240f05b1e558924dcf47f6d6ed1\n"
    },
    {
      "commit": "a54054bc1f09fcdd65d0eaec55fe46eb7cd55f65",
      "tree": "d7982c607520fb33d11e23253cff4f322751183c",
      "parents": [
        "e1ad4b14ca5bf3d4e7008bbf2ae2134d9e9cf7df",
        "599e14911b09aa31b902d40e473fdd9039683a18"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 19:55:01 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Apr 17 19:55:01 2019 -0700"
      },
      "message": "Merge \"refactor mutexes for audio effects in audio flinger and audio policy\" into qt-dev am: aceea8bddd\nam: 599e14911b\n\nChange-Id: Id5fc98f6ef4179951abc16c7036a5e51262ce671\n"
    },
    {
      "commit": "b20cf7db9e669169bbae5f0da97018a866c3f634",
      "tree": "96e88e1850e1fb27fcc0bad53cc575e837d86c60",
      "parents": [
        "aceea8bddd0324df4414673bc39a3f38fe16e8a1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 05 19:37:34 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 19:27:20 2019 -0700"
      },
      "message": "audio policy: concurrent capture effects\n\nAdd pre processing effect management for concurrent capture scenarii.\nWhen several clients on the same input stream have enabled audio effects,\nonly the effects attached to the top priotity client are active.\nOther effects are suspended.\n\nAdd AudioFlinger API to suspend/restore audio effects build on top\nof exisiting internal effect suspend mechanism.\n\nRecordThread now supports more than one effect chain.\n\nAOSP pre processing implementation supports more than one effect session\nper input.\n\nRefactor AudioPolicyManager::closeAllInputs() to call closeInput() on\nall inputs instead of partially duplicated code.\n\nBug: 128419018\nTest: make\nChange-Id: I685286da4c2905a8894a4354679f9787b1400621\n"
    },
    {
      "commit": "6c79632bbece71f7af0c2453bb62a5d6f0cca664",
      "tree": "a70a17d1f723b7e0241bb762bf5478e3c9947348",
      "parents": [
        "2cb1a8ccbd402d74a06ee34721f5dd787ecb396f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 09 14:13:17 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 10:29:30 2019 -0700"
      },
      "message": "refactor mutexes for audio effects in audio flinger and audio policy\n\nRemove effect specific mutex (mEffectLock) in AudioPolicyService: Due to\nconcurrent capture (among other reasons), it is necessary that the audio\npolicy manager state preserved by mLock includes audio effects\nregistration and enabling.\n\nMoved all audio policy API calls from audio flinger out of locked regions\nfor audio flinger, thread and effects mutexes to avoid cross deadlocks\nbetween audioflinger and audio policy manager:\n- centralized audio policy API calls in EffectModule::updatePolicyState()\n- the enabled state now reflects the state requested by the controlling\nhandle, not the actual effect processing state: a suspended effect is\nnow considered enabled.\n\nA new audio policy manager API moveEffectsToIo() is added to atomically\nhandle moving effects to a new input or output without having to call\nunregister \u003e register \u003e enable sequence.\n\nAlso fix assert in setStreamVolume to match volume group refactoring\nin audio policy manager.\n\nBug: 128419018\nTest: CTS tests for audio effects.\nTest: manual tests with Duo calls, Play Music, Youtube, notifications\n with and without Bluetooth and wired headset.\n\nChange-Id: I8bd3af81026c55b6be283b3a9b41fe4998e060fd\n"
    },
    {
      "commit": "a4f6c8f03c36b2a19a429de307a1b2b31ce1860f",
      "tree": "652cd20a1e9115b0e193e17a9c533f8148b52f52",
      "parents": [
        "57d466ee83bace3d5358c197ca21958186e53c8f",
        "57970a23d96d91fc4bfa65d87aab93afa61ced9a"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Tue Apr 16 15:21:43 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Apr 16 15:21:43 2019 -0700"
      },
      "message": "Merge \"AudioFlinger::Thread ensure proper add / sub\" into qt-dev am: 654438952d\nam: 57970a23d9\n\nChange-Id: I23b380a8aaf56fb278cf187fba659b92cb51c8eb\n"
    },
    {
      "commit": "654438952d760d80986270db81d498f1b6e110b4",
      "tree": "3b3da8dedee329a89f54804513fc39aad0d92061",
      "parents": [
        "e46a14777671ec310b35aa1b0a90510f29bf8085",
        "95e3768e1936673cacf185c721f9b2c117a94a0a"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Tue Apr 16 19:07:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 16 19:07:03 2019 +0000"
      },
      "message": "Merge \"AudioFlinger::Thread ensure proper add / sub\" into qt-dev"
    },
    {
      "commit": "a696e15d09461bce5318203cb9abe45109d6d513",
      "tree": "2235beac22faa3d24ff62c979c2d18741588fedc",
      "parents": [
        "895c7330934756db28d4a158614ce02dd712bca1"
      ],
      "author": {
        "name": "Hayden Gomes",
        "email": "haydengomes@google.com",
        "time": "Fri Apr 12 11:57:27 2019 -0700"
      },
      "committer": {
        "name": "Hayden Gomes",
        "email": "haydengomes@google.com",
        "time": "Mon Apr 15 16:15:02 2019 -0700"
      },
      "message": "Adding comment to sync native and java matchers\n\nBug: 130417872\nTest: Presubmit linting for comment change\n\nChange-Id: I64a5587e7aa04a0bb140a5ff3d4fc924e6a9ba29\n"
    },
    {
      "commit": "95e3768e1936673cacf185c721f9b2c117a94a0a",
      "tree": "993e603d53a6bf44744b94a394de2c790d81ed2f",
      "parents": [
        "8d14f5ccff2440f39630965486e9601ab6d007b6"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Fri Apr 12 11:13:36 2019 -0700"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Mon Apr 15 14:11:36 2019 -0700"
      },
      "message": "AudioFlinger::Thread ensure proper add / sub\n\nBug: 126772841\nBug: 130371615\nTest: 24 hours recording with 64 bit audioserver\nChange-Id: I71305448ee194d1cc325ab238f1681aee93ab18d\n"
    },
    {
      "commit": "e9a90980ea48c3bb95d6aba755b4bb2095ba3e80",
      "tree": "d7a5ed3f900a75222ff0dec565292a9eada84f46",
      "parents": [
        "fa36d4b242bd0dcd2f1ce2ea6e0f838b7191a042",
        "393f0e05e3fa7351c81a470e5bd841451bcc13ae"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 11 01:47:12 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 11 01:47:12 2019 +0000"
      },
      "message": "Merge \"audiopolicy: fix attributes match helper function\" into qt-dev"
    },
    {
      "commit": "4066749eac05f7b00bbeb2242f3136409c247338",
      "tree": "33c0cec025f755055974bc085520c6477b51b8fe",
      "parents": [
        "04a1833ef4a728ec077ed4680a6624e55dfe754c",
        "3b8c633f3907218cda99f1f65e633b76419640bf"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 10 22:28:48 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 10 22:28:48 2019 +0000"
      },
      "message": "Merge \"AudioTimestamp: advance first timestamp time after start if stale\" into qt-dev"
    },
    {
      "commit": "393f0e05e3fa7351c81a470e5bd841451bcc13ae",
      "tree": "47d865b1e143a717167b2fff0dd6da2e30b3966b",
      "parents": [
        "698d353587d6d0563a6451b2d701358e6cb4496e"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Apr 10 09:09:08 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 10 12:30:39 2019 -0700"
      },
      "message": "audiopolicy: fix attributes match helper function\n\nRegression caught on Attributes referred by their flags only\n(like BT SCO).\nClient may have more flags than the product strategy, checks\nto be done on all the flags of the product strategy are requested\nby the client.\n\nBug: 130284799\nTest: make\n\nChange-Id: Ie8d41a592342bc0a7a0326f9766e7e7503154e62\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "d962630103958576ff270b2994a8e181a0017b42",
      "tree": "bc6140f248e70010614f4cc68bf98bc184ebd0b1",
      "parents": [
        "81526c7e3e632e6e183b9c94ce554f701e4cfc6d",
        "98731a2c2559d9986b0892c6a8c8ffca17cd68fc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 10 02:35:52 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 10 02:35:52 2019 +0000"
      },
      "message": "Merge \"AudioTimestamp: Use current time when data pipeline is empty\" into qt-dev"
    },
    {
      "commit": "3b8c633f3907218cda99f1f65e633b76419640bf",
      "tree": "1b886e30ef072a48d9d99cc3adac29a82d102384",
      "parents": [
        "98731a2c2559d9986b0892c6a8c8ffca17cd68fc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 03 19:29:36 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 09 15:49:14 2019 -0700"
      },
      "message": "AudioTimestamp: advance first timestamp time after start if stale\n\nTest: Photos, File playback, AudioTrackSurroundTest#testPlaySineSweepBytes\nBug: 113294730\nBug: 118506063\nBug: 119895849\nBug: 120631792\nChange-Id: I83ec1e4c0ae2318fb69744a6265663a50682c485\n"
    },
    {
      "commit": "98731a2c2559d9986b0892c6a8c8ffca17cd68fc",
      "tree": "3cd6a839c5eb38b181a19c59ae008ae0c4186bee",
      "parents": [
        "0e5a1b3bb64d9a5d38903770e018379856401efd"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 08 19:19:07 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 09 15:27:46 2019 -0700"
      },
      "message": "AudioTimestamp: Use current time when data pipeline is empty\n\nHandles change in Q, where we do not return an invalid kernel time\nin the extended timestamp when there is a reported error from the HAL.\n\nTest: Photos, File playback, AudioTrackSurroundTest#testPlaySineSweepBytes\nBug: 113294730\nBug: 118506063\nBug: 119895849\nBug: 120631792\nChange-Id: I90f2c7c314baa474c3dd3a24042f1d4b8bc0a12b\n"
    },
    {
      "commit": "06c6b9a0f9c964270d78d62a08e964d9212faa0c",
      "tree": "b10f5e347742cddc2e4fc2c188c7099c5b72982b",
      "parents": [
        "0e5a1b3bb64d9a5d38903770e018379856401efd"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 03 16:46:37 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 04 18:06:37 2019 +0000"
      },
      "message": "fix AudioAttributes matching rule in AudioProductStrategy\n\nThe matching rule on audio attributes flags must be that ALL flags\nset in the reference attributes are present in the compared attributes\nand not just some flags.\n\nBug: 129721367\nTest: change volume in Play Music\nChange-Id: I6b5ada937aa169dbf1b0315d56172ae3b7bb4f47\n(cherry picked from commit c0c6074f55a0775ff127814c58c56a748e1a1b50)\n"
    },
    {
      "commit": "b99cc75f01c8e4d76295f3efcd768ebd9d8942c3",
      "tree": "b7c3e27a797971702af7161fdf1a682fa9a9c2a5",
      "parents": [
        "68646ba64107a19ac0d1af781ddd0b1edd2ed57a"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Mar 21 20:52:24 2019 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Mar 22 17:21:33 2019 -0700"
      },
      "message": "Add application wide capture policy\n\nApps were previously forced to set their allowed capture policy from\neither their manifest which is not flexible or from each track which is\na very fine grain but difficult when using libraries like exoplayer.\n\nThus add an application level policy set with AudioManager.\n\nTest: atest android.media.cts.AudioPlaybackCaptureTest\nBug: 111453086\nChange-Id: Ic890b5b041affea757fbd3f2707ff2ce18771828\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "36b17553b2c3aad4d8f600edd2e82f9a583ee05a",
      "tree": "b07a90eaf6bcba6f06fd56ab3976d1c71c7fd712",
      "parents": [
        "791d3370830b8e22b8bbaf41c3de900de48d2be3"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Mar 07 18:48:07 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Mar 22 17:21:30 2019 -0700"
      },
      "message": "Introduce a system APC with its corresponding opt-out\n\nFor system application with the new permission CAPTURE_MEDIA_OUTPUT, or\nCAPTURE_AUDIO_OUTPUT, allow to capture the audio of playing apps that\nallow it.\n\nTest: adb shell audiorecorder --target /data/file1.raw\nTest: atest android.media.cts.AudioPlaybackCaptureTest\nBug: 111453086\nChange-Id: I5bfca51e48992234508897c595a076d066db26b2\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "1234008771662d2b250d6d4972adb04de963fb0d",
      "tree": "d050c75b3935ed9d20676312df0e7cd1d94cd13c",
      "parents": [
        "60c73a445b632cc2e233b1a275efeee7414a41a4"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Tue Mar 19 09:35:05 2019 -0600"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Thu Mar 21 21:51:49 2019 -0600"
      },
      "message": "API changes in MicrophoneDirection\n\nBug: 128523813\nTest: Build, Testbed app\n\nChange-Id: I7b5ee8ba4eec1090866d8aef891a98d50cd09cc5\n"
    }
  ],
  "next": "28da31bbda1f969924c25f72e244a33debfde779"
}
