)]}'
{
  "log": [
    {
      "commit": "167afa7033328250169f141f85e3bc71d89475c9",
      "tree": "83ddee08eb8bb8abc7bf73293c4b69bc7afa8e94",
      "parents": [
        "a9d7640540c6a499c170072faa7d2d2b81d4ec34",
        "64e16a7c0a0341ec3e759d9522c037606e49ce70"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jun 03 00:04:55 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 03 00:04:55 2020 +0000"
      },
      "message": "Merge \"audioflinger: fix FIXME in logBufferSizeUnderruns\" into rvc-dev"
    },
    {
      "commit": "64e16a7c0a0341ec3e759d9522c037606e49ce70",
      "tree": "4de10760a43ffb42233f3da48259a3dd403ccd31",
      "parents": [
        "72c3e0bbf62dbfd5e9ecabac3910f788e0b6b187"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jun 01 13:25:51 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jun 02 14:48:16 2020 -0700"
      },
      "message": "audioflinger: fix FIXME in logBufferSizeUnderruns\n\nSome debug code was accidentally merged.\nThe hang was caused by a recursive lock of mLock.\nThe code now calls lockfree methods.\nAdded events for RELEASE and SETBUFFERSIZE.\n\nBug: 157916126\nTest: adb logcat | grep logBufferSize\nTest: launch OboeTester\nTest: disable MMAP checkbox\nTest: Tap OPEN and START\nTest: move bufferSize fader\nTest: expect to see no spam from logBufferSizeInFrames()\nTest: adb shell dumpsys media.metrics\nTest: expect to see entries like \"(bufferSizeFrames\u003d118, underrun\u003d1)\"\nChange-Id: I7d782ccea2c2470bc18a3a61cfb8767430a441d8\n"
    },
    {
      "commit": "10fb4beafb1eaa496842e925d779b018d4f1639f",
      "tree": "d91daa42f84e39c973ea3af2f0443bf88820e319",
      "parents": [
        "3fdcc3469075ce68a9e419409819a605dea220d6"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 27 22:22:22 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 28 12:56:16 2020 -0700"
      },
      "message": "AudioTrack: Fix start logging spam.\n\nTest: OboeTester in OpenSL ES mode\nBug: 154868033\nChange-Id: I0dc7b78c8982a5ce1ac79b1494af0f16b4a7bb48\n"
    },
    {
      "commit": "e658962c4246669810fc756b098f7fee8d220659",
      "tree": "0621da52970b335d9bd06bec6078e9d8ad879de3",
      "parents": [
        "eca178fbbf489c06f1dd275658dc8a438328565e",
        "cc6ed2d53901850ebd06c8e8303a20f90bb2d890"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 19 17:33:36 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 19 17:33:36 2020 +0000"
      },
      "message": "Merge \"AudioFlinger: lower FAST denied warning level\" into rvc-dev"
    },
    {
      "commit": "cc6ed2d53901850ebd06c8e8303a20f90bb2d890",
      "tree": "d5a71eafe4a16e09ba2b8ec99e563bf5a7256c1c",
      "parents": [
        "05be7e510992ebf41919c84a26b38717a7f3211f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon May 18 13:06:54 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon May 18 15:45:15 2020 -0700"
      },
      "message": "AudioFlinger: lower FAST denied warning level\n\nChanged ALOGW to ALOGD because the warning was causing\npeople to think a bug had occured.\n\nBug: 139825832\nTest: Enter:  adb logcat | grep \"denied by server\"\nTest: Launch OboeTester\nTest: Tap TEST OUTPUT\nTest: select SRate: 32000\nTest: Tap OPEN\nTest: logcat should show \"AUDIO_OUTPUT_FLAG_FAST denied by server\"\nTest: Should be level D instead of W\nChange-Id: I1f3f231d4304a1132964fbb1efce5922e7b91ae7\n"
    },
    {
      "commit": "d3d11c6dd5e520db0aba8ad17fdfe9f57d47a4df",
      "tree": "8e5eea63867d21226acdfa1e34a9f2839a10b08a",
      "parents": [
        "6021501137c85ac531ecdf0bb5a5c3bea4c72541",
        "e3cf41a2806834c4d678a78534134aeee4e12cc5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon May 18 20:18:29 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon May 18 20:18:29 2020 +0000"
      },
      "message": "Merge \"Set min_sdk_version (for non-mainline files)\" into rvc-dev"
    },
    {
      "commit": "ea84038803580b4c35ce4cb60918c0c384127417",
      "tree": "d8c91402af2f630e4f1c36f7798d161767d01301",
      "parents": [
        "38e65911a65a51edf2efd5ca63c4e00daac24852"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 05 21:50:17 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 13 11:15:49 2020 -0700"
      },
      "message": "MediaMetrics: Prepare statistics for protos\n\n1) Add AudioRecord to Analytics trigger.\n2) Log RecordThread statistics.\n3) Rename DURATIONNS to EXECUTETIMENS to avoid confusion.\n4) Use streamType from server not client.\n5) Split MMAP types to MMAP_PLAYBACK and MMAP_CAPTURE.\n6) Use string flags for AudioTrack and AudioRecord.\n7) Compute underrun frames for MixerThread.\n8) Log BT connection state.\n\nTest: adb shell dumpsys media.metrics\nTest: atest mediametrics_tests\nTest: adb shell dumpsys stats --metadata\nBug: 149850236\nChange-Id: Iacf3f117c00ec9f377e62862080252aef9dc084f\n"
    },
    {
      "commit": "e3cf41a2806834c4d678a78534134aeee4e12cc5",
      "tree": "98562f4fc57f3ca03b8d8e37afadcced6f15ad5c",
      "parents": [
        "ddd5870816f48e598e8c7e2c43940169f848c02f"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Thu Apr 30 04:22:22 2020 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Thu May 07 03:15:31 2020 +0900"
      },
      "message": "Set min_sdk_version (for non-mainline files)\n\nModules contributing mainline modules (APK/APEX) should set\nmin_sdk_version as well as apex_available.\n\nFor now setting min_sdk_version doesn\u0027t change build outputs.\nBut build-time checks will be added soon.\n\nThis is second part of two CLs: covers non-mainline files\n\nBug: 152655956\nTest: m\nChange-Id: I55336e644990d3f175e0c011856b52ec600e452a\n"
    },
    {
      "commit": "a6b270399fdacb09826e751657b7bb321652e3ac",
      "tree": "10091ff0524d2d29dcda00e63630d0f51b300655",
      "parents": [
        "669acb12c3092e581a1ecc347e6d573e96c8ca0e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 27 10:34:24 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 27 11:41:38 2020 -0700"
      },
      "message": "MediaMetrics: Track AudioTrack and AudioRecord callers\n\nTest: adb shell dumpsys media.metrics\nBug: 149850236\nBug: 153658358\nChange-Id: If2b0a792cf4cc6c5b125513861b3dfb257bb3cbe\n"
    },
    {
      "commit": "d3813f35753a8ce43b289656de2649fdf1afaacc",
      "tree": "c13f9f04349fdfe3ad043c8bdafaa4757e3a30ff",
      "parents": [
        "cc40c5fa11767eb9a87cf6e1a5e8a99d6cec2847"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 23 16:26:15 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Apr 24 11:13:09 2020 -0700"
      },
      "message": "audioflinger: add setCallerName() to AudioTrack\n\nAnd also to AudioRecord.\nThen log the callerName using MediaMetrics from the destructor.\n\nThis can be used to tell whether AAudio or OpenSL ES\nor Java created the object.\n\nBug: 154543374\nTest: adb shell dumpsys media.metrics --clear\nTest: Run an app that uses audio.\nTest: adb shell dumpsys media.metrics\nTest: Look for \"callerName\" in the dump.\nChange-Id: I000346e72f581d2e40ef4fd0410b579d2a1224e2\n"
    },
    {
      "commit": "a9876703e89afa6db42913d48e2360b7dad98725",
      "tree": "4e51b01b2fa4be83868318a1619e3b7c2f42f36e",
      "parents": [
        "6e89a0704605f4750f87a3243495b175c67e6fbb"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 20 18:16:15 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 23 18:00:10 2020 -0700"
      },
      "message": "aaudio: add MediaMetrics for MMAP streams\n\nLog events from service.\nLog start, stop, disconnect and other events.\nLog underruns and bufferSize.\n\nBug: 154543374\nTest: adb shell dumpsys media.metrics --clear\nTest: run an app that uses MMAP, like OboeTester\nTest: adb shell dumpsys media.metrics\nTest: Expect to see lots of \"audio.stream\" events.\nChange-Id: I690e5226b695d53d038d644f4438c759e08f9fbb\n"
    },
    {
      "commit": "1f2151fea3e51fd0925e60088347aeea1b4d90aa",
      "tree": "00e1f2787f19e9c60d791c0a9b5ecb4cb35c40d7",
      "parents": [
        "433ccf7dca6db9ffd774cd10d539ccf9d62e3f46"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon Apr 13 12:52:14 2020 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon Apr 13 12:52:14 2020 +0900"
      },
      "message": "Mark some aidl_interface modules as unstable\n\nWith b/152655547, all aidl_interface modules are considered as stable\nunless it is explicitly with \"unstable: true\". This change marks the\naidl_interface that are not used across updatable module bounraries\nas unstable, so that the build system does not run the API\ndumping/checking on them.\n\nBug: 152655547\nTest: m\nChange-Id: I5597f7d3fa0e2196dbfcf7ab9a33c71c15a33806\n"
    },
    {
      "commit": "3e66c387d12a833bcb9b6e3c9a13ed339d1e9e8c",
      "tree": "e45616ae344c148512c521054ad1191087619a19",
      "parents": [
        "b15473e53c27b5e54af59bfa4f82c35a22f9bb57",
        "7efe2b8832b0e9a0cd4c07b9caa4a8a7a27b550c"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Apr 11 02:33:43 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Apr 11 02:33:43 2020 +0000"
      },
      "message": "Merge \"AudioRecord: Add retrograde detection to timestamps\" into rvc-dev"
    },
    {
      "commit": "c5f2a7adfc582df0ac26fc418269d68e719b4be5",
      "tree": "e99aad608b112c4398e10822cf9b07be5b6b2dfd",
      "parents": [
        "fd27c5239294058ec92ab2120256e7906110ffb4",
        "06a730b1fe80592767b45643cd86bf6006091965"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 10 01:22:50 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 10 01:22:50 2020 +0000"
      },
      "message": "Merge \"AudioClient: Fix clang-tidy warnings\" into rvc-dev"
    },
    {
      "commit": "06a730b1fe80592767b45643cd86bf6006091965",
      "tree": "6043dcb5cf4d85adcca26b1ec162faee2b4f6afc",
      "parents": [
        "b744fafc831e1a13cc5e054aa4812281c3c5c7fc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 09 13:28:31 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 09 13:28:31 2020 -0700"
      },
      "message": "AudioClient: Fix clang-tidy warnings\n\nTest: atest AudioTrackTest\nTest: atest AudioRecordTest\nBug: 153658358\nChange-Id: Id24db96188a777336f41d74d4fbdfd90147ee8bc\n"
    },
    {
      "commit": "69330d4c9c96a4770d2ac3b06298f3345bb76cd4",
      "tree": "bd3ad71318e33aaea9a6ca5222ada1962d0a7fd6",
      "parents": [
        "95ec1b8ea487abbf4ef50d53c227338f559e9599"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Apr 08 19:29:50 2020 +0000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Apr 08 19:29:50 2020 +0000"
      },
      "message": "Move AudioSystem errorCallback call out from gLock\n\nSince the error callback ends up calling into Java,\nthere is a potential for a deadlock with Java code\nthat takes AudioSystem.class lock and calls into\nnative code that takes gLock in its own turn.\n\nBug: 152819012\nTest: use audio on a phone, also\n      killing native audioserver while watching YT,\n      also while making cellular calls\nChange-Id: Ib288ba96ae2f7b5ab36c1b0a1db4adde487d6a49\n"
    },
    {
      "commit": "5120edaad25acb60218d81bde9a1e7b79ac3f143",
      "tree": "1afdcd0dbd3e35f0ef9ac5cc7853f421570e39eb",
      "parents": [
        "85093d5efc28216f8e091f5163092b2a800f8773"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Mar 26 09:41:15 2020 -0700"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Wed Apr 01 09:59:56 2020 -0700"
      },
      "message": "Expose capture state listener in AudioSystem\n\nThis is a client-side wrapper around the respective feature of APS.\n\nBug: 146157104\nTest: Manual verification of proper behavior when starting/stopping\n      recording, killing of audio server, by examination of the logs.\nMerged-In: I9b56c431f69e77683151de19830ec6f45741dd6f\nChange-Id: I1f5279c4a4b18e0a7862d3b103d383ac3de4c9a0\n"
    },
    {
      "commit": "85093d5efc28216f8e091f5163092b2a800f8773",
      "tree": "eaab1d0d25dd312af33eee8d6b062e2c19437efe",
      "parents": [
        "987d12c425ba681fb93af150ccb537eac8c683fa"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Mar 26 09:41:15 2020 -0700"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Wed Apr 01 09:59:50 2020 -0700"
      },
      "message": "Invert how sound trigger capture is notified\n\nPreviously, audio policy client would call an method on the sound\ntrigger middleware service. This has been replaced by the sound\ntrigger service registering a callback, in order to avoid a cyclic\ndependency between the services.\n\nBug: 146157104\nMerged-In: I876461a7650d337d6dd05fbe80efaf08f8ef20dd\nChange-Id: Ia8f674d7dd50f6dcdd6595bcbadec2f25fdb3561\n"
    },
    {
      "commit": "987d12c425ba681fb93af150ccb537eac8c683fa",
      "tree": "c4eb387678f39425bd49a219cce9981c8ea46720",
      "parents": [
        "f698ff2d177d62a714d452ce63430606738a4190"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Tue Mar 24 17:35:44 2020 -0700"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Wed Apr 01 09:59:43 2020 -0700"
      },
      "message": "Introduce CaptureStateNotifier\n\nThis is a helper class for notifying a client of capture\nstate changes.\n\nBug: 146157104\nTest: Compiles (further testing as part of the topic).\nMerged-In: Ie27bc404805d319a6969290a6369d59fb68c1f38\nChange-Id: I2902468c4692ba68e4bc9be0e5038d5505da7154\n"
    },
    {
      "commit": "7efe2b8832b0e9a0cd4c07b9caa4a8a7a27b550c",
      "tree": "806bed1d3c479a2e28bab68da6b01696f57f516f",
      "parents": [
        "1cfbd0a8a1083af1a7afeb19b2bdc0d757d9daf5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 31 10:24:42 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 31 14:23:09 2020 -0700"
      },
      "message": "AudioRecord: Add retrograde detection to timestamps\n\nTest: atest AudioRecordTest\nTest: camera record stop/start with debug log\nBug: 147198344\nChange-Id: Idd7a0bbd1938073b7b7751595b15e20e54ea3373\n"
    },
    {
      "commit": "a623a1350d58a0648d6f57829887b04c04ba6782",
      "tree": "bac00f33a30c4f426120836cee511de1bef9d881",
      "parents": [
        "0bf91a9596eba0c4ea2217506370f0f21655e740"
      ],
      "author": {
        "name": "Kohsuke Yatoh",
        "email": "kyatoh@google.com",
        "time": "Tue Mar 24 20:10:26 2020 -0700"
      },
      "committer": {
        "name": "Kohsuke Yatoh",
        "email": "kyatoh@google.com",
        "time": "Mon Mar 30 21:44:46 2020 +0000"
      },
      "message": "Allow DEFAULT_INPUT_METHOD to capture audio during RTT call\n\nThe UID of the current InputMethodService (DEFAULT_INPUT_METHOD) is\npushed from AudioService to AudioPolicyService via AudioSystem.\nAllow capture audio if:\n- the UID is the current InputMethodService\u0027s UID,\n- AND a RTT call is active,\n- AND the source is AUDIO_SOURCE_VOICE_RECOGNITION.\n\nBug: 147037345\nTest: use voice input with Gboard 9.1.4 during a simulated RTT call.\nChange-Id: Ib32ec25e962833eddd0320742e177e3c1e0e5c05\n"
    },
    {
      "commit": "bb044fc8c8513928155a4a0fdcde95262b81e7b1",
      "tree": "70ac310867b561ae1a2e9df2aa6b57164f926059",
      "parents": [
        "abd6e9d8cf31aa8db0f6fcd6ac23eb2f32df2216",
        "57a3769fb12dc8b2df457e0919850bd976716706"
      ],
      "author": {
        "name": "Ricardo Correa",
        "email": "rgcorrea@google.com",
        "time": "Tue Mar 24 16:22:37 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 24 16:22:37 2020 +0000"
      },
      "message": "Merge \"Revert \"Allow call audio access for default dialer application\"\" into rvc-dev"
    },
    {
      "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": "abd6e9d8cf31aa8db0f6fcd6ac23eb2f32df2216",
      "tree": "e7c5b02e80b915aab10a1c6283681fae710d6160",
      "parents": [
        "3006a83565b6863f247bf634faa929b84608026e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 23 22:25:56 2020 +0000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 23 22:25:56 2020 +0000"
      },
      "message": "libaudioclient: Fix error handling in AudioEffect::set\n\nZero-initialize effect UUID string recipient arrays\nto prevent logging random data.\n\nBug: 152189317\nTest: m\nChange-Id: I70e6cd509d7c4d1ce1cbd3a250b1371d2d5af4a7\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": "7dfc94a0eac6070791f663b9fdb7121b740271e3",
      "tree": "dd5ed47203fc640ffcb81313ed992148c78bc775",
      "parents": [
        "1cd41d5ce183e92a84ba79da0016cb3eef545822",
        "88b30d2c1520112670472ae879b20cc33a1b6eb0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 10 19:07:24 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 10 19:07:24 2020 +0000"
      },
      "message": "Merge changes from topic \"fix-b-149854039-dynamic-hal-modules\" into rvc-dev\n\n* changes:\n  Plumb the notification about audio HAL services update to APM\n  libaudiohal: Allow late registration of HIDL HAL services\n  Allow for late audio module discovery in APM\n"
    },
    {
      "commit": "88b30d2c1520112670472ae879b20cc33a1b6eb0",
      "tree": "a3afdce3d25d97385bd4a29d8223cffe0fc2203a",
      "parents": [
        "88de22ff76578985801dd7662acb07a5641298c1"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 09 19:43:13 2020 +0000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Mar 10 16:17:26 2020 +0000"
      },
      "message": "Plumb the notification about audio HAL services update to APM\n\nAudioFlinger registers a callback with libaudiohal to receive\nnotifications when new HAL services get registered. It relays\nthe notification to AudioPolicyManager via AudioSystem /\nIAudioPolicyService interface.\n\nBecause AF / APM only interact via Binder interfaces and APM\u0027s\ninterface gets registered later than AF\u0027s, the notification\nfrom AF is made asynchronous.\n\nBug: 149854039\nTest: audio test on a regular phone configuration\n      audio test on a phone with MSD audio HAL module\nChange-Id: I158e941b8f75e2a4614b9d84ca798b0f1f47aa6a\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": "9b6ff73fd6dc5a73cfc9e337d466037250754a63",
      "tree": "cc89b869f3e83f83b3dbb25d6943275c3dd830a4",
      "parents": [
        "abbf20142385d5439f70be768e217b8e20e6c491",
        "00dba06ec1d940e935ca1faaf29e1d8f511f4883"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 14 18:40:55 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 14 18:40:55 2020 +0000"
      },
      "message": "Merge \"AudioSystem: add owner UID to setPhoneState API.\""
    },
    {
      "commit": "287d330c85bc67d0b985eb8c927945ffd541d4e2",
      "tree": "8b4ab663c0a998028d874c4917743c28ee10a79a",
      "parents": [
        "93fb84c8d59eb3db95dd90bc34573b7c6c5b5b67"
      ],
      "author": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Wed Feb 05 14:55:38 2020 +0200"
      },
      "committer": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Wed Feb 12 16:20:16 2020 +0200"
      },
      "message": "Fix voice communication audio playback capture\n\nThis change fixes the CTS failure in AudioPlaybackCaptureTest caused\nby ag/10111312 and ag/10111311.\nIt contains the following fixes/changes:\n  - Mix match for playback capture of USAGE_VOICE_COMMUNICATION now\n    also respects a new flag (AudioMix\u0027s mVoiceCommunicationCaptureAllowed)\n    which is set by AudioService only if the caller explicitly asked\n    to capture USAGE_VOICE_COMMUNICATION and have the\n    CAPTURE_VOICE_COMMUNICATION_OUTPUT.\n  - A permission check on the native side in case\n    mVoiceCommunicationCaptureAllowed is set.\n  - Code cleanup, mainly in AudioPolicy.h and AudioPolicy.cpp.\n\nThis change is accompanied by ag/10242955 on the Java side.\n\nBug: 148559127\nTest: manual\nTest: atest PlaybackCaptureTest (with the version prior to ag/10220852)\nTest: atest com.google.android.gts.audio.AudioHostTest\nChange-Id: I8ae6249f4da1de35e962c838d91f690eb906570e\n"
    },
    {
      "commit": "00dba06ec1d940e935ca1faaf29e1d8f511f4883",
      "tree": "5b7d34546aa89ea68dce0795387792a1e084d910",
      "parents": [
        "b5ed8797b084e9888a22d1533051d3599c483b2e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 11 15:52:09 2020 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 11 15:52:09 2020 -0800"
      },
      "message": "AudioSystem: add owner UID to setPhoneState API.\n\nCommunicate current audio mode owner UID to native service\nwhen changing audio mode via setPhoneState.\n\nThis will be used by call audio capture restriction rules.\n\nBug: 148368476\nTest: manual phone call tests\nChange-Id: Icf6f168bb431b5232f6127877c40789c0c537bde\n"
    },
    {
      "commit": "de8e67bc32a4c1494ed59a36c222b6ec7ad594c6",
      "tree": "c51143f7d4d0ac8aab2bee7af653698d69e1e87e",
      "parents": [
        "b6a1bc586c2f3864fe30d7fbded32ee357eca9fc",
        "140a34fbfe829542c2c3651656d5c595201b3b4a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Feb 03 18:17:42 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 03 18:17:42 2020 +0000"
      },
      "message": "Merge \"Check if calling uid is system uid for setAllowedPolicyCapture.\""
    },
    {
      "commit": "305996c854ee76becf0fad73505f0fe9abde4c5d",
      "tree": "b86a512fa23a42e0b798744050860498a8857811",
      "parents": [
        "2496ffbc450029ee9ec26980a101e71352b4f635"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 27 08:03:37 2020 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 30 18:32:43 2020 +0000"
      },
      "message": "Fix race condition in AudioTrack::releaseBuffer()\n\nIgnore releaseBuffer() if it is for a different IAudioTrack than was\nused for obtainBuffer().\n\nBug: 136268149\nTest: at bug comments #32 and #45\nChange-Id: I2e1955c60479edcba6e7d66c98b9faef088b65d9\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": "5277625231db4f313115fbcb6cefca7f2dfc2ce0",
      "tree": "288802a30819352b91c3b270329fb41b577928a0",
      "parents": [
        "bccf38e3fa6bc2a372c3a0d38c6274b68c0e5fb7",
        "7c96ea7ff84e1084332548583841735b694bfebd"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Sat Jan 25 03:44:28 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 25 03:44:28 2020 +0000"
      },
      "message": "Merge \"Remove mediametrics include symlinks\""
    },
    {
      "commit": "d8a987392d7f5fc8969a62cf34467c39e01f1d91",
      "tree": "b20bf2edf5ab8730fa7854a26f211b12ecb99c2f",
      "parents": [
        "98cbb9d8ba5427fb8095f17050f66d19d532da6f",
        "90e776378afb43385d8759fa1169acab92f8ed94"
      ],
      "author": {
        "name": "Oscar Azucena",
        "email": "oscarazu@google.com",
        "time": "Thu Jan 23 13:32:23 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 23 13:32:23 2020 +0000"
      },
      "message": "Merge \"Added audio policy api to do route based on user.\""
    },
    {
      "commit": "90e776378afb43385d8759fa1169acab92f8ed94",
      "tree": "0225cee9d8bcb3c57bd8a49084902c7cade42479",
      "parents": [
        "c55cdbafff6450155d4282a30ef025d6cecf5b3e"
      ],
      "author": {
        "name": "Oscar Azucena",
        "email": "oscarazu@google.com",
        "time": "Wed Nov 27 17:12:28 2019 -0800"
      },
      "committer": {
        "name": "Oscar Azucena",
        "email": "oscarazu@google.com",
        "time": "Thu Jan 23 00:33:17 2020 +0000"
      },
      "message": "Added audio policy api to do route based on user.\n\nAdded new API to audio policy to route audio output streams based on\nAndroid user id. The routing remains similar to uid rules, with only\nusing USERID_EXCLUDE_USERID to decide on the user id base routing.\nApplication uid and stream usage routing remain the same with the added\ndifference that user id will be taken in to consideration if available.\nBug: 139365417\nTest: atest\ncom.google.android.gts.audio.AudioHostTest#testUserIdDeviceAffinity\nTest: atest AudioPlaybackCaptureTest\nChange-Id: Ib817eb8ae19ed7dea8451e8a8584a20b9b6f5042\n"
    },
    {
      "commit": "dbf0a2ee3492723913e898b6aa23e314056c8b86",
      "tree": "67d67ec62f95862b44aef7bc885a9840681671d1",
      "parents": [
        "0bc6f60e1f036380bd48d022631e6561b90f210c"
      ],
      "author": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Thu Jan 16 23:09:25 2020 +0200"
      },
      "committer": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Wed Jan 22 21:47:01 2020 +0000"
      },
      "message": "Add support for USAGE_VOICE_COMMUNICATION playback capture\n\nAllow audio playback capture for the USAGE_VOICE_COMMUNICATION usage\nonly for priveliged apps that are granted with  the CAPTURE_VOICE_COMMUNICATION_OUTPUT\npermission.\n\nTest: atest android.media.cts.AudioPlaybackCaptureTest\nTest: Manually\nBug: 124653474\nChange-Id: Ib568ca590ea534837c396536f5e31cf60a5caf52\n"
    },
    {
      "commit": "140a34fbfe829542c2c3651656d5c595201b3b4a",
      "tree": "b4496dd05e26b9d4b51dd48fb1a37f76ae9e71e9",
      "parents": [
        "31f98910412ed7e023ffb240c49de63f958fd226"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 23 11:17:25 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 17 10:35:53 2020 -0800"
      },
      "message": "Check if calling uid is system uid for setAllowedPolicyCapture.\n\nAudioSystem.setAllowedPolicyCapture is only called from audio service.\nIn that case, checking if the calling uid is system uid to before taking\naction.\n\nBug: 145115448\nTest: dumpsys audio, query active playback configuration\nChange-Id: I614ac881ecde6bad13f22f1382de701f314a7ada\n"
    },
    {
      "commit": "524159db6d53cecc93de4133e0875be937437883",
      "tree": "37358040ec4d8deacf9486f9312a61ba3e3ebefc",
      "parents": [
        "ff1725382653dfa2db8536edc38a6b1f2c166f2a"
      ],
      "author": {
        "name": "Hayden Gomes",
        "email": "haydengomes@google.com",
        "time": "Mon Dec 23 14:41:47 2019 -0800"
      },
      "committer": {
        "name": "Hayden Gomes",
        "email": "haydengomes@google.com",
        "time": "Thu Jan 16 15:59:19 2020 -0800"
      },
      "message": "Adding support for new System Usages\n\nAdding system usages to native layer functions including 4 new usages\nand setSupportedSystemUsage API\n\nBug: 141006627\nTest: Built, ran, and verified types showed up in dumpsys\nChange-Id: I282c6b40ed9256ced5efb59b42da95a8fb0a6398\n"
    },
    {
      "commit": "7c96ea7ff84e1084332548583841735b694bfebd",
      "tree": "eb5d7c1bcb91cea21469e46b7c014ae44635a217",
      "parents": [
        "255f610f5ab71b5e36d93744dfe058daf6c96041"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Jan 10 15:46:22 2020 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jan 16 15:55:18 2020 -0800"
      },
      "message": "Remove mediametrics include symlinks\n\nBug: 143245419\nTest: build\nChange-Id: I6c836e60c0fe078f5ab7370aec156bdd6e8dcbf0\n"
    },
    {
      "commit": "39415ab6bc1260796a9af9de834cabb859d29c1e",
      "tree": "82345485e87d7f92831e34511dd80f4e66573396",
      "parents": [
        "b215d7f2ab7828b5fc2e9097a70462c78376341d",
        "8b0bfd91473eea4c33946347d98fb356eac15867"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 15 22:06:12 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 15 22:06:12 2020 +0000"
      },
      "message": "Merge \"AudioFlinger: Propagate uid info for AudioSession references\""
    },
    {
      "commit": "b215d7f2ab7828b5fc2e9097a70462c78376341d",
      "tree": "965b0d650b0b3f8838fe6e07dace737e69cc870a",
      "parents": [
        "fd6abf57789c60a03ee63e1d821a18e3d79a5cd4",
        "000c3e44f3c449de255974965ca31b8ab7d3dc1a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 15 20:03:03 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 15 20:03:03 2020 +0000"
      },
      "message": "Merge \"Support multiple error callbacks\""
    },
    {
      "commit": "8b0bfd91473eea4c33946347d98fb356eac15867",
      "tree": "62482792139dcb6c21a70f8bf2656af6c944137f",
      "parents": [
        "255f610f5ab71b5e36d93744dfe058daf6c96041"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 23 13:11:11 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 14 20:08:09 2020 -0800"
      },
      "message": "AudioFlinger: Propagate uid info for AudioSession references\n\nEnables better tracking of permission.\nImproves dumpsys of global AudioSession references.\n\nTest: Clarity effects\nTest: adb shell dumpsys media.audio_flinger\nBug: 129355845\nChange-Id: Ia0226c7047bb38b74e8b0cb67f12ec581b496631\n"
    },
    {
      "commit": "2623d365228384ccab82169f65f2c5971cfedf60",
      "tree": "ae5698609bd6d7231958ac53ba16feaff2a2f2b3",
      "parents": [
        "f0a91423d480c4634e647c4e4a1fe760580f7ff2",
        "f41599b115c9b3fc13a5fe00186067885a31c3ba"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 11 03:10:52 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 11 03:10:52 2020 +0000"
      },
      "message": "Merge \"APM: support querying of audio playback routing\""
    },
    {
      "commit": "f41599b115c9b3fc13a5fe00186067885a31c3ba",
      "tree": "b35290ea7ef244758abf9ead2cdce78b1614c4ec",
      "parents": [
        "684e4758669bacea71379735d49bdc74807772f3"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jan 07 14:22:08 2020 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Jan 10 12:35:43 2020 -0800"
      },
      "message": "APM: support querying of audio playback routing\n\n  Add support for querying the audio devices used for playback\nrouting for the given audio attributes.\n  Take into account registered dynamic policies but disregard\nsecondary output descriptors as they are used for playback\ncapture.\n\nBug: 144440677\nTest: atest AudioServiceHostTest\nChange-Id: I102c57b432b044dc6b0ead49e0a30d8e9094411d\n"
    },
    {
      "commit": "000c3e44f3c449de255974965ca31b8ab7d3dc1a",
      "tree": "dbc9d63e8fdcd34b4223b70ca4fe2f5c26c0e980",
      "parents": [
        "ab2ff056ad282cb9b8198a0dc7089d41d86c1f6e"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Jan 09 15:26:40 2020 -0800"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Jan 09 15:26:40 2020 -0800"
      },
      "message": "Support multiple error callbacks\n\nMove from a single callback model to allow multiple registrations.\nCreated a separate mutex to guard the callback in order to simplify\nthe process of invoking the callbacks safely without holding the\nmain lock.\n\nChange-Id: Id09aedda785e99b31c70cba1681a2ee392e9b06c\n"
    },
    {
      "commit": "a51151aacfc820122b45a875a0b6fe0dba60b756",
      "tree": "5250165a3a49942645caf75ade6634fa5c825e22",
      "parents": [
        "bd9f1ed08bb948af54600eb60f13fd6e05068375"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jan 07 13:37:47 2020 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Jan 08 11:21:31 2020 -0800"
      },
      "message": "Link with actual headers instead of symlinks\n\nand remove the symlinks.\n\nBug: 143245419\nTest: build\nChange-Id: I70e450d9db0f65048f86391c4d3f341659cd213f\n"
    },
    {
      "commit": "b605e91283ad520733dc2400684a5e6efc8602c1",
      "tree": "3f5f5e53cd643678e15d0316a98644dd952b49c0",
      "parents": [
        "8992814204970acbda49d1280f2783f9c16a4165",
        "ba703d6492a66fbf3a8517209b9a5adb208d30dd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 20 15:01:29 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 20 15:01:29 2019 +0000"
      },
      "message": "Merge \"Fix race condition in AudioRecord::releaseBuffer()\""
    },
    {
      "commit": "7c3cc27c455e317bb4ef2b6d34e4919e54cdeace",
      "tree": "b526cf0dce1ee40d09bf867a33c717ef048e0927",
      "parents": [
        "60f0f304bcd573581e7c6bf1cbd05cad36f97c67",
        "fc02f71bf131e17a31364f2cd10bbf9ba05378e1"
      ],
      "author": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Dec 20 02:46:35 2019 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Dec 20 02:46:35 2019 +0000"
      },
      "message": "Merge \"AudioSystem: no error log for virtual source conversion to stream\" am: 0287b5bfb8 am: bc63ac7941 am: fc02f71bf1\n\nChange-Id: Ie5697aa724095ecf2dedaefa4d85e99cebf1e05a\n"
    },
    {
      "commit": "ed678652c776f1284dd94779594582bf6e3325f9",
      "tree": "abfe24f0df61502c33583097b4d4ec411373b262",
      "parents": [
        "c1a82b91f050f4b496b2d373046cb4c9fc32c8eb"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Dec 19 13:39:30 2019 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Dec 19 13:46:43 2019 -0800"
      },
      "message": "AudioSystem: no error log for virtual source conversion to stream\n\nWhen converting audio attributes to stream type, do not log an\nerror if no product strategy support USAGE_VIRTUAL_SOURCE.\n\nBug: 146558301\nTest: check logs after using AudioPolicy for injection\nChange-Id: I8313b9d27583934e7a64edbfe49d52bad587f372\n"
    },
    {
      "commit": "ba703d6492a66fbf3a8517209b9a5adb208d30dd",
      "tree": "5cd0d0f230a5a8004db96e8097afb6bfec213212",
      "parents": [
        "39260a69ca1f66f29f250f30fde07fd628785708"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 13 11:13:42 2019 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 19 10:32:38 2019 -0800"
      },
      "message": "Fix race condition in AudioRecord::releaseBuffer()\n\nIgnore releaseBuffer() if it is for a different IAudioRecord than was\nused for obtainBuffer().\n\nBug: 136268149\nTest: at bug comments #26 and #27\nChange-Id: I2a08c30bf9187b35535318761eaac7856da68c11\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": "a32e60121e1cd626f300fb894f4e1bc5715d3d41",
      "tree": "8c1c54476ec517388b8fe998b59ac0d87d85e5f6",
      "parents": [
        "fa12f52ba2c0f528277bfe7d7543f5f53361850c"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Mon Oct 28 15:39:16 2019 -0700"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Dec 12 15:14:18 2019 -0800"
      },
      "message": "Make IAudioPolicyService::{acquire,release}SoundTriggerSession work remotely\n\nPreviously those calls were reserved for local calling only and rejected\notherwise. They now need to be accessible remotely, since sound trigger\nis moving to a different process.\n\nChange-Id: Iadd26006b8d310b9c5d1fdbefc70c861dfa809f0\nBug: 142070343\n"
    },
    {
      "commit": "0c56c527ca7a3f92b6d09842720995f0ca1b913e",
      "tree": "b0b58dd2c3578b8544f441ca7a2d7597c42960be",
      "parents": [
        "a473e074ffcf55fb1a8dfcdbbc0bc625970cc2ce",
        "94876034876afd6f642dd1a0ad7c60aee05504d9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 11 21:25:53 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 11 21:25:53 2019 +0000"
      },
      "message": "Merge \"AudioEffect: add device descriptor to AudioEffect constructor\""
    },
    {
      "commit": "2deb47896c1a3604468f9b9144c7114f5d678b33",
      "tree": "5e952f128a421748aa32dc22f16e86ecad15a972",
      "parents": [
        "f6cd76eef99409ea943e995e3c8fae92a787fb36"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Nov 01 11:04:15 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Dec 10 14:21:48 2019 -0800"
      },
      "message": "APM: support product strategy routing\n\n  Audio policy engine supports receiving a preferred device to use\nfor a given strategy (Engine superclass). Use of the preferred\ndevice intervenes at the level of the each engine implementation,\nhere in the default engine in getDevicesForProductStrategy() method\nso it is saved in the routing cache, and respects existing routing\npriorities.\n  Refactor the loops for call and output rerouting into a new\nupdateCallAndOutputRouting() method.\n\nBug: 144440677\nTest: atest AudioServiceHostTest#testPreferredDeviceRouting\n\nChange-Id: Ic4c690e1b0d8020c4335979e40e14e6df5887879\nMerged-In: Ic4c690e1b0d8020c4335979e40e14e6df5887879\n"
    },
    {
      "commit": "6d9f56dd70cd0d98b3477c86d27f31b40550dfbf",
      "tree": "8afc9b6653ff3ee405b9972cd5a8360e7e03e949",
      "parents": [
        "24003dc83687516cebd38153e318c2b1b6c37729",
        "30857159e8c143aac18aa1c0db3cffd47d8e207d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Dec 10 19:49:59 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 10 19:49:59 2019 +0000"
      },
      "message": "Merge \"APM: support product strategy routing\""
    },
    {
      "commit": "30857159e8c143aac18aa1c0db3cffd47d8e207d",
      "tree": "fa694fe4ca82413e2de5cca3066643571d46a611",
      "parents": [
        "a2adc8aa6c06f0e1d06c1bb6535be15f30ba26fd"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Nov 01 11:04:15 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Dec 09 12:22:47 2019 -0800"
      },
      "message": "APM: support product strategy routing\n\n  Audio policy engine supports receiving a preferred device to use\nfor a given strategy (Engine superclass). Use of the preferred\ndevice intervenes at the level of the each engine implementation,\nhere in the default engine in getDevicesForProductStrategy() method\nso it is saved in the routing cache, and respects existing routing\npriorities.\n  Refactor the loops for call and output rerouting into a new\nupdateCallAndOutputRouting() method.\n\nBug: 144440677\nTest: atest AudioServiceHostTest#testPreferredDeviceRouting\n\nChange-Id: Ic4c690e1b0d8020c4335979e40e14e6df5887879\n"
    },
    {
      "commit": "94876034876afd6f642dd1a0ad7c60aee05504d9",
      "tree": "f695fedbfa6e930d034dfdb0f61e485b5292a67c",
      "parents": [
        "b7a56c52e001d2e361140b07ee1baad4c56e5b2c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 13 12:45:28 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 09 09:46:17 2019 -0800"
      },
      "message": "AudioEffect: add device descriptor to AudioEffect constructor\n\nAdd the possibility to specify a target audio device when\ncreating an audio effect by passing its type and address to\nAudioEffect constructor.\nWhen doing so, the session ID must be AUDIO_SESSION_DEVICE.\n\nBug: 136294538\nTest: make\nChange-Id: I2a2eba340d3c2537285c091e9a53f305ff161a2b\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": "630f74baaf5280a78350fa1ecb7283768a5c4bf9",
      "tree": "e20620e03a8ef5db88b55dfe70edfaa926ef6c43",
      "parents": [
        "643a5692fb1d1b7b0e2c90faa217816f7b524c51",
        "d17c85023ac2058233121b8a94603687c855c997"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 06 19:21:53 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 06 19:21:53 2019 +0000"
      },
      "message": "Merge \"Add explicit private audio recording request\""
    },
    {
      "commit": "b680e955f474a2f81ed35383da67209bcbdd7d10",
      "tree": "8fd48d3bca98f5cc5d96415255711817fc209553",
      "parents": [
        "9e1e25dd418773ad5e574441962dcc771d3ec2a3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 27 15:40:33 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Dec 05 13:00:07 2019 -0800"
      },
      "message": "media utils: dump audio HAL service before restarting audioserver\n\nAdd request to create tombstones of audio HAL servers before restarting\naudioserver process when the watchdog triggers.\n\nAdd audio device factory HAL interface API to retrieve HAL process pids when\npossible (on debug builds).\n\nAdd AudioFlinger service API to set audio HAL process pids from\nJAVA AudioService.\n\nBug: 141528385\nTest: Force watchdog and verify tombstone creation\nChange-Id: I68c1e8fb4db23e5952ad0c93d7d0b9d121b8ec18\nMerged-In: I68c1e8fb4db23e5952ad0c93d7d0b9d121b8ec18\n"
    },
    {
      "commit": "d17c85023ac2058233121b8a94603687c855c997",
      "tree": "39fc63d6f1037eafb71dc8046aefedfadfee9b53",
      "parents": [
        "d203cb92c9c9628b3bead45ec08f826544c1d649"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 24 15:58:35 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 04 17:58:34 2019 -0800"
      },
      "message": "Add explicit private audio recording request\n\nAdd the possibility for apps to indicate that their\ncapture use case is private and that a privileged Assistant\nshould not be able to capture concurrently.\nThis allows to override the default behavior tied to the audio\nsource (e.g VOICE_COMMUNICATION is private by default but\nUNPROCESSED is not).\n\n- Add AAudio API to set and get privacy sensitive mode on input stream\n- Add MediaRecorder API to set and get privacy sensitive mode\n- Modify AudioSource constructor to accept audio attributes instead of an\naudio source to specify the use case.\n- Modify audio policy concurrent capture logic to use audio attributes\nflag instead of audio source to decide of a capture client has\nrequested privacy mode or not.\n\nBug: 137850106\nTest: CTS AudioRecordTest and MediaRecorderTest, manual audio smoke tests\n\nChange-Id: I250ea5da4c1da809ceac0da22ae9bee15b937001\n"
    },
    {
      "commit": "c010683e081f48eb72e21cbcf0458efc17184e6b",
      "tree": "74e8898a4399b0b2fb3693379fcf80b5be1c9199",
      "parents": [
        "8d7522888db87e9533b286431f59c7e0b804a514"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 24 14:58:31 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:42:00 2019 -0800"
      },
      "message": "Refactor opening output interface between AF and AP.\n\nRefactor interface between audio flinger and audio policy. Use device\ndescriptor instead of audio device type and address. DeviceDescriptor\ncan contain more information that may be useful when opening an output\nstream.\nIn audio policy, if multiple audio devices are passed in when opening\nan output stream, one device is extracted using the same strategy as\nwhen selecting a device for volume application. When starting source,\naudio policy manager will call audio flinger to create audio patch. In\nthat case, multiple devices will still be patched to the output stream.\n\nTest: atest AudioTrackTest AudioPlaybackCaptureTest\nTest: atest audiopolicy_tests, audio smoke test\nChange-Id: I46dc2da621614f8716c6c73cf807fe7d2d672cda\nMerged-In: I46dc2da621614f8716c6c73cf807fe7d2d672cda\n"
    },
    {
      "commit": "8d7522888db87e9533b286431f59c7e0b804a514",
      "tree": "ee1a14f6ddd4dea80dac7945c356599cfb5c9628",
      "parents": [
        "020b0dc578cbc5779293e27311c23099996690e0"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Oct 18 15:49:48 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:41:16 2019 -0800"
      },
      "message": "Move libmediahelper into a new folder.\n\nThis change mainly aims at refactoring libmediahelper. Libmediahelper\ndoesn\u0027t need to be stored in media folder. In that case, move\nlibmediahelper related file to a new folder. In the meantime, move\nAudioParameter.h from libaudioclient to libmediahelper. There is no\nneed to keep AudioParameter.h in libaudioclient while AudioParameter.cpp\nis in libmediahelper.\n\nTest: make\nBug: 135621476\nChange-Id: Icce6615b7e3a68be8b7492f2a91922ab04464ca2\nMerged-In: Icce6615b7e3a68be8b7492f2a91922ab04464ca2\n"
    },
    {
      "commit": "5b78141fb60bb73ee9339497cce5b5111413927e",
      "tree": "4be7b7f377d843dd25f2ce2beef43c34d9908d49",
      "parents": [
        "ea64c67d2c2ecc6921fea5769d66f52301601857"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 04 14:10:42 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:13:50 2019 -0800"
      },
      "message": "Move AudioDeviceTypeAddr to libaudiofoundation.\n\nMove AudioDeviceTypeAddr from AudioPolicy.h to libaudiofoundation.\nAudioDeviceTypeAddr is a class that contains audio device type and\naddress. It can be used not only in audio policy, but also other places.\n\nBug: 135621476\nTest: make, atest AudioHostTest\nChange-Id: Ib257859891c647c07f22771012efdada438a4ff5\nMerged-In: Ib257859891c647c07f22771012efdada438a4ff5\n"
    },
    {
      "commit": "abab522d57a88875189ab8a00876528b30c698e1",
      "tree": "145449c5e6b8bf62688bda83fc3fa852ab6ba942",
      "parents": [
        "493a55d11183402fd06315b32e640b7ce75abe63"
      ],
      "author": {
        "name": "Judy Hsiao",
        "email": "judyhsiao@google.com",
        "time": "Sat Nov 09 18:14:58 2019 +0800"
      },
      "committer": {
        "name": "Judy Hsiao",
        "email": "judyhsiao@google.com",
        "time": "Wed Nov 20 13:58:46 2019 +0800"
      },
      "message": "AudioFlinger: Fix getInputBufferSize() calculation\n\n1. Query 44100 and 48000 SR if proposed SR is not supported\n2. Query AUDIO_CHANNEL_IN_MONO and AUDIO_CHANNEL_IN_STEREO if\nproposed channel_mask is not supported\n3. Return with bytes rather than frames\n4. Fix destinationFramesPossible usage\n\nTest: run cts\nandroid.media.cts.AudioRecord_BufferSizeTest#testGetMinBufferSize\nBug: 144245613\nBug: 144245318\nBug: 144000030\n\nChange-Id: I0fa90eb1bef63bd441724cdb0fa7f9172f503364\n"
    },
    {
      "commit": "42896a0774caae74ea8c982417ecbefb21913bc8",
      "tree": "6e352631b91856d118f052b8c180085837e4f07a",
      "parents": [
        "484d6119d3ca9140d415dc1841d4c0c500d76a20"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 27 15:40:33 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 08 15:26:09 2019 -0800"
      },
      "message": "media utils: dump audio HAL service before restarting audioserver\n\nAdd request to create tombstones of audio HAL servers before restarting\naudioserver process when the watchdog triggers.\n\nAdd audio device factory HAL interface API to retrieve HAL process pids when\npossible (on debug builds).\n\nAdd AudioFlinger service API to set audio HAL process pids from\nJAVA AudioService.\n\nBug: 141528385\nTest: Force watchdog and verify tombstone creation\nChange-Id: I68c1e8fb4db23e5952ad0c93d7d0b9d121b8ec18\n"
    },
    {
      "commit": "0c3ab34456d0fb31f29459bb1a3d24008753b422",
      "tree": "368a5533b9f178eb1a230fe35b30ff7d626b3f7d",
      "parents": [
        "dc0e389aac274d94fc3702cf858d0c47fa8ddd43",
        "8340e67185e852b7de1d68eb86ca0c46b1affb98"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 08 22:39:10 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 08 22:39:10 2019 +0000"
      },
      "message": "Merge \"audio policy: Add call screen audio mode.\""
    },
    {
      "commit": "05b5edd08b0b846f6ffb749805a7b8bce31ce4f8",
      "tree": "49058f5bd3c2f4cf2321713374958ad68b84e19e",
      "parents": [
        "517734d665d69ed36c7a6cf5297452318aa517ec"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 04 14:10:42 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 06 13:52:55 2019 -0800"
      },
      "message": "Move AudioDeviceTypeAddr to libaudiofoundation.\n\nMove AudioDeviceTypeAddr from AudioPolicy.h to libaudiofoundation.\nAudioDeviceTypeAddr is a class that contains audio device type and\naddress. It can be used not only in audio policy, but also other places.\n\nBug: 135621476\nTest: make, atest AudioHostTest\nChange-Id: Ib257859891c647c07f22771012efdada438a4ff5\n"
    },
    {
      "commit": "8340e67185e852b7de1d68eb86ca0c46b1affb98",
      "tree": "fdb9098c48aedf7e3763f6dc2c5122bf16a5bd34",
      "parents": [
        "cd606f3f18e974ad02679ff9a6ffb98e71714b05"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 06 11:01:08 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 06 11:06:34 2019 -0800"
      },
      "message": "audio policy: Add call screen audio mode.\n\nAdd new audio mode AUDIO_MODE_CALL_SCREEN allowing call screening\nto take place while other audio use cases are still active.\n\nAlso add API and audio policy configuration attribute to\nindicate if the platform supports this audio mode.\n\nBug: 140384450\nTest: make\nChange-Id: If2fc56dbbd10aae2cf1498480471b35de0940228\n"
    },
    {
      "commit": "8c5bb45d25c2dd4299f544b03e905c7a4e83ca35",
      "tree": "30868af19a7aa7a25108167776fee3dc607458dd",
      "parents": [
        "200d15a9c8df0421e665b9135354610019eebdba",
        "4381040f77c2907c9a0ba27ece2e00241daadf0e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Oct 28 23:42:11 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 28 23:42:11 2019 +0000"
      },
      "message": "Merge \"Refactor opening output interface between AF and AP.\""
    },
    {
      "commit": "4381040f77c2907c9a0ba27ece2e00241daadf0e",
      "tree": "b559f2cf74926949bd9f846c627ede38b734158f",
      "parents": [
        "c6fe9c424669d640d8bbe0fc7e130a34bab0b4bd"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 24 14:58:31 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Oct 28 10:38:13 2019 -0700"
      },
      "message": "Refactor opening output interface between AF and AP.\n\nRefactor interface between audio flinger and audio policy. Use device\ndescriptor instead of audio device type and address. DeviceDescriptor\ncan contain more information that may be useful when opening an output\nstream.\nIn audio policy, if multiple audio devices are passed in when opening\nan output stream, one device is extracted using the same strategy as\nwhen selecting a device for volume application. When starting source,\naudio policy manager will call audio flinger to create audio patch. In\nthat case, multiple devices will still be patched to the output stream.\n\nTest: atest AudioTrackTest AudioPlaybackCaptureTest\nTest: atest audiopolicy_tests, audio smoke test\nChange-Id: I46dc2da621614f8716c6c73cf807fe7d2d672cda\n"
    },
    {
      "commit": "77819b82784e4a0a9ef4ccea7618c886f175817e",
      "tree": "ed83084e698b6494774dc0cd5b9cfe4815d899f3",
      "parents": [
        "57cf28f79c1d24ed259bcd8ca6227bb06952c24c",
        "00900336c1e2a67fb852758f9790fbf8050c19c5"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 13:30:40 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Oct 25 13:30:40 2019 -0700"
      },
      "message": "Merge \"Remove more header symlinks\" am: a2bc7eada8 am: ec565c575d am: ef6bd3e3a5\nam: 00900336c1\n\nChange-Id: I1ee034dda7407c84110b8fa92a38a427d58203b5\n"
    },
    {
      "commit": "6b2859450f91f1cdd8b3ca2435df4dd37907cd8a",
      "tree": "4accc947ac99fa7246f5f7fc54f35b3c960636b1",
      "parents": [
        "35f148bc5a1cb1efffd9aee0223a06720a303329"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Oct 21 14:52:30 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 24 21:25:53 2019 +0000"
      },
      "message": "Remove more header symlinks\n\nTest: build\nBug: 143245419\nChange-Id: I9bb03d54c7792625b73602f2d3721e29f8f929be\n"
    },
    {
      "commit": "bbb382312e7c8b78dc007ab6ed3020b69346dae4",
      "tree": "e6ab4705e0b5e4afe880a178f3b44259e5ab9442",
      "parents": [
        "a0877dc731067dd95635b2be3e893f1fe60bf3a1"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Oct 23 21:02:41 2019 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Oct 23 21:02:41 2019 +0000"
      },
      "message": "Revert \"Revert \"Move libmediahelper into a new folder.\"\"\n\nThis reverts commit a0877dc731067dd95635b2be3e893f1fe60bf3a1.\n\nReason for revert: Should work with go/pag/1465463 merging to master.\n\nChange-Id: I17217744eacabf15621d4a5aac9dd1678e37e4ba\n"
    },
    {
      "commit": "a0877dc731067dd95635b2be3e893f1fe60bf3a1",
      "tree": "eceafbd995bb43bfcd277bcd421df42e099cbc6e",
      "parents": [
        "c8888660b53647ef1a9608493ab1a5dc93ba9b0d"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Oct 23 16:05:56 2019 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Oct 23 16:05:56 2019 +0000"
      },
      "message": "Revert \"Move libmediahelper into a new folder.\"\n\nThis reverts commit c8888660b53647ef1a9608493ab1a5dc93ba9b0d.\n\nReason for revert: Broke elfin build\n\nChange-Id: Idfd67b064b28abf32da332149bdce212249345d8\n"
    },
    {
      "commit": "c8888660b53647ef1a9608493ab1a5dc93ba9b0d",
      "tree": "e6ab4705e0b5e4afe880a178f3b44259e5ab9442",
      "parents": [
        "f6581aaac9469864be4bd915bca0c1ae9f37d55d"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Oct 18 15:49:48 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Oct 22 17:20:54 2019 -0700"
      },
      "message": "Move libmediahelper into a new folder.\n\nThis change mainly aims at refactoring libmediahelper. Libmediahelper\ndoesn\u0027t need to be stored in media folder. In that case, move\nlibmediahelper related file to a new folder. In the meantime, move\nAudioParameter.h from libaudioclient to libmediahelper. There is no\nneed to keep AudioParameter.h in libaudioclient while AudioParameter.cpp\nis in libmediahelper.\n\nTest: make\nBug: 135621476\nChange-Id: Icce6615b7e3a68be8b7492f2a91922ab04464ca2\n"
    },
    {
      "commit": "3686203afbfa2e3a59255a9280e3f9175d3fdd7c",
      "tree": "fae91b412fdf5f69ff822fff96dc98feb24c7d6d",
      "parents": [
        "40143b19a0dbb2cf3d24f100bf3844f8a4a60f8d"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Oct 10 10:52:19 2019 +0100"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Oct 10 10:00:10 2019 +0000"
      },
      "message": "Propagate sample rate to static audio track\n\nBug: 136691300\nTest: playback on static buffer track\nChange-Id: Ib11c39e381a1b78450ab8a688310453aa3f1daf7\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\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": "a4f00e2aeadc9dc5c2f4970cd61ace72438136d4",
      "tree": "0cad5d0e9d535b38da7d03253141cc7606e45220",
      "parents": [
        "9b6599e1e10232e9c6e67e1d6d26265b8e8da885"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jul 31 14:53:29 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 14:06:22 2019 -0700"
      },
      "message": "AudioMixer: Cleanups\n\n- remove unused ARRAY_SIZE;\n\n- fix indentation for TIMESTRETCH in setParameter;\n\n- move trackNames method implementation and BLOCKSIZE constant\n  into .cpp file;\n\n- whitespace fixes.\n\nTest: make\nMerged-In: Idc5da55c8c3af0d59b9a7a12d081747b0a99dafc\nChange-Id: Idc5da55c8c3af0d59b9a7a12d081747b0a99dafc\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": "138b0a3840db6207654d8a9b3d88a383b100b9b0",
      "tree": "4109899967f1de3c9fd2a120172bbedd54495a89",
      "parents": [
        "bb3b160486da21dab7611de44c85ad85e73e69c9"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 05 11:11:38 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 03 09:46:29 2019 -0700"
      },
      "message": "Restore stream [dis]connect parameters in deprecated state\n\nSince AudioParameter.h is vendor-available, some vendors may\nstill use the old parameters. Leave the old parameters there\nbut mark as deprecated.\n\nBug: 138868195\nTest: make\nChange-Id: I6d12b7ac360309014a240a321c3cd32b39d8f740\nMerged-In: I6d12b7ac360309014a240a321c3cd32b39d8f740\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": "3230ed8235a39adef82d7c3873e6a87007799ff8",
      "tree": "158042769963aa698a8fbd240d2abfc352220c3d",
      "parents": [
        "6dc75fb0cde69661a1d2d915c1520b251ebdfbbb"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Sep 26 11:20:54 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Sep 27 12:12:46 2019 -0700"
      },
      "message": "Remove symlinks from include dir\n\nTest: build\n\nChange-Id: Ibe4eee4fe49b7884e6d720e626d88125bbee0eb2\nMerged-In: Ibe4eee4fe49b7884e6d720e626d88125bbee0eb2\n"
    },
    {
      "commit": "cf90b4931734e42c6092318991f213b76d7e849e",
      "tree": "3c0c685cb75bbdc37172d24113f6c0dbcbf3dfb4",
      "parents": [
        "d2dc18b063c548d9646dd1127fea97ccebdba079"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Sep 26 11:20:54 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Sep 27 09:02:30 2019 -0700"
      },
      "message": "Remove symlinks from include dir\n\nTest: build\n\nChange-Id: Ibe4eee4fe49b7884e6d720e626d88125bbee0eb2\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": "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": "f85d129bf9365d46991cb5348d04c2a1c8d20f6f",
      "tree": "c451ee6c68d336aeb11acf8fb9b5f68ce5f36b53",
      "parents": [
        "34bbfc447ad5c3b615acf9e924a97b2a3d678ab7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 21 14:45:41 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 21 14:45:41 2019 -0700"
      },
      "message": "AudioFlinger: Clear effect_uuid_t in case of short read\n\nBug: 139417189\nTest: native test, see bug\nChange-Id: I9ef0e58e2e73089eb9a347d5357e040ac69bbdd1\n"
    },
    {
      "commit": "c6c78b6cb224a7985c61d47c6b3c2e39180831c3",
      "tree": "1db168b81debf2730a748470d146500df4e93590",
      "parents": [
        "4e00f928aee8a10d2c62920d21ade19aec14d343",
        "7075dc6a21f7439d6d3189b32a88f1adf7f87ed6"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Aug 14 10:42:40 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 14 10:42:40 2019 -0700"
      },
      "message": "Merge \"Move ExtendedAudioBufferProvider and SingleStateQueue\" am: 2a70a39f4c am: 72d2412c27 am: 1cae73f318 am: 5fdaa0f7d2\nam: 7075dc6a21\n\nChange-Id: I2b775d9274b8d0e0e5419c5e945a67a089bb8149\n"
    },
    {
      "commit": "72d2412c271237aa6dfa2a75c41c8c0f69999b34",
      "tree": "5a4e3e6534daafd5c8bdf61be5cacfb21d73c084",
      "parents": [
        "5369de1fd662aa373cbbf4cf5368c66da74d51db",
        "2a70a39f4c88c531be1a7087e6b241532ee0024d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Aug 14 10:14:49 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 14 10:14:49 2019 -0700"
      },
      "message": "Merge \"Move ExtendedAudioBufferProvider and SingleStateQueue\"\nam: 2a70a39f4c\n\nChange-Id: I993318e2a9a5bba3aa65ee8319d80bebb537df50\n"
    },
    {
      "commit": "9f3c02d15167b98b9208687e7e30e07149efbf2d",
      "tree": "60cb2b95b2a1eb630697b5014a05713e4c899366",
      "parents": [
        "646a332acfc525e94e6c1898544201052efa4fc8"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 12 11:36:05 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 12 11:47:19 2019 -0700"
      },
      "message": "Move ExtendedAudioBufferProvider and SingleStateQueue\n\nMove ExtendedAudioBufferProvider.h to libaudioclient. This is\na more appropriate location because EABP extends AudioBufferProvider.\n\nMove SingleStateQueue.h to libnbaio_mono. This is a more appropriate\nlocation because SSQ is a non-blocking queue.\n\nThis allows to remove the dependency of libnbaio on libmedia\nwhich is a good thing because libnbaio provides more low-level\nabstractions than libmedia.\n\nAlso, replace a dependency of libnbaio on libbinder with\na dependency on libaudiohal header library.\n\nTest: make\nChange-Id: Ie48b523790cd8230695ec2e4710e50981b616289\n"
    },
    {
      "commit": "2207c0565403e89a3e03e49b9062e07806662c4d",
      "tree": "251861ae6021449a302c15879ee3865e312ba938",
      "parents": [
        "ce4b00e79f4bde61c3474ce001825eb34b4d1b58"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 05 11:11:38 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Aug 05 13:33:12 2019 -0700"
      },
      "message": "Restore stream [dis]connect parameters in deprecated state\n\nSince AudioParameter.h is vendor-available, some vendors may\nstill use the old parameters. Leave the old parameters there\nbut mark as deprecated.\n\nBug: 138868195\nTest: make\nChange-Id: I6d12b7ac360309014a240a321c3cd32b39d8f740\n"
    },
    {
      "commit": "32925cc4374ba577f7b5d38867b11db1a582b967",
      "tree": "52c652b0c4b22b18dfdff953157ee5ef4cd5545a",
      "parents": [
        "2687b89978140e096f958fb37df53d65eecb9aaf"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 29 15:00:21 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 29 20:47:46 2019 -0700"
      },
      "message": "Move AudioMixer.h and BufferProviders.h into correct location\n\nThe implementation files are in libaudioprocessing,\nthus the header files also belong there.\n\nTest: make\nChange-Id: I78ba4ed480413c0a1b871e80971ef5ce1d0c6755\n"
    },
    {
      "commit": "f23fcf683cc0ec5efb8eae471141af162ac00035",
      "tree": "f592028f9bac9137b6edba29a33eef87c25faf41",
      "parents": [
        "1b03fc43bd922333dde02bc3be8fa44b1333d341"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 08 15:28:43 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 08 15:28:43 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\n"
    },
    {
      "commit": "c2a5c62475ef33075c062c0d2cd7aff93f21b8c7",
      "tree": "41f470cfa45804f49caa3d8465a1b71330389769",
      "parents": [
        "75f28c3b3eb2cb87672a168ed9ec6a7232cad4bc",
        "a24e4d451ba7f7c44030fdf7c8f252219d0c62a8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 18:43:05 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 11 18:43:05 2019 -0700"
      },
      "message": "Merge \"audioservice: add RTT mode observer\" into qt-dev am: e81a326d90 am: cdc2f7cb34\nam: a24e4d451b\n\nChange-Id: I63fe67eb0affdf9e9cccce5b7bc05864511a6396\n"
    },
    {
      "commit": "cdc2f7cb3480f528d79966044013cea47296deb9",
      "tree": "4deef1c8ff0b99122c8497464282c281af855a5d",
      "parents": [
        "1c23036f6c55e4f38653b330bbebd05fd8fcba17",
        "e81a326d90dfce1249917b796f69b48fe1c59971"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 18:31:59 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 11 18:31:59 2019 -0700"
      },
      "message": "Merge \"audioservice: add RTT mode observer\" into qt-dev\nam: e81a326d90\n\nChange-Id: I9490f8b940629a09cf62cd5211c4f626e2d4079c\n"
    },
    {
      "commit": "6ede98f9b3e3e1988f401d79b625ead653027ccc",
      "tree": "2306e3b551752f70ec01a6d8ed87824743c2ef81",
      "parents": [
        "e0092766d214720c1fd22b8c08ccc7ceeaf4a700"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:50:30 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:55:25 2019 -0700"
      },
      "message": "audioservice: add RTT mode observer\n\nEnable audio capture by the Assistant when RTT is ON during a call\nsimilarly to when an accessibility service is in the foreground.\n\nAlso remove log when permission checked for hotword\nand audio output capture fail as those checks are now done\nsystematically.\n\nAlso do not check permission to bypass interruption policy if\nbypass flags are not set.\n\nBug: 132976361\nTest: use voice input during a call with RTT enabled.\nChange-Id: Iff45b0816dac889262ec29ea115f74dea4dc6b6d\n"
    }
  ],
  "next": "1224227e19b418b42056cd9eb4e03ce9d68fce35"
}
