)]}'
{
  "log": [
    {
      "commit": "8b4e05ecee60bf08c9121c61d69526e076495766",
      "tree": "9879d2a21175f35e47545c03ec1a2a2ba46de933",
      "parents": [
        "0bc6f60e1f036380bd48d022631e6561b90f210c"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Dec 17 12:12:09 2019 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jan 22 13:31:58 2020 -0800"
      },
      "message": "aaudio: add AAudioStream_release()\n\nSplit close into close and release phases.\nRelease() will release hardware and service resources.\nClose() will delete the stream object.\nThis allows us to defer the deletion and avoid race conditions.\n\nThe CLOSING state is used to indicate that a stream has been released.\n\nAdded some test cases to test_various.cpp.\nA lone call to close() will automatically call release() so we should\nhave good code coverage for testing.\n\nBug: 136288001\nTest: adb shell test_various\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Ia648838f30c521ba101f55259dbcd4594c1263cd\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": "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": "56307881608d21b504437e51cea0806043f95a4b",
      "tree": "c0728d3ab5172b3af00bc0d1410b52cf559d4215",
      "parents": [
        "bbf2be940fdc28029d3fe76826271063cff9e675",
        "346f2cf971221d73ca84af752c4e6ec9ca247d2c"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Dec 06 00:15:34 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Dec 06 00:15:34 2019 -0800"
      },
      "message": "Merge \"oboeservice: hold onto linked binder\" am: 6a9d20eebf am: 51c29bd32d\nam: 346f2cf971\n\nChange-Id: Ia017c274871f38209fd8edb67153f852026c71ae\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": "37a6163f3f7e125f617ffed1d02b27dcd85b9b7f",
      "tree": "7f089e9b6ff73d7ea3fed249b5e70fccaca337e5",
      "parents": [
        "b2872d478fbb66eddd59d8a35d81796850927153"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 04 14:06:50 2019 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 04 23:29:21 2019 +0000"
      },
      "message": "oboeservice: hold onto linked binder\n\nBefore, in Android 10, this would have been a small leak because\nunlinkToDeath is not called, but now, objects are automatically\nunlinked. However, this presents a problem since you must hold onto\na binder in order to linkToDeath. This now holds onto the binder\nand is relying on the automatic-unlinkToDeath behavior.\n\nFixes: 145675653\nTest: atest CtsNativeMediaAAudioTestCases\narm64-v8a CtsNativeMediaAAudioTestCases: Passed: 122, Failed: 0, Ignored: 0, Assumption Failed: 0\nTest: after using app and killing which uses AAudio MMAP stream,\ndumpsys output for media.aaudio is cleaned up:\n\n------------ AAudio Service ------------\nStream Handles:\nAAudioClientTracker:\nAAudioEndpointManager:\nExclusive MMAP Endpoints: 0\n ExclusiveSearchCount:  3\n ExclusiveFoundCount:   0\n ExclusiveOpenCount:    1\n ExclusiveCloseCount:   1\n\nShared Endpoints: 0\n SharedSearchCount:     1\n SharedFoundCount:      0\n SharedOpenCount:       0\n SharedCloseCount:      0\n\nChange-Id: I2ef141320dc3ef0135fb7ef002d85377d06a75c2\n"
    },
    {
      "commit": "ef34be5426e96fa2fecc551e1fe196fbb862b220",
      "tree": "3335f4ce50a8307b0684a0c5a15fcf3b4ec84b52",
      "parents": [
        "b362012ad43022a0686cc2ca7fe2eb64d377a202"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Sep 26 13:45:25 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Oct 04 16:56:14 2019 -0700"
      },
      "message": "aaudio: add histogram to clock model\n\nMeasure distribution of MMAP timestamp lateness.\nThis is used to discover the actual DSP timing behavior.\nTurn histogram log on or off using a property.\n\nTest: adb root\nTest: adb shell setprop aaudio.log_mask 1\nTest: run an AAudio MMAP program\nTest: adb logcat | grep ClockModel\nChange-Id: I910831d1feee43c59d1af2ac3135a910fef36fb2\n"
    },
    {
      "commit": "42e1130e8be8b2527a8d17b1748592ae004e85c0",
      "tree": "61380db6ef5d30460357c8af0b962bed4c5d071a",
      "parents": [
        "c3af5ba966b7aaddfd96bac149f04a4f43c49f9c",
        "0db4d66d132006ab72f41ad76c7358e5cbae0a32"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Tue Jul 23 11:11:10 2019 +0200"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jul 23 10:48:45 2019 +0000"
      },
      "message": "resolve merge conflicts of 0db4d66d132006ab72f41ad76c7358e5cbae0a32 to stage-aosp-master\n\nTest: I did not test this\nMerged-In: If93118ed2c266faf2964abf21e17b0b13df493d2\nChange-Id: Iaba9829407bd2b625e91ac7a4c8bc8941fa7d569\n"
    },
    {
      "commit": "d81a84a886e13c61a613b35e4a998ad8e61a0d8f",
      "tree": "e1ca28f807ed6d384e3526de1f0f2049548f17b6",
      "parents": [
        "10b5ef5d180bc5b0a2116f112b87153b16c3de00"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Jul 17 13:55:16 2019 +0200"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Thu Jul 18 15:25:14 2019 +0200"
      },
      "message": "Split libaaudio.so to internal and NDK part\n\nThis change moves almost everything from libaadio.so to\nseparate libaaudio_internal.so library. This is done to\navoid exporting symbols which apps are not allowed to use\nbut have them available for platform libraries by exporting\nthem from libaaudio_internal.so\n\nBug: http://b/69603741\nTest: make\nMerged-In: If93118ed2c266faf2964abf21e17b0b13df493d2\nChange-Id: If93118ed2c266faf2964abf21e17b0b13df493d2\n"
    },
    {
      "commit": "2d2f17cc1e15b7a4a21c94d6c6d125eabf740fc9",
      "tree": "c1023826407ccf2d1f88fa1e8d69ee8cae579136",
      "parents": [
        "ed84e713b3b84aa189459c2412e65a4be257bc89"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Jul 17 13:55:16 2019 +0200"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Thu Jul 18 14:09:16 2019 +0200"
      },
      "message": "Split libaaudio.so to internal and NDK part\n\nThis change moves almost everything from libaadio.so to\nseparate libaaudio_internal.so library. This is done to\navoid exporting symbols which apps are not allowed to use\nbut have them available for platform libraries by exporting\nthem from libaaudio_internal.so\n\nBug: http://b/69603741\nTest: make\nChange-Id: If93118ed2c266faf2964abf21e17b0b13df493d2\n"
    },
    {
      "commit": "6bddd7d48f943b81c1789325478ea4e9f2b64ed9",
      "tree": "d256c13568c285104e786114c09f7004c131a151",
      "parents": [
        "17f60dd7c5b29f6d2d0f798fd01fb8ad61c3a1ef",
        "8c9e502267bcf9e61f9901e0c5820a3066986b9b"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed May 29 10:44:40 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 29 10:44:40 2019 -0700"
      },
      "message": "Merge \"Remove reference to non-existant directory\" am: d96e627971\nam: 8c9e502267\n\nChange-Id: I5dcfc42ce9160a878b4fce047ce2f681b27ea012\n"
    },
    {
      "commit": "30a1c51220085b32cfb3c413ff5b8831593ebac9",
      "tree": "185d3f6295b2310a054d3d5fff37da101082f310",
      "parents": [
        "60c33d85d08dae0a1fc33829ad0479950912151a"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue May 28 13:54:07 2019 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue May 28 13:54:07 2019 -0700"
      },
      "message": "Remove reference to non-existant directory\n\nThis was fixed when converting to Android.bp in internal master, so\nthat\u0027s the Merged-In reference.\n\nTest: treehugger\nChange-Id: I6a503ac7f3c283b7ef6a657c100901469447a22b\nMerged-In: I7061e99da18f5f7fad00527f01bf97ae6cebea2f\n"
    },
    {
      "commit": "a9e3a3cd8a6a70a5f8c18f9d11638f98404a2094",
      "tree": "7a6429dfd3e52d356b4a7d5cecc54b06c2af340c",
      "parents": [
        "19cd95e5038688a281bfb363a566d073bafb4a0c",
        "1209b4817ccc39b355fa90c8c741d83816d3fb97"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 07 17:00:25 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 07 17:00:25 2019 +0000"
      },
      "message": "Merge \"Convert aaudioservice (oboeservice) to Android.bp\""
    },
    {
      "commit": "0b22b6ba9bdc8e4322f8651d060e9319bc24af1e",
      "tree": "96ecedcfe01f570c6abaad0cf458eb8342a358f7",
      "parents": [
        "9a3ce7c3401cf161c5e2a6ecbe4c4ba3a4aa149e",
        "1b835f6a2f4b0945647a56c156f548407baf052d"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu May 02 20:22:06 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 02 20:22:06 2019 -0700"
      },
      "message": "aaudio: protect against null client am: ef7eaaf8d8\nam: 1b835f6a2f\n\nChange-Id: I09ad84bbdf85b3a8c57b8379a4d36f8c48707239\n"
    },
    {
      "commit": "ef7eaaf8d873e9d832673fd0a8e07371fa47a0a0",
      "tree": "16af72980d4c2e09fb45be30e44a52eb4575236a",
      "parents": [
        "2ddd17ca5c49fe02c459b7026d4c271bf76c4e3c"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed May 01 11:26:35 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu May 02 12:51:47 2019 -0700"
      },
      "message": "aaudio: protect against null client\n\nAAudioService would fail if a null client was passed.\nTwo null checks were added. One where we know the null\nclient first appears. And one where the client is first used\nin case other calls are passing null.\n\nBug: 116230453\nTest: Bug has a POC apk that triggers the bug.\nTest: Look for messages like:\nTest:      AAudio  : BnAAudioService::onTransact() client is NULL!\nChange-Id: Id9c4fc154226ab40df97335da8bc9361cfc99a73\n"
    },
    {
      "commit": "1209b4817ccc39b355fa90c8c741d83816d3fb97",
      "tree": "c9120fe362737b48f298c185e7b19a7ed8c32a78",
      "parents": [
        "1c2813bc5c609f1c3b59c92d086523a72e7b6e1e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Apr 26 16:20:57 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Apr 26 16:20:57 2019 -0700"
      },
      "message": "Convert aaudioservice (oboeservice) to Android.bp\n\nRemoved additional includes previously added by LOCAL_C_INCLUDES,\nnone of them are actually needed.\n\nBug: 121208203\nTest: make\nChange-Id: I7061e99da18f5f7fad00527f01bf97ae6cebea2f\n"
    },
    {
      "commit": "f15051bd11214aa0dd4c1f911321386121d5cefb",
      "tree": "e6e407817e0047f6d2b14671eb77f5a97fc36381",
      "parents": [
        "657b64c7b9de71a26e61746ff444545db99baa22",
        "a10b3d52cbd1177050a00ae108d9c110e41bad88"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 23 20:27:14 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Apr 23 20:27:14 2019 -0700"
      },
      "message": "Merge \"aaudio: use actual DSP burst size in timing model\" into qt-dev am: bde241b71f\nam: a10b3d52cb\n\nChange-Id: I5fa54fd6be7e9d42e72cfd2a8511bd5e1f751bb4\n"
    },
    {
      "commit": "3c4e6b503848623a0ff9bb1bee78e5b0d7c248ea",
      "tree": "f9e53f6f37f77695bbc4d4576854d2cf3bb55935",
      "parents": [
        "9730f4d7d27c49bfdfa69f3b7555b5a641a8499d"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jan 22 15:53:36 2019 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 23 17:16:29 2019 +0000"
      },
      "message": "aaudio: use actual DSP burst size in timing model\n\nThis will more accurately track the read or write\nposition of the DSP.\n\nThe client sometimes aggregates multiple hardware bursts\nto avoid waking up too often. This can make it look like the DSP has\nprocessed a larger amount of memory than it really has.\nWith this change, the timing model will advance in sync with the hardware.\n\nBug: 117834966\nBug: 130911274\nTest: see bug for repro steps\nChange-Id: Id22f1f313e02f0514665ee5ac144cab4684e3bc1\n"
    },
    {
      "commit": "4e9661c889f728339f37cc2c16bdd9af4402dcff",
      "tree": "3601e838518c71859afff773997beb925ac41a35",
      "parents": [
        "df9167614fd36456c895881cd8f074e18bd7b519",
        "2ebf6629605a0d44cb83f3dfbd0130132a686cda"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 18 17:57:31 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 18 17:57:31 2019 +0000"
      },
      "message": "Merge \"AAudio: bump priority of AAudio Mixer to match FastMixer\""
    },
    {
      "commit": "2ebf6629605a0d44cb83f3dfbd0130132a686cda",
      "tree": "2190b4af2d71c552118c87c7f3c3861be8f09457",
      "parents": [
        "8946fa33044a8b216f85d962b49b52fe36642c0b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 17 11:10:25 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 18 09:04:30 2019 -0700"
      },
      "message": "AAudio: bump priority of AAudio Mixer to match FastMixer\n\nService RT thread should run at a slightly higher priority because\nit generally does less work and is more critical.\n\nBug: 71817389\nTest: Run an AAudio stream in SHARED mode.\nTest:   adb shell ps -e -T -o uid,pid,tid,ppid,pri,ni,cmd| grep AAudio\nTest: See bug for more test instructions.\nChange-Id: I762af6ac1a9883d47b4c42bfe9f8455416251a12\n"
    },
    {
      "commit": "29ccc29d482b6e4a2c46c2b8e731d44938888e32",
      "tree": "84034c7928d373aec61f9076d26065197a541693",
      "parents": [
        "2cb1a8ccbd402d74a06ee34721f5dd787ecb396f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 15 08:58:08 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 17 18:22:37 2019 +0000"
      },
      "message": "aaudio: reduce error logging, improve security\n\nReduce log spam and error logging as part of the Green Log effort.\nReplace logging of addresses with integer IDs.\n\nBug: 36785118\nBug: 122073229\nBug: 130569151\nTest: Open an AAudio stream at 44100 and look at logcat.\nTest:   adb shell write_sine_callback -pl -r44100\nTest:   adb logcat | grep -i aaudio | grep \" E \"\nTest: Should see no \"E\" logs from AAudio.\nTest: Should see no addresses from AAudio.\nChange-Id: I1d4e0bc349095f818fad52603d2bb8e7317d3681\nMerged-In: I1d4e0bc349095f818fad52603d2bb8e7317d3681\n(cherry picked from commit 7ba46558fbd28b555ba751837cc9094a7c785f75)\n"
    },
    {
      "commit": "7ba46558fbd28b555ba751837cc9094a7c785f75",
      "tree": "b71f408fcd6398781692ea48ff4e0be6d066dba0",
      "parents": [
        "8946fa33044a8b216f85d962b49b52fe36642c0b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 15 08:58:08 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 16 15:59:36 2019 -0700"
      },
      "message": "aaudio: reduce error logging, improve security\n\nReduce log spam and error logging as part of the Green Log effort.\nReplace logging of addresses with integer IDs.\n\nBug: 36785118\nBug: 122073229\nBug: 130569151\nTest: Open an AAudio stream at 44100 and look at logcat.\nTest:   adb shell write_sine_callback -pl -r44100\nTest:   adb logcat | grep -i aaudio | grep \" E \"\nTest: Should see no \"E\" logs from AAudio.\nTest: Should see no addresses from AAudio.\nChange-Id: I1d4e0bc349095f818fad52603d2bb8e7317d3681\n"
    },
    {
      "commit": "f878a8dc99922d0af080bb7d5f61b00e62d00e65",
      "tree": "0edaab0445b841d11fe2c6a22551b6d243bdf2f2",
      "parents": [
        "235684f2c8d9f37c8a8358739a2c2c50164816b0"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 29 17:23:00 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 02 13:52:51 2019 -0700"
      },
      "message": "aaudio: only send timestamps if queue less than half full\n\nThis prevents the stream from getting suspended\nif not read or written fast enough.\n\nBug: 129140370\nTest: test_full_queue\nChange-Id: Icc5ddc72c99fb3c518736f2a50d6c6a0276ee196\n"
    },
    {
      "commit": "68646ba64107a19ac0d1af781ddd0b1edd2ed57a",
      "tree": "ac3003975099bef26b63302164468b766c6c9aad",
      "parents": [
        "36b17553b2c3aad4d8f600edd2e82f9a583ee05a"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Mar 20 13:26:49 2019 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Mar 22 17:21:33 2019 -0700"
      },
      "message": "Add aaudio APC opt-out\n\nThe opt-out was only present in the java API but not on the native ones.\n\nTest: atest test_attributes\nChange-Id: I1b84f1a428508e00de65e615b59405b9ee2ba009\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "a53ffa67b35a7e57efec57811e4f915d1caac1eb",
      "tree": "bb234b23e9f5a749e490a84d9fe161195af8ece7",
      "parents": [
        "9f81192d77a62564dc1e2c7dad1afe601784a7b9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Oct 10 16:21:37 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 19 15:43:55 2019 +0000"
      },
      "message": "aaudio: rename timestamp variables\n\nThere were several different timestamp variables with slightly\ndifferent meaning but with the same name.\nThat made it hard to debug the code.\n\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Iebf438676925c698377abe02c81f3d559829318a\n"
    },
    {
      "commit": "762365c3ee5f212d4995e002e1c53b221b587c92",
      "tree": "ec2322a17d6bb3c9c741f0b6915239c70fa161a0",
      "parents": [
        "d00c4607a5f7d25dfe925a20a1fc5fd7cfcee67a"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Dec 10 16:02:16 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Dec 13 17:39:26 2018 -0800"
      },
      "message": "aaudio: suspend a stream when its queue is full\n\nThis will prevent log spam when AAUDIO_CALLBACK_RESULT_STOP\nis returned from an audio callback.\n\nBug: 120845500\nTest: test_return_stop.cpp\nChange-Id: Icfe1541d6fa7b045285ac3dfbb75dfed5424d49b\n"
    },
    {
      "commit": "ef4b27d1d1123b452316f722a0eacc282d3fa94a",
      "tree": "a0acf7f1501bebe58caa1fb15fc118072b71a305",
      "parents": [
        "dd44e3c5f2d199589c040a422b3e343c796bd362",
        "538d53267bee085e08d489546bde620520b5b188"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Dec 13 16:23:10 2018 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Dec 13 16:23:10 2018 -0800"
      },
      "message": "Merge \"Fix performance-for-range-copy warnings\" am: 1ce37f1de3 am: c9584831bc\nam: 538d53267b\n\nChange-Id: I15dfaa7eb997c7caf497b488384477952513cef7\n"
    },
    {
      "commit": "3ef324d11cc4b6f84c147998fcf02c3a528fc2b8",
      "tree": "9c31c781e4172fb511af7552838c6a63b0f04ac9",
      "parents": [
        "14c577fac81b8fdcc75e4bf9243f16bd624ba58b"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 11:48:12 2018 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 11:48:12 2018 -0800"
      },
      "message": "Fix performance-for-range-copy warnings\n\nBug: 30413223\nTest: make with WITH_TIDY\u003d1 DEFAULT_GLOBAL_TIDY_CHECKS\u003d-*,performance*\nChange-Id: Ia63c695575d2602ff7e67db874d423b99f4daeef\n"
    },
    {
      "commit": "a3901e95412eacedb5682eb4cda9d63d3ef9f734",
      "tree": "cbd706244c858d132efa8dd103be42b855ce4452",
      "parents": [
        "1268b28c5c65691532d3ffb503a199c677c801b9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Oct 08 13:54:38 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Dec 03 15:46:11 2018 -0800"
      },
      "message": "aaudio: reduce log spam\n\nRemove logging that is redundant or no longer needed.\n\nTest: write_sine_callback -pl\nTest: write_sine_callback -pl -r44100\nChange-Id: I9004d32509757847764b9533c5cda743c6bd81a0\n"
    },
    {
      "commit": "e816ba20c5e8bb1e5bd8cb9ee150445ae45dd5be",
      "tree": "1a8afb00bfab3bae82f0ed35aa59255be2224851",
      "parents": [
        "60109b6bf5fe16002da767bb92b7c7cbfd6a1790",
        "8f02e2d647a53bc24cc5a2341e625fedbd58a33d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Wed Nov 28 22:34:23 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 28 22:34:23 2018 +0000"
      },
      "message": "Merge \"aaudio: fix race condition in timestamp path\""
    },
    {
      "commit": "156dc25a705c77d50f1c6a3e422a8ceea37ffa13",
      "tree": "1f36e907f21d61ee476a95e681e9d823b6460b15",
      "parents": [
        "e4bd729a5dc10abb9619e427e90a8fe1f493db42",
        "5758fc4785d6cf0f84cad0174379012292684e63"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 23 10:09:06 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Oct 23 10:09:06 2018 -0700"
      },
      "message": "Merge \"AAudio: Change dumpsys denial to Denial\" am: 4cc8f84d26 am: e4814339b2\nam: 5758fc4785\n\nChange-Id: I21b5ebf6d2d781f926b39e14213801dfdf332aba\n"
    },
    {
      "commit": "6357b5f0788d54058cb740c8be96eb87b3fd2dba",
      "tree": "f9937c171a8e022681dbb74d10401805dc42f699",
      "parents": [
        "efd99ec863f5a69f20dfacea3f6f4835962c5362"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 22 19:47:04 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 22 19:54:14 2018 -0700"
      },
      "message": "AAudio: Change dumpsys denial to Denial\n\nSee android.security.cts.ServicePermissionsTest#testDumpProtected\n\nTest: compile\nBug: 117909592\nChange-Id: Ie9972e37b8c589630e24373945ee8eaa4216b542\n"
    },
    {
      "commit": "8f02e2d647a53bc24cc5a2341e625fedbd58a33d",
      "tree": "d3d7603c7e8332f151ad95ad0ea5e060a18da687",
      "parents": [
        "efd99ec863f5a69f20dfacea3f6f4835962c5362"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 11 13:30:56 2018 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 22 11:45:13 2018 -0700"
      },
      "message": "aaudio: fix race condition in timestamp path\n\nThere was a potential race between setting the first timestamp\nand reading the first timestamp that could cause the timestamp service\nthread to exit. This would cause the client to not get any timestamps.\nThen the timing model would not advance and the stream would stall.\nThis could result in read() or write() returning zero,\nor a TIMEOUT error.\n\nThis was rare except for some devices that had different\ntiming in the HAL.\n\nBug: 68271891\nBug: 117557847\nTest: adb shell write_sine_callback -pl -m2 -n2 -s2 -c2 -l100\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Ib0974a576aaa17ff8de40899e60ed56015027bd7\n"
    },
    {
      "commit": "56d34f252ad803873fa4798b4cd0f4c6d28d2670",
      "tree": "9967806e97967f0ce9f06cabcb97ca0d2eea75d5",
      "parents": [
        "4cc873cc1dcf9e69572c2e52b68af1aebea0ad98"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 11 13:30:56 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 11 13:38:12 2018 -0700"
      },
      "message": "aaudio: fix race condition in timestamp path\n\nThere was a potential race between setting the first timestamp\nand reading the first timestamp that could cause the timestamp service\nthread to exit. This would cause the client to not get any timestamps.\nThen the timing model would not advance and the stream would stall.\nThis could result in read() or write() returning zero,\nor a TIMEOUT error.\n\nThis was rare except for some devices that had different\ntiming in the HAL.\n\nBug: 68271891\nBug: 117557847\nTest: adb shell write_sine_callback -pl -m2 -n2 -s2 -c2 -l100\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Ib0974a576aaa17ff8de40899e60ed56015027bd7\n"
    },
    {
      "commit": "0127c1be07d63e046e136126cd465c3fa8977768",
      "tree": "4eb611ec5d010becd3583f93c640cc9468acb3b3",
      "parents": [
        "fdfae2898f0785f19de198ed00488e03bf52bca9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 29 13:48:06 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 07 11:08:24 2018 -0700"
      },
      "message": "aaudio: use new flowgraph to simplify processing\n\nConstruct a flowgraph based on the source and destination\nformat and channelCount. This is groundwork for supporting 24-bit\nPCM formats.\n\nAlso cleaned up handling of device related format.\n\nThis CL removes more code than it adds.\n\nBug: 65067568\nTest: write_sine_callback.cpp -pl\nTest: write_sine_callback.cpp -pl -x\nTest: input_monitor -pl\nTest: input_monitor -pl -x\nChange-Id: Ia155bff0164912011d09b61b54f983ccf4490bd1\n"
    },
    {
      "commit": "15f97c996f29c780f52fe3504fabd08dbde066ba",
      "tree": "8998772c04ba3863be56cc2c1c98c56f688dbf48",
      "parents": [
        "0d97cec0533f47237b16b294fd92a827f2ebdc6f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Sep 04 14:06:27 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Sep 05 09:25:11 2018 -0700"
      },
      "message": "aaudio: set to SHARED when EXCLUSIVE fails\n\nSHARED streams and endpoints were being created with sharing mode\nset to EXCLUSIVE. This was confusing the close() code and caused a hang.\n\nNow we create a modified Request object with the sharing mode set\ncorrectly.\n\nBug: 112709847\nTest: Hack AAudioServiceEndpointMMAP so isBufferShareable is false.\nTest: \u0027adb shell write_sine_callback -pl -x -s2\u0027 should not hang.\nChange-Id: I7a5c8260beaffdd706f34d35ef00a61b072adb1d\n"
    },
    {
      "commit": "882c520fd82ef5ce1420bb3eb6fc4bcbb205cb87",
      "tree": "ab17c80d971269c1f8e16b6b8011d37863b0a8e6",
      "parents": [
        "a11eb695cac183c629cab536d101e6667343992b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 23 10:32:45 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Aug 23 11:59:56 2018 -0700"
      },
      "message": "aaudio: cleanup FIFO\n\nRemove unused methods and fields.\nBetter code format and alignment.\nUse unique_ptr for mFifo.\nRemove getFifoController() method that exposed pointer.\nUpdates tests and calling code as needed.\n\nTest: test_atomic_fifo.cpp\nChange-Id: I1ea66beaadeb74083307835858b757e4753affda\n"
    },
    {
      "commit": "0b21bdd6bcc8d3177c171225ade60315750c2e7e",
      "tree": "86a2cc162f0a17e33520bd1db40143d58935af70",
      "parents": [
        "b9e732b490d1245bf562b4b145cfbb5237864fd7"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Jul 12 19:37:41 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Aug 17 09:39:45 2018 -0700"
      },
      "message": "Aaudio: Implement app shareable flag instead of -size hack\n\nTest: adb shell data/nativetest64/write_sine/write_sine -pl -m3 -x\nBug: 38118159\nChange-Id: I349e10a00a5466f54e084f4745b1ed4776378c81\nMerged-In: I349e10a00a5466f54e084f4745b1ed4776378c81\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "734334fd0045bf7897a6d749c00204a784766a7e",
      "tree": "46178737bf3a89fd1623ebc1d5dddaad8f2e6cb5",
      "parents": [
        "f344afa981e537b5f354352284272a8a51cf6759"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Jul 12 19:37:41 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Aug 02 23:48:54 2018 +0000"
      },
      "message": "Aaudio: Implement app shareable flag instead of -size hack\n\nTest: adb shell data/nativetest64/write_sine/write_sine -pl -m3\nBug: 38118159\nChange-Id: I349e10a00a5466f54e084f4745b1ed4776378c81\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "ab7ef300b74904bce6c5c810d9e5679abfa582e6",
      "tree": "dadb05ba8da176c046139ca43c3fae48a14191c3",
      "parents": [
        "1f2bfd3ac9d61982acb348d2c78f95c7d4b0bf05"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 15 19:35:29 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 16 18:49:09 2018 -0700"
      },
      "message": "Move ServiceUtilities from audioflinger to libmediautils\n\nTest: Play Music, Play Movies, Camera, Photos\nBug: 79485140\nChange-Id: Ib8382547828e386024145c416321d24e4af182db\n"
    },
    {
      "commit": "2fe718b88ebc7e9f10e1195591dd62ae9e26ed8d",
      "tree": "de5712270006a8db8c1cdf2ba70253bffc789c4c",
      "parents": [
        "1267e887bd9d38e2785b601e872a26acf0ec17f9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon May 14 12:28:32 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 15 12:17:04 2018 -0700"
      },
      "message": "aaudio: fix possible race condition in close()\n\nMove increment and decrement of reference count under\nthe same lock used for finding the stream.\n\nBug: 79693915\nTest: run CTS tests\nChange-Id: I206eb09724a81f2d79a03fa756adbcbb8abf5efa\n"
    },
    {
      "commit": "6e2770ef771b7a3042d606c37f9c3af8a933439b",
      "tree": "502cf6cde6e624096f922f6dadf20a42870e2f04",
      "parents": [
        "e5a37268101a2c9d8019938f4e5ac9eec2e52fca"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 01 13:03:52 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 01 15:46:47 2018 -0700"
      },
      "message": "aaudio: use weak pointer to prevent UAF\n\nAvoid using the mServiceEndpoint smart pointer\nfrom multiple threads.\n\nBug: 74122779\nTest: see bug for test instructions\nChange-Id: Idaf9e32a163b25e51bde35d6f5ea10a372b5d916\n"
    },
    {
      "commit": "bbd5286e99bbacf9907e2ecf1f7181db17ee6e46",
      "tree": "b523037660dffe33c9aa1d8cb65938b934f16000",
      "parents": [
        "f255369091d48ba7475ee4aae840a8a9c7a15f07"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Apr 13 11:37:42 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 18 10:18:49 2018 -0700"
      },
      "message": "aaudio: teardown stream based on a port handle\n\nNeeded for silencing specific input streams.\nPass AAudioService reference into AAudioServiceEndpointMMAP.\nUse it to find a specific stream by PortHandle then\nstop it and disconnect it.\n\nBug: 72134552\nTest: b/72134552#comment10\nChange-Id: Ibdf242f834c83b47c967c3cc634ed1083b019d4a\n"
    },
    {
      "commit": "331679c8a5cd21a0e6a7a1d851e965e4721f7420",
      "tree": "9e3835bb805631ca42a90ded01796b73307a4642",
      "parents": [
        "554e08c6b00b2a57348f4545d450915a9e8c870a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 17:03:16 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 17:08:06 2018 -0700"
      },
      "message": "Revert \"Revert \"audioflinger: implement silenced capture for mmap\"\"\n\nThis reverts commit 611ebb95e76c230214780b7b583b8a3c5277ac7a.\n\nBug: 78118584\nbug: 72134552\nTest: \u0027adb shell write_sine_callback -m3 -pl -s100 -x\u0027 and Plug headphones in and out.\nTest: AAudio CTS tests\nChange-Id: I7558ad7b9c6c2d352ebce105382fe914c26fd35e\n"
    },
    {
      "commit": "554e08c6b00b2a57348f4545d450915a9e8c870a",
      "tree": "b66615256ee7a7eeac8a7e54c54c2fd872a3fdd0",
      "parents": [
        "c620796251df712274c16858c76628d802bbb4b1",
        "611ebb95e76c230214780b7b583b8a3c5277ac7a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Apr 16 23:52:19 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 16 23:52:19 2018 +0000"
      },
      "message": "Merge \"Revert \"audioflinger: implement silenced capture for mmap\"\" into pi-dev"
    },
    {
      "commit": "611ebb95e76c230214780b7b583b8a3c5277ac7a",
      "tree": "1c8ef30309a0954a51a6b4c872f30ca399f064d2",
      "parents": [
        "a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 19:43:59 2018 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 19:43:59 2018 +0000"
      },
      "message": "Revert \"audioflinger: implement silenced capture for mmap\"\n\nThis reverts commit a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9.\n\nBug: 78118584\nChange-Id: Ie0da3dea445f2474c7a889c5f9919305c1c96d40\n"
    },
    {
      "commit": "55e5eabf96af5a2964bfab1e64d81ad9be9ac975",
      "tree": "46127c87c1c2100d983c4bfbb611ec85bc6067b8",
      "parents": [
        "b8bddf5ece276f01052ad9b706417fd8cfe72d90"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 10 15:16:38 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Apr 13 18:14:20 2018 +0000"
      },
      "message": "aaudio: cleanup logs and add counters to dumpsys\n\nCounters will give us some history for AAudio.\nRemoved some unneeded logs.\nAdded log to help debug intermittent volume problem.\n\nBug: 64310586\nTest: adb shell logcat\nTest: adb shell dumpsys media.aaudio\nChange-Id: I012361bb4d0d0bfdedfe5ceef856b59282c8d3f0\n"
    },
    {
      "commit": "a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9",
      "tree": "00e39e41acac99cc35c292c65c7bca60973fdd5a",
      "parents": [
        "9fc25229e0723c93b453ab34957f22a643e2b602"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 10 19:09:40 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 11 19:07:45 2018 -0700"
      },
      "message": "audioflinger: implement silenced capture for mmap\n\nImplement silencing of audio capture for idle UIDs for\nMMAP streams.\n\nUse audio HAL setMicGain() API to silence the mmap buffer for\nexclusive mode and when only one client is active in shared mode.\n\nAdd new MmapStreamCallback method onStreamSilenced() for AAudio\nservice to selectively silence streams from silenced UIDs in\nshared mode.\n\nBug: 72134552\nTest: manual\nChange-Id: I7c92ba0002bc5ba003c1a3c887edddf9ae53b538\n"
    },
    {
      "commit": "19e990e480245af25ec03ff3a3f53b820b0732cd",
      "tree": "8eb6afdfc9a634c835c6cc0d8b28bd69ffbdd2f2",
      "parents": [
        "ce6c8479c587bf61dfbd7b050752fec54135ba1f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 22 13:59:34 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 23 21:50:37 2018 +0000"
      },
      "message": "aaudio: improve logging to help debugging\n\nUse __func__ more often.\nShow thread entry and exit.\nLog illegal state transitions.\nRemove some unnecessary logs.\n\nBug: 64310586\nTest: use AAudio then look at the logs\nChange-Id: I2e289698efc897640588ba534b5513ac39b15043\n"
    },
    {
      "commit": "be645507a3ded6a481375419c8185e17c66dcb37",
      "tree": "d938ff05ee88f29968a6de963584e7b235f5f01a",
      "parents": [
        "142a00d21641393bb65a2484c0306f7c49ae9cb8"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 22 13:48:18 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 23 11:10:30 2018 -0700"
      },
      "message": "aaudio: pass smart pointer to mixer thread\n\nBefore this, the mixer thread could close the stream using a stale pointer.\nThis could cause timeouts when plugging headphones in or out.\n\nBug: 76092458\nTest: write_sine_callback -m3 -pl -s1000\nTest: unplug and replug headphones many times on Marlin\nChange-Id: I437eb756686446a75fc5d04bc09d9408816585de\n"
    },
    {
      "commit": "41f19d8e9471945b358c9ae1dffda60f195d9f5b",
      "tree": "76116b8a7d57b4f696fa1bda0cbeda63fa208d45",
      "parents": [
        "54486dc5d502e563747ec5744f61af97ea9c9035"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Feb 13 14:59:10 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 01 19:13:02 2018 -0800"
      },
      "message": "aaudio: convert mono output to stereo\n\nMMAP hardware streams are often stereo.\nBut apps often want to output a mono stream.\nSince converting from mono to stereo is easy,\nwe can go ahead and open a stereo hardware stream\nand then just convert the apps mono data to stereo for the HW.\n\nAdd getDeviceChannelCount().\n\nTest:  adb shell write_sine_callback -pl -s10 -c1 -m3\nTest:  adb shell write_sine_callback -pl -s10 -c1 -m3 -x\nChange-Id: I444a38c6f5cd32d1d6113f16aacec68285a1bc82\n"
    },
    {
      "commit": "5cc83c3b8acc43b760be23a4e3b96fbbb06d8e93",
      "tree": "81c8578d69173d3e948a938e46d54e8385d254c4",
      "parents": [
        "bb8ad0e6ebf1a74245929720fd6336feda926ea9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Nov 28 15:43:18 2017 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jan 24 15:21:34 2018 +0000"
      },
      "message": "aaudio: fix some state transitions\n\nNow requestStop() and requestPause() do the appropriate thing\nbased on state.\nFlush is allowed when OPEN, PAUSED or STOPPED because there might\nbe pre-roll data.\n\nBug: 69810494\nTest: test_various.cpp\nChange-Id: Ie1b306b17734a58fa71b1742bb186482893656b7\n"
    },
    {
      "commit": "4e1af9fc9c1108d4514e92774f750bcd434dbbcc",
      "tree": "03dc781c49ae6b37c4661c591ece2c5a4eed8cfe",
      "parents": [
        "a11f9357196db29e6f8f05b91334524de4f3207e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jan 03 15:54:35 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jan 18 19:48:46 2018 -0800"
      },
      "message": "aaudio: implement sessionId for effects\n\nIf a sessionID other than AAUDIO_SESSION_ID_NONE is requested\nthen legacy data path will be forced.\n\nSessionID is implemented for MMAP data path but not used.\nIt is easier to implement it now then try to figure\nit out later.\n\nBug: 33268927\nTest: test_session_id.cpp will be moved to CTS when stable\nChange-Id: I3ea67f57c1cbe24a512980f1352b917ab3cb6387\n"
    },
    {
      "commit": "3cf4c180de878a877b1de82404ba3c5537770fd6",
      "tree": "24b13d5cd7bc5bf372dd62d793b00dbd515371e4",
      "parents": [
        "aa50659081021a1708d9692be1c1576a939245b6",
        "a62fb9565d73d9ec9b56da65929afc0f686c696e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 18 01:34:13 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 18 01:34:13 2018 +0000"
      },
      "message": "Merge \"aaudio: fix USAGE, INPUT_PRESET and CONTENT_TYPE\""
    },
    {
      "commit": "a62fb9565d73d9ec9b56da65929afc0f686c696e",
      "tree": "f0291746c32af771178c350696f98bbac0f34c1f",
      "parents": [
        "d6be64a3f22be3eceb0d6209c88dcad573c08191"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jan 16 12:44:06 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jan 16 17:14:59 2018 -0800"
      },
      "message": "aaudio: fix USAGE, INPUT_PRESET and CONTENT_TYPE\n\nThe attributes were not propagating all the way down for MMAP\nstreams.\n\nBug: 72046612\nBug: 72049948\nTest: adb shell aaudio_loopback -te -pl -n1 -x -X -i6\nChange-Id: I41b592d0c3a9daef5070ad299198c8d6cd890cfc\n"
    },
    {
      "commit": "559788963268a0bc1e90e29c423ac78938c96b4a",
      "tree": "00ef867a4c27b5023d0909788ed7162bfca8f567",
      "parents": [
        "d6be64a3f22be3eceb0d6209c88dcad573c08191"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jan 11 14:56:09 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jan 16 16:33:25 2018 -0800"
      },
      "message": "aaudio: name threads for easier debugging\n\nName them \"AAudio_#\" where # is an increasing index.\nFor example AAudio_1, AAudio_2, etc.\n\nAlso name threads that are used for sending timestamps.\n\nTest: run write_sine_callback then dump the threads for that process.\nChange-Id: Ibd8c7be1109f6c15a4601ef154038cdce2e65e11\n"
    },
    {
      "commit": "d4ccc624201d5c74ff6e14db1b68743b41fe795c",
      "tree": "2f86fcbe969edd3e18a26863f6a5ecbf2b81a8ad",
      "parents": [
        "f9d1b99e6fb1af139604336863f6cb7d3c48510e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Dec 20 15:32:44 2017 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jan 11 18:47:47 2018 -0800"
      },
      "message": "aaudio: implement new USAGE, CONTENT_TYPE and INPUT_PRESET\n\nPass these audio attributes to AudioFlinger.\n\nBug: 68052449\nBug: 62104146\nTest: test_attributes.cpp will be moved to CTS when ready\nChange-Id: Ib8804614d95dcf1b85e51ec1f5569892e017a991\n"
    },
    {
      "commit": "94862529bf1d1506bc09a05788e56aafb5c6e7f5",
      "tree": "7eb5ea6b757f88bfb25f667a88ee684226243470",
      "parents": [
        "3a5608cf069994725f6e50950f0462e91dcd8c51"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Sep 13 21:31:36 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Dec 05 09:28:38 2017 -0800"
      },
      "message": "aaudio: defer closing of stream until safe\n\nWhen a client asks to close the stream, we mark it as\ncloseable. When the last client finishes with the stream\nthen we actually close it.  References to the stream are counted.\n\nThis will prevent a stream from getting closed while another thread is\ntrying to start it or stop it, etc.\n\nTest: CTS nativemedia/aaudio\nChange-Id: Ic1c7eceded6bff9899f37a5e7d9f2b695b8cdc97\n"
    },
    {
      "commit": "2329638e097622653cb2c4acc145b996e317a38b",
      "tree": "d25dccdc184ac7ce8b7aceb227411592ff256484",
      "parents": [
        "10edfcf70857cc0a22afbbd3fc8f57f0c8a2953a"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Nov 20 15:45:11 2017 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Nov 21 10:30:58 2017 -0800"
      },
      "message": "aaudio: use xruns detected in the service\n\nThe service knows when an actual xrun occurs so we pass\nthat value to the client.\n\nBug: 38512417\nTest: write_sine_callback -pl -n1 -s20 -c2 -u\nChange-Id: I9e5ff1edd2e9378957309280162d7cda855f5adb\n"
    },
    {
      "commit": "a75fdf5ff87a75a52e5d782d0169ca61fe39e95c",
      "tree": "0e1e51d1152539d1dfa90ac349ae8e7a3ac8fdf9",
      "parents": [
        "1052fb1dc71dbd62f7ff2b2227ed318ca9aea1e0",
        "fbf031e8f197c916ae9c399f42926494ebdeb497"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 01 01:29:52 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 01 01:29:52 2017 +0000"
      },
      "message": "Merge \"aaudio: cleanup logs and comments\""
    },
    {
      "commit": "fbf031e8f197c916ae9c399f42926494ebdeb497",
      "tree": "13578d14ca810aaa7629770b983b81641e0bd90f",
      "parents": [
        "442459bca04f95ef2acd34e3de01f55bd5ede132"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 12 15:58:31 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Oct 31 15:36:38 2017 -0700"
      },
      "message": "aaudio: cleanup logs and comments\n\nThis CL should not change any code behavior except for log text.\nMostly it removes redundant class names from the log.\n\nTest: CTS nativemedia/aaudio\nChange-Id: I6a6d01da080f536d5345f2b0deb32e92ed1e3d47\n"
    },
    {
      "commit": "73af62a5ff0577eec6ad1be2b45fc9a15eaba920",
      "tree": "9d24c7c6a4320eb0ec5b9ae34852844ee6e8d989",
      "parents": [
        "442459bca04f95ef2acd34e3de01f55bd5ede132"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 26 12:11:47 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 26 14:03:49 2017 -0700"
      },
      "message": "aaudio: fix loss of sync with HW FIFO index\n\nThis fixes a problem with intermittent severe distortion\nand variable latency after restarting a stream.\n\nBug: 68003241\nTest: write_sine_callback -pl -m2 -n2 -s5 -c2 -l100\nChange-Id: Id7418adb86f2869ac74936cfbd365815a0a0e923\n"
    },
    {
      "commit": "442459bca04f95ef2acd34e3de01f55bd5ede132",
      "tree": "346a18dde0015fcfafd1d9a9ff9b742ed34ba3ca",
      "parents": [
        "a575bac8c6ff91e9846dd57b3456437084854053",
        "83fb84498b8a83865e285ee84c253454c6f0a25b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 26 19:36:27 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 26 19:36:27 2017 +0000"
      },
      "message": "Merge \"aaudio: fix small underflow when a stream is stopped\""
    },
    {
      "commit": "83fb84498b8a83865e285ee84c253454c6f0a25b",
      "tree": "eb6ae9c94678b17d316099d68c2d9faa55cb6def",
      "parents": [
        "5b769acf63bb78197c39f9930133c7f79cfdffd2"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 05 16:55:17 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 26 09:56:30 2017 -0700"
      },
      "message": "aaudio: fix small underflow when a stream is stopped\n\nAlso remove inconsequential volume parameter.\n\nBug: 67910437\nTest: test_aaudio_monkey.cpp and write_sine_callback.cpp\nChange-Id: I6d11f3bfced3d579440f99c02d01a7d68af5c1e0\n"
    },
    {
      "commit": "fe7232311909599f8cb22795428332457dbd84df",
      "tree": "20ebad86e8c7a1b2f9d4bce7ab3f049f725a4453",
      "parents": [
        "da1ba20cbcb06572e6597c1fe43d826fb8b3d989"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 19 16:56:55 2017 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 20 16:13:38 2017 +0000"
      },
      "message": "AAudioEndpointManager: fix log level\n\nFix log level for MMAP endpoint opening success.\n\nBug: 36785118\nChange-Id: I503ff52fd76880d2eb79cf094bef9cf5a3011e24\nTest: check logcat\n"
    },
    {
      "commit": "bab4b47efbd4bdf7a816c704227a4aba1df4f3bb",
      "tree": "1be13109918ff4f570f638cf12f8b29a2fa74193",
      "parents": [
        "d5cbcfd2262db1864be58360f341e33be7cffd31",
        "be0a5b6e2c204446274248e1fa058e30f46b4b71"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 17 21:50:54 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 17 21:50:54 2017 +0000"
      },
      "message": "Merge \"aaudio service: prevent disconnected endpoints from being used\""
    },
    {
      "commit": "be0a5b6e2c204446274248e1fa058e30f46b4b71",
      "tree": "ef61e6bc874fd89e0f2e5b60ffa96555a0656000",
      "parents": [
        "7de1920b41a7c5a6aa466dcd4fffc936193328b1"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 12 15:56:00 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Oct 17 12:15:07 2017 -0700"
      },
      "message": "aaudio service: prevent disconnected endpoints from being used\n\nAlso close the internal stream used by AAudioServiceEndpointShared.\n\nThis prevents a resource leak caused by an app not closing a\ndisconnected stream.\nIt also prevents an app from reopening a device that was just\ndisconnected.\n\nBug: 67664976\nTest: test_bad_disconnect.cpp should get new device ID after disconnect\nChange-Id: I9a234b5704d62af788064fdd352b63181ad7e559\n"
    },
    {
      "commit": "36967fb1a52f44cef9b5bdcca0f646aa136e285a",
      "tree": "8e3fd54b0c0cc9a55cd0f1c80f17698a0bca47b2",
      "parents": [
        "3d762515b88c266f6be7d8f05c83517960dbc92f"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Oct 11 12:43:41 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Oct 11 17:19:33 2017 -0700"
      },
      "message": "Add missing includes.\n\nTest: mma\nBug: None\nChange-Id: I97b9e5e1b6e8b3126a8668460a8c99e4ef1a907d\n"
    },
    {
      "commit": "70ab327c3aae275be00541aedf86367989b8f9d3",
      "tree": "7fa90b6a5ec6e1995e80716e837b0c26a3fe8c97",
      "parents": [
        "e474bc188186007964b532bd99311a933be22832",
        "0c6475858975efbe5120832fcb4649bfc0e95da7"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Sep 16 02:22:21 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Sep 16 02:22:21 2017 +0000"
      },
      "message": "aaudio: fix audioserver crash when starting a stream is rejected am: b92c988ffc\nam: 0c64758589\n\nChange-Id: I264a2f2229edabcec19e5c7b7b1726042a8fe271\n"
    },
    {
      "commit": "b92c988ffc48f093ab8615896b02b8c8e10e19b2",
      "tree": "32472c5cce0546223e63dcc76a6be9add080cc43",
      "parents": [
        "523b3047af443d0a51141ddabd328d52be5a23b0"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 15 11:39:15 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 15 23:29:48 2017 +0000"
      },
      "message": "aaudio: fix audioserver crash when starting a stream is rejected\n\nBug: 65738271\nTest: repeat when not root:   input_monitor  -m2 -pl\nChange-Id: I98659dbd78a75785565b1b6f0254a48220253af6\n"
    },
    {
      "commit": "e474bc188186007964b532bd99311a933be22832",
      "tree": "a156185ffda69c4ede19526424982fe23125bd14",
      "parents": [
        "dddb4326c090fa8ea37168d861eb11cd3a66e0c9",
        "d0a23e619a6b5995612e4865749098b04ae591d1"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 15 23:01:32 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Sep 15 23:01:32 2017 +0000"
      },
      "message": "aaudio: keep track of streams using strong pointers am: 523b3047af\nam: d0a23e619a\n\nChange-Id: I86bf56dd51fe0a59ebb920fbf49e1907818b6c30\n"
    },
    {
      "commit": "523b3047af443d0a51141ddabd328d52be5a23b0",
      "tree": "2596b9d310c3c59d391634d131d2ae866ddf1d47",
      "parents": [
        "1e0c671e14660588410560a55c34718bb8af3b22"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Sep 13 13:03:08 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 15 13:29:26 2017 -0700"
      },
      "message": "aaudio: keep track of streams using strong pointers\n\nMaintain strong pointer to service stream during service calls.\nUse simple AAudioStreamTracker instead of complex HandleTracker.\n\nBug: 65280854\nTest: affects all MMAP streams, run all CTS tests, etcetera\nChange-Id: I3d2ed8b588ea39c216dacd4dea503b11c33f36f3\n"
    },
    {
      "commit": "b8ba103f7fd4a2695d20463689d898ddf5431dac",
      "tree": "e4025dced52bfff1c9bac23bdefd8fdcbebd84da",
      "parents": [
        "a7eba9bb298643b09b4d5f78ebea1c55e2365ad8",
        "3f1e4784c798418e0f2d75b77b5e458c863b6c20"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Sep 07 16:24:52 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Sep 07 16:24:52 2017 +0000"
      },
      "message": "Merge changes from topic \"aaudio_timestamps\" into oc-mr1-dev am: cc84034676\nam: 3f1e4784c7\n\nChange-Id: I189a652c143cab28d01353d6cf451878e36b9bfc\n"
    },
    {
      "commit": "bcc3674648bc6f554d89a2a5d7721ed41c53f83b",
      "tree": "ae3f8fcecce7f06b44088ff4c8adf3248f287f4b",
      "parents": [
        "7328a80ffc83729cc6252c79e0851a31af59c653"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Aug 31 17:24:51 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Sep 06 17:21:34 2017 -0700"
      },
      "message": "aaudio: fix timestamps and underruns\n\nStart the client after we get valid timing data from the server.\nThat can take a while because of the long cold start times.\nThe client is synced with the current position of the service.\nNow the client can start clean with no underruns.\n\nBug: 63918065\nTest: test_timestamps.cpp\nChange-Id: I5d01eb844e4b14cd5477d56ea1dd9e309abc1c52\n"
    },
    {
      "commit": "669446c87cf355d9a48190954e5d509f6bdb0461",
      "tree": "de1f558a97beb017d21169f834e805772546490a",
      "parents": [
        "f24d95960d85c891fc40db6f1e9644385efb4eb3",
        "85ab116e5cc19c11f1eeb17fbf89959ad9617cd0"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Sep 05 16:49:41 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Sep 05 16:49:41 2017 +0000"
      },
      "message": "Merge \"audioflinger: pass return code up from startClient\" into oc-mr1-dev am: 90153cae7f\nam: 85ab116e5c\n\nChange-Id: I8ac2b52fdbfd292ea376e19b6645e5518d30ccef\n"
    },
    {
      "commit": "81ad5ecd211d0f30225714ae8ee61c4d76dbcf56",
      "tree": "0160fa4543c2a83f34863a373d0854119334dd76",
      "parents": [
        "3b224af571e8e70ef643a36e144e7427857d271d"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 01 10:45:41 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Sep 05 09:08:23 2017 -0700"
      },
      "message": "audioflinger: pass return code up from startClient\n\nWas ignoring failed start.\n\nBug: 65262790\nTest: see bug\nChange-Id: I0b1d19adfd50d2b00d86bb82f278b720fcbacdb1\n"
    },
    {
      "commit": "39f02ddfbfd9313370d862a6c4727826379a319a",
      "tree": "aa5c61a50fff59d92db99619edd67b31e9d938c3",
      "parents": [
        "ee079fe295c41f89c2ac6316e99ee10847fb78fd"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Aug 04 09:13:31 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Aug 24 14:59:25 2017 -0700"
      },
      "message": "aaudio: fix EXCLUSIVE mode interfering with SHARED\n\nThe MMAP endpoints were not tracked by the EndpointManager\nso it could not broker EXCLUSIVE access. To fix this the MMAP stream\nwas refactored to use a per-client stream and a per-device endpoint.\n\nCleanup close() of MMAP stream.\nAdd AAudioServiceEndpointShared.cpp.\nExtract AAudioServiceEndpointMMAP from AAudioServiceStreamMMAP.\nTrack MMAP endpoints so we can manage EXCLUSIVE and SHARED access.\n\nBug: 64494572\nBug: 64310586\nTest: see bug, use write_sine to play a shared stream and a excl stream\nChange-Id: I5053193abfd9b8a69a2f7e1110739d65e2af5d64\nMerged-In: I5053193abfd9b8a69a2f7e1110739d65e2af5d64\n"
    },
    {
      "commit": "15f7cab18eb12870545734588b12d873d0fe5d84",
      "tree": "9757be2cd5320b6d669a94bea59e744e3a766525",
      "parents": [
        "13e4dad5f0eafbe1c46fcbde6da9b37fcd57e422"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Aug 04 09:13:31 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Aug 24 11:31:44 2017 -0700"
      },
      "message": "aaudio: fix EXCLUSIVE mode interfering with SHARED\n\nThe MMAP endpoints were not tracked by the EndpointManager\nso it could not broker EXCLUSIVE access. To fix this the MMAP stream\nwas refactored to use a per-client stream and a per-device endpoint.\n\nCleanup close() of MMAP stream.\nAdd AAudioServiceEndpointShared.cpp.\nExtract AAudioServiceEndpointMMAP from AAudioServiceStreamMMAP.\nTrack MMAP endpoints so we can manage EXCLUSIVE and SHARED access.\n\nBug: 64494572\nBug: 64310586\nTest: see bug, use write_sine to play a shared stream and a excl stream\nChange-Id: I5053193abfd9b8a69a2f7e1110739d65e2af5d64\n"
    },
    {
      "commit": "b87bf931bb6eb0db39f6f8a98d76dc8baca11a1a",
      "tree": "c452ae59ac80fcaec3b2dfa2ef187a2247d0da3c",
      "parents": [
        "c9536517041e2a1a980104f62a6010a41691d55f",
        "48fc6191823ffa0708f60802fb6724c232760b9a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 17 01:03:21 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 17 01:03:21 2017 +0000"
      },
      "message": "Merge \"Fix performance-for-range-copy warnings in frameworks/av.\""
    },
    {
      "commit": "c70e19d7eab3cb861dbe7784d8878aefe1dbf679",
      "tree": "d19908a7c405201f5119994ecd90d5c8a115e39a",
      "parents": [
        "4079be014c7b6d12d84f8d15986b46f92df1a389",
        "db177c9c9decbf30294b3f4e6cfbe84e502a56aa"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Aug 14 22:40:16 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 14 22:40:16 2017 +0000"
      },
      "message": "Merge \"aaudio: use configurationInput instead of Output\" into oc-mr1-dev"
    },
    {
      "commit": "db177c9c9decbf30294b3f4e6cfbe84e502a56aa",
      "tree": "8fc3d10e4f0229c11ae0319e9d1c86cf840194df",
      "parents": [
        "e88fd530455d39e4c770870c74c1198820f62bfe"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Aug 09 14:40:58 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Aug 09 14:47:57 2017 -0700"
      },
      "message": "aaudio: use configurationInput instead of Output\n\nThe endpoint was being configured with the wrong variable.\n\nBug: 64526143\nTest: CTS nativemedia/aaudio\nChange-Id: I84c8a23392fe8afde71ac9991eb097e795bf4a39\n"
    },
    {
      "commit": "e72481c5c16d401c776e0ba49b84b80223769b91",
      "tree": "282c04aa82bba9f854b3125fa8edade0b41f5287",
      "parents": [
        "e88fd530455d39e4c770870c74c1198820f62bfe"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Aug 08 13:20:45 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Aug 09 14:11:57 2017 -0700"
      },
      "message": "aaudio: fix ownership problems with file descriptors\n\nUse unique_fd to track file descriptors.\nFix extra close of file descriptor in SharedMemoryParcelable.cpp.\nThis bug was causing unrelated file descriptors to be closed!\n\nBug: 64311216\nTest: write_sine.cpp, FD should survive aaudio close\nChange-Id: I4f38c83510a49ea22b79b96d970ee48153417249\n"
    },
    {
      "commit": "48fc6191823ffa0708f60802fb6724c232760b9a",
      "tree": "c4b5ac89c6bb9798f20fa29b392306027003c4a2",
      "parents": [
        "b95106cabbe51d440505e5b97c55a3afebd49af9"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Aug 04 14:37:31 2017 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Aug 04 14:58:41 2017 -0700"
      },
      "message": "Fix performance-for-range-copy warnings in frameworks/av.\n\n* Use const reference type for loop index variables to avoid unnecessary copy.\n\nBug: 30413223\nTest: build with WITH_TIDY\u003d1\nChange-Id: I79969be18569c5bb1ea29ee18ae89a3f9d55ce9c\n"
    },
    {
      "commit": "a5222e298c294781067950a7cc319d3278fa845a",
      "tree": "69ea25d3c54785ed74af3aee94c5f760d3f13da0",
      "parents": [
        "909f4a6cada3d5fb7594da7d1809ba62d1b47340"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Jul 28 13:31:14 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Aug 03 10:07:39 2017 -0700"
      },
      "message": "aaudio: improve error logging\n\nReport when INVALID_STATE returned.\nThis was used to debug monkey test errors.\nCleanup some log messages.\nImprove \"dumpsys media.aaudio\"\n\nBug: 64310586\nTest: CTS nativemedia/aaudio\nChange-Id: Ifbcac4794cda22cccbacff6352243c0ef4589c53\n"
    },
    {
      "commit": "97350f9df7252c881f011a410fcd9e6d766d2bee",
      "tree": "fab6334a25607e03276648611584b8fc23b40463",
      "parents": [
        "eb1c0658e405e5b7e26f4b16761c5b1ce3f77d46"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Jul 21 15:59:44 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Aug 02 10:57:31 2017 -0700"
      },
      "message": "aaudio: improve accuracy of timestamps\n\nAccount for latency added by the AAudio service.\nFix input timestamps.\n\nBug: 37080396\nTest: test_timestamps.cpp input_monitor.cpp\nChange-Id: I1053cd21af722bb9b9371df4e5731bf4a0a57b0b\n"
    },
    {
      "commit": "19d05412dbba726830c6d4064bca798f682cd3bc",
      "tree": "c398775354f6f68e4bcaad565c720aafc7d6c9ea",
      "parents": [
        "5fafb7bdbca55fe955df1a913051c5d08a0ba087",
        "faeb8b20e8ce98d308ca5ec095eeba6583cd9ec6"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jul 31 13:58:06 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jul 31 13:58:06 2017 +0000"
      },
      "message": "aaudio: fix getXRunCount\nam: faeb8b20e8\n\nChange-Id: I5df65477820b7297479f4cf1f41ec1d5c92cff77\n"
    },
    {
      "commit": "faeb8b20e8ce98d308ca5ec095eeba6583cd9ec6",
      "tree": "ca5897bcd530e9f0e5167d30ed7945171d0a11c9",
      "parents": [
        "d478859f02323b03e2927a10055c42331f6dacc7"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jul 25 15:15:07 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Jul 28 13:19:29 2017 -0700"
      },
      "message": "aaudio: fix getXRunCount\n\nMixer was not advancing FIFO when underflowed so the client could not\ndetect the xrun.\nAlso underruns could cause the stream to drift in time relative to other\nstreams.\n\nBug: 64033855\nTest: trigger underruns by sleeping in a callback\nChange-Id: Ia038f5048ffbff3b82e9d86e6807483dfe6879d0\n"
    },
    {
      "commit": "f17f49051945a3d289a47ef6572b31c687adcebf",
      "tree": "626b5cfb2c630c1726f9c7037f17f09c4689c152",
      "parents": [
        "2eddd660f9140d50f4e49e7981580dee2356ff54",
        "d937a5cf8533cc571ef2ac03d543bc15aacffdcf"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Jul 21 03:36:13 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jul 21 03:36:13 2017 +0000"
      },
      "message": "Merge \"aaudio: reduce glitching by improving sleep timing\" into oc-dr1-dev\nam: d937a5cf85\n\nChange-Id: Ic8e3f97c88ec2197a6d66a48eb091d8eea166891\n"
    },
    {
      "commit": "fd34a9310659aa53e9e10d6826651577a75f6447",
      "tree": "dc284d0eb17cbd8a023a2aec52d854c809b02c38",
      "parents": [
        "679b6f6eaaeba35fcf96cb04a784308211d4b319"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jul 19 07:03:52 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jul 20 16:10:41 2017 -0700"
      },
      "message": "aaudio: reduce glitching by improving sleep timing\n\nALways sleep a minimum time to avoid busy wait in real-time thread.\nAccount for wakeup jitter in threads on the other side of a FIFO.\nAvoid race condition that caused a longer sleep than necessary.\nFix calculation of mFreeRunning for capture mode.\n\nAlso added systrace logging, which was used to debug this.\n\nBug: 63814792\nTest: Run GStomper on Walleye with MMAP on, see bug\nChange-Id: I7b20098580ff454365425bd21e43c17ade532a0a\n"
    },
    {
      "commit": "67a69ea56423af97a91cac876d10a447cdc21254",
      "tree": "e063a92b3d559d5affd8af255cc7dc6b3d46e052",
      "parents": [
        "e3dd4f59c8383bdec909e87860ede1c7c12407d2",
        "2dd56c9e2c9874471d3c9ec7d2bbfdaccbd554d4"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jul 18 23:00:50 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 18 23:00:50 2017 +0000"
      },
      "message": "Merge \"aaudio: fix intermittent hang and position error\" into oc-dr1-dev am: c1fe2634dc\nam: 2dd56c9e2c\n\nChange-Id: I2324f99835d005d46cc2838888c3cc65e66730a1\n"
    },
    {
      "commit": "2dd56c9e2c9874471d3c9ec7d2bbfdaccbd554d4",
      "tree": "6432b4bd2f70fa04e6be7c02477ac9162923fe68",
      "parents": [
        "d36be4e4d85a2671de4f410b5ed1a6d1314ab553",
        "c1fe2634dc228640119849692cd1defb88bc2209"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jul 18 22:22:19 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 18 22:22:19 2017 +0000"
      },
      "message": "Merge \"aaudio: fix intermittent hang and position error\" into oc-dr1-dev\nam: c1fe2634dc\n\nChange-Id: I44d29f0bc88935ccba6b365fec242568d35f6079\n"
    },
    {
      "commit": "c1fe2634dc228640119849692cd1defb88bc2209",
      "tree": "453a26bb059c59f8216f0883768706ea43620c14",
      "parents": [
        "29204646b945adf58390b7d06f2cb223d6b2c4c0",
        "940083c3049e269f6c150d5477eccb6bad32b129"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 18 22:15:39 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 18 22:15:39 2017 +0000"
      },
      "message": "Merge \"aaudio: fix intermittent hang and position error\" into oc-dr1-dev"
    },
    {
      "commit": "32cb394f830758d7703dc1f615e4d2de18c7af1b",
      "tree": "ad51a33972d77084a02392e8f63261a573469b27",
      "parents": [
        "24f8801b22a68204e5ac8187963f07098e9da34a",
        "ef28fdb8d849f1bda5799080b898e429bc29259c"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jul 18 13:57:16 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 18 13:57:16 2017 +0000"
      },
      "message": "Merge \"audio:  reduce logspam from MMAP mode\" into oc-dr1-dev am: 4dbbda2d8c\nam: ef28fdb8d8\n\nChange-Id: I611b95222c81d279e75071e0bd369b4e5ad4bd78\n"
    },
    {
      "commit": "ef28fdb8d849f1bda5799080b898e429bc29259c",
      "tree": "41a43d7f1fdcc8043bc3fc7ad8f56de62f7ebb08",
      "parents": [
        "03e1cd73c64654d096243325ac3e6dc3f0b6e2fe",
        "4dbbda2d8c84eabc0cd7c7ee032c2280258f4ffb"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jul 18 13:53:16 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 18 13:53:16 2017 +0000"
      },
      "message": "Merge \"audio:  reduce logspam from MMAP mode\" into oc-dr1-dev\nam: 4dbbda2d8c\n\nChange-Id: I05dc5fc8eed6e3623f01b87df205d009f04cc3f8\n"
    },
    {
      "commit": "4dbbda2d8c84eabc0cd7c7ee032c2280258f4ffb",
      "tree": "25332d68058c967fcd1686bd9032459b7ab4a8c4",
      "parents": [
        "d8365c54d049aade9e02ccae722f311f846cad9a",
        "c7abac4329e15cda4bbbd25f8fc4a93b70d70d0a"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jul 18 13:47:40 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 18 13:47:40 2017 +0000"
      },
      "message": "Merge \"audio:  reduce logspam from MMAP mode\" into oc-dr1-dev"
    },
    {
      "commit": "940083c3049e269f6c150d5477eccb6bad32b129",
      "tree": "ae4c20530003d7c9086d343a3b3e7d1d5b17562e",
      "parents": [
        "af842eb79ed9943b7a4495136197e093fc7d8ba7"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jul 17 17:00:02 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jul 17 17:00:02 2017 -0700"
      },
      "message": "aaudio: fix intermittent hang and position error\n\nFix hang caused by recursive mutex.\nFix disconnect caused by getPosition() failing, which was\njust because the stream wasn\u0027t ready yet.\n\nBug: 63775537\nBug: 63709749\nTest: run \"aaudio_loopback -pl -Pl -c2 -n6 -te -m\" many times\nChange-Id: Ic1d54360b55cfc8ecc1809584c262bc0976c58bb\n"
    },
    {
      "commit": "fa97a325f95e6cbefe54819674466fda9fc0ad10",
      "tree": "7dfbbc222707c3cb56a6b93bf0b567108054980d",
      "parents": [
        "7e5292c9262f4183b534be945bd76d7c342f20aa",
        "9584601561ad1d3b4fc1b0035c3f3e5bbd3e499e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 17 20:01:51 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 17 20:01:51 2017 +0000"
      },
      "message": "Merge \"Append additional owners to projects\""
    },
    {
      "commit": "1198d860283bfc31b39c587580463eef9fcc6720",
      "tree": "57944797a7387aabdc39243df69a909fe0c2f561",
      "parents": [
        "ef63d8b63e6cc81aaad77e46364d6360a0df5855",
        "30bf42ca7242f5f7849cbe7ce61fc994b88c5b56"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Jul 17 19:09:34 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jul 17 19:09:34 2017 +0000"
      },
      "message": "Merge \"Add parameters validation on AAudio MMap server\" into oc-dr1-dev\nam: 30bf42ca72\n\nChange-Id: I6e200b18f9d1c7a02b702a41715ef061b5cafdd8\n"
    },
    {
      "commit": "c7abac4329e15cda4bbbd25f8fc4a93b70d70d0a",
      "tree": "f2402076af44c039478a9bfec1017903a702aa40",
      "parents": [
        "af842eb79ed9943b7a4495136197e093fc7d8ba7"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jul 17 11:13:37 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jul 17 11:13:37 2017 -0700"
      },
      "message": "audio:  reduce logspam from MMAP mode\n\nBug: 63760826\nTest: run CTS nativemedia/aaudio and notice less logging\nChange-Id: I04564963f85577a53f40f1bad064f5e79723ac76\n"
    },
    {
      "commit": "9584601561ad1d3b4fc1b0035c3f3e5bbd3e499e",
      "tree": "0f3268ed27ec2f843c79924a4b779afa06fc2b98",
      "parents": [
        "6c3359f522fa5c528d7eef5deaaf0d2c9c365089"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 17 10:34:02 2017 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 17 10:56:37 2017 -0700"
      },
      "message": "Append additional owners to projects\n\nThis releaves reviewing burden from the frameworks/av owners.\nNote that the lists of owners are inherited from the parent\ndirectories thus the people listed in these files are owners\n*in addition* to people listed in frameworks/av/OWNERS,\nand frameworks/av/{media|services}/OWNERS.\n\nChange-Id: I5e2db1c40cb807b906b2701fe446c874a8d19983\nTest: not needed\n"
    }
  ],
  "next": "901f65deb49786f4dffd39ac965c0bb681392c0b"
}
