)]}'
{
  "log": [
    {
      "commit": "5811ac80806d38d1fee168ec332387e0d8adbd99",
      "tree": "b950c2d1b0410b530217e935daccd1db079d8756",
      "parents": [
        "a5ac8806261537c0330e5b5a8eb1fce66aa0a3ea",
        "14b8bfa6e2299361865d4735a0dc8ff38f8108c3"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 01 20:56:53 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri May 01 20:56:53 2020 +0000"
      },
      "message": "Merge \"ThreadMetrics: Add device-based statistics for audio\" into rvc-dev am: 25b1e25a72 am: a36f994f6c am: 855e8746e9 am: 14b8bfa6e2\n\nChange-Id: I25983fddcf4bb23660c5086ea7700c6e660c945d\n"
    },
    {
      "commit": "a5ac8806261537c0330e5b5a8eb1fce66aa0a3ea",
      "tree": "73d291d9db5ce76bf01b01dad68ec05941c1a6de",
      "parents": [
        "8ea979df863aaa37dcb361218ae7559d51ea2401",
        "9ec29638a746b139b0722cd06d9b5853043957b2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 01 20:56:24 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri May 01 20:56:24 2020 +0000"
      },
      "message": "Merge \"TrackMetrics: Add device-based statistics for audio\" into rvc-dev am: 31300b43da am: a1d771f00c am: 5abdc47975 am: 9ec29638a7\n\nChange-Id: I1471225e2a92ee49cb498f4b9c672d6a24f18858\n"
    },
    {
      "commit": "cf10d743aedcd29a53f3a4f16a25565f5b462dd8",
      "tree": "17f4ba2cd404347873f8f059d620a2ec890a7529",
      "parents": [
        "c2b11cbcb88c5970fb4ec6ff8a562b1465dfa70a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 28 15:38:24 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 30 17:39:50 2020 -0700"
      },
      "message": "ThreadMetrics: Add device-based statistics for audio\n\nCompute summary statistics based on the current device\nrather than the entire Audio Thread duration.\n\nTest: adb shell dumpsys media.metrics\nBug: 149850236\nChange-Id: Ie6d459b06b4a469401ee9e0c194e45ea5ce380c6\n"
    },
    {
      "commit": "c2b11cbcb88c5970fb4ec6ff8a562b1465dfa70a",
      "tree": "dedee4f6e9c95af20ef76e79bddbc79ed850781a",
      "parents": [
        "199012b0c66d555207d81fedb7cce16305c865f8"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 22 09:04:01 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 30 17:18:26 2020 -0700"
      },
      "message": "TrackMetrics: Add device-based statistics for audio\n\nCompute summary statistics based on the current device\nrather than the entire AudioTrack or AudioRecord duration.\n\nTest: adb shell dumpsys media.metrics\nBug: 149850236\nChange-Id: Ia3a5707c43c4530f5a6ac90f52901bd2e0bd0bab\n"
    },
    {
      "commit": "5f998e52181c3e1a1f68411639f04d7058b14373",
      "tree": "6f9a67c3d624fca533e137bd8a4ff7a020184d02",
      "parents": [
        "98448a6349c3804b4232aa8260c707bf82fb56cc",
        "7f763568fbfb0099a432f5b60f6d0a14d14a50d0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Apr 29 21:01:46 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Apr 29 21:01:46 2020 +0000"
      },
      "message": "Merge \"Check silent mode when updating output device.\" into rvc-dev am: b79d3b8d4b am: dc4509bc56 am: 0bfce6eddd am: 7f763568fb\n\nChange-Id: I1506271c0de62823375ca59aaeac3664c34d1109\n"
    },
    {
      "commit": "0a957d32556294b0f4209bb5b7914fd05d742751",
      "tree": "5890a5b9d69c9df0905b8652cb30e274c08b6d81",
      "parents": [
        "ec660f185a1e212b1d22125de81e9bd1d0ff58a3"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Apr 29 10:56:20 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Apr 29 10:56:20 2020 -0700"
      },
      "message": "Check silent mode when updating output device.\n\nAfter refactoring audio device type, the output devices will only be set\nwhen create/release audio patch. In that case, the output devices are\nempty when creating the thread. If the \"ro.audio.silent\" is set, it will\nmake master muted if the output devices are empty. To fix the issue, do\nnot check silent mode when the output devices are empty, but check\nsilent mode when output devices are updated.\n\nTest: atest AudioHostTest with setting \"ro.audio.silent\"\nBug: 154037767\nChange-Id: I6cb219353e541ba99ba9acebd6ce853128d963d3\n"
    },
    {
      "commit": "1fe174dc13fcf6b41dddf5f998ef36ee0a92f0f5",
      "tree": "70c60e8e688d269f211dd7c36dbdc343c13d5362",
      "parents": [
        "bf2cfdc26d69ddacb24c2946f13b00bb83993d06",
        "6597d73adf83bbf9bb22adb883da5330d1759a8a"
      ],
      "author": {
        "name": "Chris Ye",
        "email": "lzye@google.com",
        "time": "Mon Apr 06 19:35:26 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 06 19:35:26 2020 +0000"
      },
      "message": "Merge \"Migrate to AIDL generated native power manager interface.\""
    },
    {
      "commit": "d1f1cb68f567363a0b1e4cd4db6286afc6c8a1e2",
      "tree": "3b32985218612d05bf95fed08c18025d1735b2d4",
      "parents": [
        "06675ff30f63323905ff18c3c4e0d34a9fee4c60"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Mar 24 11:57:57 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Mar 27 11:33:09 2020 -0700"
      },
      "message": "Add audio attributes info when starting aaudio tracks on MMAP mix.\n\nIn aaudio, when adding tracks to mixed stream, it is needed to update\naudio attributes to HAL whenever the tracks are added or removed.\nCurrently, only the audio attributes used to open the stream will be\nsent to the HAL. In that case, adding audio attributes of the clients\nwhen starting the stream can help solve the problem. In audio flinger,\nthe client\u0027s audio attributes will be used to create MmapTrack.\n\nTest: play multiple aaudio tracks, add log\nBug: 77279923\nChange-Id: Ic1c536049e194a2bb7513425ee4828d52769d27f\n"
    },
    {
      "commit": "57a3769fb12dc8b2df457e0919850bd976716706",
      "tree": "f170ceb064b6be5d9443af5f2f95ac55c612c270",
      "parents": [
        "3006a83565b6863f247bf634faa929b84608026e"
      ],
      "author": {
        "name": "Ricardo Correa",
        "email": "rgcorrea@google.com",
        "time": "Mon Mar 23 17:27:25 2020 -0700"
      },
      "committer": {
        "name": "Ricardo Correa",
        "email": "rgcorrea@google.com",
        "time": "Tue Mar 24 16:20:36 2020 +0000"
      },
      "message": "Revert \"Allow call audio access for default dialer application\"\n\nThis reverts commit ac26cf749f457e12a3d8d7456bbcd58a3e028d69.\n\nReason for revert: Feature has been postponed\nBug: 151761909\n\nChange-Id: I90a977a23c5b97ddf95976cf2c4d517165f8e8c2\n"
    },
    {
      "commit": "b3e62a0302fb4d3b51b860d2badbc72663746dd9",
      "tree": "5bf1a4ede6eb601f3639a059ef55ee6d737d50f7",
      "parents": [
        "6437df87da8175a05e2a522c7c71eddcde88f97c",
        "04cb8f72e799d6045583304d1b90cd16875b9bd0"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Mar 21 00:08:42 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 21 00:08:42 2020 +0000"
      },
      "message": "Merge \"AudioFlinger: Add master volume to the dumpsys\" into rvc-dev"
    },
    {
      "commit": "04cb8f72e799d6045583304d1b90cd16875b9bd0",
      "tree": "23c22ea54fe8c2df03107e08c578554c4b885514",
      "parents": [
        "8d386f779d76eb2a87ec570bf6ee3c0ce674085f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 20 13:44:33 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 20 14:00:23 2020 -0700"
      },
      "message": "AudioFlinger: Add master volume to the dumpsys\n\nNow PlaybackThreads shows master volume, which enables tracking\nsubtle silence issues. (Note MmapThreads already dump master volume.)\n\nTest: adb shell dumpsys media.audio_flinger\nBug: 145107983\nChange-Id: I2efc1a133c0ea07929c646b7e7148a9f3f311912\n"
    },
    {
      "commit": "2fe0acd07f9fb2d0eefbe0fa9d25fbaf0f672596",
      "tree": "10a5a6ceaee79473c53b3dacb08b58172bcd14f2",
      "parents": [
        "90334d0f03f4bee709969433898025fc16863f01"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 13 14:30:46 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 16 13:49:20 2020 -0700"
      },
      "message": "audioflinger: add effect creation probe mode\n\nAdd an argument to IAudioFlinger::createEffect() API to\nask AudioFlinger to just run the pre flight checks but not\ncreate the actual audio effect instance and allocate resources.\nThis is the basis of an API for apps to query if a given\neffect can be created without having to allocate the resources\nand risk an exception when calling the constructor.\n\nBug: 150699608\nTest: CTS and GTS Tests for audio effects\nChange-Id: Ibdda22fd945c88c33e3c7342a7a5ed3e02d399ac\n"
    },
    {
      "commit": "6597d73adf83bbf9bb22adb883da5330d1759a8a",
      "tree": "c77ee775a02f310b2ec3efbab56e3c9fd27e18e5",
      "parents": [
        "bdccc992097e538da25e29a6b663698488539a44"
      ],
      "author": {
        "name": "Chris Ye",
        "email": "lzye@google.com",
        "time": "Fri Feb 28 22:38:25 2020 -0800"
      },
      "committer": {
        "name": "Chris Ye",
        "email": "lzye@google.com",
        "time": "Mon Mar 16 10:06:23 2020 -0700"
      },
      "message": "Migrate to AIDL generated native power manager interface.\n\nMigrate to AIDL generated native power manager interface, use\naidl-cpp generated cpp header file from IPowerManager.aidl.\n\nBug: 149479744\nChange-Id: Icf4e71b5e78a6e3101b423686556ac5393c5e91c\n"
    },
    {
      "commit": "f6eb4c388b6499752c2ee47b663956dcbf0dd7e4",
      "tree": "032329fc713202ce01d5e17420f47bd6025f041c",
      "parents": [
        "c62ad13ad8da6b31168f0d9f3e5f2a770ed0bbee"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Feb 25 14:06:25 2020 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Feb 26 16:16:44 2020 -0800"
      },
      "message": "Add callback for codec format change.\n\nWhen creating native audio track, a IAudioTrackCallback will be created\nsystematically. All callbacks will be cached in Threads and protected by\na lock. Whenever there is a callback event from audio HAL, it will\nfinally trigger callback to native audio track. Currently, there is only\none callback event, which is codec format change.\n\nBug: 150301890\nTest: manual\nChange-Id: I32293627ed923b17dd25f11f0ee0a0c35cd7c01f\n"
    },
    {
      "commit": "ac26cf749f457e12a3d8d7456bbcd58a3e028d69",
      "tree": "0d3ba6751d1bee73ac1d6bf5c50771a2bfede68f",
      "parents": [
        "0f97ee5a52d697e31e9c6dc3c9e7aa941168b571"
      ],
      "author": {
        "name": "Ricardo Correa",
        "email": "rgcorrea@google.com",
        "time": "Mon Jan 06 14:43:38 2020 -0800"
      },
      "committer": {
        "name": "Ricardo Correa",
        "email": "rgcorrea@google.com",
        "time": "Tue Feb 18 22:54:20 2020 +0000"
      },
      "message": "Allow call audio access for default dialer application\n\nThe access to call audio (record and play) will be granted only to the app associated with Dialer role, who also includes a new system permission.\n\nTest: Compilation and manual tests\nBug: 135197853\n\nChange-Id: I65ca823c235d4d3420630837427103783ad1d1b0\n"
    },
    {
      "commit": "0f97ee5a52d697e31e9c6dc3c9e7aa941168b571",
      "tree": "b24e61ac061d57ac858650b5a6d0940b144b50b3",
      "parents": [
        "ae3b9539cead752af48515f2e43c9985c3fc04e6",
        "5e4d86f837c1b978d4c5d69964a769c5a26e3fae"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 18 22:25:32 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 18 22:25:32 2020 +0000"
      },
      "message": "Merge \"audioflinger: remove null checks\""
    },
    {
      "commit": "5e4d86f837c1b978d4c5d69964a769c5a26e3fae",
      "tree": "feebebe3255fa50f93a2679c8639d25d1ff6242d",
      "parents": [
        "697aec8505c99b66313aa5c58e3bb68776db82f0"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Feb 18 12:55:36 2020 -0800"
      },
      "committer": {
        "name": "George Burgess",
        "email": "gbiv@google.com",
        "time": "Tue Feb 18 21:21:13 2020 +0000"
      },
      "message": "audioflinger: remove null checks\n\nThis code has null checks with intervening unconditional dereferences of\nthe potentially-null variable.\n\nIt\u0027s not clear that `mOutput` can ever be null to begin with. If it can\nbe, we have a few dereferences to guard. :)\n\nCaught by the static analyzer:\n\nframeworks/av/services/audioflinger/Threads.cpp:2671:19: warning: Called\nC++ object pointer is null [clang-analyzer-core.CallAndMessage]\nframeworks/av/services/audioflinger/Threads.cpp:2852:9: warning: Called\nC++ object pointer is null [clang-analyzer-core.CallAndMessage]\n\nBug: None\nTest: TreeHugger\n\nChange-Id: I456581204718390088998a1fe2514dff63f6578f\n"
    },
    {
      "commit": "35f8c7c32aa45f0b95cec7e1d31fc92ce79d57ee",
      "tree": "d9225d987f9948174710ad18b7a51bc45686205d",
      "parents": [
        "39d1f3e01dae5f6794e95074118d3f0466c95a7d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Feb 08 11:42:35 2020 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 10 18:07:26 2020 -0800"
      },
      "message": "audio policy: add call assistant volume stream\n\nRouting strategy call assistant was added without\nassociated volume stream and wass reusing AUDIO_STREAM_PATCH.\nThis is violating the rule that two strategies cannot\nshare the same volume stream.\n\nBug:148588565\nTest: play music and check volume\nChange-Id: Ib3fb2a1b7b5f3118bf16a3cc9d8e578fa0431645\n"
    },
    {
      "commit": "69d367771be73184f6eb0c0d84bc64afdb311f18",
      "tree": "f8caaf7fdb8510296ba1414309908a5368b867ae",
      "parents": [
        "33873dec8be145a09321009ecabd50cb8c62c090",
        "9930037fa8bba06f299a87d8b427a4ec01f3e16c"
      ],
      "author": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Sat Feb 01 08:32:47 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Sat Feb 01 08:32:47 2020 +0000"
      },
      "message": "Merge \"Reset direct output thread timestamp on flush\" am: 394b76dd52 am: 1976ed32df am: 9930037fa8\n\nChange-Id: If04ea2471db4615c5baa33377767453c47158a00\n"
    },
    {
      "commit": "999f0e88d2d4dde2bc8f78adefee8b8237a52de4",
      "tree": "a4ed574e8903d7edf213f031eaa720d5cb5bf778",
      "parents": [
        "733c728752ae6958c88b2da4a4c662d266294b70"
      ],
      "author": {
        "name": "Sampath Shetty",
        "email": "Sampath.Shetty@dolby.com",
        "time": "Wed Jan 15 10:19:06 2020 +1100"
      },
      "committer": {
        "name": "Sampath Shetty",
        "email": "sampath.shetty@dolby.com",
        "time": "Thu Jan 30 23:49:42 2020 +0000"
      },
      "message": "Reset direct output thread timestamp on flush\n\nIn order to avoid subsequent tracks using stale kernel timestamps while\ncomputing track timestamps, clear the timestamp info upon flush.\n\nChange-Id: I2b8af33b287aee986871b6415b89f9c53d92f3a6\n"
    },
    {
      "commit": "b68f5ebb53434e800c43715127e2d1032e3a9b54",
      "tree": "7e1c75e02cb63d4c9d1f0b7dc3322001e1463b33",
      "parents": [
        "3b4c1f0320efc7a54c4ab811727c432cda73dd37"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Dec 03 16:49:17 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 28 13:03:22 2020 -0800"
      },
      "message": "MediaMetrics: Add AudioFlinger logging\n\nTest: atest mediametrics_tests\nTest: mediametrics dumpsys\nBug: 138583596\nChange-Id: I2086c5a780744d409052fde4c5ebc1dc92d95ea8\n"
    },
    {
      "commit": "9b2064c3afe14f893afff019bdcd4c4d40ce13ed",
      "tree": "0a49d5049cfd60fb6de3387460f5bb41a58e2ed1",
      "parents": [
        "249dba6eb7b1f71a424290e1c58c3bedb76a0595"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 17:25:04 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 13 23:05:34 2020 +0000"
      },
      "message": "AudioFlinger: implement device specific audio effects\n\nAdd management of audio effects applied to a specific input\nor output audio device.\n\nA new class DeviceEffectProxy derived from Effectbase is added\nto represent an effect attached to a particular audio device type and\naddress. This proxy manages one or more actual EffectModule instances\nautomatically added to a playback or capture thread or directly to the\naudio HAL when the targeted audio device is used by an audio patch.\n\nA new DeviceEffectManager class is added to manage creation and release\nof DeviceEffectProxy instances and monitor creation and release of audio\npatches and create or release actual effect instances accordingly.\n\nBug: 136294538\nTest: make\n\nChange-Id: I23b9f9db4459136039c5ee327cf3b1aefa7db5af\nMerged-In: I23b9f9db4459136039c5ee327cf3b1aefa7db5af\n"
    },
    {
      "commit": "e0b9a360c32f8ab2238b4b3779659e565b221946",
      "tree": "aafbd84d809aa976554c4de7597db1234560ee8e",
      "parents": [
        "5d88539848f2416e327da743f0c38ed597f8f089"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 16 19:34:05 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 10 11:12:23 2020 -0800"
      },
      "message": "audioflinger: refactor EffectModule class\n\nIntroduce a class EffecBase as a parent class of\nEffectModule with default implementation for handles management,\nbasic properties storage and state management.\n\nBug: 146177259\nTest: CTS: AudioEffectTest, EqualizerTest, VisualizerTest,\nAudioPreProcessingTest\nTest: manual test: Play Music EQ settings, Duo EAC and NS\nChange-Id: Id91cef9db6b4f6be0d2e77a8b4afcbdc7234e519\nMerged-In: Id91cef9db6b4f6be0d2e77a8b4afcbdc7234e519\n"
    },
    {
      "commit": "5d88539848f2416e327da743f0c38ed597f8f089",
      "tree": "416773cefe0ae261b15f850bff1c35bedead9680",
      "parents": [
        "d700529501d45ab3d0a0b506b2b76cb0212cf5ce"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 13 10:56:31 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 10 11:12:13 2020 -0800"
      },
      "message": "Revert \"Revert \"Audio effects: define interface between EffectModule and audio framework\"\"\n\nThis reverts commit 3fd6a2ccfd9305619289e2cd514fdfa803210f9e.\n\nAlso fixes native coverage build.\n\nBug: 146177259\nTest: build/soong/soong_ui.bash --make-mode TARGET_PRODUCT\u003dcf_x86_phone TARGET_BUILD_VARIANT\u003duserdebug NATIVE_COVERAGE\u003dtrue\nChange-Id: Ib78a22619123cd1848b047931b02d4061def3a23\nMerged-In: Ib78a22619123cd1848b047931b02d4061def3a23\n"
    },
    {
      "commit": "a20c4e9c9239d751d688d9a9fe5d92a8c613dd13",
      "tree": "9d5ccc5886dbf0cede2c4b63265f51f8f77eb283",
      "parents": [
        "e5f01a7d5edd517c3a52ca11e6908aead47ba916"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 15:55:51 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 10 11:11:27 2020 -0800"
      },
      "message": "AudioFlinger: add audio session for device effects\n\nAdd specific audio session ID for effects applied to a\nparticular audio device.\nDevice specific effects will be attached to a particular audio sink or\nsource device identified by its unique audio port ID and will all use\nthis same session ID.\nOnly one session of this type exists on a given playback or record\nthread.\nAll effects in this session apply to the same device ID and are created/released\nwhen the routing (audio patch) of this thread output or input stream is updated.\n\nBug: 136294538\nTest: make\n\nChange-Id: I4e3a55ed1244b918429dd9e217b6efecc1ec6449\nMerged-In: I4e3a55ed1244b918429dd9e217b6efecc1ec6449\n"
    },
    {
      "commit": "b82e6b724e45b1f88ed746c316b445b3bb8036b3",
      "tree": "4fd55853fe2b97b98bf27bff61142d9b2b92f28f",
      "parents": [
        "9ce5404e8ee6cf247a9004500cb91bf3b8114b14"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 17:25:04 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 07 17:05:07 2020 -0800"
      },
      "message": "AudioFlinger: implement device specific audio effects\n\nAdd management of audio effects applied to a specific input\nor output audio device.\n\nA new class DeviceEffectProxy derived from Effectbase is added\nto represent an effect attached to a particular audio device type and\naddress. This proxy manages one or more actual EffectModule instances\nautomatically added to a playback or capture thread or directly to the\naudio HAL when the targeted audio device is used by an audio patch.\n\nA new DeviceEffectManager class is added to manage creation and release\nof DeviceEffectProxy instances and monitor creation and release of audio\npatches and create or release actual effect instances accordingly.\n\nBug: 136294538\nTest: make\n\nChange-Id: I23b9f9db4459136039c5ee327cf3b1aefa7db5af\n"
    },
    {
      "commit": "a96f9f950d08b1492b10acb2adbc087b49c34c1b",
      "tree": "319ac25407b90f74c881d25ef93beb33c7189a1e",
      "parents": [
        "231bcdc0177f618f18a32512744949938440dd5f",
        "41709559999108cce9b1d725779fc513cc19138d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 19 02:57:07 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 19 02:57:07 2019 +0000"
      },
      "message": "Merge \"audioflinger: refactor EffectModule class\""
    },
    {
      "commit": "41709559999108cce9b1d725779fc513cc19138d",
      "tree": "edb0537f270f40e04de64f608824bf7d9d782bcd",
      "parents": [
        "c43423a6c6b6b0506d7b38f8062012a91fbef050"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 16 19:34:05 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 18 09:34:08 2019 -0800"
      },
      "message": "audioflinger: refactor EffectModule class\n\nIntroduce a class EffecBase as a parent class of\nEffectModule with default implementation for handles management,\nbasic properties storage and state management.\n\nBug: 146177259\nTest: CTS: AudioEffectTest, EqualizerTest, VisualizerTest,\nAudioPreProcessingTest\nTest: manual test: Play Music EQ settings, Duo EAC and NS\nChange-Id: Id91cef9db6b4f6be0d2e77a8b4afcbdc7234e519\n"
    },
    {
      "commit": "94e872e6894dce7d89954d0515c140ec626d20ba",
      "tree": "3b8a0acc0c514e139b767f255e77a23fbf7d55c2",
      "parents": [
        "990cc725040484dfd233280eedeb7de2da4f72e4",
        "f27e987d277c186010e8bdd1d5e781158b31f9af"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Tue Dec 17 22:52:33 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 17 22:52:33 2019 +0000"
      },
      "message": "Merge \"Naming consistency: MediaAnalytics to MediaMetrics\""
    },
    {
      "commit": "f27e987d277c186010e8bdd1d5e781158b31f9af",
      "tree": "87703f33fe40f06c2faa78daa4105bb6cb8db79d",
      "parents": [
        "b7b870db0c6cc0c6375b154400a813b84f5056b4"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Sat Dec 07 06:28:46 2019 -0800"
      },
      "committer": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Tue Dec 17 11:20:57 2019 -0800"
      },
      "message": "Naming consistency: MediaAnalytics to MediaMetrics\n\nBug: 145780674\nTest: build, boot, dumpsys media.metrics\nTest: atest mediametrics_tests CtsNativeMediaMetricsTestCases\nChange-Id: Icbfa98da9e61702aee9a1d807b5e126b4b9c6458\n"
    },
    {
      "commit": "6b446ce95d99373c9b1210336fa66d8c4f2d7409",
      "tree": "f67c7be3149340c3066970d3e33125ae7c26d00b",
      "parents": [
        "b7b870db0c6cc0c6375b154400a813b84f5056b4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 13 10:56:31 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 13 15:43:24 2019 -0800"
      },
      "message": "Revert \"Revert \"Audio effects: define interface between EffectModule and audio framework\"\"\n\nThis reverts commit 3fd6a2ccfd9305619289e2cd514fdfa803210f9e.\n\nAlso fixes native coverage build.\n\nBug: 146177259\nTest: build/soong/soong_ui.bash --make-mode TARGET_PRODUCT\u003dcf_x86_phone TARGET_BUILD_VARIANT\u003duserdebug NATIVE_COVERAGE\u003dtrue\nChange-Id: Ib78a22619123cd1848b047931b02d4061def3a23\n"
    },
    {
      "commit": "3fd6a2ccfd9305619289e2cd514fdfa803210f9e",
      "tree": "d0290d31cf14167bad8ce9e769eb8e873dfc1cd3",
      "parents": [
        "c0abc6239e1134ed224a10aa66a364baff71cd07"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 13 00:33:32 2019 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 13 00:33:32 2019 +0000"
      },
      "message": "Revert \"Audio effects: define interface between EffectModule and audio framework\"\n\nThis reverts commit c0abc6239e1134ed224a10aa66a364baff71cd07.\n\nReason for revert: broken build on target cf_x86_phone-userdebug_coverage\n\nChange-Id: Ic6808bfd31bedfa85b7d7a120e4c6f6273678f73\n"
    },
    {
      "commit": "c0abc6239e1134ed224a10aa66a364baff71cd07",
      "tree": "4471ea4e788da6d7909121a289fe692438d26f28",
      "parents": [
        "880971c8f204ae755f1d4d3be7287aeb1041c42d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 17:53:33 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 11 21:33:05 2019 +0000"
      },
      "message": "Audio effects: define interface between EffectModule and audio framework\n\nThis is in preparation of the addition of audio effects attached to a\nspecific audio device that will not be attached to a particular\nThreadBase or Effectchain.\n\nCreate an clean callback interface used by the EffectModule to interact\nwith the rest of the audio framework. This callback must be implemented\nby the EffectModule parent (e.g an EfffectChain).\n\nAls refactor EffectHandle enabled(), disable() and disconnect methods()\nto avoid dealing with the ThreadBase directly.\n\nBug: 136294538\nTest: make\nChange-Id: I9160f88f7fbb0447b5e679260bf0401d3af591d2\n"
    },
    {
      "commit": "3f75a5bc38894cb6635837c49247c3fa50ed6c47",
      "tree": "a6a256606f82ae742012ec1532ef22009ab0ab25",
      "parents": [
        "602e1ae3a3d4e2ffe158dacfd268547d94a06b38"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 15:55:51 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 06 17:22:42 2019 -0800"
      },
      "message": "AudioFlinger: add audio session for device effects\n\nAdd specific audio session ID for effects applied to a\nparticular audio device.\nDevice specific effects will be attached to a particular audio sink or\nsource device identified by its unique audio port ID and will all use\nthis same session ID.\nOnly one session of this type exists on a given playback or record\nthread.\nAll effects in this session apply to the same device ID and are created/released\nwhen the routing (audio patch) of this thread output or input stream is updated.\n\nBug: 136294538\nTest: make\n\nChange-Id: I4e3a55ed1244b918429dd9e217b6efecc1ec6449\n"
    },
    {
      "commit": "39260a69ca1f66f29f250f30fde07fd628785708",
      "tree": "f2126fd1052011c2fe3e35559aa472581193b96e",
      "parents": [
        "a2adc8aa6c06f0e1d06c1bb6535be15f30ba26fd",
        "c76d3a273d0336ffa5d71c11b7a566721eca77f1"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Dec 06 14:33:03 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Dec 06 14:33:03 2019 -0800"
      },
      "message": "Merge \"Sometimes no audio output after playing some clips using Files.apk\" am: 80a288ad82 am: 68e6412024\nam: c76d3a273d\n\nChange-Id: I7c365f5f22927382788cbe7ecc4383af6565fa65\n"
    },
    {
      "commit": "80a288ad82f21b3254248c2b2df0dfe8a1443929",
      "tree": "c79d326a095f4ce0fb45490893bc41763cfa52d7",
      "parents": [
        "fefdf667a0c093ae069461bd75fa8dfa0289fa68",
        "32dc26e71cb0493f15b4b6480d991ad283405b42"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Dec 06 22:12:05 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 06 22:12:05 2019 +0000"
      },
      "message": "Merge \"Sometimes no audio output after playing some clips using Files.apk\""
    },
    {
      "commit": "998004649870bc1ceb51a409ba340f0ea8de31b6",
      "tree": "d4ff3eaf49a7a9bef7daa7ec53d271fbb07f702a",
      "parents": [
        "27d7e20fa30756cadc6613e637e53fd9ada24ffd",
        "e0b975b56ab140c494ed12e71575f44154a8374b"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Fri Dec 06 00:26:38 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Dec 06 00:26:38 2019 -0800"
      },
      "message": "Merge \"Allow OFFLOAD timestamp correction for MSD/BUS combinations\" am: 74cfcdf823 am: 8cc35dd935\nam: e0b975b56a\n\nChange-Id: I0dab7e32ef1489c7eac5972dcca7b7c88d2234d7\n"
    },
    {
      "commit": "74cfcdf8237a455f8b8ec8e1b2a08fe777cf7512",
      "tree": "b2a807ef98f524f4ae78e3a26ce4564862725aaa",
      "parents": [
        "9410d2ed179da5df8087b588cf3b8965f8fe8957",
        "f8726f00877d2e9628537da771b12829afb92229"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 05 20:19:08 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 05 20:19:08 2019 +0000"
      },
      "message": "Merge \"Allow OFFLOAD timestamp correction for MSD/BUS combinations\""
    },
    {
      "commit": "b8269fd0946976cc820b0abb815f0fb67fc88b76",
      "tree": "1b65e96a5a38d1f9f37675c7e7e16f6f8389cd43",
      "parents": [
        "7946fbe6782ce25599d917d9357389ad1729f2db"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 11 12:16:27 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Dec 05 10:09:03 2019 -0800"
      },
      "message": "Use AudioDeviceTypeAddr when setting device for effects.\n\nSeparate SET_DEVICE and SET_INPUT_DEVICE command in effects as it can\nbe multiple devices for output case, but only single device for input\ncase.\nUse AudioDeviceTypeAddr instead of just audio device type as address\ncan be useful to identify audio device if there are multiple devices\nwith the same device type connected.\n\nBug: 135621476\nTest: atest AudioEffectTest BassBoostTest DynamicsProcessingTest\nTest: atest EqualizerTest VirtualizerTest VisualizerTest\nChange-Id: Ie9df88e3338730392abbc3efae5daadc70398ff7\nMerged-In: Ie9df88e3338730392abbc3efae5daadc70398ff7\n"
    },
    {
      "commit": "f8726f00877d2e9628537da771b12829afb92229",
      "tree": "109f413c13e023c78416d559686740476079b612",
      "parents": [
        "0287266a3e2543268938e1b91129fb934b92b356"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Mon Dec 02 14:12:01 2019 +1100"
      },
      "committer": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Thu Dec 05 06:44:35 2019 +1100"
      },
      "message": "Allow OFFLOAD timestamp correction for MSD/BUS combinations\n\nTest: audioflinger dumpsys for MSD BUS offload threads show\n      timestamp correction enabled\nChange-Id: I044aaa5d1754ea08b3c78de75e7a4f0bc58dd269\n"
    },
    {
      "commit": "10d86fd087218d43254ec781612a9f86c0022e9d",
      "tree": "35246193cf7aaf924548f3cd15d763bd297d44aa",
      "parents": [
        "c010683e081f48eb72e21cbcf0458efc17184e6b"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 31 17:20:42 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:42:23 2019 -0800"
      },
      "message": "Refactor audio device type in audio flinger.\n\nAs audio device type must not be used as a bit mask, there is a\nrequirement to refactor the code in audio flinger. This CL includes:\n1. Use DeviceTypeSet for recording output devices in Threads. The input\nand output device types in Threads will only be updated when creating\nan audio patch.\n2. Use helper functions in audio flinger for checking whether an audio\ndevice type is a certain category.\n3. Use DeviceDescriptorBaseVector as vector of DeviceDescriptorBase.\nDeviceDescriptorBaseVector will be used in RecordThread to record output\ndevices, which will be used in audio effect.\n4. Do not use set parameters when communicating output devices to\nRecordThread. Instead, adding a new event in Thread to update output\ndevices directly.\n\nBug: 135621476\nTest: atest AudioTrackTest AudioRecordTest AudioPlaybackCaptureTest\nTest: atest AudioHostTest AudioServiceHostTest RoutingTest\nTest: atest AudioEffectTest BassBoostTest DynamicsProcessingTest\nTest: atest AAudioTests\nTest: audio smoke test, run OboeTester\nChange-Id: I87f3e59fd01b0b100232d61a9abbc471c61110c4\nMerged-In: I87f3e59fd01b0b100232d61a9abbc471c61110c4\n"
    },
    {
      "commit": "e2e830fd3b444c27abf258718cfba5ad8d209ec4",
      "tree": "4e0642cbfe2b8de89c0abab3b9fd9238515fcabd",
      "parents": [
        "eff0d0824c9c087c00153dece27e5dc3f8cd0c15"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Dec 03 12:54:46 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Dec 03 13:23:11 2019 -0800"
      },
      "message": "AudioFlinger: Fix incorrect underrun count on track pause\n\nAlso add track state name helper function for logging.\n\nTest: Play video clip then pause and resume several times\nBug: 145613591\nChange-Id: If4fc2565da9b3d4964fb9fdb6f5854ff6fbadfb8\n"
    },
    {
      "commit": "4f3ac4d0555229a41273107ff0987018ef6b69e1",
      "tree": "b17a402fe68ef0b1c80d234d14ff6d6b7f45715e",
      "parents": [
        "bde7aa5551cc67c2b47f1f67cb66c56b824c1a65",
        "d6f189b4c790f88d72c2227cebbbb8a59cbe8a4e"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Fri Nov 22 10:56:08 2019 -0800"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Sun Nov 24 05:16:33 2019 +0000"
      },
      "message": "DO NOT MERGE - Merge QQ1A.191205.011 into stage-aosp-master\n\nBug: 144955631\nMerged-In: I242aebe71ffe7d348eca213252f1691fd444703e\nChange-Id: I40ae7732b4435dc9aa9a3edb57275505e4112a4c\n"
    },
    {
      "commit": "32dc26e71cb0493f15b4b6480d991ad283405b42",
      "tree": "670c5f2c708143dc5e0a106eb256b7686b178f09",
      "parents": [
        "429f364cc4eb0f42298461b88cc3b197f46c04f3"
      ],
      "author": {
        "name": "Jindong",
        "email": "jindong.yue@nxp.com",
        "time": "Mon Nov 11 18:10:01 2019 +0800"
      },
      "committer": {
        "name": "fang hui",
        "email": "hui.fang@nxp.com",
        "time": "Wed Nov 20 10:41:15 2019 +0000"
      },
      "message": "Sometimes no audio output after playing some clips using Files.apk\n\nSometimes after switching songs in Files, audio driver\nenters \"PAUSED\" state, and no sound anymore.\n\nIn normal case, \"paused\" track will be removed from active tracks,\nthen audio hal will make this stream enter standby mode.\n\nActually there are two paths to move paused tracks into standby mode:\n1\u003e track underruns twice:\n    if (--(track-\u003emRetryCount) \u003c\u003d 0) {  // mRetryCount is 2\n        tracksToRemove-\u003eadd(track);\n    } else {\n        doHwPause \u003d true;   // pause\n    }\nUnfortunately, this issue happened exactly in the middle state:\ntrack underrun for the first time, it enters to paused state;\nthen before it underrun for second time, it is stopped due to MediaPlayer.\n\n2\u003e track is paused and code goes here:\n    if (mStandby || !last ||\n            track-\u003epresentationComplete(framesWritten, audioHALFrames) ||\n            track-\u003eisPaused() ||\n+           track-\u003eisStopped()) {\n        tracksToRemove-\u003eadd(track);\n    }\nBut when the issue happens, track is in stopped state,\nthere is no logic to standby it anymore, so add one.\n\nChange-Id: I70cac1f3d6b065690400f6a2363712d4642a9763\n"
    },
    {
      "commit": "8f278eea9deff0d368e1b770cb8c58e4ccb4b359",
      "tree": "f8c22c1f4657e45860da41320aaf86ee6b6400a8",
      "parents": [
        "e6cbccaef91a63e0a739f084fdc94a216a08efd6"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 11 12:16:27 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 11 15:32:54 2019 -0800"
      },
      "message": "Use AudioDeviceTypeAddr when setting device for effects.\n\nSeparate SET_DEVICE and SET_INPUT_DEVICE command in effects as it can\nbe multiple devices for output case, but only single device for input\ncase.\nUse AudioDeviceTypeAddr instead of just audio device type as address\ncan be useful to identify audio device if there are multiple devices\nwith the same device type connected.\n\nBug: 135621476\nTest: atest AudioEffectTest BassBoostTest DynamicsProcessingTest\nTest: atest EqualizerTest VirtualizerTest VisualizerTest\nChange-Id: Ie9df88e3338730392abbc3efae5daadc70398ff7\n"
    },
    {
      "commit": "c52b1ffec2ad11ad0ea1fb7e702da1086c9df437",
      "tree": "b55dcb697023b715848166282b3b588c0aa72530",
      "parents": [
        "c76250c8279552db0be9068e49f65696f931c011"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 31 17:20:42 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Nov 08 11:37:27 2019 -0800"
      },
      "message": "Refactor audio device type in audio flinger.\n\nAs audio device type must not be used as a bit mask, there is a\nrequirement to refactor the code in audio flinger. This CL includes:\n1. Use DeviceTypeSet for recording output devices in Threads. The input\nand output device types in Threads will only be updated when creating\nan audio patch.\n2. Use helper functions in audio flinger for checking whether an audio\ndevice type is a certain category.\n3. Use DeviceDescriptorBaseVector as vector of DeviceDescriptorBase.\nDeviceDescriptorBaseVector will be used in RecordThread to record output\ndevices, which will be used in audio effect.\n4. Do not use set parameters when communicating output devices to\nRecordThread. Instead, adding a new event in Thread to update output\ndevices directly.\n\nBug: 135621476\nTest: atest AudioTrackTest AudioRecordTest AudioPlaybackCaptureTest\nTest: atest AudioHostTest AudioServiceHostTest RoutingTest\nTest: atest AudioEffectTest BassBoostTest DynamicsProcessingTest\nTest: atest AAudioTests\nTest: audio smoke test, run OboeTester\nChange-Id: I87f3e59fd01b0b100232d61a9abbc471c61110c4\n"
    },
    {
      "commit": "b0de569edd2d27b8dae9e3048f9c131b6ebc2d45",
      "tree": "90e0f48fde7d3f07367b62be0c2f98527fc327d6",
      "parents": [
        "bcb57f62b0f75630a5c1199c78f5af311934b6ce"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Aug 20 15:42:04 2019 -0700"
      },
      "committer": {
        "name": "android-build-team Robot",
        "email": "android-build-team-robot@google.com",
        "time": "Fri Oct 11 02:34:35 2019 +0000"
      },
      "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(cherry picked from commit 7307293e8befafa12b244b74cd3c8cb84b27997c)\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": "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": "2534b388b5ab10712b9b6c24a49e3dc827ce0e00",
      "tree": "3b465c0ff21bfe6da7783cf44a6d69ba21ff5ada",
      "parents": [
        "8296c2522746d3500c024121577007dd5e9e685c"
      ],
      "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": "Tue Oct 01 16:28:01 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\nChange-Id: I3f005583410cc9c5d4b07c127d95e236abb4a85f\n"
    },
    {
      "commit": "7dd39723b34c8378fc5eabb4d4ccacf32f55ffe2",
      "tree": "222de47bcb84931d714d250fe51d3249771edc18",
      "parents": [
        "61d4a093f4b4041b145fbd7a3ab5ec04679f87d9"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Sep 05 15:14:30 2019 -0700"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Fri Sep 13 10:59:51 2019 -0700"
      },
      "message": "Improve visibility of IMemory security risks\n\nThis change renames the IMemory raw pointer accessors to\nunsecure*() to make it apparent to coders and code reviewers\nthat the returned buffer may potentially be shared with\nuntrusted processes, who may, after the fact, attempt to\nread and/or modify the contents. This may lead to hard to\nfind security bugs and hopefully the rename makes it harder\nto forget.\n\nThe change also attempts to fix all the callsites to make\neverything build correctly, but in the processes, wherever the\ncallsite code was not obviously secure, I added a TODO requesting\nthe owners to either document why it\u0027s secure or to change the\ncode. Apologies in advance to the owners if there are some false\npositives here - I don\u0027t have enough context to reason about all\nthe different callsites.\n\nTest: Completely syntactic change. Made sure code still builds.\nChange-Id: I5fb99aa797c488406083178a6b05355d98710d3b\n"
    },
    {
      "commit": "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": "5ada82ee2511a31c6846c67e455ffb2c9989b623",
      "tree": "38845fc352b781bb00cfe7bf56cf1cfc23c2af37",
      "parents": [
        "dba03231c2fb2c54c8a7b313786c7bc7d3471908"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 29 17:53:54 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 30 18:07:18 2019 -0700"
      },
      "message": "audio policy: allow silencing capture per port\n\nAdd the possibility to silence a particular AudioRecord\nclient rather than silencing all clients sharing the same UID.\n\nTest: AudioRecordTest#testRecordNoDataForIdleUids\n\nChange-Id: Ic472045cd45c7222ca3a88ccf131435fd1e26475\n"
    },
    {
      "commit": "fb1ae807222a43d977790c028297496dc0583f53",
      "tree": "e8fe68038039316b1cb49b7fd00e842ec602449e",
      "parents": [
        "e67d86100f23f56d78b3a666bc2b87284d0486b1",
        "ddf87effa4d80f413a80fde861f73877ccd80599"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Aug 27 15:50:18 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 27 15:50:18 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: enforce OP_RECORD_AUDIO during recording\""
    },
    {
      "commit": "ddf87effa4d80f413a80fde861f73877ccd80599",
      "tree": "0e89ff4a5be97c07c81bc11c36f5e8741fca9eed",
      "parents": [
        "28355761d73f1495bba8994dc3c0dc631ae245a8"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Aug 20 15:42:04 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Aug 26 16:00:34 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\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"
    },
    {
      "commit": "3bc5c3c9933f1ab54c3456114f599746709bc390",
      "tree": "67a6b098efe0186ba1b544ddc2f42e8d264fb73e",
      "parents": [
        "33f556656c712a8d7dff772b233b7bcdb8cb7654",
        "82452b74566a302b058d9b5ca3c09c04dd99cf16"
      ],
      "author": {
        "name": "Wenfeng Sun",
        "email": "wenfeng.sun@mediatek.com",
        "time": "Wed Aug 21 16:32:19 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 21 16:32:19 2019 -0700"
      },
      "message": "Merge \"Fix OffloadThread VolumeShaper issue\" am: b7a4a3c492 am: 3ca47ba98d am: 3ef5053951 am: d6d47b2f03\nam: 82452b7456\n\nChange-Id: I82ab6403e7734b04230a2b2f761eb4f25e161e51\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": "ddb07bc1434555ba697dfd7b6a6c02c9533c4673",
      "tree": "4caea8a509d12c7b3e0e421665440bf87807621e",
      "parents": [
        "f1100e3e64cc9aa1934fd8e4625a9a0e85365ba9"
      ],
      "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": "Thu Aug 15 20:18:47 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\nChange-Id: Iee6ea72442f9902819628735e19cce0ba1546165\n"
    },
    {
      "commit": "7ad7a25890ce24a37950872ce9a0043b08f27bf6",
      "tree": "a92aa7a2eaeb22bdaffcea7bcb1ac4545fc40eb7",
      "parents": [
        "3b73e994a0e8cf9d718b535fe1f1da157b5c480a"
      ],
      "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": "Thu Aug 01 12:38:41 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\nChange-Id: I24c390f67f20baa8109902099359ca6e34eebcfd\n"
    },
    {
      "commit": "87b6e61db314aa83c3e582ba8ae3d7c3cb1d2d61",
      "tree": "79ce9fff74b8eb605189d54d40e7c15f3e958b53",
      "parents": [
        "e6138376f0578d464037d645f7985c87db60565e",
        "4c4e9748f874636037a7eff8a42aa50684657efc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 27 11:43:46 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jun 27 11:43:46 2019 -0700"
      },
      "message": "Merge \"audioflinger: fix VoIP volume for fast track\" into qt-r1-dev am: e30c6c001d\nam: 4c4e9748f8\n\nChange-Id: I1150fa307e79c0db20d48ad9f0226b05c1ebd7ff\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": "66ff16f84fda9e1df8ad740efb0ca1a324b84c7d",
      "tree": "1803326890d5a16322e9c540a18e61f75e4a9df1",
      "parents": [
        "d6f4cf51161c8a6e936d6dec892b72cd3635cb33",
        "eb7056abb3d2075c40df89de6e4bf8539170d1ec"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 29 13:25:22 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 29 13:25:22 2019 -0700"
      },
      "message": "Merge \"VolumeShaper: Ensure consistent observable state when muted\" into qt-dev am: 2616bbf488 am: 19bf3a5a51\nam: eb7056abb3\n\nChange-Id: I394325bd763912c70a923e44ca2688eb0dc23cd4\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": "c272efca7d3a6381745fc87c54fb774fea145e26",
      "tree": "a53926924ec708b431bcc81cbd12604937054f49",
      "parents": [
        "6800429ebe3d363c8427b52a1a130f3485a9881e",
        "0a1c618d67b1f8f1a1015b0d0d4da372a821b864"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 10 21:19:52 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 10 21:19:52 2019 -0700"
      },
      "message": "Merge \"AudioFlinger: Do not permit fast patch tracks if not compatible\" into qt-dev am: 432e0fd4a4\nam: 0a1c618d67\n\nChange-Id: Ibc7421cb149580cdb9a4ab6a31f805d4828b01e8\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": "c31f1485c111cb7fa888abc29a82bb64e1163ddb",
      "tree": "7463cf7ee0a3d2a727fd3007baeba879fd11eb89",
      "parents": [
        "17ecc0aafac119b80e5e3b3785585de7c92306be",
        "88074c7df73eb9a140f87c1adfbddabda1e574c2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 03 23:19:59 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 03 23:19:59 2019 -0700"
      },
      "message": "Merge \"AudioFlinger: Properly account for underruns\" into qt-dev am: 377cc84da5\nam: 88074c7df7\n\nChange-Id: I20559f4d0f0fa83d082d4565509ae3afb5dddcc4\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": "56ce52547018df9b8b581d8c7e73f9020803482d",
      "tree": "165a76c8b07e68d6451c4be5d6663a75106e82cb",
      "parents": [
        "37f93e87346094262f78b5c0a190df57672a5749",
        "a0d7ca012e08c0a2d73953555b4d6fd3cf1825f5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 01 15:18:39 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 01 15:18:39 2019 -0700"
      },
      "message": "Merge \"AudioFlinger: Fix haptic race condition\" into qt-dev am: 12d07c503a\nam: a0d7ca012e\n\nChange-Id: I5362ea7713b94bd2d91c4b7a784d7f06e8594782\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": "4857b03336df01e66ad13246ab245ad0b21022b1",
      "tree": "7576aed7969312ad6f0d44a230c40a77df442b13",
      "parents": [
        "f59675a4114cdd7091fae4395e4f936415837b7d",
        "a444666e1afe87a15f4d572bde7dc2375134f3bf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 30 11:59:55 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Apr 30 11:59:55 2019 -0700"
      },
      "message": "Merge \"audio: improve audio routing callbacks\" into qt-dev am: 9f5591ac13\nam: a444666e1a\n\nChange-Id: I9913d8e1a969001737906b2ec1e68a53c1fa4951\n"
    },
    {
      "commit": "1efa1cdb869954a043ee73131f0d1cb0875e0c18",
      "tree": "a69d22c8ef7781189252dd9a41dee2adebd4c640",
      "parents": [
        "3ee6b7a5bc0cee813bb80456ca46dade0b479937",
        "852261034a37d0078c2ed2e41f1b4daa847ec1c9"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Apr 29 16:14:57 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Apr 29 16:14:57 2019 -0700"
      },
      "message": "Merge \"AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\" into qt-dev am: 66ea392903\nam: 852261034a\n\nChange-Id: Ife2c560625df40e9ae1de84f39b53934ba5f6239\n"
    },
    {
      "commit": "09f1ed2cb4479c93859557f5b4d40e1c3732f6f2",
      "tree": "27f2c1c23755b45acdfd0832bb9e493f6b890aaa",
      "parents": [
        "2f7a6072bbafd4faba8cbaf170d3cb72e37e3454"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 24 17:45:17 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 29 09:59:31 2019 -0700"
      },
      "message": "audio: improve audio routing callbacks\n\nDo not force audio device changed callback when the client\n(AudioTrack or AudioRecord) registers to AudioFlinger but only when\nit starts playback or capture. Doing so prevents a spurious callback\nhapping at registration time where a stale device\n(previously selected by AudioFlinger thread) but irrelevant to this\nclient is indicated. This causes a disconnection of AAudio streams\ndespite no real device change.\n\nBug: 128630993\nTest: CTS: android.nativemedia.aaudio.AAudioTests, android.media.cts.RoutingTest\n      CTS Verifier: Audio Input/Output Routing Notifications Test\n\nChange-Id: Ia7f1d11490989b0287c97479466c1c07a223aab3\n"
    },
    {
      "commit": "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": "77cbebd8d7066a422ba88f5585c64d9fa4c4149b",
      "tree": "0ff878b895ab6335036bc2917bb1638000bb092a",
      "parents": [
        "fddd9faf0cb5089a65bf14aa2138df661a298896"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Tue Apr 23 14:18:44 2019 +1000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Apr 23 15:58:59 2019 -0700"
      },
      "message": "Warn output buffer size not multiple of 16 frames only for mixer threads\n\nTest: make\nChange-Id: I0b1aec787c1052e2ee7bff09fe66a7fd3d1126ce\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\""
    }
  ],
  "next": "d097981afa129353c42660869e284ae1784506c2"
}
