)]}'
{
  "log": [
    {
      "commit": "4719048ce0e6f8656a417a2f2fe6fbb848ed2ba7",
      "tree": "8feaf2f9358a3993b5077647ddcd8952c71f7798",
      "parents": [
        "e1f1cb5827a6c99d41e05e090b3b382f3598a58e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Aug 12 14:29:10 2020 +0000"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Sep 10 14:52:58 2020 -0700"
      },
      "message": "aaudio: fix crash from callbacks during close\n\nMove some code from release_l() into a new close_l().\nAlso stop callbacks before freeing memory in the\nFixedBlockReader.\n\nThe AudioTrack and AudioRecord callbacks can occur\nup until their destructors are called. This can lead\nto race conditions if the AAudio stream is dismantled\nwhile the AudioTrack or AudioRecord is still alive.\nThe AudioRecord was being deleted but not the AudioTrack.\nThat caused some streams to fail if they were using\na FixedBlockReader, which is used when the app\ncalls AAudioStreamBuilder_setFramesPerDataCallback().\n\nThere was also a problem with a few functions like\nAAudioStream_getFramesPerBurst() or AAudioStream_getTimestamp(),\nwhich would crash if called after AAudioStream_release( for\nINPUT streams.\n\nBug: 161914201\nBug: 163165126\nTest: see bug for repro of the crash\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: If8f6f6f17ffe06eae98eb8b3930bca08c49a15f8\nMerged-In: If8f6f6f17ffe06eae98eb8b3930bca08c49a15f8\n(cherry picked from commit 320910fcf1e7d7729f37f95f591093191414e73f)\n"
    },
    {
      "commit": "6e463ce6fc456a3c185b80086d3605e2189eccd6",
      "tree": "5c897c19218b6ab714ad781076018079ef2b0240",
      "parents": [
        "4756a9f78b39c7aad0bd79c18b97bf8ed00b4bc6"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 13 10:20:20 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 05 02:54:41 2020 -0700"
      },
      "message": "aaudio: steal exclusive streams\n\nAn app (B) that asks for an exclusive stream can steal\nan exclusive stream from an earlier app (A).\nApp B will be given the MMAP resource as a SHARED stream.\nThe stream for app A will be disconnected and released\nby the service.\nIf app A reopens a stream then it will get a SHARED\nstream.\n\nThe order of the opening of the streams is controlled by using a\nrecursive_mutex in AAudioService::openStream().\n\nBug: 129846760\nTest: media/libaaudio/tests/test_steal_exclusive.cpp\nTest: also\nTest: Launch AudioTroubleMaker. It should say \"EXCLUSIVE\".\nTest: Press Home button.\nTest: Siren sound from AudioTroubleMaker should continue.\nTest: Launch OboeTester\nTest: TEST OUTPUT, then Open, Start\nTest: You should get an MMAP SHARED stream on Pixel.\nTest: Go back to AudioTroubleMaker. It should say \"SHARED\".\nChange-Id: I7f8339d8ed62546520a9b46ed398418b41ca2832\n"
    },
    {
      "commit": "a9876703e89afa6db42913d48e2360b7dad98725",
      "tree": "4e51b01b2fa4be83868318a1619e3b7c2f42f36e",
      "parents": [
        "6e89a0704605f4750f87a3243495b175c67e6fbb"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 20 18:16:15 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 23 18:00:10 2020 -0700"
      },
      "message": "aaudio: add MediaMetrics for MMAP streams\n\nLog events from service.\nLog start, stop, disconnect and other events.\nLog underruns and bufferSize.\n\nBug: 154543374\nTest: adb shell dumpsys media.metrics --clear\nTest: run an app that uses MMAP, like OboeTester\nTest: adb shell dumpsys media.metrics\nTest: Expect to see lots of \"audio.stream\" events.\nChange-Id: I690e5226b695d53d038d644f4438c759e08f9fbb\n"
    },
    {
      "commit": "d1f1cb68f567363a0b1e4cd4db6286afc6c8a1e2",
      "tree": "3b32985218612d05bf95fed08c18025d1735b2d4",
      "parents": [
        "06675ff30f63323905ff18c3c4e0d34a9fee4c60"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Mar 24 11:57:57 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Mar 27 11:33:09 2020 -0700"
      },
      "message": "Add audio attributes info when starting aaudio tracks on MMAP mix.\n\nIn aaudio, when adding tracks to mixed stream, it is needed to update\naudio attributes to HAL whenever the tracks are added or removed.\nCurrently, only the audio attributes used to open the stream will be\nsent to the HAL. In that case, adding audio attributes of the clients\nwhen starting the stream can help solve the problem. In audio flinger,\nthe client\u0027s audio attributes will be used to create MmapTrack.\n\nTest: play multiple aaudio tracks, add log\nBug: 77279923\nChange-Id: Ic1c536049e194a2bb7513425ee4828d52769d27f\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": "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": "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": "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": "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": "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": "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": "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": "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": "cb4dae216758d9e9a28050f65097f1ce905c03e9",
      "tree": "4c3c49679384d70006675e9e06c7e8e8117e206c",
      "parents": [
        "0acb3209107802e2ab116f8374aab886579729bb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Jul 01 19:39:32 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 12 12:17:33 2017 -0700"
      },
      "message": "aaudio: indicate client UID and PID to audio flinger\n\nImplement correct indication of client UID and PID to audio flinger\nfor AAudio MMAP streams in both exclusive mode and shared mode.\n- Add start/stop client methods on MMAP streams used only when the MMAP\nstream is in AAudio service and carries a mix of shared streams.\n- Add \"In Service\u0027\" indication from \"client\" side to AAudioServiceStreamMMAP\nso that the behavior can be adapted accordingly.\n- Modify logic on audio flinger side with regard to mmap tracks and\naudio HAL stream activity:\n  - use same audio session for all clients on a same stream to match\n  audio policy logic to share same direct output stream for clients on same\n  session. This is also more consistent with current volume and effect\n  handling as all MMAP  clients sharing the same output stream have the\n  same volume and use case.\n  - start/stop the HAL when the stream is started/stopped with the initial client\n  handle (returned when the stream is opened) but do not create a track.\n  AAudioService implementation will always send an additional start command before\n  first client starts and a stop command after last client stops,\n  in both shared and exclusive mode.\n  - start/stop a track only if the start/stop stream command is received\n  with a handle different from the initial handle.\n- Allow more than one active client from the same UID on a MMAP input in audio policy.\n\nBug: 62950008\nTest: verify playback and capture in mmap mode\nMerged-In: I86151bbb637ff172d2fd5f813056eab13a7bcd3c\nChange-Id: I86151bbb637ff172d2fd5f813056eab13a7bcd3c\n"
    },
    {
      "commit": "4501b3510f9b2af2ff63a0471de24e3feea1d0a8",
      "tree": "486de512a65eaad91323fd521823b7230088643d",
      "parents": [
        "8dd045aaf7079fce7c3f0d8457d4e4c7055bac03"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jun 29 18:12:36 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Jul 01 14:28:57 2017 -0700"
      },
      "message": "aaudio: improved dumpsys\n\nAdd more information about various streams and endpoints.\n\nBug: 38396780\nTest: adb shell dumpsys media.aaudio\nChange-Id: I5cc116574bfc3aa93703c182d933dbdfcbefad7a\n"
    },
    {
      "commit": "a17ae74e3570a5afa2ece02d2b4090ba7b731bc1",
      "tree": "7ec7ff27aa0b456fe7d679b4cd81361b603697e2",
      "parents": [
        "e27d3a435c0f2393f6a53bb6b23569aa04904bd0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 29 15:43:55 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 30 20:38:34 2017 +0000"
      },
      "message": "aaudio: modify endpoint sharing logic\n\nA new Client stream in shared mode can share an existing endpoint\nif it has no preferences or compatible device, sample rate and channel\ncount requests.\n\nBug: 62961537\nTest: play and capture with AAudio in mmap mode\nChange-Id: I38536fb486dfc06f4399f7d02248384583fd3a17\n"
    },
    {
      "commit": "11e8d335b1da528ee771b19b63df23ae6fd52f41",
      "tree": "b5679b54a7acfbdf455c95355da8c0b9a4dbc51c",
      "parents": [
        "1fa57e8d3149703e794997edffa4e03bfb0a6887"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed May 24 09:59:02 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jun 29 21:40:21 2017 -0700"
      },
      "message": "aaudio: close MMAP stream if client dies\n\nNotify client when audio service dies. Clear connection.\nNotify AAudio service when client dies. Close client streams.\n\nUse sp\u003c\u003e to track ServiceStreams.\n\nBug: 38267698\nTest: test_no_close.cpp\nChange-Id: I5f1699ed3b8b7bd960947c0028a89ca8419ce7a0\n"
    },
    {
      "commit": "ec89b2e2f8c84a7d3936db1a888034f4a4b0df16",
      "tree": "37bfd6b5e440bb91bb1b172ca0ea349c94056a61",
      "parents": [
        "0d3c68179e395757ab053cf6c480db7841c4d9d5"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jun 20 15:05:06 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jun 24 09:04:47 2017 -0700"
      },
      "message": "aaudio: fix CTS for MMAP mode\n\nImprove calculation of buffer capacity based on requested minimum.\nAdjust timing of start() to reduce underflows.\nTrack ServiceEndpoints based on requested deviceId.\nFix getFramesRead() and flush() behavior.\nFix timeouts due to ClockModel lateness bug.\nMisc cleanup.\n\nBug: 37755299\nTest: test_aaudio.cpp\nChange-Id: I637c16e87fbe14b6f28c60aeea0b9dfed965ecd0\n"
    },
    {
      "commit": "87c9f646a94259d7c321c3b3d5947fa1778f5ac2",
      "tree": "89c57e19157557b2cb5d7aca7bc1371e530f734c",
      "parents": [
        "da6b9eafb5de2434717aea264ad61b025bc4fe7f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed May 17 07:22:39 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed May 24 15:44:23 2017 -0700"
      },
      "message": "aaudio: lower latency using MMAP capture\n\nMMAP can be enabled by setting system properties.\n\nBug: 38267780\nTest: input_monitor.cpp\nChange-Id: I5e86fd1d9baef4fe59837ccbca7971acbb54d8b5\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "c8f69a08a409fd163873d725c63f8d60259ae21d",
      "tree": "da3c5a871c2a78e109d02cf1c08cfb496d4aa3e6",
      "parents": [
        "feb0d87f693abd8fd2fa7ebfcdf7d91f0b95c131"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu May 11 15:53:06 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 16 10:34:05 2017 -0700"
      },
      "message": "aaudio: control MMAP mode using system properties\n\nTo facilitate testing of MMAP mode.\n\nBug: 38268547\nTest: set properties, see framesPerBurst in write_sine_callback.cpp\nChange-Id: I6e15c563215017f6a5020d89ac312ff8331afc4f\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "71f35bb687476694882a617ba4a810a0bb56fe23",
      "tree": "93e01bfc7cb0b942e0ee16892c26d5a184b3e541",
      "parents": [
        "24059088a46160f731903cc66404184a531d0478"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 13 16:05:07 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Apr 21 05:11:26 2017 +0000"
      },
      "message": "aaudio: fix SHARED MMAP mode in server plus other bugs\n\nFixed some buffer miscalculations, and some NPEs in the close() code.\nAdded debugging and some general cleanup.\nFixed data conversion.\nFixed start/pause/flush in server.\nAdded reference counting in server for endpoints.\nPrograms can now be ran more than once.\nGeneral code cleanup.\nReconnect with service if server dies.\nMove stop() logic into server for better synchronization.\nAdd sleep to prevent race condition when closing an MMAP stream.\n\nBug: 33398120\nTest: two write_sine_callback.cpp can be run simultaneously\nChange-Id: Ibb006215a498868c222228d675ff961d7e0bf514\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fb",
      "tree": "2544186372c9778460821e410c09a0edba8a17bf",
      "parents": [
        "d1b4d0a6a65476236f972cfc181a1db2b96d93ef"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Feb 09 13:18:38 2017 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 12 18:26:12 2017 +0000"
      },
      "message": "AAudioService: integrated with audioserver\n\nCall the MmapStreamInterface from AudioFlinger instead of the FakeHAL.\nFix sending timestamps from the thread.\nAdd shared mode in service.\n\nBug: 35260844\nBug: 33398120\nTest: CTS test_aaudio.cpp\nChange-Id: I44c7e4ecae4ce205611b6b73a72e0ae8a5b243e5\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n(cherry picked from commit 7f6b40d78b1976c78d1300e8a51fda36eeb50c5d)\n"
    }
  ]
}
