)]}'
{
  "log": [
    {
      "commit": "aaf361b75114494490c45234c66d7ecbfe0d2c4b",
      "tree": "e91cb6590dbc48ceb7e3a7aeca5cdfe351308d95",
      "parents": [
        "5dbd702262e948c4451295172edfa051c37d9ac7",
        "7829e89a8b789211bb0ada783aa1103739446b04"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 08 10:48:20 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Oct 08 10:48:20 2019 -0700"
      },
      "message": "Merge \"audioflinger: Add tracing for direct tracks\" am: 1de381858f\nam: 7829e89a8b\n\nChange-Id: Icc7ff3732d581b8650b04e49757c3a1e7efc99cb\n"
    },
    {
      "commit": "7829e89a8b789211bb0ada783aa1103739446b04",
      "tree": "c47c35ad1de8a5595e2ea616c19f2d7cd4d19771",
      "parents": [
        "55a5ece7ca358ddaf6926c6ecf0d88d632b45a8b",
        "1de381858fda2fc7bab72b6f27d0beaf08679705"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 08 10:43:11 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Oct 08 10:43:11 2019 -0700"
      },
      "message": "Merge \"audioflinger: Add tracing for direct tracks\"\nam: 1de381858f\n\nChange-Id: Id65ffbc61d99e67d84383b41c9277ce8c960d486\n"
    },
    {
      "commit": "76e89c3b8e2bd864f8943a1ad015306a98a4cac7",
      "tree": "bbb7c5aa0daf3416b9e7e8d9c2c0ce4a6c2fd944",
      "parents": [
        "91beec3e38677fc9d168c3e774755ace009e60db"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Aug 15 20:18:47 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Oct 07 16:24:15 2019 -0700"
      },
      "message": "audioflinger: Add tracing for direct tracks\n\nAdd missing calls to ATRACE for direct writes and frames ready\non direct thread.\n\nTest: \u003cstart direct output\u003e\n      external/chromium-trace/systrace.py audio\n\nMerged-In: Iee6ea72442f9902819628735e19cce0ba1546165\nChange-Id: Iee6ea72442f9902819628735e19cce0ba1546165\n"
    },
    {
      "commit": "58f4e548c29634d606b711a45776e98f72540381",
      "tree": "99216d4ae040815fb2bc86f75a91f82dfd2f3189",
      "parents": [
        "495f1a5d2f09e1fd70d9705d0c602f6854fddc3c",
        "7594c6e4d7294e606d8939f15f04546a6e711454"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Oct 07 11:28:42 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Oct 07 11:28:42 2019 -0700"
      },
      "message": "Merge changes I52ec5b02,I376656e3,I3f005583,Icba4e33d,I78400f6c, ... am: d7a1506715\nam: 7594c6e4d7\n\nChange-Id: Ia06cf02e0bfae12577860f5211bea3960c666501\n"
    },
    {
      "commit": "7594c6e4d7294e606d8939f15f04546a6e711454",
      "tree": "c73f3dc48a7a0f668652a12d6f86646c90942733",
      "parents": [
        "79645b66f19d91419b747b0620b5c7c00117f1b2",
        "d7a1506715bf9d588210d46b8d6563fc9e92e25a"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Oct 07 11:23:01 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Oct 07 11:23:01 2019 -0700"
      },
      "message": "Merge changes I52ec5b02,I376656e3,I3f005583,Icba4e33d,I78400f6c, ...\nam: d7a1506715\n\nChange-Id: Idd3ab59ad99c450d89fd47aaa1a15681f73175ac\n"
    },
    {
      "commit": "af28887c617eca259444f743ef83eda85d52d31e",
      "tree": "d1885e5d79cd7021a89276e4ebe7f81f2fd8ab73",
      "parents": [
        "d368d9166ea7df77479a2908e3a7dbf4c5f21c12"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 25 13:05:02 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "Abstract access to HAL stream via Source in RecordThread\n\nThis allows to replace direct reading from HAL with obtaining\naudio data from another source.\n\nIt should be possible to encapsulate reading from FastCapture\nin the same manner, but it\u0027s not required for direct inputs.\n\nTest: make\nMerged-In: I3f005583410cc9c5d4b07c127d95e236abb4a85f\nChange-Id: I3f005583410cc9c5d4b07c127d95e236abb4a85f\n"
    },
    {
      "commit": "32f0d1689bd2eea6f43d7fb53faaedc23bd101d7",
      "tree": "3144c04d2bba1d717b30fe54fb4e4f08c478f982",
      "parents": [
        "a4f00e2aeadc9dc5c2f4970cd61ace72438136d4"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 30 14:42:32 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "libaudioprocessing: Extract vendor-available part of AudioMixer\n\nSplit AudioMixer into the base part which doesn\u0027t rely on\nthe framework and can be used in vendor code and the derived part\nwhich is intended to be used by Audioflinger.\n\nTest: A/B compare output from test scripts, manual testing on the phone\nMerged-In: I24c390f67f20baa8109902099359ca6e34eebcfd\nChange-Id: I24c390f67f20baa8109902099359ca6e34eebcfd\n"
    },
    {
      "commit": "f11fc2260594ef0b51abd5c483cae13df81fde20",
      "tree": "8cdb1dbfa90e07f7237fb6b0a227e8f9e153e0f4",
      "parents": [
        "0ff9bd98805a1b593fd72dda96c2e4795d5106e2",
        "b5a3db3e8ed9adef4fbeb8e3b5e97a1af50bca70"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Oct 03 15:56:52 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 03 15:56:52 2019 -0700"
      },
      "message": "Merge \"AudioFlinger: enforce OP_RECORD_AUDIO during recording\" into qt-dev am: 7b254210fe\nam: b5a3db3e8e\n\nChange-Id: I52e15469eefdd9f037cc09974846c21c6decff1f\n"
    },
    {
      "commit": "b5a3db3e8ed9adef4fbeb8e3b5e97a1af50bca70",
      "tree": "46515bed0c814d56357b7521fbfe805aecc9a7ac",
      "parents": [
        "678e069993547ee0c0d872d2bf0c19012960b16f",
        "7b254210fe701b9023d1db342c6d1c884d39efe7"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Oct 03 15:50:49 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 03 15:50:49 2019 -0700"
      },
      "message": "Merge \"AudioFlinger: enforce OP_RECORD_AUDIO during recording\" into qt-dev\nam: 7b254210fe\n\nChange-Id: I06721afc1c0ac492fc7b1b9efbd4af3758325570\n"
    },
    {
      "commit": "7307293e8befafa12b244b74cd3c8cb84b27997c",
      "tree": "db965b2dafa54ec2460e83292bbc6f9b2cb5ecaf",
      "parents": [
        "a426cf1c3d42d2e17212bd0aa5fbfe7517ad3284"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Aug 20 15:42:04 2019 -0700"
      },
      "committer": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Mon Sep 16 13:59:25 2019 -0700"
      },
      "message": "AudioFlinger: enforce OP_RECORD_AUDIO during recording\n\n  Fix issue where RecordTrack silencing didn\u0027t silence the\nfull buffer: the memset to 0 was using the RecordThread frame\nsize, not the RecordTrack frame size.\n  OP_RECORD_AUDIO was only enforced at the start of a recording\nwhich would fail if not granted. This patch silences the recording\n(i.e. silence is recorded instead) when it is lost, and undoes that\nwhen granted again. This requires:\n- propagating the package name of the client to the RecordTrack class\n- registering an appOp callback in RecordTrack (through a new\n  OpRecordAudioMonitor class) to (un)silence the recording\n- update the isSilenced() method to take into account the appOp.\n\nBug: 138968594\nBug: 138636979\nTest: run app that records audio, then \"adb shell appops __pack_name__ 27 2\"\n     and verify recording is silent after that.\n\nChange-Id: Ib33f5b592185a67204997213bab1ac2594d90d37\n(cherry picked from commit ddf87effa4d80f413a80fde861f73877ccd80599)\nMerged-In: Ib33f5b592185a67204997213bab1ac2594d90d37\n"
    },
    {
      "commit": "cfaf477e54f6c9d58b079f73507a5dfbeb773faa",
      "tree": "ee2099f874501689ee079a94709a4ce94a65ebfc",
      "parents": [
        "1210f45ea764f0d186e55a19c068283a4ff6cfac",
        "5f6132f7401cd11ff972968dae8695674950ec57"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Sun Sep 08 13:06:51 2019 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Sun Sep 08 13:06:51 2019 -0700"
      },
      "message": "Merge qt-r1-dev-plus-aosp-without-vendor (5817612) into stage-aosp-master\n\nBug: 135460123\nChange-Id: Ibfea730ea29bc73aa9ffda902aedbc6d8fcec89d\nMerged-In: I971ea1db5b37fca8a651cba85ba12c44d13e07c1\n"
    },
    {
      "commit": "d6d47b2f0342ddb454c684bf9b93072697f491fe",
      "tree": "ee2099f874501689ee079a94709a4ce94a65ebfc",
      "parents": [
        "5f6132f7401cd11ff972968dae8695674950ec57",
        "3ef50539518973a8b48fda7eacc1f8840a5db970"
      ],
      "author": {
        "name": "Wenfeng Sun",
        "email": "wenfeng.sun@mediatek.com",
        "time": "Wed Aug 21 15:12:23 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 21 15:12:23 2019 -0700"
      },
      "message": "Merge \"Fix OffloadThread VolumeShaper issue\" am: b7a4a3c492 am: 3ca47ba98d\nam: 3ef5053951\n\nChange-Id: Ibfc5cca4b48c07c2aaba161373c961cb3dfd7d3f\n"
    },
    {
      "commit": "3ca47ba98d2286610e7b97c41e6418eb6441ba7c",
      "tree": "462f5e140ceb566e3978ffa9dabad4b33050b452",
      "parents": [
        "1dd33eacee80d6934dd541eb4703f17e18d97c55",
        "b7a4a3c49214617fd928de1e11c7ff49e4a68815"
      ],
      "author": {
        "name": "Wenfeng Sun",
        "email": "wenfeng.sun@mediatek.com",
        "time": "Wed Aug 21 14:48:06 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 21 14:48:06 2019 -0700"
      },
      "message": "Merge \"Fix OffloadThread VolumeShaper issue\"\nam: b7a4a3c492\n\nChange-Id: Ia166a3a4c036a0400b0220dd20d54aacbf286abb\n"
    },
    {
      "commit": "7945833b714265830792fd19f5b7618fe1a4cb10",
      "tree": "7d2fe5c61b3f02935439c37270aeb2926750c517",
      "parents": [
        "e8a9a230ac79a42ccd629f5fcfbdadb4ed60f872"
      ],
      "author": {
        "name": "Wenfeng Sun",
        "email": "wenfeng.sun@mediatek.com",
        "time": "Wed May 29 20:12:43 2019 +0800"
      },
      "committer": {
        "name": "chien elvis",
        "email": "elvis.chien@mediatek.com",
        "time": "Wed Aug 21 08:27:51 2019 +0000"
      },
      "message": "Fix OffloadThread VolumeShaper issue\n\nBug: 134042971\n\nTest: NTS case AUDIO-026-DDP51-TC3-NonTunnel / Tunnel verify volume starts at 0 when fading in\n\nChange-Id: I8ee4444e3ceb2d8a0ceb979fada10c644b5db35c\n"
    },
    {
      "commit": "eab904559f8c248787898783e442e92ffc53b529",
      "tree": "62c63db70c0c1c3df4cb1370612f25a33ab058bb",
      "parents": [
        "91c9dcb862ce28e2a1ca9ff8bf17ad9df0bd88e2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 24 15:17:46 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 25 16:23:02 2019 -0700"
      },
      "message": "audioflinger: fix VoIP volume for fast track\n\nAlso use audio HAL volume APIs for fast tracks opened on a\nspecific VoIP RX output. Previous implementation was only\nconsidering regular tracks.\n\nFix regular track implementation to send volume before it is altered by\neffect volume controller if present.\nAlso only reflect stream and master volume in volume sent to HAL:\ntrack and shaper volumes are still applied by mixer.\n\nBug: 133829194\nTest: VoIP call\nChange-Id: Id5025a1f67df0eab7391056715047a23429e0f02\n"
    },
    {
      "commit": "333ab963ed35ee99efa076db100e70a45e6ffff9",
      "tree": "ccab1ba155378b4e57996049a08afa4a74ef5171",
      "parents": [
        "b472cf075b83686fe30254a3b58f60e5866a667a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 28 20:23:35 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 29 09:53:04 2019 -0700"
      },
      "message": "VolumeShaper: Ensure consistent observable state when muted\n\nPrior to this patch, VolumeShaper state for direct\nand offloaded tracks did not appear to advance for master mute\nand all tracks did not appear to advance for stream mute.\n\nTest: atest android.media.cts.VolumeShaperTest with and without muting\nBug: 133354056\nChange-Id: I589f4e0837124a185509718f1175e06102a1be96\n"
    },
    {
      "commit": "ae22b4843b3cfcbbf6fdbc21e60f1bd0c1d1f763",
      "tree": "91ebed531eb0e24fbe9d9fc0ad9577a4c337e80f",
      "parents": [
        "e905b6b18738572062e9c30735539836af683643"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 09 15:38:55 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 09 17:02:49 2019 -0700"
      },
      "message": "AudioFlinger: Do not permit fast patch tracks if not compatible\n\nTest: atest AudioPlaybackCaptureTest\nBug: 132346038\nChange-Id: I67939ed7f98c546d41148d36764d93723353c893\n"
    },
    {
      "commit": "c16463885b106429146b6f89fbde6ef8eb372538",
      "tree": "0aa0b84eb018ea03d45a6add10d7ee2de4a79714",
      "parents": [
        "ef7eaaf8d873e9d832673fd0a8e07371fa47a0a0"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 30 16:12:10 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 02 17:58:01 2019 -0700"
      },
      "message": "AudioFlinger: Properly account for underruns\n\nWhen the mixer status was MIXER_ENABLED twice in a row\nzeroes were forced to the audio sink.\n\nTest: aaudio test write_sine_callback -pl -n1 -r44100 -s20\n      and then use rapid volume changes.\nBug: 131767115\nChange-Id: I24b41084138210c63e8c551ae4a5f3adddb9e607\n"
    },
    {
      "commit": "12d07c503a8ec317b4d5e7aef49036a1c36600a8",
      "tree": "b43470ddf76aad4fe29d864a30341af0137b41e1",
      "parents": [
        "91c82546ed8f47e8f43843a427f49a0d3e0b4e45",
        "6e6a2e6190b63a19c8788c475269d711f7853743"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 01 16:47:24 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 01 16:47:24 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: Fix haptic race condition\" into qt-dev"
    },
    {
      "commit": "6e6a2e6190b63a19c8788c475269d711f7853743",
      "tree": "9d925d56d96fbd63e4c14e42331b85e5304bf6f3",
      "parents": [
        "2f7a6072bbafd4faba8cbaf170d3cb72e37e3454"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 30 16:38:41 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 30 16:52:46 2019 -0700"
      },
      "message": "AudioFlinger: Fix haptic race condition\n\nTest: compiles\nBug: 131715193\nChange-Id: I57f136903b9ecc40ecd10642c0bfaad0134495f4\n"
    },
    {
      "commit": "09f1ed2cb4479c93859557f5b4d40e1c3732f6f2",
      "tree": "27f2c1c23755b45acdfd0832bb9e493f6b890aaa",
      "parents": [
        "2f7a6072bbafd4faba8cbaf170d3cb72e37e3454"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 24 17:45:17 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 29 09:59:31 2019 -0700"
      },
      "message": "audio: improve audio routing callbacks\n\nDo not force audio device changed callback when the client\n(AudioTrack or AudioRecord) registers to AudioFlinger but only when\nit starts playback or capture. Doing so prevents a spurious callback\nhapping at registration time where a stale device\n(previously selected by AudioFlinger thread) but irrelevant to this\nclient is indicated. This causes a disconnection of AAudio streams\ndespite no real device change.\n\nBug: 128630993\nTest: CTS: android.nativemedia.aaudio.AAudioTests, android.media.cts.RoutingTest\n      CTS Verifier: Audio Input/Output Routing Notifications Test\n\nChange-Id: Ia7f1d11490989b0287c97479466c1c07a223aab3\n"
    },
    {
      "commit": "2996f67767ff90617cc5f7801c7bd8dc67c9dd66",
      "tree": "d20af841b6537ca44a0b1bf7a839e0ba3f9c7a91",
      "parents": [
        "3208826f676b1be78e1c04692d7f17249e45c3ea"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 18 12:29:59 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Apr 24 14:49:52 2019 -0700"
      },
      "message": "AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\n\nThe client must provide a unique Record ID (RIID) when creating\nan AudioRecord. This RIID is passed down to AudioInputDescriptor\nin AudioPolicyManager which sends configuration updates\nvia IAudioPolicyServiceClient callback.\n\nBy supplying RIID, the Audio Service can coalesce start / stop\nevents coming from clients (apps) with recording configuration\nupdate events.\n\nFor AAudio MMap clients everything is handled at the server\nside because they correspond directly to audioserver objects.\n\nBug: 123312504\nTest: android.media.cts.AudioRecordingConfigurationTest\n      AudioRecordTest#testAudioRecordInfoCallback\n      MediaRecorderTest#testAudioRecordInfoCallback\n      manual testing using Oboe and Solo test apps\n\nChange-Id: I3d32241752d9a747736606dc4cb1e068e6b7aa3b\n"
    },
    {
      "commit": "7ed66a1a879399edf356e54f09d59c1a7ca2d5f7",
      "tree": "498ea915266ffda87754b03e4b40230e2712ee1d",
      "parents": [
        "8263e3519b6801f019e471efe4a6045b7046e4d3"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 18 13:20:30 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Apr 19 19:03:30 2019 +0000"
      },
      "message": "AudioFlinger: allow small requested capacity for FAST path\n\nAudioFlinger used to reject requests for the low latency FAST\npath when the capacity was !\u003d mPipeFramesP2.\nBut if the caller requests \u003c mPipeFramesP2 than we can just bump it\nup to mPipeFramesP2 because the API allows that.\n\nFor example, on Pixel, mPipeFramesP2 is 4096\n\nBug: 80308183\nTest: adb shell input_monitor_callback -pl -b4000 -m1\nTest: should see performance mode 12 for LOW_LATENCY\nChange-Id: I987067910de3194fb52370d0ea1626cffad6248c\n"
    },
    {
      "commit": "b20cf7db9e669169bbae5f0da97018a866c3f634",
      "tree": "96e88e1850e1fb27fcc0bad53cc575e837d86c60",
      "parents": [
        "aceea8bddd0324df4414673bc39a3f38fe16e8a1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 05 19:37:34 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 19:27:20 2019 -0700"
      },
      "message": "audio policy: concurrent capture effects\n\nAdd pre processing effect management for concurrent capture scenarii.\nWhen several clients on the same input stream have enabled audio effects,\nonly the effects attached to the top priotity client are active.\nOther effects are suspended.\n\nAdd AudioFlinger API to suspend/restore audio effects build on top\nof exisiting internal effect suspend mechanism.\n\nRecordThread now supports more than one effect chain.\n\nAOSP pre processing implementation supports more than one effect session\nper input.\n\nRefactor AudioPolicyManager::closeAllInputs() to call closeInput() on\nall inputs instead of partially duplicated code.\n\nBug: 128419018\nTest: make\nChange-Id: I685286da4c2905a8894a4354679f9787b1400621\n"
    },
    {
      "commit": "6c79632bbece71f7af0c2453bb62a5d6f0cca664",
      "tree": "a70a17d1f723b7e0241bb762bf5478e3c9947348",
      "parents": [
        "2cb1a8ccbd402d74a06ee34721f5dd787ecb396f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 09 14:13:17 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 10:29:30 2019 -0700"
      },
      "message": "refactor mutexes for audio effects in audio flinger and audio policy\n\nRemove effect specific mutex (mEffectLock) in AudioPolicyService: Due to\nconcurrent capture (among other reasons), it is necessary that the audio\npolicy manager state preserved by mLock includes audio effects\nregistration and enabling.\n\nMoved all audio policy API calls from audio flinger out of locked regions\nfor audio flinger, thread and effects mutexes to avoid cross deadlocks\nbetween audioflinger and audio policy manager:\n- centralized audio policy API calls in EffectModule::updatePolicyState()\n- the enabled state now reflects the state requested by the controlling\nhandle, not the actual effect processing state: a suspended effect is\nnow considered enabled.\n\nA new audio policy manager API moveEffectsToIo() is added to atomically\nhandle moving effects to a new input or output without having to call\nunregister \u003e register \u003e enable sequence.\n\nAlso fix assert in setStreamVolume to match volume group refactoring\nin audio policy manager.\n\nBug: 128419018\nTest: CTS tests for audio effects.\nTest: manual tests with Duo calls, Play Music, Youtube, notifications\n with and without Bluetooth and wired headset.\n\nChange-Id: I8bd3af81026c55b6be283b3a9b41fe4998e060fd\n"
    },
    {
      "commit": "654438952d760d80986270db81d498f1b6e110b4",
      "tree": "3b3da8dedee329a89f54804513fc39aad0d92061",
      "parents": [
        "e46a14777671ec310b35aa1b0a90510f29bf8085",
        "95e3768e1936673cacf185c721f9b2c117a94a0a"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Tue Apr 16 19:07:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 16 19:07:03 2019 +0000"
      },
      "message": "Merge \"AudioFlinger::Thread ensure proper add / sub\" into qt-dev"
    },
    {
      "commit": "95e3768e1936673cacf185c721f9b2c117a94a0a",
      "tree": "993e603d53a6bf44744b94a394de2c790d81ed2f",
      "parents": [
        "8d14f5ccff2440f39630965486e9601ab6d007b6"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Fri Apr 12 11:13:36 2019 -0700"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Mon Apr 15 14:11:36 2019 -0700"
      },
      "message": "AudioFlinger::Thread ensure proper add / sub\n\nBug: 126772841\nBug: 130371615\nTest: 24 hours recording with 64 bit audioserver\nChange-Id: I71305448ee194d1cc325ab238f1681aee93ab18d\n"
    },
    {
      "commit": "fa11780f3d3f5ce87120c27cc539e8672ec4636f",
      "tree": "1536eb3724b90140b9d84dd349b0bf75744accd3",
      "parents": [
        "019b2fc5aa5d62b911d029234548eb9c253b8f60"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 12 13:50:39 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 12 14:45:18 2019 -0700"
      },
      "message": "AudioFlinger: Ensure triple buffering is preserved for notifications\n\nTest: write_sine_callback, com.zebproj.etherpad\nBug: 26230944\nBug: 129545307\nChange-Id: I0b3abb571f706b947430ac36810260289ae0c627\n"
    },
    {
      "commit": "84114c3fc63f1b3a7535d1b9df171c40d7969be2",
      "tree": "f0fce03d0c39ccdaea71805ef175bcb3340a2c12",
      "parents": [
        "d21b6de7181840e14300e94284db48172e24004b"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Apr 10 16:38:07 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Apr 10 16:38:07 2019 -0700"
      },
      "message": "Init haptic intensity for the first fast track.\n\nThe haptic intensity for fast track should be initialized, or it will be\nHAPTIC_SCALE_MUTE by default, which may result in no haptics.\n\nBug: 130312331\nTest: play haptics stream with FastMixer enabled\nChange-Id: If5a1ea12c563c4af1422b2e32451b80e69d2ef58\n"
    },
    {
      "commit": "4b99b0dc3d4bc5700f276f59fc3a5da4dc90a108",
      "tree": "fee1bf6b404352b1135fbb17e9f6987d1580aab5",
      "parents": [
        "e313cff42defff96ac2d94da50213e6df1b97c06",
        "47affe5c842bdab14d5889d7a12da74b9ac97eb5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 09 19:07:01 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 09 19:07:01 2019 +0000"
      },
      "message": "Merge \"Copy haptic data directly from effect in buffer to out buffer.\" into qt-dev"
    },
    {
      "commit": "47affe5c842bdab14d5889d7a12da74b9ac97eb5",
      "tree": "bee2e203709f46662163771a4a3ebf84d27123d5",
      "parents": [
        "0e5a1b3bb64d9a5d38903770e018379856401efd"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Apr 04 18:02:07 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Apr 08 17:15:10 2019 -0700"
      },
      "message": "Copy haptic data directly from effect in buffer to out buffer.\n\nThe haptic data will be partially interleaved at the end of the buffer\nafter processing audio mixing. When processing audio effect, only audio\ndata will be handled. In that case, haptic data will be missed if there\nis any audio effect. Copying haptic data directly from audio effect in\nbuffer to out buffer could help solve the problem.\n\nBug: 129956425\nTest: play haptic with audio effect.\nChange-Id: I2b48bb43bec10167d4eacbcaa5c27959e0d44c32\n"
    },
    {
      "commit": "cccbc765d39c2f017d6626b4c83758d853d156ea",
      "tree": "75081f9ca82641ea9d514508e04e96d2c54bf26d",
      "parents": [
        "0e5a1b3bb64d9a5d38903770e018379856401efd"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 05 14:20:05 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 05 14:20:05 2019 -0700"
      },
      "message": "audio flinger: fix cross deadlock in RecordThread loop\n\nFix a cross deadlock between thread and effect chain mutex introduced by\ncommit 446f4df5.\n\nBug: 130044136\nTest: start/stop audio capture for voice communication in 2 different apps\nChange-Id: I23bdbd203476d2bc0b3d8d87ab66e1a9c00f7bcd\n"
    },
    {
      "commit": "5bcf284e8177a2dfb58e01e8e1a88ec13165c29d",
      "tree": "76d439db32a3c18870170b140ba9f14ab8248afb",
      "parents": [
        "41618a66a853a441304bb8fdefcafc903b3ab27c",
        "74e01fa7d96b71952b32ec98f1ac352e6e74186b"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Apr 03 19:59:00 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 03 19:59:00 2019 +0000"
      },
      "message": "Merge \"Audioflinger: tracks monitor OP_PLAY_AUDIO\""
    },
    {
      "commit": "74e01fa7d96b71952b32ec98f1ac352e6e74186b",
      "tree": "c48d9297fb55046c3dc0a14d0652b8072fa0db62",
      "parents": [
        "c70268aa433e7d307819184ae5c2ec96a3e5b6af"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Feb 25 12:18:09 2019 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Apr 02 15:04:30 2019 -0700"
      },
      "message": "Audioflinger: tracks monitor OP_PLAY_AUDIO\n\nMute/unmute tracks according to changes in OP_PLAY_AUDIO for\n  the current usage.\nIn audio policy: always assign AUDIO_STREAM_ENFORCED_AUDIBLE\n  to sonification tracks with AUDIBILITY_ENFORCED flag.\nDo not mute tracks from root / audio server.\nDo not mute UI sounds on AUDIO_STREAM_ENFORCED_AUDIBLE\n  stream type.\n\nBug: 112339570\nTest: enter DnD, play notifications, verify not heard\nChange-Id: Ia5f1118481cf0573101acf2092fbd0ce2cf8c038\n"
    },
    {
      "commit": "01dc5ca26ce985d441e1e5e7763e1e3e93633b36",
      "tree": "927ab7f1d29292efe137d5ac30b72772f1d9263c",
      "parents": [
        "c70268aa433e7d307819184ae5c2ec96a3e5b6af"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Mar 29 10:12:12 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Mar 29 11:01:03 2019 -0700"
      },
      "message": "audioflinger: Fix thread fields locking for dumps\n\nPreviously, ThreadBase::mLock was only acquired inside\nThreadBase::dumpBase method. That means, dumping of fields of\ndescendant classes, tracks, and effect chains was performed\nwithout holding ThreadBase::mLock.\n\nThis patch changes the way of how dumping is driven. Now only\nThreadBase has a public \u0027dump\u0027 method which is non-virtual.\nThis method takes the lock and dumps all the fields, tracks, and\neffect chains. It calls virtual methods for dumping the contents\nof descendant classes.\n\nBug: 118842894\nTest: compare audioflinger dumps A/B\nChange-Id: Iaafc75d13935a6a92ca37f9567b7ac7c31374b3e\n"
    },
    {
      "commit": "6d91ba5028dd1ab7870ac3c71fa870c50adadb08",
      "tree": "972200d79d9d573f6d5da145ffb87fa3af3fd819",
      "parents": [
        "6a91f7cf52fe6f02f88b1fc6461be8133c97d5ed"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Mar 26 14:35:28 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Mar 26 22:16:28 2019 +0000"
      },
      "message": "audioflinger: Fix unsigned integer overflow in RecordThread\n\nBug: 129159931\nTest: atest CtsMediaTestCases:AudioRecordTest\n  on cuttlefish\n\nChange-Id: I87b72d6d98806327278b80d0a4765f7bed9ce2a7\n"
    },
    {
      "commit": "1234008771662d2b250d6d4972adb04de963fb0d",
      "tree": "d050c75b3935ed9d20676312df0e7cd1d94cd13c",
      "parents": [
        "60c73a445b632cc2e233b1a275efeee7414a41a4"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Tue Mar 19 09:35:05 2019 -0600"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Thu Mar 21 21:51:49 2019 -0600"
      },
      "message": "API changes in MicrophoneDirection\n\nBug: 128523813\nTest: Build, Testbed app\n\nChange-Id: I7b5ee8ba4eec1090866d8aef891a98d50cd09cc5\n"
    },
    {
      "commit": "ede17f7293baf51af1541e734e404a5e1529a2a5",
      "tree": "ad5f92272f71acbec14e2bd75329f0be0b72109d",
      "parents": [
        "1465471345b823696cc1cee9fd51cedabf4cc3fd",
        "c3d62f9950ad0cb402082f19ea856d13986c289b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 15 17:02:57 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 15 17:02:57 2019 +0000"
      },
      "message": "Merge \"Do not count invalid or terminated tracks for audio session purposes.\""
    },
    {
      "commit": "c3d62f9950ad0cb402082f19ea856d13986c289b",
      "tree": "13b8dbde4d5078a3e63b016adbb8c7d99aab32cc",
      "parents": [
        "0a2fc30b155c92db29ed483f85c8e92c3c9cf85b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 13:38:51 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 16:05:27 2019 -0700"
      },
      "message": "Do not count invalid or terminated tracks for audio session purposes.\n\nTest: CTS audio effect tests. SoloTester.\nBug: 128623061\nChange-Id: I3f8d34d82aec14fe6ac9496c0e02726d94acdf85\n"
    },
    {
      "commit": "13850be2d899889d2f594db5296787ac6f3da333",
      "tree": "add1a83ec8e5e57ed8cb14abb60fe7ceecebca59",
      "parents": [
        "0a2fc30b155c92db29ed483f85c8e92c3c9cf85b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 11:33:09 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 12:43:21 2019 -0700"
      },
      "message": "AudioFlinger: Do not process MMap effects under thread lock\n\nNot required and do not assume it.\n\nTest: no regression with atest CtsNativeMediaAAudioTestCases\nBug: 128615806\nChange-Id: I29d77d01aad417cc6aa6f882b7bc0812775e13c6\n"
    },
    {
      "commit": "abfab20fdbdc41168f816272c31caa6c1264ba46",
      "tree": "940b8444b6e54cd0beee1b51427dab2715d7453a",
      "parents": [
        "4e7c08a1343cc9a47c17950359fb0845b262dc40"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 07 19:45:54 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 08 10:37:15 2019 -0800"
      },
      "message": "PatchPanel: Keep peer alive during use.\n\nTest: BT call, switch from hearing aid to headset\nBug: 126789266\nChange-Id: I589e5ecaac25c1ce1d504a387662b96cf50f63ba\n"
    },
    {
      "commit": "28da31bbda1f969924c25f72e244a33debfde779",
      "tree": "3e1fb7d0a1fe0339b54fa02a1a9b0657f395e5c8",
      "parents": [
        "9c971b7f3908eb033a7a7204047b9f64c23ce644",
        "366b643d1e674684d7095cdbe36b6791e842fdbc"
      ],
      "author": {
        "name": "Paul Mclean",
        "email": "pmclean@google.com",
        "time": "Thu Mar 07 23:06:07 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 07 23:06:07 2019 +0000"
      },
      "message": "Merge \"Surface MicrophoneDirection API in MediaRecorder\""
    },
    {
      "commit": "d097981afa129353c42660869e284ae1784506c2",
      "tree": "c035d2a90097094a87c153fe97b3b5b5ba766c7a",
      "parents": [
        "f03cb213d22b238cbd0b72ded36048f0549f921f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 21 15:51:44 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 06 14:50:35 2019 -0800"
      },
      "message": "AudioFlinger: Send Thread statistics to mediametrics\n\nUnify with AudioRecord and AudioTrack mediametrics.\n\nTest: mediametrics dumpsys after record, playback\nTest: CTS Audio(Record|Track)Test#testMediaMetrics\nBug: 114112762\nChange-Id: I6eb554cbf6ff760f9dea568abd3cde82366b51a7\n"
    },
    {
      "commit": "366b643d1e674684d7095cdbe36b6791e842fdbc",
      "tree": "1eaa875ba8bb14b2def251f7f0bdd27fce37cca5",
      "parents": [
        "e1e9cad4d0c7c9825b7f29ebc082dfcbdcace25c"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Mon Feb 25 10:35:51 2019 -0700"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Wed Mar 06 14:55:55 2019 -0700"
      },
      "message": "Surface MicrophoneDirection API in MediaRecorder\n\nBug: 126185930\nTest: MicrophoneDirectionTest testbed.\nChange-Id: I6024ede50999aa751d63f272a087f578b8aea93d\n"
    },
    {
      "commit": "e6c3711b2931a98c0f81c86ddba902b1589acf44",
      "tree": "f9ae0dd94e8b4bc976c20a4519e63f460b3c7c68",
      "parents": [
        "8882e3078fb6a89e17b44ccfcc7914a1f22ed0cb"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 26 17:38:10 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 27 14:14:47 2019 -0800"
      },
      "message": "AudioFlinger: Accumulate long term thread latency statistics.\n\nThis results in a more stable value.\n\nTest: AudioFlinger dumpsys\nChange-Id: I72f5e819076502328222b3bf6bdc761b8aad4a87\n"
    },
    {
      "commit": "9b181958d638af581e98db8e208e3cebd3e99cf7",
      "tree": "c27bfbd78d5a54188b2f6735c0c116a6d57a8859",
      "parents": [
        "a666d61efbe74594e9d441621d20bef8f9def26e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Feb 25 14:53:36 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Feb 25 19:38:04 2019 -0800"
      },
      "message": "TypeConverter: proper conversion of invalid values to strings\n\nOtherwise incorrect state might be hidden.\n\nAlso: Unify devicesToString() and deviceToString() to toString().\n      Miscellaneous cleanup of replicated functionality.\n\nTest: Basic audio sanity, AF and APM dumpsys check\nChange-Id: Ic81167e2d2dbfcca881f0898764cf886215c217c\n"
    },
    {
      "commit": "446f4df547e74ac4aeb09a8a09f8138e88a1140a",
      "tree": "2b783df10a3a8f0c0b46108233fea34553271438",
      "parents": [
        "9f11c708be34f92866149b78bd1f7de2c0adf9ab"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 21 12:26:41 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 22 17:07:14 2019 -0800"
      },
      "message": "AudioFlinger: Add thread statistics for process and io timing\n\nImplemented for threads that read/write PCM.\n\nTest: audioflinger dumpsys Play Music, Movies, Video Recording\nBug: 114112762\nChange-Id: I866a8b639d18426633088d6a03d9135f4ee09fd3\n"
    },
    {
      "commit": "bf6b0ecd91172d6cd6cdd7c44f9ceecab4c29f27",
      "tree": "5af2b932484555dc58c2eb0ec338a4062ba99b81",
      "parents": [
        "f39a648edbb1502f278ab10310e42500692dc3df"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Feb 12 12:30:12 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Feb 15 09:47:23 2019 -0800"
      },
      "message": "Refactor haptic constant.\n\nUse the constant from IExternalVibratorService.\n\nBug: 124318236\nTest: play audio-haptic coupled file\nChange-Id: Ice2ac13d0f6a6a749bb6243230524336144fa5f4\n"
    },
    {
      "commit": "179a074f2706051bbe0e084598482a39e00368cd",
      "tree": "f846f50eacfeb6a1d0d92079c7f0c8dc34f1757c",
      "parents": [
        "186f4ac0f006de84d940a460bb44ee0e325fd1eb"
      ],
      "author": {
        "name": "Aniket Kumar Lata",
        "email": "alata@quicinc.com",
        "time": "Wed Jan 30 14:16:16 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 08 12:26:55 2019 -0800"
      },
      "message": "audioflinger: fix redundant adding to tracksToRemove\n\nIn order to avoid track to be added to tracksToRemove\nredundantly, merge the adding operation under exclusive\ncondition check.\nThis can make sure the add can happen only one time within\none prepareTracks iterator.\n\nauthored-by: Zhou Song \u003czhous@codeaurora.org\u003e\n\nTest: AF active track removal with audio playback pause\nBug: 123375253\nChange-Id: If35348af2144a28b84241e1cb93f497d5eec9a8a\n"
    },
    {
      "commit": "186f4ac0f006de84d940a460bb44ee0e325fd1eb",
      "tree": "3b0da685352a1392eeb3081ca02cbd52d93242f1",
      "parents": [
        "cc423d49c662a03627d7f855f8111c5938f0cf11",
        "453bcb548feb5661b0468a137950e8db521eb9d2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 08 19:47:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 08 19:47:03 2019 +0000"
      },
      "message": "Merge \"audio: don\u0027t apply ramp if track is paused before the first mix\""
    },
    {
      "commit": "453bcb548feb5661b0468a137950e8db521eb9d2",
      "tree": "2bb3cc81dff6a0d29fda7058cf12cc88fa8f1419",
      "parents": [
        "ffb2516cc730b5ac621ad8a92e827faf4e86b8ca"
      ],
      "author": {
        "name": "Revathi Uddaraju",
        "email": "revathiu@codeaurora.org",
        "time": "Mon Aug 14 14:19:40 2017 +0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 07 18:12:34 2019 -0800"
      },
      "message": "audio: don\u0027t apply ramp if track is paused before the first mix\n\nIf a track is paused right after start before it gets a chance to mix\nthe first frame. Don\u0027t apply volume ramp if it resumes later.\n\nTest: Basic audio sanity.  Partner CL.\nBug: 123063164\nChange-Id: I969ff1b6edce8faf77f2cdc481db9c1e3ef6d3dd\n"
    },
    {
      "commit": "20413a95e4a2def7df555c6bf31c9239e0b05d1d",
      "tree": "0d2e75d9265f72344be3dca5a20a932ca90db962",
      "parents": [
        "ffb2516cc730b5ac621ad8a92e827faf4e86b8ca"
      ],
      "author": {
        "name": "Revathi Uddaraju",
        "email": "revathiu@codeaurora.org",
        "time": "Thu Oct 13 17:16:14 2016 +0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 07 18:00:46 2019 -0800"
      },
      "message": "audioflinger: fix for playback paused during track transition\n\nThe test case here involves two applications both of\nwhich play the same music clip. When the 2nd application\nends playback, the 1st application must resume playback\nwhere it left off. But it is possible that the new\nAudioTrack.start() command from the 1st application is processed\nafter the 2nd application has paused and terminated.\n\nThis will prevent a flush to clear any state before playback\nof the 1st application can resume. Direct thread thus\nstays in pause state indefintely.\n\nIssue unconditional flush for direct thread when a new\ntrack is added to a direct output.\n\nTest: partner CL submit, check compilation\nBug: 123082418\nChange-Id: I33d36db35358a1b3b89dd5b2b8cb4db1f9c6d4a0\n"
    },
    {
      "commit": "153f92d57b6a1d2fdc7fa601bbc86db31646a8f9",
      "tree": "0d380f13a58ff8fdf073dd974dcb55e4d18ef75c",
      "parents": [
        "45986c74cd5253bcc81b1b4954e3ff3300f7e6d8"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Dec 18 18:33:28 2018 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 06 15:49:11 2019 -0800"
      },
      "message": "Add secondary output to audio tracks\n\nThe secondary are returned from mixes (from DAP loopback\u0026render),\nfrom getOutputForAttr.\nAll getOutputForAttr* of the stack are update.\nInternal getOutputForAttr use descriptor, external one use handles.\n\nThe secondary output are saved in each track and the track is\ninvalidated if the list of secondary output changes.\n\nIn audio flinger, create a pair of recordTrack \u0026 patchTrack to pipe\nthe intercepted audio audio to the secondary output.\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: Id6523d9e383c15a0e39313d5f355df809b7e72fe\n"
    },
    {
      "commit": "ae340bde6d16f0046887fa0e73fba00cdd5405d9",
      "tree": "8b84e19910fcba4e4ba54f0a7b1e6649bf7d8bb8",
      "parents": [
        "def408939dec9f3a4ff21d84c44b6fcad1797396",
        "3fae037db39ff89707c3a58ef1419229a00ad71d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 01 01:53:28 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 01 01:53:28 2019 +0000"
      },
      "message": "Merge \"Add master audio balance\""
    },
    {
      "commit": "57303cc4312686e02e754ba99a81f0cf71144757",
      "tree": "5118a0c03e035d13c203118e1336e33803b1de08",
      "parents": [
        "77270b880570e07a5d80b23371f53638ec30fb5c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 18 15:45:57 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 30 17:07:10 2019 -0800"
      },
      "message": "Interface between audio server and vibrator service\n\nThe haptic playback should be controlled by vibrator service. Via the\ninterface, audio server could notify vibrator service about starting or\nstopping haptic playback and get vibrator intensity from vibrator\nservice. Vibrator service could call mute/unmute to control the haptic\nplayback.\n\nTest: Manually\nChange-Id: Iad24813977e4dea0d67a91f8f8b390a016ce4ca2\n"
    },
    {
      "commit": "77270b880570e07a5d80b23371f53638ec30fb5c",
      "tree": "4cdb67f28ef7bb47dad1ac19cadb48febf2be8a7",
      "parents": [
        "4b7f683cf9fbaa2b427f03bd067ee2588906ac44"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 18 15:41:29 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 30 15:18:23 2019 -0800"
      },
      "message": "Apply intensity control for haptic data.\n\nUse the same logic in VibrationEffect.scale to control the intensity of\nhaptic playback in audio framework. Note that as the maximum amplitude\nof vibrator is 255, convert the haptic data to pcm_8_bit before doing\nscaling.\n\nTest: Manually\nChange-Id: I6136d27c9255a215834b6e3092aa8ad696fbae04\n"
    },
    {
      "commit": "3fae037db39ff89707c3a58ef1419229a00ad71d",
      "tree": "33087aa031e45fdc65add4ffaaf74e6a7872cf0f",
      "parents": [
        "48f59ed61b902f0e6cb7811bd8ee5fa60ab63abe"
      ],
      "author": {
        "name": "Richard Folke Tullberg",
        "email": "richardfolke.tullberg@sony.com",
        "time": "Fri Jan 13 09:04:25 2017 +0100"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 28 16:21:52 2019 -0800"
      },
      "message": "Add master audio balance\n\nTest: Change Balance through Settings, play audio\nBug: 28390736\nCo-author: Ed Savage-Jones \u003cedward.savage-jones@sony.com\u003e\nChange-Id: I0169b436ccbaa5628584d9f4954dd7c76d021aae\n"
    },
    {
      "commit": "48f59ed61b902f0e6cb7811bd8ee5fa60ab63abe",
      "tree": "99708ef639cc1743725b4ec7ad99954cce013e3a",
      "parents": [
        "911ef8fd5231d990de15bc1e16dd937b7e81f5f7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 28 15:06:59 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 28 15:13:49 2019 -0800"
      },
      "message": "AudioFlinger: Fix VolumeShaper initialization for DirectOutputThread\n\nAvoids temporary frequent polling after creation.\nOffload not affected.\n\nTest: compile\nChange-Id: I868a80ee25553c16083510ef6b79782c414a39a1\n"
    },
    {
      "commit": "bf06f7afdbd7019614c9e31ce43301457a3a7d55",
      "tree": "67fd35b19109aa8a9ebb0a5fec14d51486770f79",
      "parents": [
        "1dfd7ba8c05ff5c8a51f69a3042f3870d99463d4",
        "03a6e6a08dbda1c94e0c9ce6fba4a4abd3df6d59"
      ],
      "author": {
        "name": "Paul Mclean",
        "email": "pmclean@google.com",
        "time": "Thu Jan 17 21:34:35 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 17 21:34:35 2019 +0000"
      },
      "message": "Merge \"Adding Audio HAL V5: Direction API\""
    },
    {
      "commit": "ae4b6ecfbcbea56cca160715a2ef710d8d87a40f",
      "tree": "124f24314b3f95b48a47dc8cc6f4ab0a6a0cc88e",
      "parents": [
        "96024c18126150259ba123ef48d180c6e0a2cf7e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 15 18:34:38 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 16 09:52:55 2019 -0800"
      },
      "message": "add new audio sources for audio capture\n\nThis commit adds the following audio capture sources:\n- AUDIO_SOURCE_VOICE_PERFORMANCE: for real time live performances like Karaoke.\n- AUDIO_SOURCE_ECHO_REFERENCE: for capturing the reference signal to suppress by an echo\ncanceller. Protected by privileged permission CAPTURE_AUDIO_OUTPUT.\n\nAlso added device AUDIO_DEVICE_IN_ECHO_REFERENCE selected when the requested\ncapture source is AUDIO_SOURCE_ECHO_REFERENCE.\n\nBug: 118203066\nTest: CTS tests for audio capture\n\nChange-Id: Ieb159ea82a7b81acf762506a44e24ec80111609f\n"
    },
    {
      "commit": "0c280aa1bdef93e318fb987e0cd239c1bcf0d438",
      "tree": "25244e9f276ed039dc176973fe4277de186d671f",
      "parents": [
        "3305c11ac31fc595a3bb313e765aa4b2f6dcfe71"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Jul 25 10:02:15 2018 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 10 10:46:08 2019 -0800"
      },
      "message": "AudioFlinger: update cache in/out configuration on device port id change\n\nIn case of creation of AudioPatch with the same device type but a different\ndevice id (typically: a device has been connected / disconnection, so\nremoved and re-attached to its corresponding module, a new Id is assigned),\nthe cache configuration of the clients is not updated.\nIf the client calls getRoutedDevice, the id will not be up to date and even\nmay refer to unknown port id.\n\nTest: as follows:\n1 / Calls setDeviceConnectionState AUDIO_DEVICE_OUT_HDMI state\u003d1 mame\u003dy_dummy_hdmi @\u003dmy_dummy_hdmi\n2 / Plays explicititely on this device (by getting the id\n\tAudioSystem::listAudioPorts\n\n2 / Calls setDeviceConnectionState AUDIO_DEVICE_OUT_HDMI state\u003d0\n\n3 / Calls setDeviceConnectionState AUDIO_DEVICE_OUT_HDMI state\u003d1  mame\u003dy_dummy_hdmi @\u003dmy_dummy_hdmi\n    Plays explicititely on this device (by getting the id\n        AudioSystem::listAudioPorts\n\n4 / Calls AudioTrack-\u003egetRoutedDeviceId()\n\tThe id shall match the second one, NOT the first one\nthat does not exist any more\n\nChange-Id: I608ed8d78907b5ea1c9b6ef13c6cbfe528d88f44\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "03a6e6a08dbda1c94e0c9ce6fba4a4abd3df6d59",
      "tree": "e609e29b32764e6fd970f16c78d3bbee5be401bb",
      "parents": [
        "c2684ac61bdbfd9913cf1361a6436272756bc6d6"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Tue Dec 04 10:54:13 2018 -0700"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Thu Dec 20 17:37:55 2018 -0700"
      },
      "message": "Adding Audio HAL V5: Direction API\n\nBug: 119137468\nTest: Testbed app.\n\nChange-Id: I1b3c81079000958da80d36616fe06930d876aac3\n"
    },
    {
      "commit": "3c03c8ba1504003f25ee04b49609eb10b20e1bdf",
      "tree": "78956d959c2684a79768a6dffca77bdc7d561dbc",
      "parents": [
        "8dd9d107e9056283bc38c5921cff29c481adc99f",
        "245cdd91559873aeacf21b7c780655ef43c01682"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 12 22:38:27 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 12 22:38:27 2018 +0000"
      },
      "message": "Merge changes Ic5f780de,I3f963307\n\n* changes:\n  Support audio-haptic coupled playback.\n  Add buffer provider that can adjust channels.\n"
    },
    {
      "commit": "245cdd91559873aeacf21b7c780655ef43c01682",
      "tree": "336ec5eaea56659c21e9441c0d2b5a03102b9b32",
      "parents": [
        "dce8f8cc41cb6be63d13ad0099d61807746ff5d7"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Dec 07 17:55:15 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Dec 12 11:33:47 2018 -0800"
      },
      "message": "Support audio-haptic coupled playback.\n\nWhen trying to play with haptic channel mask, use adjust channels\nbuffer provider to make the haptic channel the same as the output one.\nIf haptic playback is supported, use adjust channel non destructive\nbuffer provider to output haptic data to the end of the sink buffer.\nOtherwise, haptic data will be ignored.\n\nTest: Manually\nBug: 111454766\nChange-Id: Ic5f780de48c1e71de6ba5c4774d1ed2e9c8c51a0\n"
    },
    {
      "commit": "4eb58f1f36606ad7af392a920e1d029a5fb1e797",
      "tree": "c1599fda024344eaf6da5e1d33fc410384127550",
      "parents": [
        "5a2048c3095478482a5ac16639514d3a0a214713"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 07 16:41:02 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 10 14:10:05 2018 -0800"
      },
      "message": "Revert \"Revert \"audio policy: concurrent capture\"\"\n\nThis reverts commit df628924e691e01da190c1ac5db173304442e54a.\n\nBug: 120588242\nBug: 111438757\nTest: make\nChange-Id: If58ff2143fdb744678bb84394598104ced01f5b9\n"
    },
    {
      "commit": "0422892023dcd4616f00028fd223fef056bc0e16",
      "tree": "11dfbf1d69b4357e8c940e1ee12405d59b9797b3",
      "parents": [
        "07567d630dbda88b9a25a439a5936e507d1caeca",
        "df628924e691e01da190c1ac5db173304442e54a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 07 16:39:03 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 07 16:39:03 2018 +0000"
      },
      "message": "Merge \"Revert \"audio policy: concurrent capture\"\""
    },
    {
      "commit": "0209452544dfd347de2ddb4e8cfaf89f51bc039c",
      "tree": "0acbac2e5800fb862f703dde637c61a8ee5027f6",
      "parents": [
        "b852e79b827e0a78f9ea20ab44603031dcc8f1b5",
        "f054fc342205c670b0b88c5040da196aefd0164a"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Dec 07 01:01:56 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 07 01:01:56 2018 +0000"
      },
      "message": "Merge \"AudioFlinger: add check for NULL mInput in MMAP Thread\""
    },
    {
      "commit": "df628924e691e01da190c1ac5db173304442e54a",
      "tree": "e2dda15a881c963a14520117128b5b9857834759",
      "parents": [
        "4c1ef4b64d113be6ee1106375bd10cdc643e80d8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 06 21:45:51 2018 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 06 21:45:51 2018 +0000"
      },
      "message": "Revert \"audio policy: concurrent capture\"\n\nThis reverts commit 4c1ef4b64d113be6ee1106375bd10cdc643e80d8.\n\nReason for revert: b/120588242\n\nBug: 120588242\nChange-Id: Iac41f371cb739c54d5ce519232688bebe2285c72\nTest: Launch QSB and capture from mic icon\n"
    },
    {
      "commit": "f054fc342205c670b0b88c5040da196aefd0164a",
      "tree": "6d5556e581185e1a7f20646a22d9facf44cfc7dd",
      "parents": [
        "b079c02b1fa4f1b5c5b6334b93af584797b4454f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Dec 06 09:45:59 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Dec 06 09:45:59 2018 -0800"
      },
      "message": "AudioFlinger: add check for NULL mInput in MMAP Thread\n\nexitStandby() was crashing if headphones were\nunplugged between the open and start of a MMAP stream.\n\nBug: 120564294\nTest: see repro steps in bug\nChange-Id: Ic42743682ffeb48f2869eaa90581b4e4f7fcb1ab\n"
    },
    {
      "commit": "4c1ef4b64d113be6ee1106375bd10cdc643e80d8",
      "tree": "203b9b1ca84efc9342514175d616c0a7c22150ad",
      "parents": [
        "973db02ac18fa1de9ce6221f47b01af1bdc4bec2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 13 16:46:26 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 04 12:06:37 2018 -0800"
      },
      "message": "audio policy: concurrent capture\n\nImplement concurrent capture in audio policy manager:\n- Attach AudioRecord client to already opened input when possible\ninstead of systematically opening a new input for each client.\n- Always allow inputs to start even in case of concurrency.\n- Clients are selectively silenced based on their app state by audio\npolicy service.\n- In case of concurrency on a given input stream, device and source is\nchosen based app states and source priority.\n\nBug: 111438757\nTest: Manual capture tests with solotester and Camera, Assistant and Duo\nTest: CTS tests for AudioRecord\n\nChange-Id: I302710ff545f67361d9aca89e81de40771ce7fb0\n"
    },
    {
      "commit": "f4a342abd2959904caa18b5a0671e8107581ff24",
      "tree": "bd8a54b016803bbc5e08a47f250f093e7036d0f4",
      "parents": [
        "e8c8b4359835a12a3d1bf84f281c36bce031bb33"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Dec 04 08:55:41 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Dec 04 08:55:41 2018 -0800"
      },
      "message": "Fix potential nullptr dereference in RecordThread::dumpInternals\n\nThe code introduced in ag/5195499 can deref a nullptr.\n\nBug: 117299316\nTest: make\nChange-Id: I6d38f769e583a11d09c137d7b7a1ffd0b547f161\n"
    },
    {
      "commit": "63d2d774249b0f06b2f1b0eae79e844d92fb96ac",
      "tree": "92e223e69d84d865bcb44481dd1613ff4f705c27",
      "parents": [
        "1268b28c5c65691532d3ffb503a199c677c801b9",
        "5d3d956d695cac9551ecffd4ec33f56a7ab40989"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 03 21:12:21 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Dec 03 21:12:21 2018 +0000"
      },
      "message": "Merge \"AudioFlinger: Remove latency reporting for AUDIO_INPUT_FLAG_HW_AV_SYNC\""
    },
    {
      "commit": "ac917aca235ff5170f00c2ee933f41f07a40232d",
      "tree": "2927cc6419b7fe615ccdc977224f6f3ed656f58e",
      "parents": [
        "e4eb88fa5fe62a9b6b709fbf2ff26f37acf6db20"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Nov 28 14:03:52 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Nov 28 14:44:17 2018 -0800"
      },
      "message": "Add selectPresentation API to IAudioTrack\n\nThe Java AudioTrack interface has a setPresentation API. This\ncalls the setParameters API in IAudioTrack. However, this does\nnot eventuate into a call into the android.hardware.audio@4.0\nIStreamOut selectPresentation API.\n\nAdd selectPresentation API to IAudioTrack and call down to the\nandroid.hardware.audio@4.0 IStreamOut selectPresentation API.\nTranslate into calls to setParameters API for legacy HAL\ninterfaces.\n\nBug: 63901775\nTest: compile\nChange-Id: Id634a107f3f93ab18dc80d2bd0af67bda35e859f\n"
    },
    {
      "commit": "30d284228310e1f086d6ff82893882b466c019f0",
      "tree": "f45d6747e0fe070ec4774e30a24311a8f71577bc",
      "parents": [
        "0332f621e2e65e7edddd6e9bacd874f429de8061"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Tue Nov 06 10:27:40 2018 +1100"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Nov 15 02:17:55 2018 +0000"
      },
      "message": "Offset direct/offload timestamps by downstream latency\n\nTest: A/V sync of direct/offload DD+ non HW A/V sync playback thread\n      through MSD, and MSD -\u003e Audio HAL patch in DD+ non HW A/V sync\n      mode.\nChange-Id: I244e9fda9741fe9a9ea913f39901654ebefb973c\n(cherry picked from commit 8729c2eb3eabda3f6b6985a113bd2022b5b379c9)\n"
    },
    {
      "commit": "6aa0a3104e18ac318f75c13e32af05cdd077a356",
      "tree": "6f11104a3c11808cc10ef090ccc4a03335887293",
      "parents": [
        "158ce41988f3706465514265eed1d7e4b6fb123c"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Nov 09 11:00:01 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Nov 13 10:41:57 2018 -0800"
      },
      "message": "audio: Allow higher downstream latency\n\nIncrease allowed downstream latency to 5 seconds.\n\nSometimes software patch might cause \u003e1 second of latency.\n\nBug: 63901775\nTest: MSD prototype\nChange-Id: Ie111fa8b87bc7694ef787c6c4b1deca81bda2abb\n"
    },
    {
      "commit": "ce685406448709895391dcc83a75fa165a72174e",
      "tree": "a4a1490819ffce35bd113ca96b905ff83de168e0",
      "parents": [
        "b5be68edecd62d8edbf86fd4858d1ceb81a74b6c"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 05 17:23:27 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 15 18:53:25 2018 -0700"
      },
      "message": "AudioRecord: Clean up state handling\n\nHandle spurious wakeups in stop.\nHandle track invalidation.\nClarify state.\n\nNote: start and stop should not be called simultaneously from different\nbinder threads.\n\nTest: audio sanity\nBug: 117303225\nChange-Id: I587d9cda7b0eac5215eb6a88f93ee08e396e3ef9\n"
    },
    {
      "commit": "5d3d956d695cac9551ecffd4ec33f56a7ab40989",
      "tree": "abde7e0f65bb718fe56e4b81ba4cfe82ab1fa826",
      "parents": [
        "d10b735cfd4eea74846bb5f53d37c8c2a3114d58"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Oct 04 19:27:26 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Oct 04 19:40:51 2018 -0700"
      },
      "message": "AudioFlinger: Remove latency reporting for AUDIO_INPUT_FLAG_HW_AV_SYNC\n\nTest: No regression\nBug: 117299316\nChange-Id: I8f7c70454baf93f36e87ea98ba795beea8d75678\n"
    },
    {
      "commit": "fe726a6ecb1ff0787d2610540134901cab813fe3",
      "tree": "db480c62c456ec4329bd02a6f8c1cb29204065a0",
      "parents": [
        "37013f15b32aa124647135d4e14da4d5434902eb"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Sep 27 15:17:25 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 02 13:49:38 2018 -0700"
      },
      "message": "AudioFlinger: Synchronize removing client from output descriptor\n\nAvoids race condition where APM::stopOutput is called after\nAPM::releaseOutput.\n\nTest: audio sanity\nBug: 112067674\nChange-Id: I244267d4a157078961589649b1e184206ee23248\n"
    },
    {
      "commit": "9e2376ebbe9d9ddf5e692ce4e340aafb6a56b890",
      "tree": "eabe8df6826f6ff33a2f1db2d32398814eec742f",
      "parents": [
        "a9e84bc851221c34c0a8a3355636fa7b38efa3a5"
      ],
      "author": {
        "name": "Daniel Van Veen",
        "email": "dvanv@dolby.com",
        "time": "Thu Sep 27 14:37:58 2018 +1000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Sep 27 11:05:24 2018 -0700"
      },
      "message": "audio: Fix memcpy num bytes for direct RecordThread\n\nThe num bytes to copy was missing frame size multiplier.\n\nTest: MSD prototype\nBug: 63901775\nChange-Id: I1606bcf41b81d841f39b19512cc7b019c50662d5\n"
    },
    {
      "commit": "2942a4e2d97edb8b14d7fac16f9cad12f78048bc",
      "tree": "97f3fd66a453766e390a4bba7e9c863834855ce8",
      "parents": [
        "ea055e6dab6bcbf9bf90711d602bcf59395f0d59"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Wed Sep 12 17:41:27 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Tue Sep 18 17:32:33 2018 -0700"
      },
      "message": "Remove --json option from dumpsys media.audio_flinger\n\nThe more recent work that this was supposed to become is reflected in\ndumpsys media.log, so this commit removes some code clutter that is not\nused anymore.\n\nOther Changes:\n- Use std::make_unique for creating unique_ptr objects\n\nTest: build, dumpsys media.audio_flinger\nBug: 68148948\nChange-Id: I4841e118c2cdee4ada4c6cdc0fff1ec2e12b38c4\n"
    },
    {
      "commit": "c8e0e91ab96014861840010b45330d3865e0ae80",
      "tree": "f8b179578bbc18a7df94bb4d59d5a0b897192afe",
      "parents": [
        "718279d64684126d4607e02d98071ec4a8556fde",
        "0513b5dfd08a813dd29b95b79e5a52677500206f"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Tue Sep 18 17:56:08 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 18 17:56:08 2018 +0000"
      },
      "message": "Merge changes If9771427,Idde42ba6\n\n* changes:\n  Add options to dumpsys media.log and dump visualizations\n  Improve ReportPerformance::Histogram implementation and add drawing\n"
    },
    {
      "commit": "0513b5dfd08a813dd29b95b79e5a52677500206f",
      "tree": "4f780d0d72ace741eaf3bc3631f353452dc357f8",
      "parents": [
        "cfa7c4b96ced4a086bffabdd4394fb19c9400524"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Mon Sep 17 10:32:48 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Mon Sep 17 18:29:49 2018 -0700"
      },
      "message": "Add options to dumpsys media.log and dump visualizations\n\nOther Changes:\n- added thread_params_t type to NBLog\n- rearranged ordering of macros in TypedLogger.h\n\nTest: dumpsys media.log with --json, --pa, and --plots options\nBug: 68148948\nChange-Id: If97714271a085a99bba0ab3ae0c268a9f407f053\n"
    },
    {
      "commit": "17a4a0feba513a721b23edeb9a915e4ce87b58a8",
      "tree": "8def40ef260d85ecf5414654a2af5cc1a7e3a94c",
      "parents": [
        "bd9b5935fdbd67d3eaf124e3e80470b8cae1ecd1",
        "d06ae78ee7169fc80c8a29390b2156e33c846c08"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Sep 17 16:44:40 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 17 16:44:40 2018 -0700"
      },
      "message": "Merge \"Suppress implicit-fallthrough warnings in audioflinger etc.\" am: a494bb1527 am: 8662f3b9a2\nam: d06ae78ee7\n\nChange-Id: Iee095b6e1278d372b3a7c171f926bd730dbc388b\n"
    },
    {
      "commit": "2b48703770efab81143d389d7389166eb1a6c8db",
      "tree": "f309a4bbfbb4f716dee1af20f82ca95aa04b907e",
      "parents": [
        "f8d13dee65d3708ea527e9f565be85031d7021ba"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Sep 13 14:16:02 2018 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Sep 17 12:50:12 2018 -0700"
      },
      "message": "Suppress implicit-fallthrough warnings in audioflinger etc.\n\nAdd FALLTHROUGH_INTENDED for clang compiler.\n\nBug: 112564944\nTest: build with global -Wimplicit-fallthrough.\nChange-Id: I8875bc7ed073aae84d5df97eb39c8c745ca627ef\n"
    },
    {
      "commit": "c06913801424b90dfbc94b401039352869f20e3e",
      "tree": "5b648a0897db335b91c9365bdd2ba01d0eb708e6",
      "parents": [
        "867f39f2797ae01139fe956fe4f029548de4d662"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 12 18:01:57 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Sep 13 10:44:18 2018 -0700"
      },
      "message": "AudioFlinger: Replace track name with id\n\nSimplifies Mixer handling, makes debug messages consistent.\n\nTest: Audio sanity test, check logcat\nBug: 115435564\nChange-Id: I216e2746170605dfb7994ac660c5534869e887fe\n"
    },
    {
      "commit": "dfb411f91668972faddfc3d175bd3c95ce29673e",
      "tree": "df481e8f5dc63df36dc8a469d6e248383f9beba1",
      "parents": [
        "aec9c3e4b573862dacb4b4cec4c87cf736a3a28e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Sep 11 13:39:56 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Sep 11 13:39:56 2018 -0700"
      },
      "message": "Audioflinger: Dump \"master mute\" state in threads\n\n\"Master mute\" which can be toggled on via \"ro.audio.silent\" property\nhas user-hearable effect, but is not reflected in the dumpsys.\nThis can cause confusion (see the bug referenced).\n\nNote that we need to dump PlaybackThread::mMasterMute, not\nAudioFlinger::mMasterMute, as the latter does not get updated\nby threads in order to avoid taking a lock.\n\nBug: 113348789\nTest: toggle property, check media.audio_flinger dump\nChange-Id: I7f276b233df2f5eca585ffb30031835c030858e1\n"
    },
    {
      "commit": "0c167267e1dd521a1288bd1746c42b0680ab5b88",
      "tree": "24f78cc75a992dd5a2865408f26591326769cc3a",
      "parents": [
        "88d5a224a3727ae03ff1bed629912435620fbc39",
        "97f00044dc1553b4baa0f94d5e6acbf1a552c115"
      ],
      "author": {
        "name": "Tomoharu Kasahara",
        "email": "tomoharu.kasahara@sony.com",
        "time": "Thu Aug 16 20:44:07 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Aug 16 20:44:07 2018 -0700"
      },
      "message": "Merge \"Set volume for output when effect is enabled/disabled.\" am: e778547997 am: e414f58cf5\nam: 97f00044dc\n\nChange-Id: I5430650ffe90b7f4f38ba97d85df91a2262420c7\n"
    },
    {
      "commit": "1990bd40ebb6fcbb876fae42e43792b9dc6d308b",
      "tree": "533950b805a77a744c2100b9c286059406ace779",
      "parents": [
        "34affaed9cc6374e979e3bd29ccfe1671694bfe9"
      ],
      "author": {
        "name": "Tomoharu Kasahara",
        "email": "tomoharu.kasahara@sony.com",
        "time": "Fri Dec 12 14:04:11 2014 +0900"
      },
      "committer": {
        "name": "Tomoharu Kasahara",
        "email": "tomoharu.kasahara@sony.com",
        "time": "Thu Aug 16 17:42:13 2018 +0900"
      },
      "message": "Set volume for output when effect is enabled/disabled.\n\nEven though effect module has \"EFFECT_FLAG_VOLUME_CTRL\" flag,\nthere is some case where volume setting is not sent to offload thread.\nThat leads to sudden increase of audio volume or too low volume.\nThis change is to support delegation of volume control completely\nfor offload audio effect.\n\nBug: 37443095\nTest: Enable/Disable Audio effects during offload playback\nChange-Id: I7033071edc99fadc519efd7adc895dc10f7b9d86\n"
    },
    {
      "commit": "2dbffc2af5e200dbddfa1aeb79569e7811dfbc9a",
      "tree": "4dad85d78b86420b84000686f13d4de995623eff",
      "parents": [
        "c8fddf3dc6a1d51058d9d3b207e818e84ac80fed"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 08 18:50:41 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 13 18:21:03 2018 -0700"
      },
      "message": "AudioFlinger: Incorporate downstream patch latency into timestamps\n\nAvailable for MSD BUS devices.\n\nTest: MSD YouTube playback and audioflinger dumpsys\nBug: 112435419\nChange-Id: Ifd35b68a77464e0db79ad1ed50b72b00a616c253\n"
    },
    {
      "commit": "c8fddf3dc6a1d51058d9d3b207e818e84ac80fed",
      "tree": "d75a5b3a7a8a47af6e009a67659cb1aad08c3caa",
      "parents": [
        "30282562329b3031b6bfa0869bd76ff5f543ebba"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 08 18:32:37 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 13 18:19:36 2018 -0700"
      },
      "message": "AudioFlinger: Add timestamp correction to MSD BUS Threads\n\nTest: MSD YouTube playback\nBug: 112431914\nChange-Id: Ic15ace24d6ab3613be08978b925fd7b9dc7aef38\n"
    },
    {
      "commit": "3488ab97b8fd9d002f6092e1424de9a519e64039",
      "tree": "45a9cc3dc6149f218b9f881d3cc12b007ec74489",
      "parents": [
        "0fe90f2954e897fd13418ce978f3864766b301c7",
        "7f39f56e33bc0feb5188cc0372e0be69239ba78f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Aug 10 00:43:06 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 10 00:43:06 2018 +0000"
      },
      "message": "Merge \"AudioFlinger:  Do not show latency for non-PCM record in dumpsys\""
    },
    {
      "commit": "6427e44be65e3b2fed6da30b4e442d25fe7769ec",
      "tree": "6ed2472bc21023ebc436d531d17e9036e4b5af1b",
      "parents": [
        "66aa339f416e907aa704bb01ac55d109c8bbca38"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 09 12:51:02 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 09 16:20:03 2018 -0700"
      },
      "message": "AudioFlinger: Add record frames read to dumpsys\n\nAllows comparison to playback frames written for patches.\n\nTest: audioflinger dumpsys\nChange-Id: I2ef0ccbc36819d48b05756115de70f5a24a2c2cd\n"
    },
    {
      "commit": "7f39f56e33bc0feb5188cc0372e0be69239ba78f",
      "tree": "c80bffac38de0e373d6455b46ae5ff382a2c33eb",
      "parents": [
        "a29488990bcb34a2723ec4ece2ea34f714070f5f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 08 17:30:20 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 09 23:08:30 2018 +0000"
      },
      "message": "AudioFlinger:  Do not show latency for non-PCM record in dumpsys\n\nTest: Check AudioFlinger dumpsys during MSD direct record\nBug: 112388863\nChange-Id: Id404c70af0c0e23a1e349522568b20f50573b1e9\n(cherry picked from commit 2ceaf3dee96d1696b315afdee9ffc0df662f88d8)\n"
    },
    {
      "commit": "442868f036df6e9966f824ec256619b2923a9ed4",
      "tree": "f823452661efd87177897ba4b82d32ef944fd6ec",
      "parents": [
        "4455af941c4d33859215b836ac03571ee7a360cf",
        "1882f16c80d6e1e047a43c1e685a005034b138e4"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Aug 03 23:58:32 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 03 23:58:32 2018 +0000"
      },
      "message": "Merge \"Audioflinger dumpsys: Use libjsoncpp for json dump\""
    },
    {
      "commit": "1882f16c80d6e1e047a43c1e685a005034b138e4",
      "tree": "29fb74695be6d869ca6a0f51e310e6752eb8c36b",
      "parents": [
        "5b13ff8f66e4b376127af9cfb6fa3f075f17eaa2"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Thu Aug 02 18:05:39 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Aug 03 15:44:15 2018 -0700"
      },
      "message": "Audioflinger dumpsys: Use libjsoncpp for json dump\n\nTest: dumpsys media.audio_flinger --json\nBug: 68148948\nChange-Id: Ieebe2c52e3613e48a5ec5cbb2b1f167a32d5a47d\n"
    },
    {
      "commit": "156317a32323b8a3826a6e9e9eec49b9049c14bd",
      "tree": "b8ca88f5f4269cb6d001cbe8c911b346cca8c2c0",
      "parents": [
        "7f1732ee0d2c0571f8a00cd6ccbaa74cf8dd260c"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 02 11:49:29 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 02 11:49:29 2018 -0700"
      },
      "message": "AudioFlinger: Remove unnecessary computation\n\nTest: Build and basic record sanity\nBug: 112142872\nChange-Id: Ibfc0c715930593c23e58acd4afda6986d69d53b2\n"
    },
    {
      "commit": "978dcac6101c416158ca234e6ef01baa861bbcd0",
      "tree": "77eab020fb6e9d933facfe37b4018b941ccf7128",
      "parents": [
        "1441fdc2037c00bf9106dad98dcd7a02886fbd02",
        "16698b8c36aa6cba8a3dab3432cbed361264a509"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 02 16:42:06 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 02 16:42:06 2018 +0000"
      },
      "message": "Merge \"AudioFlinger: Update namespace for Statistics\""
    },
    {
      "commit": "16698b8c36aa6cba8a3dab3432cbed361264a509",
      "tree": "b908af64a0a93b58b7265cd903e3167c74262345",
      "parents": [
        "965737edc28bd76f6424f9ff4c1f0315f28a0434"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 01 10:48:38 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 01 10:48:38 2018 -0700"
      },
      "message": "AudioFlinger: Update namespace for Statistics\n\nTest: Build and basic sanity\nBug: 80502521\nChange-Id: I4f9180d1eb1eb53b75bf6fdb9f98cdcb03b6e9f2\n"
    },
    {
      "commit": "d02904c6d5b30d2e32cdd57495c4a182b6187b32",
      "tree": "b34a28279a94ae1c1e8fa3c92e047d9fad96beea",
      "parents": [
        "965737edc28bd76f6424f9ff4c1f0315f28a0434",
        "01c8f5681ce875bb60b6451929bb3fbd0876ca61"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Aug 01 17:47:49 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 01 17:47:49 2018 +0000"
      },
      "message": "Merge \"Use fast mode with patch track and patch record if possible.\""
    },
    {
      "commit": "01c8f5681ce875bb60b6451929bb3fbd0876ca61",
      "tree": "eb31a887a84e973ead1f4266a4a8f45db9909306",
      "parents": [
        "88585f96fe27f60c8c90699466f9da80fca6d658"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Jul 19 17:47:28 2018 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jul 27 16:20:49 2018 -0700"
      },
      "message": "Use fast mode with patch track and patch record if possible.\n\nUse fast mode with patch track/patch record if fast mixer/fast capture\nis enabled. With the fast track and fast mixer/fast capture, we can get\na better performance on latency.\n\nBug: 111800664\nTest: make phone call on marlin/walleye with enabling legacy usb hal\nChange-Id: I0edd5978049e7c55da217a7a19e45fcbe5c3ac62\n"
    }
  ],
  "next": "5b13ff8f66e4b376127af9cfb6fa3f075f17eaa2"
}
