)]}'
{
  "log": [
    {
      "commit": "20a44f84f1a80ba1464ca35b62417e33ed88ac29",
      "tree": "406a9c22867b2928338aa3e7eeae7d1f313b04eb",
      "parents": [
        "229c543d081cc29f1f07df8d0b1657cdb71e0c15"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Sep 18 11:24:52 2019 +0100"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Oct 10 13:34:23 2019 +0100"
      },
      "message": "Fix secondary output under\u0026over run\n\nThere were three issues with the implementation\nof Audio Playback Capture patches on secondary outputs.\n\n1) Patch tracks were always forced to be ready, even if there were not\nenough audio to be played. That led to playing partial buffers if the\nsource output had smaller (time wise) buffer than the secondary output.\n\nThis is fixed by avoiding setting CBLK_FORCEREADY on every buffer push\nfrom the primary output thread.\n\n2) After 1 is fixed, the patch tracks now behave like regular (non fast)\ntracks. This means that the track only starts when it is full.\nThat leads to overrun on startup as the primary and secondary outputs\nusually do not have the same write period.\n\nWhat makes the issue worst is that Remote submix has a fixed buffer in bytes,\nso its write period changes depending on sample rate contrary to the\nprimary HAL which pulls with fixed time periods (usually 20/40ms).\n\nThis patch solution is to introduce a ready threshold. The track will be\nconsidered ready to be active if there are more than frames in its buffer.\n\nTo avoid changing previous latency behaviour except for APC,\nlegacy tracks have this threshold set to their buffer size and\nnon APC patch tracks have it set to 1, similar to setting\nCBLK_FORCEREADY.\n\n3) The patch track buffer size calculation of the patch track did not take\ninto account primary and secondary output could be of different sampling\nrate.\nThis mean that the patch track buffer was usually too small as the\nsecondary output usually had smaller sampling rate (Live caption\nrequests 16kHz) than the track (music usually plays in 48kHz).\nThis made the two problems even worst.\n\nThis was easily fixed by scaling the buffer size with each side sample rate.\n\nBug: 136691300\nTest: play audio\n      adb shell audiorecorder  --target /data/file1.raw\n      # Check that the recorded file has no underrun\nChange-Id: Ib2846b2827afd1b953d4a25acb18c7cadf57cd3e\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\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": "91beec3e38677fc9d168c3e774755ace009e60db",
      "tree": "6016c5b7ff6fca19abf6bdd4b8e82cbd0bfa71ff",
      "parents": [
        "48f1d4579f9fe1cd6ff672fe9daa27fec83d82c7"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Oct 07 09:57:15 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Oct 07 12:50:58 2019 -0700"
      },
      "message": "PassthruPatchRecord: fix null timeOut case in obtainBuffer\n\nProperly handle \u0027timeOut \u003d\u003d nullptr\u0027 case in\nPassthruPatchRecord::obtainBuffer.\n\nBug: 117564323\nTest: make\nMerged-In: Id352e47682c0992b817f26b3b594ec5913e663be\nChange-Id: Id352e47682c0992b817f26b3b594ec5913e663be\n"
    },
    {
      "commit": "48f1d4579f9fe1cd6ff672fe9daa27fec83d82c7",
      "tree": "7958f3d8e8f59dbbcc0474cf84ddae8bc889ba35",
      "parents": [
        "e6eb348b793736f1f4e441b53167d0c09e614f6b"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 01 16:52:14 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 16:00:03 2019 -0700"
      },
      "message": "Use PassthruPatchRecord for DIRECT to DIRECT connections\n\nWhen both input and output connected by a software patch\nare in \u0027DIRECT\u0027 mode (no framework processing), use\nPassthruPatchRecord as it helps to reduce the latency\nsignificantly by avoiding intermediate buffering.\n\nRemove \u0027std::nothrow\u0027 from tracks creation in PatchPanel\nfor consistency with other code.\n\nBug: 117564323\nTest: with MSD module\nMerged-In: I52ec5b02a207548ebc4073c1033e396f444c041c\nChange-Id: I52ec5b02a207548ebc4073c1033e396f444c041c\n"
    },
    {
      "commit": "e6eb348b793736f1f4e441b53167d0c09e614f6b",
      "tree": "d0abca0d2c30e2279a6e631a5c25b4430b7c73e9",
      "parents": [
        "af28887c617eca259444f743ef83eda85d52d31e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 25 14:05:29 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 15:59:52 2019 -0700"
      },
      "message": "Add PassthruPatchRecord for low latency software patches\n\nImplement a subclass of PatchRecord that uses PatchTrack\u0027s\nthread for reading from HAL. This eliminates the need for\nbuffering that adds latency.\n\nThe only modification needed for PatchTrack is to indicate\nunlimited amount of available frames to the playback thread.\nThis is to prevent PatchTrack from being deactivated by\nDirectOutputThread due to lack of frames available.\n\nRecordThread believes it reads audio data on its thread,\nand manages timestamps as usual. The data that it \"reads\"\nand passes to PassthruPatchRecord is discarded by the latter.\n\nBug: 117564323\nTest: with MSD module\nMerged-In: I376656e3c791e91e2196331ecdf2b425697c4e18\nChange-Id: I376656e3c791e91e2196331ecdf2b425697c4e18\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": "d368d9166ea7df77479a2908e3a7dbf4c5f21c12",
      "tree": "051128854a67d74eee4d073b113b2b76ac6cf681",
      "parents": [
        "5269849effaa40a96ccffc214efaf804f3378bd0"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 25 14:59:54 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "Move PlaybackThread::Track::writeFrames to PatchRecord\n\nThis code logically belongs to PatchRecord because it emulates\nobtaining recorded data from a client.\n\nTest: make\nMerged-In: Icba4e33d9d0ca57e6ad964aaf3209e7db766f284\nChange-Id: Icba4e33d9d0ca57e6ad964aaf3209e7db766f284\n"
    },
    {
      "commit": "5269849effaa40a96ccffc214efaf804f3378bd0",
      "tree": "1801581cde4d446ca5e56b9fb8012a81be9659e7",
      "parents": [
        "32f0d1689bd2eea6f43d7fb53faaedc23bd101d7"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 04 11:38:47 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "audioflinger: Add tracing of buffer frames to PatchTrack/Record\n\nSeeing requested / obtained buffer frame counts in trace\nhelps to identify discontinuities in software patch pipeline.\n\nThere is no need to trace requested frame count for PatchRecord\nas it always requests as much as possible (\"-1\" frameCount).\n\nBug: 117564323\nTest: with software patch active,\n      external/chromium-trace/systrace.py audio\n\nMerged-In: I78400f6cc1d1940b3290fb23bb1aacfbffe042e5\nChange-Id: I78400f6cc1d1940b3290fb23bb1aacfbffe042e5\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": "9b6599e1e10232e9c6e67e1d6d26265b8e8da885",
      "tree": "2543d4ef40ca7a67df0f493acf071cb773af7306",
      "parents": [
        "52a42dde3627544fabc6691afcc67df73ed6b5e7"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 29 15:23:21 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "libaudioprocessing: Trivial dependency cleanups\n\n- Remove unused dependencies on libnbaio and libnblog;\n\n- Move dependencies on libaudiohal and libsonic to libaudioprocessing\n  as AudioMixer implementation does not use them.\n\nTest: make\nMerged-In: I258a450725bdacb4fcf437b6f86582d51d40e622\nChange-Id: I258a450725bdacb4fcf437b6f86582d51d40e622\n"
    },
    {
      "commit": "bb3b160486da21dab7611de44c85ad85e73e69c9",
      "tree": "266b8068d8e1714bb4b4100d2e31c0a95cc9e16c",
      "parents": [
        "3e9dd76e813cf04c9dd35a8c2e813c174e5b435e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 08 15:28:43 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Oct 02 16:31:34 2019 -0700"
      },
      "message": "Fix the name of the constant for device [dis]connect parameter\n\nDuring the transition to Treble, \"device connect\" / \"disconnect\"\nparameter was erroneously attributed to audio streams. This\nissue got fixed in Audio HAL V4.0, but AudioParameter file\nwas still using incorrect name for the constant.\n\nTest: make\nChange-Id: I4056ad9e98af6dadd017d22bc4bde031cac75631\nMerged-In: I4056ad9e98af6dadd017d22bc4bde031cac75631\n"
    },
    {
      "commit": "f14e77fef40420ac18d066f0de0486803b941742",
      "tree": "1d2605f264d85476362829da612769e591ce2c8f",
      "parents": [
        "87025d5658d1a3d78c1a634035f7126f0ba8a4f1"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Thu Mar 23 15:52:01 2017 +1100"
      },
      "committer": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Tue Oct 01 10:57:17 2019 +1000"
      },
      "message": "SpdifStreamOut: Support AUDIO_FORMAT_E_AC3_JOC\n\nTest: build\nChange-Id: Iac3dc90e136d625ecbd95eea5c2eea13fc938657\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": "b7a4a3c49214617fd928de1e11c7ff49e4a68815",
      "tree": "e04568fcbd2d29fcbee242342e8fdfd4fe322408",
      "parents": [
        "e9239dbe79ebaa93dda6d734cc80230736a17918",
        "7945833b714265830792fd19f5b7618fe1a4cb10"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Aug 21 20:41:40 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 21 20:41:40 2019 +0000"
      },
      "message": "Merge \"Fix OffloadThread VolumeShaper issue\""
    },
    {
      "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": "14d84c7bdabfae553e42c0cdcfe71a4efda5c95e",
      "tree": "08a95c9fe9c630c8784c742aebdb75e2178837bc",
      "parents": [
        "31a472facd09964642bff5325e7626cdc65255a7",
        "acaea2ed4c4bbafb5da25997c8ccce0d333d320d"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Wed Jun 05 15:18:19 2019 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Wed Jun 05 15:18:19 2019 -0700"
      },
      "message": "DO NOT MERGE - Merge pi-platform-release (PPRL.190605.003) into stage-aosp-master\n\nBug: 134605042\nChange-Id: Iaf96194ef53bc6806e0cecb756334618e82d46bd\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": "9066ad3846deb54fe2bba86b25a934d5bf6033d7",
      "tree": "c23c4f7093b5f9775f4284471b913e14c1dc028b",
      "parents": [
        "86bd6afc79a46d586be816172f3cef7e7c89dc09"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 20 14:40:10 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 21 14:28:58 2019 -0700"
      },
      "message": "audioflinger: fix App Ops for services\n\nDo not check app ops for audio playback for services in\ngeneral, not just for audioserver or root user.\n\nBug: 133178934\nTest: audio smoke tests\nChange-Id: I3a34e6418dc750cc12ed35d465ca8874b0ce0f73\n"
    },
    {
      "commit": "68f7b18e8edaabf6c6c67b350d3126c11ba590ff",
      "tree": "d4e8c5fe2157ef8843fb31baa6b49744ca294254",
      "parents": [
        "d4e2ab1785d813aa336479a57de634f30fb13a92",
        "429844193f7149f3b642f1f260a7f20398eb3778"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat May 11 02:47:56 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat May 11 02:47:56 2019 +0000"
      },
      "message": "Merge \"audio policy: add permission check for privileged attributes flags\" into qt-dev"
    },
    {
      "commit": "429844193f7149f3b642f1f260a7f20398eb3778",
      "tree": "96fc240567b6c528242f4a88582b587e7ba09c48",
      "parents": [
        "459e59820f8914a10c1d015fb4fa09b723cacaca"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 09 17:57:03 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 10 15:38:12 2019 -0700"
      },
      "message": "audio policy: add permission check for privileged attributes flags\n\nAdd check for privileged permission if attributes\nflags BYPASS_INTERRUPTION_POLICY or BYPASS_MUTE are set.\n\nBug: 131873101\nTest: Manual smoke tests for audio playback.\nTest: Emergency cell broadcast in\nChange-Id: I073cf669f606f0d081ff5c8d19f39b5e12efe297\n"
    },
    {
      "commit": "432e0fd4a48678e34d7c63e3d9b8514d1fb08be6",
      "tree": "b0511a6f72d7b53c6b56dc0b3d5d7ef98e62a69d",
      "parents": [
        "d7f726d950aa842f7c835510d795057c97d8efb4",
        "ae22b4843b3cfcbbf6fdbc21e60f1bd0c1d1f763"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 10 22:07:11 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 10 22:07:11 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: Do not permit fast patch tracks if not compatible\" into qt-dev"
    },
    {
      "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": "459e59820f8914a10c1d015fb4fa09b723cacaca",
      "tree": "4b8431e59a45fcfac23fe93ee8d15bfdd3b775c0",
      "parents": [
        "b34bd48605d3ff17398139853d1709f54f388560",
        "2dab03030c95b40902e66b81a247738e375ebcf9"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 09 22:45:08 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 09 22:45:08 2019 +0000"
      },
      "message": "Merge \"audioflinger: honor flag AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY\" into qt-dev"
    },
    {
      "commit": "2dab03030c95b40902e66b81a247738e375ebcf9",
      "tree": "cd140cffff1b7ff1c7e35f0d3d56479bfef054d7",
      "parents": [
        "af0b1c1b5cd67cafa81dbcd1ccb7eb68821173f9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 08 18:15:55 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 08 18:19:49 2019 -0700"
      },
      "message": "audioflinger: honor flag AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY\n\ncommit 74e01fa7 did not bypass app ops policy when flag\nAUDIO_FLAG_BYPASS_INTERRUPTION_POLICY is set.\n\nBug: 131873101\nTest: repro steps in bug\nChange-Id: Idbce26cfdcddbb7a2ae8702ce3d135ef5a69f047\n"
    },
    {
      "commit": "c1de2dfe8602f10ed3086ab601b626bec632b198",
      "tree": "68241794ce067005b2770a31b232588ecb4c33fc",
      "parents": [
        "a8cc6d418bdf459a0c0f79326b09faa45645850c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue May 07 14:26:40 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed May 08 15:19:13 2019 -0700"
      },
      "message": "Fix NPE when trying to get input device for attributes.\n\n1. Return error when remote submix device is null. Remote submix device\ncould be null in some case, such as device address error. Returning\nerror to avoid native crash.\n2. Unregister policy mix if set device connection fails. In that case,\nget input device could fail when policy mix is not found.\n\nBug: 131906484\nTest: Manually\nChange-Id: I03ab2bf217341b672c14adfba96d92ad9b453b01\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": "66ea39290308e4851a5c6fe149e576b7d6249e5f",
      "tree": "f0fe4950c8d77207be8ce281623f9345e448e478",
      "parents": [
        "09940bbc0e7eb687c1b08c1ba0252852752f68ab",
        "2996f67767ff90617cc5f7801c7bd8dc67c9dd66"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 25 18:01:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 25 18:01:03 2019 +0000"
      },
      "message": "Merge \"AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\" into qt-dev"
    },
    {
      "commit": "2996f67767ff90617cc5f7801c7bd8dc67c9dd66",
      "tree": "d20af841b6537ca44a0b1bf7a839e0ba3f9c7a91",
      "parents": [
        "3208826f676b1be78e1c04692d7f17249e45c3ea"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 18 12:29:59 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Apr 24 14:49:52 2019 -0700"
      },
      "message": "AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\n\nThe client must provide a unique Record ID (RIID) when creating\nan AudioRecord. This RIID is passed down to AudioInputDescriptor\nin AudioPolicyManager which sends configuration updates\nvia IAudioPolicyServiceClient callback.\n\nBy supplying RIID, the Audio Service can coalesce start / stop\nevents coming from clients (apps) with recording configuration\nupdate events.\n\nFor AAudio MMap clients everything is handled at the server\nside because they correspond directly to audioserver objects.\n\nBug: 123312504\nTest: android.media.cts.AudioRecordingConfigurationTest\n      AudioRecordTest#testAudioRecordInfoCallback\n      MediaRecorderTest#testAudioRecordInfoCallback\n      manual testing using Oboe and Solo test apps\n\nChange-Id: I3d32241752d9a747736606dc4cb1e068e6b7aa3b\n"
    },
    {
      "commit": "f7e3a3a2eb753da4500b9000c113ae0f3b058792",
      "tree": "83b0c8c42a44d092b1b054fd059a98df23b81521",
      "parents": [
        "3208826f676b1be78e1c04692d7f17249e45c3ea"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Apr 22 16:43:26 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Apr 22 16:53:41 2019 -0700"
      },
      "message": "audioflinger: Fix reference counting protocol in OpPlayAudioMonitor\n\nOpPlayAudioMonitor was constructing a weak pointer to itself\nin the constructor. This practice can lead to crashes due to\nrace conditions vs object destruction. This code is now moved\nto onFirstRef method which is called when at least one strong\nreference exists.\n\nThis change also reduces the number of created OpPlayAudioMonitor\nobjects by using a factory method.\n\nBug: 130038586\nTest: enable / disable DND mode\nChange-Id: I22e63a883ebaa25b9c96e79271bb9693b5ed75cd\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": "df8638b4c4cfabcdeade1a3af497cd6e0521cb89",
      "tree": "d4b192648cf45213baaa415f6842af7c58242e12",
      "parents": [
        "a74c7274069fdfa95e4f9768e14bd2ce7ed1219e",
        "b20cf7db9e669169bbae5f0da97018a866c3f634"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 18 19:15:42 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 18 19:15:42 2019 +0000"
      },
      "message": "Merge \"audio policy: concurrent capture effects\" into qt-dev"
    },
    {
      "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": "9e1533cd0b8f3bf08eb9c81c21cd42f5782474f4",
      "tree": "3ba52e0b3d83ce58a20ebb69a61f2811a4c3a9f6",
      "parents": [
        "4b8d5ce58d98d4a163f63e17735450a7cac4821c"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Apr 11 16:07:36 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 14:05:50 2019 -0700"
      },
      "message": "audiopolicy: audioflinger: manage stream patch volume\n\nAudioPolicy used to hide activity of stream patch to prevent changing\nthe volume.\nThis CL replaces the filtering of the stream patch activity on the policy\nby a full volume range within audio flinger.\nIt updates also product strategies example for automotive to add associated\nstrategy and full range volume.\n\nBug: 130284799\nTest: make\n\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: I6e77dc2cbed0289f0a1341f7597b1c25abee5f7d\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": "1aa4d4e7a9496efd19ca891cbff9d71a7c7c0a1f",
      "tree": "797010a4234a371820d04ae12ed86d6ab9b5fb80",
      "parents": [
        "6d37377266de6e43d5ca7658bf2f8f58aa88dcbe"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 12 19:39:03 2019 -0700"
      },
      "committer": {
        "name": "android-build-team Robot",
        "email": "android-build-team-robot@google.com",
        "time": "Tue Apr 16 22:38:52 2019 +0000"
      },
      "message": "AudioFlinger: Prevent multiple effect chains with same sessionId\n\nAllow at most one effect chain with same sessionId on mPlaybackThreads.\n\nTest: poc, CTS effect tests\nBug: 123237974\nMerged-In: Ide46cd23b0a9f4295f0dca2fea23379a76b836ee\nChange-Id: Ide46cd23b0a9f4295f0dca2fea23379a76b836ee\n(cherry picked from commit 1631f06feb36df5406ad00e850dcca9394f67772)\n(cherry picked from commit f963b2bfdaf406b42d371322402172b4380bbba5)\n"
    },
    {
      "commit": "6d37377266de6e43d5ca7658bf2f8f58aa88dcbe",
      "tree": "187360b9743c0a5fc3382e473036733f6b3a7060",
      "parents": [
        "f12ed30fc4a3f5dd04d7f4999156cff200682060"
      ],
      "author": {
        "name": "Weiyin Jiang",
        "email": "wjiang@codeaurora.org",
        "time": "Fri Apr 27 00:39:29 2018 +0800"
      },
      "committer": {
        "name": "android-build-team Robot",
        "email": "android-build-team-robot@google.com",
        "time": "Tue Apr 16 22:38:49 2019 +0000"
      },
      "message": "audio: ensure effect chain with specific session id is unique\n\nIt\u0027s possible that tracks with the same session id running on various\nplayback outputs, which causes effect chain being created on the same\nsession twice. As a result, the same effect engine will be released\ntwice as the same context is reused.\n\nOutput that has effect chain with same session id is more preferable.\n\nTest: No regression with Play Music and Effects\nBug: 123082420\nBug: 123237974\nMerged-In: I690ea3cb942d1fdc96b46048e271557d48000f43\nChange-Id: I690ea3cb942d1fdc96b46048e271557d48000f43\n(cherry picked from commit 9aeb1770d49bab13ea5c6454c969a713641fe686)\n(cherry picked from commit 5945746bcabff8d833229a6c230cbe873474087f)\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": "7fc255541f87863af19666025e06e1cee15e06d4",
      "tree": "4a9159c314f9fa1f2cbbb75006ae56f065cd2069",
      "parents": [
        "4a72256e81047afdd47279d2ac997e4ea8b4e766",
        "01dc5ca26ce985d441e1e5e7763e1e3e93633b36"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 29 23:43:46 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 29 23:43:46 2019 +0000"
      },
      "message": "Merge \"audioflinger: Fix thread fields locking for dumps\""
    },
    {
      "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": "c4bda3ad28e90de072b9d68ae8b77b784238881f",
      "tree": "cc8bc2a18def056a9318a07c94a642185caaeac8",
      "parents": [
        "4eeb26c721ecd1f97a6dadaf724116d0b6e4920b",
        "19740cae5b12dadd5edb221d2aab678fc88bbaee"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 28 22:15:06 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 28 22:15:06 2019 +0000"
      },
      "message": "Merge \"audioflinger: Fix EffectChain::dump\""
    },
    {
      "commit": "2cc6a2d21c20a604f0caa5f0f817251de8e7559a",
      "tree": "ae15a59d4a684b5c877761031b811573d12a497e",
      "parents": [
        "d0e36ea48dcda1c5d5fa30753cba171360487da5",
        "959e2d068b21e6b9443d5e98fa25a607d1f93993"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 28 20:50:35 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 28 20:50:35 2019 +0000"
      },
      "message": "Merge \"audioserver: Use timed lock instead of bouncing for dumps\""
    },
    {
      "commit": "19740cae5b12dadd5edb221d2aab678fc88bbaee",
      "tree": "7be1f70002541d1f7444cc577fc637c339acfb57",
      "parents": [
        "c70268aa433e7d307819184ae5c2ec96a3e5b6af"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 28 12:25:01 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 28 12:25:01 2019 -0700"
      },
      "message": "audioflinger: Fix EffectChain::dump\n\nFix missing log line in the case when there are no effects in\nthe chain.\n\nBug: 118842894\nTest: adb shell dumpsys media.audio_flinger\nChange-Id: I31fe4760caa61610de4f143b3a6ae185efb55baa\n"
    },
    {
      "commit": "959e2d068b21e6b9443d5e98fa25a607d1f93993",
      "tree": "c889e8fbdd9d07065759b82e354b3ef42ad255d0",
      "parents": [
        "c70268aa433e7d307819184ae5c2ec96a3e5b6af"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 28 11:08:19 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 28 11:23:00 2019 -0700"
      },
      "message": "audioserver: Use timed lock instead of bouncing for dumps\n\nThe technique of bouncing lock attempts does not work well\nin the case when another lock has higher priority and acquires\nthe lock frequently. Timed lock works better in this case\nbecause the acquiring thread is then put in a queue and gets\nthe lock as soon as another thread releases it. The wait time\nin the worst case (deadlock) is the same.\n\nBug: 118842894\nTest: Run VOICE_COMMUNICATION capture + AEC effect, dump audioflinger\nChange-Id: Idc4fc2b6f5faf6988979f9354dd92441af33e600\n"
    },
    {
      "commit": "0016740cca36b1994ecddf7a31a04ec622062596",
      "tree": "b0013b485e901bb53e2cd0ec8908da44a82973bb",
      "parents": [
        "e92e7a88877c6371c4e7e17765b1655f6ba115d0"
      ],
      "author": {
        "name": "Anton Hansson",
        "email": "hansson@google.com",
        "time": "Wed Mar 27 14:15:54 2019 +0000"
      },
      "committer": {
        "name": "Anton Hansson",
        "email": "hansson@google.com",
        "time": "Wed Mar 27 15:45:20 2019 +0000"
      },
      "message": "Convert libaudioflinger to Android.bp\n\nThis makes the libaudioflinger build deterministic between\ndevices.\n\nA few notes:\n- the include-path-for include is obsolete, so it was removed\n- the AUDIOSERVER_MULTILIB use was removed, as I believe it\u0027s\n  unused\n\nBug: 121208203\nTest: make\nChange-Id: I08eb0d7f53f1fbcef3e14faa3ea75b5326383ef8\n"
    },
    {
      "commit": "702d0029e8d6178ec993cbd912d2833e7d5e9c04",
      "tree": "20e8fc08a5be8d8cc9b4030210eaf0a6da7d5a2c",
      "parents": [
        "1a6c9318e9d2a3c9229505b34752f5064b09251b",
        "444bb5555e064271b2eafc1478f238b73f417941"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 27 01:29:04 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 27 01:29:04 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: Clarify effect creation comments and warnings\""
    },
    {
      "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": "444bb5555e064271b2eafc1478f238b73f417941",
      "tree": "bb269cdf062c9cdef7b7ca3340cff6b9e6a4cda6",
      "parents": [
        "b893fcd9978e730c0e00eddce63a08bef727261e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 17:06:39 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 22 17:51:47 2019 -0700"
      },
      "message": "AudioFlinger: Clarify effect creation comments and warnings\n\nTest: CTS audio effect tests, instrumented test\nBug: 128633662\nChange-Id: I31e4cbec6c34d2419d2f7bbcced98e8bbb8ce78d\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": "7c697395faf6e467902117983c5e3660446712d5",
      "tree": "b353ae562cc55c01c0c66eaccc0f88f6fa25cad2",
      "parents": [
        "e9955729faa3a33483b9739f085856b5b4b451d5",
        "6096dcd538ef55fa2f121260956bdc6ed508b07a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 18 20:37:57 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 18 20:37:57 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: createEffect - check for proper sessionId\""
    },
    {
      "commit": "88a6078ced774995aa8326468f36cf7fa2924aae",
      "tree": "91252acb979a248ff47aa654200705a552264b9f",
      "parents": [
        "ef9d3a6952cf538d9b8ac58a74aa1952c1fd9529",
        "e778c4254d3018553ff245448aa9d750c5628699"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 15 19:47:37 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 15 19:47:37 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: createEffect always look for same session effect chain.\""
    },
    {
      "commit": "d330e1c15f894234e0d99bf970ba8a63156fc691",
      "tree": "6031457bf371697e66cdcab9788754d2dc57582e",
      "parents": [
        "ede17f7293baf51af1541e734e404a5e1529a2a5",
        "b4946b6d3719cde8187b106f7aad2d6be2b6dadb"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 15 17:47:05 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 15 17:47:05 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: Close MMap threads in destructor\""
    },
    {
      "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": "b4946b6d3719cde8187b106f7aad2d6be2b6dadb",
      "tree": "a740b088de5af1654921b7b8e2769a3ad9c2ebd7",
      "parents": [
        "0a2fc30b155c92db29ed483f85c8e92c3c9cf85b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 11:19:28 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 16:01:19 2019 -0700"
      },
      "message": "AudioFlinger: Close MMap threads in destructor\n\nFor aesthetic symmetry.\n\nTest: compiles\nChange-Id: I5876409cf0ebf0c1945def19bcfd455d87dd4542\n"
    },
    {
      "commit": "e778c4254d3018553ff245448aa9d750c5628699",
      "tree": "c60e1d80b508471c7de9d409420e563813cabbf9",
      "parents": [
        "0a2fc30b155c92db29ed483f85c8e92c3c9cf85b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 15:04:30 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 15:37:55 2019 -0700"
      },
      "message": "AudioFlinger: createEffect always look for same session effect chain.\n\nTest: CTS AudioEffect tests\nBug: 128630419\nChange-Id: Ieb08abfcb7a983e05fa8f25f6609468d9bd4620b\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": "6096dcd538ef55fa2f121260956bdc6ed508b07a",
      "tree": "112c1d99ac6dafeb6f66887d05be3a4a08449faf",
      "parents": [
        "1631f06feb36df5406ad00e850dcca9394f67772"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 13 13:20:30 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 13 13:32:47 2019 -0700"
      },
      "message": "AudioFlinger: createEffect - check for proper sessionId\n\nOutput error messages on failure.\n\nTest: CTS effects, dedicated test with bad sessionId\nBug: 128528126\nChange-Id: Icdd306c30e8eb818b0a27d6463fa785bac2fb707\n"
    },
    {
      "commit": "1631f06feb36df5406ad00e850dcca9394f67772",
      "tree": "e4c002b79d79dedba6441380a9d651c7e69c692f",
      "parents": [
        "d9c99eafe6d3727b2892aeae5df568c6a97b6e76"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 12 19:39:03 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 12 19:47:07 2019 -0700"
      },
      "message": "AudioFlinger: Prevent multiple effect chains with same sessionId\n\nAllow at most one effect chain with same sessionId on mPlaybackThreads.\n\nTest: poc, CTS effect tests\nBug: 123237974\nChange-Id: Ide46cd23b0a9f4295f0dca2fea23379a76b836ee\n"
    },
    {
      "commit": "628286b620d10a2395252a5bab7067bee0f221f6",
      "tree": "668fd26f6f15f6ba6f4b813d7ca8879a5dd14525",
      "parents": [
        "fe610f0fa30cf58c448f718c05d53208431baf08",
        "a31eb276a30e07c6431da1e5ea093fd8f3e3bf55"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Mon Mar 11 09:13:27 2019 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Mon Mar 11 09:13:27 2019 -0700"
      },
      "message": "DO NOT MERGE - Merge PPRL.190305.001 into master\n\nBug: 127812889\nChange-Id: I96d8fdd0e8a40a783a2f4ee91a01dbad44a22956\n"
    },
    {
      "commit": "d3f301ccb9431a70c0489e9954e45add600919be",
      "tree": "0a25a32ea71bf729d572d7d5d6e4339248b3e2ec",
      "parents": [
        "0428b8e5a53c3c37e0f76decc7a8f32854488062"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 11 08:58:03 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 11 08:58:03 2019 -0700"
      },
      "message": "audioflinger: Fix crash on patch creation attempt\n\nThe code for clearing software patch connections was missing\na check for a null track pointer.\n\nBug: 126789266\nBug: 128269566\nTest: see repro steps in b/128269566\nChange-Id: Ice6887622d5fa2fa3198ce15146bff3cb05f7451\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": "a10e918873d2348c05be406cf2ee919866dcd49d",
      "tree": "69c8a1543a7e46b189496d5effcf395553f759f6",
      "parents": [
        "3f1962974d7611adf3d7db6aee63d5876eb12c4e",
        "e6c3711b2931a98c0f81c86ddba902b1589acf44"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 28 18:31:09 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 28 18:31:09 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: Accumulate long term thread latency statistics.\""
    },
    {
      "commit": "d83b08ac54d11ed557b3cff9fef60dfa84386550",
      "tree": "4903cccde055fb89cfa7d6558c6b22a64113a381",
      "parents": [
        "e1e9cad4d0c7c9825b7f29ebc082dfcbdcace25c"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 27 15:05:54 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Feb 28 00:26:13 2019 +0000"
      },
      "message": "Audioflinger: Do not intercept if no audio\n\nThis was not efficient and leaded to an assert in obtainBuffer.\nI\u0027m not sure which condition can lead to a getNextBuffer of size 0,\nbut it has been observed and is not forbidden by getNextBuffer\ndocumentation.\n\nTest: atest android.media.cts.AudioPlaybackCaptureTest#testCaptureMediaUsage\nBug: 111453086\nChange-Id: I5accf7c1d488ff4686272588329bab71d64f67cd\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\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": "be32a246fc5623c049cf6417ced66dccc741653b",
      "tree": "5cbfe9d1685ef7aa3bf0ffd70dc170f8cfbd6aca",
      "parents": [
        "cfe173220a3100c517e688e1bba0ff2da82a7b1b",
        "4d54767b7dad323de5f747096f5cdeea0d7691e5"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Feb 27 17:01:34 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 27 17:01:34 2019 +0000"
      },
      "message": "Merge \"audio: Add support for dumping info from effect HAL modules\""
    },
    {
      "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": "4d54767b7dad323de5f747096f5cdeea0d7691e5",
      "tree": "3c00980eb567404023bdd03bdc00ed2b906c684f",
      "parents": [
        "16be62ccbfa98508b375c9594728a951ada0021c"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Feb 22 14:19:19 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Feb 22 14:19:19 2019 -0800"
      },
      "message": "audio: Add support for dumping info from effect HAL modules\n\nThe implementation uses IBase::debug() method which can write\ndebugging info into the provided file descriptor (same model\nas used for devices and streams).\n\nBug: 69939533\nTest: adb shell dumpsys media.audio_flinger\nChange-Id: I02a74b51977d105edf6f7e624ea26f866c965708\n"
    },
    {
      "commit": "b9b9b069322d5f4a0df778b385ecf50f0fcada94",
      "tree": "b82d4a9642d4fe2cf76c16372a8016dde0f5c9da",
      "parents": [
        "ac6f2c28059fecd051fe5b617d412aa1d3b9ed3b",
        "6057fa270854d700cc85804fdd4517a8f8831f1f"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Feb 16 02:40:42 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Feb 16 02:40:42 2019 +0000"
      },
      "message": "Merge \"Log if intercepting tracks takes too long\""
    },
    {
      "commit": "97f7ed443c8f39c019a882f5e4628d17a63bb4b8",
      "tree": "5cced76b2f1b8e4545cbee06d0641ecb9d4ce333",
      "parents": [
        "fe38a9d6f4a8df64babd66d30c044033d88873dc",
        "bf6b0ecd91172d6cd6cdd7c44f9ceecab4c29f27"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 15 19:21:00 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 15 19:21:00 2019 +0000"
      },
      "message": "Merge \"Refactor haptic constant.\""
    },
    {
      "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": "2224c5a0f7ff52d8b40cc3e8b67f3f71560f842e",
      "tree": "d87577ba156774092ce9395bb281f5bbbc115eed",
      "parents": [
        "e04ba51703c3fb797f6b7e22d5848d0ed3801bc6"
      ],
      "author": {
        "name": "juyuchen",
        "email": "juyuchen@google.com",
        "time": "Mon Jan 21 12:00:58 2019 +0800"
      },
      "committer": {
        "name": "juyuchen",
        "email": "juyuchen@google.com",
        "time": "Wed Feb 13 12:00:28 2019 +0800"
      },
      "message": "audio: use SinkMetaData to route voice call with hearing aid.\n\nBug: 121173695\nTest: manual audio test\n\nChange-Id: If51b7c5063d0578ec4b8b16ec8ccd1712ae2c85c\n"
    },
    {
      "commit": "56962853d49c115db491ec8b84b1ff65cb30687a",
      "tree": "af8f3de7854d41f428889f4ecc70427d907b0bd7",
      "parents": [
        "2334e00184aea8b124789a04b92dc2180dbc7df7",
        "a134b006bc5714b6c8dcfbe5900a3ee029aa1044"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Feb 11 18:47:43 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 11 18:47:43 2019 +0000"
      },
      "message": "Merge \"Audioflinger intercept track retry on buffer end\""
    },
    {
      "commit": "6057fa270854d700cc85804fdd4517a8f8831f1f",
      "tree": "a4d5ba8560df80a6221403bf87f0a84820b360bb",
      "parents": [
        "a134b006bc5714b6c8dcfbe5900a3ee029aa1044"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 08 14:08:07 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 08 17:31:07 2019 -0800"
      },
      "message": "Log if intercepting tracks takes too long\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: Ic56cd0d223e83938a2d5eeb98cbcb754629799d8\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "a134b006bc5714b6c8dcfbe5900a3ee029aa1044",
      "tree": "8961e932f8db72b1f24a7f7d83ca91ced0369975",
      "parents": [
        "2ec0674146dc0a9d885a18067a7a5c84786b59ad"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Feb 07 18:05:31 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Feb 08 17:31:07 2019 -0800"
      },
      "message": "Audioflinger intercept track retry on buffer end\n\nTrack::interceptBuffer failed to write all the audio if the source BP\ncould not returned the requested buffer size.\nThis is actually normal when the source circular buffer wraps around.\n\nHandle it by retrying if the first buffer is too small.\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: I42a7962449a0f075909a29f5f8f5ba82ca1d0085\n"
    },
    {
      "commit": "1342d0740e9a7accd48a7c28725ca61ded231ee1",
      "tree": "915577adbe4bd4c4255fb3a62d043f937ffb3a58",
      "parents": [
        "318690abd174996d0e77157086e5a145206ea9c4",
        "179a074f2706051bbe0e084598482a39e00368cd"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Feb 09 00:25:48 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Feb 09 00:25:48 2019 +0000"
      },
      "message": "Merge \"audioflinger: fix redundant adding to tracksToRemove\""
    },
    {
      "commit": "9aeb1770d49bab13ea5c6454c969a713641fe686",
      "tree": "cf31e60cf96f213535899a4dd14722868cf1a530",
      "parents": [
        "186f4ac0f006de84d940a460bb44ee0e325fd1eb"
      ],
      "author": {
        "name": "Weiyin Jiang",
        "email": "wjiang@codeaurora.org",
        "time": "Fri Apr 27 00:39:29 2018 +0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 08 13:31:05 2019 -0800"
      },
      "message": "audio: ensure effect chain with specific session id is unique\n\nIt\u0027s possible that tracks with the same session id running on various\nplayback outputs, which causes effect chain being created on the same\nsession twice. As a result, the same effect engine will be released\ntwice as the same context is reused.\n\nOutput that has effect chain with same session id is more preferable.\n\nTest: No regression with Play Music and Effects\nBug: 123082420\nChange-Id: I690ea3cb942d1fdc96b46048e271557d48000f43\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": "b6ac00032375798810e2000efceac6f0645e3e85",
      "tree": "e7e91339d608221d66393f1659615eacb8342649",
      "parents": [
        "2ec0674146dc0a9d885a18067a7a5c84786b59ad",
        "4d4ca6ada3d9f1d535bc4bee2362ff93f88cd55f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 07 18:03:53 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 07 18:03:53 2019 +0000"
      },
      "message": "Merge \"FastMixer: Enable volume ramp for active tracks\""
    },
    {
      "commit": "3f58b1194375d5c8008ec8fd4ce2ef068e8955b8",
      "tree": "d7260eb26fc40d284df23e7264b19ef53059bbed",
      "parents": [
        "5edb6fbe8febd18961895a4edd45a1c6e6a6db85",
        "c43ea147033817dc46b76d8993a84f0e5ee4e4e0"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Feb 07 03:10:10 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 07 03:10:10 2019 +0000"
      },
      "message": "Merge changes from topic \"APC\"\n\n* changes:\n  Propagate track status to interception patch track\n  Add secondary output to audio tracks\n  Audioflinger: add timeout to PatchTrack\n  Audiopolicy: Move AudioPolicyMixCollection in helper function\n  Add MIX_ROUTE_FLAG_LOOP_BACK_RENDER\n"
    },
    {
      "commit": "4d4ca6ada3d9f1d535bc4bee2362ff93f88cd55f",
      "tree": "653a568578f70dc49a5828fab8ec553bfff16fac",
      "parents": [
        "8ec576b7abfc01ac99f3542d29a86ddc3533541b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 01 18:23:37 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 06 16:33:31 2019 -0800"
      },
      "message": "FastMixer: Enable volume ramp for active tracks\n\nClean up logic for FastTrack AudioMixer track initialization.\n\nTest: SoundBar menu scrolling, AudioFlinger tee\nBug: 119284313\nChange-Id: I551d9d54d82e0029a49c6481ba8669093359d6d1\n"
    },
    {
      "commit": "c43ea147033817dc46b76d8993a84f0e5ee4e4e0",
      "tree": "4900174eb6395b5980753c40fbdab9064501b37a",
      "parents": [
        "153f92d57b6a1d2fdc7fa601bbc86db31646a8f9"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Jan 31 18:17:37 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 06 16:13:13 2019 -0800"
      },
      "message": "Propagate track status to interception patch track\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: Icbf627ce36b6d9390439f51237ef9515a2eba8cb\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\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"
    }
  ],
  "next": "45986c74cd5253bcc81b1b4954e3ff3300f7e6d8"
}
