)]}'
{
  "log": [
    {
      "commit": "3bea3a47bf6af84e58eada1964b8590f2727c3dd",
      "tree": "7d24fc611a5341a8aa0e7fde695563c1cb6f8355",
      "parents": [
        "991cfb08051f98b0d28733efda98c96fe1c76e2e"
      ],
      "author": {
        "name": "Kuowei Li",
        "email": "kuowei.li@mediatek.com",
        "time": "Thu Aug 13 14:44:25 2020 +0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 27 19:20:44 2021 -0800"
      },
      "message": "audio: add implementation for TV related API\n\n1. TunerConfiguration.\n2. AudioDescriptionMixLevel getter/setter.\n3. DualMonoMode getter/setter.\n4. PlaybackRate getter/setter.\n\nTest: TIS player with instrumented HAL\nTest: atest AudioTrackTest#testTunerConfiguration\nTest: atest AudioTrackTest#testDualMonoMode\nTest: atest AudioTrackTest#testAudioDescriptionMixLevel\nTest: atest AudioManagerTest#testGetAdditionalOutputDeviceDelay\nBug: 173482792\nMerged-In: Idb22ce6714fa240b2b4b3b8637b16d3a51228fa1\nChange-Id: Idb22ce6714fa240b2b4b3b8637b16d3a51228fa1\n"
    },
    {
      "commit": "029e33e5854af4071d9d3c873a70d2fcc235f396",
      "tree": "3a2092c0fb4760d4aa952708b9d423a9e71f7345",
      "parents": [
        "2610b34be2f01c7f3a96e98e257d3d690a1eef28"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 23 18:19:44 2020 +0100"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jan 26 16:52:51 2021 -0800"
      },
      "message": "audio flinger: report actual sink device for MSD playback threads\n\nWhen a playback thread is routed to an MSD module, make sure that the\nactual sink device selected by the software patch at the output of the\nMSD module is reported to AudioTrack clients.\n\nBug: 139894721\nTest: atest AudioTrackTest\nTest: atest RoutingTest\nChange-Id: Ie52ebe198e9ebdfe5f2a38dcd44c551c705a7931\nMerged-In: Ie52ebe198e9ebdfe5f2a38dcd44c551c705a7931\n"
    },
    {
      "commit": "e3b59ac285356dfe1bd416d46672fe0b1f10dc6f",
      "tree": "cc260c7b2867101599cdba75b53b4e0578c7345f",
      "parents": [
        "7aacb78d8d049af5e9949de9fc34be4650b5b176"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 01 15:08:13 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Nov 24 22:56:29 2020 +0000"
      },
      "message": "Convert mask types from uint32_t to enum type\n\nThis applies to the following types:\n\n- audio_gain_mode_t;\n- audio_flags_mask_t;\n- audio_channel_representation_t;\n- audio_channel_mask_t;\n- audio_devices_t.\n\nEnum types are distinct thus proper overloading on the type\nis possible in C++. Also, assignments to enum types are\nless prone to errors.\n\nBug: 169889714\nTest: basic audio functionality\n      m stagefright\n      atest audiopolicy_tests\nChange-Id: I42506484b1d0b0482618b7314fad4c8012a06fb4\nMerged-In: I42506484b1d0b0482618b7314fad4c8012a06fb4\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": "00abf0d08363d063bd5ea6e35a71c54f16f3ed31",
      "tree": "1d9de701622390a7d3db05b77393ad238b8d35f6",
      "parents": [
        "369ad274564c02b79c15b13e8e69ccb73080d6fb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 22 19:28:22 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 23 09:04:24 2020 -0700"
      },
      "message": "AudioFlinger: fix getMicrophones implementation\n\ngetMicrophones() should return aggregated mic information\nfrom all HW modules, not just primary.\n\nAlso:\n- Fix assignment of mPrimaryHardwareDev that should be\nfirst from HW module name and then according to primary output\nif no module with name \"primary\" is loaded.\n\n- Make sure we do not dereference mPrimaryHardwareDev if null.\nNote that this should not happen with current rule that a primary module\nmust be present.\n\n- Implement consistent locking scheme where both mPrimaryHardwareDev and\nmAudioHwDevs are guarded by mHardwareLock\n\nBug: 154772890\nTest: AudioManagerTest#testGetMicrophones\nChange-Id: I7c9449bb705a6fbebdc0642166e58348d47b7ee8\n"
    },
    {
      "commit": "d1f1cb68f567363a0b1e4cd4db6286afc6c8a1e2",
      "tree": "3b32985218612d05bf95fed08c18025d1735b2d4",
      "parents": [
        "06675ff30f63323905ff18c3c4e0d34a9fee4c60"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Mar 24 11:57:57 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Mar 27 11:33:09 2020 -0700"
      },
      "message": "Add audio attributes info when starting aaudio tracks on MMAP mix.\n\nIn aaudio, when adding tracks to mixed stream, it is needed to update\naudio attributes to HAL whenever the tracks are added or removed.\nCurrently, only the audio attributes used to open the stream will be\nsent to the HAL. In that case, adding audio attributes of the clients\nwhen starting the stream can help solve the problem. In audio flinger,\nthe client\u0027s audio attributes will be used to create MmapTrack.\n\nTest: play multiple aaudio tracks, add log\nBug: 77279923\nChange-Id: Ic1c536049e194a2bb7513425ee4828d52769d27f\n"
    },
    {
      "commit": "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": "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": "3de1bbfde9623ca4bf6d3a281d93857ae06e39a2",
      "tree": "6ef063e1db869e5a7e54cf6bebe7392ac64ae3e8",
      "parents": [
        "31f98910412ed7e023ffb240c49de63f958fd226"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Tue Jan 21 16:41:17 2020 -0800"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Tue Jan 21 17:43:14 2020 -0800"
      },
      "message": "Fix race condition in Effects\n\nMain problem was in AudioFlinger::EffectChain::EffectChain(), where\nthe thread* argument could possibly have been destroyed before the\ncreation of the weak pointer\n(AudioFlinger::EffectChain::EffectCallback::mThread) around it.\n\nWhile here, cleaned up a bunch of other pointer-related operations\nin order to avoid trafficking in raw pointers to RefBase subclasses.\n\nBug: 147770363\nChange-Id: I508ca94dd38a04e13f1a1c413f548001b961c721\n"
    },
    {
      "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": "d1ce689ac43bfd6c75c2f15a349e475396d04dcd",
      "tree": "42c6e27d027844c455405db5124a8086775cfc5e",
      "parents": [
        "d3fb71855d226e12b7d8ed261047619c75895034",
        "b82e6b724e45b1f88ed746c316b445b3bb8036b3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 09 18:23:19 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 09 18:23:19 2020 +0000"
      },
      "message": "Merge \"AudioFlinger: implement device specific audio effects\""
    },
    {
      "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": "5bdc535976d99ac92e6bdf62c8c68c3f163cff3c",
      "tree": "ba325c6c1e5f3fa6d6488672ebcdc29df1640061",
      "parents": [
        "fb0aaa0fb6d102ca0694a52327b9a95ef3aa7978"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 23 14:36:31 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 06 12:25:42 2020 -0800"
      },
      "message": "AudioFlinger: Show uid and package name for notification clients\n\nAssists debugging AudioFlinger dumpsys.\n\nTest: adb shell dumpsys media.audio_flinger\nBug: 129355845\nChange-Id: I49988013b5cd68a6756a0aa8dd173934bb2d9b15\n"
    },
    {
      "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": "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": "f1a584a44cd2fb35a1817438db4342ee8bd6825e",
      "tree": "1216162819d470bcbedf3958b25e91b58739e6a3",
      "parents": [
        "a24e36ccd5da2ec0c3f435c20862ce83b3a5151d",
        "42896a0774caae74ea8c982417ecbefb21913bc8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 11 23:24:02 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 11 23:24:02 2019 +0000"
      },
      "message": "Merge \"media utils: dump audio HAL service before restarting audioserver\""
    },
    {
      "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": "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": "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": "63e2c52d1430eb180d3f9c99e7ac8459d3580e90",
      "tree": "bf6684e2cb0741509cf1e2a06569bcb65c8f48df",
      "parents": [
        "f6581aaac9469864be4bd915bca0c1ae9f37d55d"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Oct 22 16:48:20 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Oct 22 17:10:30 2019 -0700"
      },
      "message": "Move LinearMap from libmedia to audio_utils.\n\nLinearMap It is only used in AudioFlinger to associate track frames\nto sink frames. It is not related to media stuff. In that case, move\nit to audio_utils.\n\nTest: make\nChange-Id: I947e1cb61bd6e66d5fd53b4f7d0a8e1c5876cbf4\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": "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": "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": "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": "959e2d068b21e6b9443d5e98fa25a607d1f93993",
      "tree": "c889e8fbdd9d07065759b82e354b3ef42ad255d0",
      "parents": [
        "c70268aa433e7d307819184ae5c2ec96a3e5b6af"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 28 11:08:19 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 28 11:23:00 2019 -0700"
      },
      "message": "audioserver: Use timed lock instead of bouncing for dumps\n\nThe technique of bouncing lock attempts does not work well\nin the case when another lock has higher priority and acquires\nthe lock frequently. Timed lock works better in this case\nbecause the acquiring thread is then put in a queue and gets\nthe lock as soon as another thread releases it. The wait time\nin the worst case (deadlock) is the same.\n\nBug: 118842894\nTest: Run VOICE_COMMUNICATION capture + AEC effect, dump audioflinger\nChange-Id: Idc4fc2b6f5faf6988979f9354dd92441af33e600\n"
    },
    {
      "commit": "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": "e778c4254d3018553ff245448aa9d750c5628699",
      "tree": "c60e1d80b508471c7de9d409420e563813cabbf9",
      "parents": [
        "0a2fc30b155c92db29ed483f85c8e92c3c9cf85b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 15:04:30 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 15:37:55 2019 -0700"
      },
      "message": "AudioFlinger: createEffect always look for same session effect chain.\n\nTest: CTS AudioEffect tests\nBug: 128630419\nChange-Id: Ieb08abfcb7a983e05fa8f25f6609468d9bd4620b\n"
    },
    {
      "commit": "153f92d57b6a1d2fdc7fa601bbc86db31646a8f9",
      "tree": "0d380f13a58ff8fdf073dd974dcb55e4d18ef75c",
      "parents": [
        "45986c74cd5253bcc81b1b4954e3ff3300f7e6d8"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Dec 18 18:33:28 2018 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 06 15:49:11 2019 -0800"
      },
      "message": "Add secondary output to audio tracks\n\nThe secondary are returned from mixes (from DAP loopback\u0026render),\nfrom getOutputForAttr.\nAll getOutputForAttr* of the stack are update.\nInternal getOutputForAttr use descriptor, external one use handles.\n\nThe secondary output are saved in each track and the track is\ninvalidated if the list of secondary output changes.\n\nIn audio flinger, create a pair of recordTrack \u0026 patchTrack to pipe\nthe intercepted audio audio to the secondary output.\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: Id6523d9e383c15a0e39313d5f355df809b7e72fe\n"
    },
    {
      "commit": "45986c74cd5253bcc81b1b4954e3ff3300f7e6d8",
      "tree": "7c549d046cb5b342affb16ac8fdfeb13d3f53f3b",
      "parents": [
        "ba98acb34e60b2bf2dac5a55c4acbb80b5408568"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Dec 18 18:22:59 2018 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 06 09:38:33 2019 -0800"
      },
      "message": "Audioflinger: add timeout to PatchTrack\n\nAdd support for timeout that was only supported by PatchRecord.\nThis is implemented by moving the timeout and common code in a base\nclass.\n\nAlso remove PatchRecord useless virtual inheritance of RecordTrack.\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: I833148f31a311ca41092be1d7e2d170f086322c5\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "ae340bde6d16f0046887fa0e73fba00cdd5405d9",
      "tree": "8b84e19910fcba4e4ba54f0a7b1e6649bf7d8bb8",
      "parents": [
        "def408939dec9f3a4ff21d84c44b6fcad1797396",
        "3fae037db39ff89707c3a58ef1419229a00ad71d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 01 01:53:28 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 01 01:53:28 2019 +0000"
      },
      "message": "Merge \"Add master audio balance\""
    },
    {
      "commit": "57303cc4312686e02e754ba99a81f0cf71144757",
      "tree": "5118a0c03e035d13c203118e1336e33803b1de08",
      "parents": [
        "77270b880570e07a5d80b23371f53638ec30fb5c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 18 15:45:57 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 30 17:07:10 2019 -0800"
      },
      "message": "Interface between audio server and vibrator service\n\nThe haptic playback should be controlled by vibrator service. Via the\ninterface, audio server could notify vibrator service about starting or\nstopping haptic playback and get vibrator intensity from vibrator\nservice. Vibrator service could call mute/unmute to control the haptic\nplayback.\n\nTest: Manually\nChange-Id: Iad24813977e4dea0d67a91f8f8b390a016ce4ca2\n"
    },
    {
      "commit": "3fae037db39ff89707c3a58ef1419229a00ad71d",
      "tree": "33087aa031e45fdc65add4ffaaf74e6a7872cf0f",
      "parents": [
        "48f59ed61b902f0e6cb7811bd8ee5fa60ab63abe"
      ],
      "author": {
        "name": "Richard Folke Tullberg",
        "email": "richardfolke.tullberg@sony.com",
        "time": "Fri Jan 13 09:04:25 2017 +0100"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 28 16:21:52 2019 -0800"
      },
      "message": "Add master audio balance\n\nTest: Change Balance through Settings, play audio\nBug: 28390736\nCo-author: Ed Savage-Jones \u003cedward.savage-jones@sony.com\u003e\nChange-Id: I0169b436ccbaa5628584d9f4954dd7c76d021aae\n"
    },
    {
      "commit": "3903e9f58fdbdea94052f5870792f1e61a2f0f2b",
      "tree": "084a33e117db465218fdae52984e1b26d58113fa",
      "parents": [
        "aa1523c14af06a2f213e570d12ce01b71422b26a",
        "b4e037e01450cbc99191a89e507805974d347899"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 18 03:37:23 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 18 03:37:23 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: provide downstream sink device to software patch source\""
    },
    {
      "commit": "b4e037e01450cbc99191a89e507805974d347899",
      "tree": "9e1dff2e3afe399eec542594a4ed480a9d1adf99",
      "parents": [
        "8292a716361d0f02de2b79242aec4630664bc770"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jan 14 15:56:33 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jan 14 15:56:33 2019 -0800"
      },
      "message": "AudioFlinger: provide downstream sink device to software patch source\n\nWhen opening an input stream for a software patch, pass in\nthe downstream destination device info. This helps the intermediate\nmodule to set up any device-specific processing.\n\nNote that the intermediate module must implement Audio HAL V5.0\nin order to be able to receive this information. It\u0027s not available\non the legacy audio HAL API either.\n\nBug: 120859615\nTest: make\nChange-Id: I542a47d2c299fe19f576d5f5c2b237cc00ae5b93\n"
    },
    {
      "commit": "03a6e6a08dbda1c94e0c9ce6fba4a4abd3df6d59",
      "tree": "e609e29b32764e6fd970f16c78d3bbee5be401bb",
      "parents": [
        "c2684ac61bdbfd9913cf1361a6436272756bc6d6"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Tue Dec 04 10:54:13 2018 -0700"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Thu Dec 20 17:37:55 2018 -0700"
      },
      "message": "Adding Audio HAL V5: Direction API\n\nBug: 119137468\nTest: Testbed app.\n\nChange-Id: I1b3c81079000958da80d36616fe06930d876aac3\n"
    },
    {
      "commit": "405733256a9cf62c9e3be2d8dbd5ccb9cb7c5d97",
      "tree": "b395e3e093aa3010b54f9227e8a7cef08ed1b2a0",
      "parents": [
        "6b6a0f05248fc646d42f09cb891d8b6fda19426e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Nov 08 12:08:02 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 11 17:18:05 2018 -0800"
      },
      "message": "Support open output stream with haptic channel mask.\n\nWhen haptic playback is supported according to audio policy\nconfiguration file, try to open the output stream with haptic channel\nmask. When trying to creat a track with haptic channel mask, use haptic\noutput if it is available.\n\nBug: 111454766\nTest: Manually test\nChange-Id: Ia8c70dd7f602a134d0509630eb734b8c540dea7d\n"
    },
    {
      "commit": "ac917aca235ff5170f00c2ee933f41f07a40232d",
      "tree": "2927cc6419b7fe615ccdc977224f6f3ed656f58e",
      "parents": [
        "e4eb88fa5fe62a9b6b709fbf2ff26f37acf6db20"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Nov 28 14:03:52 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Nov 28 14:44:17 2018 -0800"
      },
      "message": "Add selectPresentation API to IAudioTrack\n\nThe Java AudioTrack interface has a setPresentation API. This\ncalls the setParameters API in IAudioTrack. However, this does\nnot eventuate into a call into the android.hardware.audio@4.0\nIStreamOut selectPresentation API.\n\nAdd selectPresentation API to IAudioTrack and call down to the\nandroid.hardware.audio@4.0 IStreamOut selectPresentation API.\nTranslate into calls to setParameters API for legacy HAL\ninterfaces.\n\nBug: 63901775\nTest: compile\nChange-Id: Id634a107f3f93ab18dc80d2bd0af67bda35e859f\n"
    },
    {
      "commit": "2942a4e2d97edb8b14d7fac16f9cad12f78048bc",
      "tree": "97f3fd66a453766e390a4bba7e9c863834855ce8",
      "parents": [
        "ea055e6dab6bcbf9bf90711d602bcf59395f0d59"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Wed Sep 12 17:41:27 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Tue Sep 18 17:32:33 2018 -0700"
      },
      "message": "Remove --json option from dumpsys media.audio_flinger\n\nThe more recent work that this was supposed to become is reflected in\ndumpsys media.log, so this commit removes some code clutter that is not\nused anymore.\n\nOther Changes:\n- Use std::make_unique for creating unique_ptr objects\n\nTest: build, dumpsys media.audio_flinger\nBug: 68148948\nChange-Id: I4841e118c2cdee4ada4c6cdc0fff1ec2e12b38c4\n"
    },
    {
      "commit": "dc099c2cd3ab1d5a9adf4c39dd33e0b5037544f1",
      "tree": "5b7cc829081ef671cb075e726e8f03baa7405b34",
      "parents": [
        "05fa8856abaa1e050c3c8e6ba97fc8878ed7600a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 18 13:46:39 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 18 14:38:05 2018 -0700"
      },
      "message": "AudioFlinger: Preserve recent MMapThread history for dumpsys\n\nTest: Aaudio tests, check audioflinger dumpsys\nBug: 116026119\nChange-Id: Ib891686480b2579e4d3b2e419c83aec0a79ba812\n"
    },
    {
      "commit": "a8115dc6d814c18d1ec68067425485add3ea1af2",
      "tree": "2bed9bcf27ad65a7495f82d59ac259a0072647ff",
      "parents": [
        "51eb281710acec50c28306e03155224cf5198aad"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Aug 24 15:51:59 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Aug 28 15:46:05 2018 -0700"
      },
      "message": "AudioFlinger: Add Thread history to dumpsys\n\nTest: Bluetooth + audioflinger dumpsys\nBug: 80155745\nChange-Id: Icee723a9fe653395119dd639883be5b7d8f3f158\n"
    },
    {
      "commit": "99e1f06a37f484315d62c6cdad6078a7e092a900",
      "tree": "b9c6837a3c294c80d43287b976b30c60353cfb1f",
      "parents": [
        "61e9029a7da63282620acf68d8ac13fe4c080744",
        "a0a5d2a9061cfb58b6f7632117502f2061ab74cb"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Aug 21 21:48:22 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 21 21:48:22 2018 +0000"
      },
      "message": "Merge \"Add external setParameter to audioflinger dumpsys\""
    },
    {
      "commit": "5786e01d64860448d93b681a59c7d5a60bc12298",
      "tree": "5ac379a0d0ce652fd71b9f2fae34fb0b913ded6a",
      "parents": [
        "86be8728fb6efae5a35ed4840c45a2eafce06823"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Wed Aug 15 09:03:47 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Aug 17 14:57:40 2018 -0700"
      },
      "message": "NBLog: Restore log dump and add new logging types\n\nMerging is temporarily disabled for now because the readers managed by\nthe merger are the same as the ones used for the dumpsys log dump, and\nreading from the log effectively consumes the buffer. Eventually, the\nreaders for the two functionalities will need to be separated to avoid\nconflict. The dump of the merged buffer is also disabled, which removes\nthe dumping of histograms.\n\nThe new types added are monotonic thread cycle time, CPU thread cycle\ntime, CPU frequency, and latency (which will need to be specified in\nfurther detail later). Logging support is added only for monotonic\nthread cycle time at the moment.\n\nTest: build, log monotonic thread cycle time in FastThread, check output\nin dumpsys media.log -r.\n\nChange-Id: I1b781d6db102fb917fd0bac964eeebd0309234c0\nBug: 68148948\n"
    },
    {
      "commit": "a0a5d2a9061cfb58b6f7632117502f2061ab74cb",
      "tree": "5d97d831dbb49da3617a6b66630a83fee07c8d72",
      "parents": [
        "5bf00e8858de16b294174c35b338b99b5a3259fb"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Aug 06 15:03:18 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Aug 09 09:38:16 2018 -0700"
      },
      "message": "Add external setParameter to audioflinger dumpsys\n\nApps are not expected to send any setParameter, system should only send\nvery few keys. This log can help verify what is bypassing audioflinger\ncontrol.\n\nOnly the first 1024 characters are logged per SimpleLog limitation\nto avoid high memory retention in the privilege audio service\nin case very big strings are sent.\n\nThus in the worst case around 60*1*3\u003d180kB can be consumed in Audioflinger\nby those logs (aka: no app memory deny of service).\n\nTest: adb shell dumpsys media.audio_flinger\nChange-Id: Ida9c21be9d20528f67a63eddf6ca7a6c962c7cc2\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "442868f036df6e9966f824ec256619b2923a9ed4",
      "tree": "f823452661efd87177897ba4b82d32ef944fd6ec",
      "parents": [
        "4455af941c4d33859215b836ac03571ee7a360cf",
        "1882f16c80d6e1e047a43c1e685a005034b138e4"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Aug 03 23:58:32 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 03 23:58:32 2018 +0000"
      },
      "message": "Merge \"Audioflinger dumpsys: Use libjsoncpp for json dump\""
    },
    {
      "commit": "1882f16c80d6e1e047a43c1e685a005034b138e4",
      "tree": "29fb74695be6d869ca6a0f51e310e6752eb8c36b",
      "parents": [
        "5b13ff8f66e4b376127af9cfb6fa3f075f17eaa2"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Thu Aug 02 18:05:39 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Aug 03 15:44:15 2018 -0700"
      },
      "message": "Audioflinger dumpsys: Use libjsoncpp for json dump\n\nTest: dumpsys media.audio_flinger --json\nBug: 68148948\nChange-Id: Ieebe2c52e3613e48a5ec5cbb2b1f167a32d5a47d\n"
    },
    {
      "commit": "2046ec756ee59acc4cfa1d52eb97aaa84efc9754",
      "tree": "352eca0b14dc5e4a368f0475df975ad431515d9d",
      "parents": [
        "965737edc28bd76f6424f9ff4c1f0315f28a0434"
      ],
      "author": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Tue Apr 24 14:00:55 2018 -0700"
      },
      "committer": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Tue Jul 31 18:01:12 2018 -0700"
      },
      "message": "Update getEffectDescriptors() to include type\n\nAllows getting effect descriptors by type or uuid,\nnot just by uuid.\n\nBug: 78528249\nTest: Builds. Manually tested that an app playing audio with an effect works.\nChange-Id: I9d339a7d6d81161065e1adaf427dd2d3430436c2\n"
    },
    {
      "commit": "a746b36f237e6b05b207afac9a507cc706f5cdc6",
      "tree": "15cbe3725413b1345c5684c5e908620879f85482",
      "parents": [
        "c3fd2a4396d692d9940b09e7a933b53bc808daab",
        "7b651154476414dcb15b822a9ebea2b4bf25cd3d"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Sat Jul 21 00:31:51 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jul 21 00:31:51 2018 +0000"
      },
      "message": "Merge \"dumpsys: add --json option to media.audio_flinger.\""
    },
    {
      "commit": "7b651154476414dcb15b822a9ebea2b4bf25cd3d",
      "tree": "04ebf92f0b3181d4cfbcb3cf460ddd5f9fb2a846",
      "parents": [
        "8180b74a8e2c02eee7938b32fd0ecfeda53c91be"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Jul 13 10:17:19 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Jul 20 14:56:51 2018 -0700"
      },
      "message": "dumpsys: add --json option to media.audio_flinger.\n\nCurrently only extracting audio performance data.\n\nTest: dumpsys media.audio_flinger --json\nBug: 68148948\nChange-Id: If207e7e20683dcf8d8d5874417cd7466c78a5df0\n"
    },
    {
      "commit": "b261ef51db4891290647ee2fe2365b0ece6a530e",
      "tree": "9fe80b6600edce4fd80f7feaedbdf972303b9e8c",
      "parents": [
        "24b617232c7400c9165bde09542bdb41cb113089"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 16 13:34:38 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 17 13:05:34 2018 -0700"
      },
      "message": "audioflinger: Forward stream parameters to downstream patches\n\nWhen passing parameters to immediate output streams also check\nif there are any downstream patch threads that need to receive\nthese parameters.\n\nAdded AudioFlinger::forwardParametersToDownstreamPatches_l\nmethod, similar to existing broacastParametersToRecordThreads_l.\n\nBug: 63901775\nTest: make\nChange-Id: I83229fd6f4890e5e69a40d568d1c3e1eebed6504\n"
    },
    {
      "commit": "f323451b24b06c4f3375488409af7c93ce08ba73",
      "tree": "593f3e5441d6f69e653e0d7a2e7fde1a2f5190b6",
      "parents": [
        "999ad2cf2a0a687abfb7ee147c3261f609cc4806"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jul 03 14:51:47 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jul 10 10:59:21 2018 -0700"
      },
      "message": "AudioFlinger: Dump Direct and Offload timestamp statistics\n\nTest: AudioFlinger dumpsys during offload playback\nBug: 80502521\nChange-Id: I8b4cb5eb47000a075a8ecaefdf4eb4c4ee23a304\n"
    },
    {
      "commit": "2e2c0bbe19c4cc50ee9ae8bef7955229fe2fb058",
      "tree": "c7c8defc8161838cd5f7dd8f3d221493a9d441ff",
      "parents": [
        "14dc10deebda497664a5ec0943c1083f64d2ed9d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 11 19:13:11 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 18 15:16:41 2018 -0700"
      },
      "message": "Timestamp: Collect and dump statistics\n\nTest: Audioflinger dumpsys\nBug: 80502521\nChange-Id: I8c7c8b0c2f0f51dc898ed96f6a973e20490022f1\n"
    },
    {
      "commit": "8946a28aaaadf426ee22b098b4aec7be4d9edc00",
      "tree": "85a9520841616e8c1188d51fd44591543148e874",
      "parents": [
        "acb7d9ddc1955682379ea514082511b9ea44482e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 19 20:04:56 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon May 21 11:37:46 2018 -0700"
      },
      "message": "AudioFlinger: Fix Tee logging\n\n1) Fix bad WAV files for tee sources that aren\u0027t 16 bit PCM.\n2) Allow multiple RecordThread tees instead of one.\n3) Allow dump from non-fast MixerThreads (e.g. deep buffer).\n4) Parallelize tee dumping for improved concurrency;\n   dump outside of AF lock.\n5) Async dumping to allow dump to be issued in time critical code.\n6) Improve file naming to distinguish record vs playback tracks,\n   threads, and dump reason.\n7) Allow Tee insertion anywhere in code with global running\n   Tee management.\n8) Increase resolution of filename time to msec avoid file overwrite.\n9) Dump track data upon removal from active tracks to improve\n   timeliness of dumped data.\n10) Dump tee data on tee destruction.\n11) Refactor Tee code out of AudioFlinger.cpp; minimize footprint.\n\nAudioFlinger enabling code requires Configuration.h define TEE_SINK;\nthis is disabled, hence avoiding regression risk.\n\nTest: Enable tee log, repeatedly call dumpsys, examine files.\nBug: 78369241\nChange-Id: I7b22cfa7dbbc1601828de931522065a509ab4047\n"
    },
    {
      "commit": "444ecc3476107a1e80f1573b20ceca5e9949e4ae",
      "tree": "0c431300c26a616e77e1200f3d3b46638f1668e5",
      "parents": [
        "6205a06d20d6b92d52044e8076beaac4c7873a21"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue May 01 17:40:05 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 11:05:38 2018 -0700"
      },
      "message": "PatchPanel: Cleanup and refactoring\n\n  * Unified software patch endpoints management code.\n\n  * Noticed that Patch::clearConnections is only called before\n    getting rid of Patch instance, so there is no need\n    to explicitly clear references to endpoints\u0027 Track and Thread.\n\n  * Fixed out-of-memory handling when creating tracks for\n    a software patch.\n\n  * Factored out finding HAL Device by module handle.\n\nTest: verify transitions to/from BT while playing media and making calls\nChange-Id: If6459c477054d6dff60dfa13f2d99ee2d6e887ad\n"
    },
    {
      "commit": "dea53040273928d1cf4dc028c93afac706445c49",
      "tree": "2f1de9deed88e8dbe142d39dfab92a00afba09a8",
      "parents": [
        "03625f6e43934ebf53864160a6e325eefcc3336e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 26 13:10:21 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 26 16:45:06 2018 -0700"
      },
      "message": "Refactor PatchPanel\n\nMajor changes:\n\n * since PatchPanel is internal to AudioFlinger, and has the same\n   lifetime period, there is no need to use reference counting;\n\n * setAudioPortConfig moved to AudioFlinger;\n\n * store Patches in std::map instead of SortedVector, and\n   directly--not as pointers;\n\n * move {create|clear}PatchConnections into Patch class;\n\n * use __func__ in logging.\n\nTest: test basic audio functionality on taimen\nChange-Id: I813fd8430a0e97cd01cc74e6b3b828b10ff5acd4\n"
    },
    {
      "commit": "f1047e87767be1acd2c32f4d36028d1d0014f4c0",
      "tree": "4affc2ed3ee3f81e94f90dd4d3a012afa0ee364e",
      "parents": [
        "554e08c6b00b2a57348f4545d450915a9e8c870a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 19:18:20 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 17 09:45:32 2018 -0700"
      },
      "message": "audioflinger: filter out reserved keys from setParameters()\n\nOnly allow setParameters() for reserved keys when received from\naudioserver UID. For instance, keys used to control routing or audio\nstream configuration are reserved for use by audio policy manager.\n\nAlso use multiuser_get_app_id() instead of duplicated code to\nextract application ID from UID.\n\nBug: 77869640\nTest: manual audio smoke tests.\nChange-Id: I88852e8fddf7f705e4a084fc02d9ced1f4b0de92\n"
    },
    {
      "commit": "12381092fdb5810cb27f738435ea8a0e3d2d0f42",
      "tree": "534768433f4916952e94e212fdb923b6a3ed5b40",
      "parents": [
        "80ee2722d64a73777fa76027b1568e61dec8d910"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Apr 11 09:19:59 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Apr 11 16:26:58 2018 +0000"
      },
      "message": "Revert \"Revert \"Audio V4: Send volume and duplicated track attr in update metadata\"\"\n\nThe original patch was breaking the fast track volume, so it was\nreverted.\nIn order to fix the original patch, revert the revert and in the\nfollowing patch apply the fix.\nThis makes review easier as only the difference to the original patch\nwill be present.\n\nBug: 38184704\nBug: 69623109\nBug: 77892019\nTest: Patch already tested for original patch and is tested for following\n      patch that fixes this patch.\nThis reverts commit 80ee2722d64a73777fa76027b1568e61dec8d910.\nChange-Id: I06914911c2435df167fff05ce5ca40dd1ed90f39\n"
    },
    {
      "commit": "80ee2722d64a73777fa76027b1568e61dec8d910",
      "tree": "e3e8744cefcf0785addf9ceb1519fceac3020293",
      "parents": [
        "c86a7f7de52f0ff0059e8c6c4fa4619aa7fae5c5"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Apr 11 15:53:48 2018 +0000"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Apr 11 16:09:19 2018 +0000"
      },
      "message": "Revert \"Audio V4: Send volume and duplicated track attr in update metadata\"\n\nThis reverts commit c86a7f7de52f0ff0059e8c6c4fa4619aa7fae5c5.\n\nReason for revert: fast track volume broken\nTest: none, it is a revert\nBug: 77892019\nChange-Id: If00616afae5c069cf0b6bd7c2da2a6d4af72180e\n"
    },
    {
      "commit": "c86a7f7de52f0ff0059e8c6c4fa4619aa7fae5c5",
      "tree": "534768433f4916952e94e212fdb923b6a3ed5b40",
      "parents": [
        "b31f96ffee12f920d32d868c627cf34f1afeb988"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Apr 03 09:00:09 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Apr 09 16:19:11 2018 -0700"
      },
      "message": "Audio V4: Send volume and duplicated track attr in update metadata\n\nOnly the volume of MMAP thread was previously sent and\nthe attributes of duplicated tracks were skipped.\n\nBug: 38184704\nBug: 69623109\nTest: check that the HAL receives correct track metadata volume\nTest: check that the HAL receives correct duplicated track metadata\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n\nChange-Id: I1e3b14edd8c9a5a65d2b9f4cf8660997c81c701c\n"
    },
    {
      "commit": "54c28999afa7834a8dbc6079a2707598a37db56f",
      "tree": "2677c29642cc1c92056ac37a802f4c53d51787f7",
      "parents": [
        "218f8e3bec0070731bff41513b19f64d481dad24",
        "db959740904eba27582feee48234463f3553b199"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Feb 26 18:34:17 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Feb 26 18:34:17 2018 +0000"
      },
      "message": "Merge \"Don\u0027t use cutils/Atomic.h\" am: 853996e7b2 am: 072aaa2e39\nam: db95974090\n\nChange-Id: I7f930bda6e51c0d4368747f8e4a0eac92e68b2fd\n"
    },
    {
      "commit": "f0c02ce99ccac584f4f4790390702aabc4d92c90",
      "tree": "f5aa741235215cd73df2025b8e42394486a52ae8",
      "parents": [
        "fa87fc3b31e273efe3a2f5090dcd9c283e414aa5"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Feb 23 14:53:55 2018 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Feb 23 15:02:39 2018 -0800"
      },
      "message": "Don\u0027t use cutils/Atomic.h\n\nTest: builds\nChange-Id: I56aea1dff5a2bd98d119eb374e7a28a12a20861c\n"
    },
    {
      "commit": "98e38191c37d3e324b34a6aafeef8e43366003ef",
      "tree": "349602f9c4d9dd7f4720328cc72f891f9515a0ce",
      "parents": [
        "7c9dbd5440e8119ca439e4b9315843bd348b991f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 15 18:31:53 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Feb 21 12:54:41 2018 -0800"
      },
      "message": "audioflinger: remove obsolete stream volume management\n\nRemove the ability to change stream volume globally (on all outputs)\nin audio flinger as this doesn\u0027t make sense when stream volume is\nmanaged per device.\n\nAlso, do not store stream volumes globally in audio flinger and apply\nthem when a new output is opened. The ground truth for stream volume is\nin audio policy so make sure stream volumes are systematically applied\nby audio policy when an output is opened according to the selected device.\n\nBug: 70332110\nTest: audio smoke tests\nChange-Id: I7180a428af53aafdee82aadbcaf284c028ac5554\n"
    },
    {
      "commit": "653cc0ab6d5b714d1f26adcd08f9bc3269b62fa0",
      "tree": "6ce8eb9ed7297d8b2524c6e25376319175758f50",
      "parents": [
        "46a76fa5ffb88dbde2c67335dbc5cf20b75b10b6"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Jan 17 17:54:10 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jan 26 17:23:07 2018 -0800"
      },
      "message": "Support query active microphones information in AudioRecord.\n\nThis is part of device enumeration. With the new add API, developer\ncould get the active microphones information for each channel.\n\nBug: 64038649\nTest: Run cts and check the print log.\nChange-Id: Ic63d86e533a30e40697da7522a5a81f7cfcea988\n"
    },
    {
      "commit": "46a76fa5ffb88dbde2c67335dbc5cf20b75b10b6",
      "tree": "7215e85bae943107de3bf07537c28c98216f5690",
      "parents": [
        "6e075b43b0ba324a97fc0f89ef65196ed25be671"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jan 05 10:18:21 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jan 26 17:16:16 2018 -0800"
      },
      "message": "Add support for getting all available microphones characteristics.\n\nAdd MicrophoneInfo class in native side and native logic for supporting\nquery all available microphones.\n\nBug: 64038649\nTest: Run test and check the print log.\nChange-Id: Ic0a9cce55a1265a66ba08fe81b56b56cb88ba42f\n"
    },
    {
      "commit": "03570a65a46bd0d577aa4c860c4f32f4abf79c7c",
      "tree": "80f3fe537f1edeb95bd37a5a66090ce3b4f1cd1e",
      "parents": [
        "70068e8e49f3467488550d88d6130f9e00bb0624",
        "6f248bb57a6a0febe8fc0f253acc86289237ace8"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 24 20:28:46 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 24 20:28:46 2018 +0000"
      },
      "message": "Merge \"AudioFlinger: Allocate client memory based on total device memory\""
    },
    {
      "commit": "6f248bb57a6a0febe8fc0f253acc86289237ace8",
      "tree": "5dcc5fe0729c85f7ef39ac298906acea444b2ae2",
      "parents": [
        "2917aa469abba347a1ab1e6fa766d62721182788"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 23 14:04:37 2018 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 23 22:12:12 2018 -0800"
      },
      "message": "AudioFlinger: Allocate client memory based on total device memory\n\nTest: Debug logging\nBug: 64161002\nChange-Id: I7156748e5678c3232d1f1672439d11aecf3f458b\n"
    },
    {
      "commit": "65a438c6429c7f46cb0ab056c7f672ea0aa9e7f5",
      "tree": "d2b98e3247afd27d7272d23b226dc4e10fb8f5f9",
      "parents": [
        "2917aa469abba347a1ab1e6fa766d62721182788",
        "f4ddfefc8ba59a8486d91826154cc9447821409e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 20 04:09:36 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 20 04:09:36 2018 +0000"
      },
      "message": "Merge \"Don\u0027t record audio if UID is idle - media framework\""
    },
    {
      "commit": "4e1af9fc9c1108d4514e92774f750bcd434dbbcc",
      "tree": "03dc781c49ae6b37c4661c591ece2c5a4eed8cfe",
      "parents": [
        "a11f9357196db29e6f8f05b91334524de4f3207e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jan 03 15:54:35 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jan 18 19:48:46 2018 -0800"
      },
      "message": "aaudio: implement sessionId for effects\n\nIf a sessionID other than AAUDIO_SESSION_ID_NONE is requested\nthen legacy data path will be forced.\n\nSessionID is implemented for MMAP data path but not used.\nIt is easier to implement it now then try to figure\nit out later.\n\nBug: 33268927\nTest: test_session_id.cpp will be moved to CTS when stable\nChange-Id: I3ea67f57c1cbe24a512980f1352b917ab3cb6387\n"
    },
    {
      "commit": "f4ddfefc8ba59a8486d91826154cc9447821409e",
      "tree": "b24bb43846003ef5523f0d470e49389086138679",
      "parents": [
        "d6be64a3f22be3eceb0d6209c88dcad573c08191"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 16 07:37:58 2018 -0800"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Jan 18 00:17:52 2018 -0800"
      },
      "message": "Don\u0027t record audio if UID is idle - media framework\n\nTo protect user\u0027s privacy if a UID is in an idle state we allow\nrecording but report silence (all zeros in the byte array) and once\nthe process goes in an active state we report the real mic data.\nThis avoids the race between the app being notified aboout its\nlifecycle and the audio system being notified about the state\nof a UID.\n\nTest: Added - AudioRecordTest#testRecordNoDataForIdleUids\n      Passing - cts-tradefed run cts-dev -m CtsMediaTestCases\n                    -t android.media.cts.AudioRecordTest\n\nbug:63938985\n\nChange-Id: I1442a9dda1553e9ea7a4a654c50555ac1ec06aa0\n"
    },
    {
      "commit": "f14db3c3ebc1ea29b3eb5b7e9b944cabcb5f83ff",
      "tree": "ebe89d037006cc16ed8a9284563a475b6eee3348",
      "parents": [
        "ea5523d88c6dc9662621db5fc62bf50eff0fe4ba"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 08 14:20:36 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 14:28:41 2017 -0800"
      },
      "message": "Revert \"Revert \"refactor AudioRecord and AudioFlinger openRecord()\"\"\n\nThis reverts commit 0aa3c6eba07f987fe84b5fa450274a8e730971e3.\n\nBug: 70388312\nTest: AudioRecord CTS, Audio smoke tests\nChange-Id: I45394bccf82b922aa2b68fee3e02afc280f6729c\n"
    },
    {
      "commit": "0aa3c6eba07f987fe84b5fa450274a8e730971e3",
      "tree": "69c1c59218c8ae0e5165f71a392a8666c8b74ad6",
      "parents": [
        "3e1acc0c58b337dec4054d78c28b48b2e77e0784"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 08 18:13:22 2017 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 08 18:18:50 2017 +0000"
      },
      "message": "Revert \"refactor AudioRecord and AudioFlinger openRecord()\"\n\nThis reverts commit 3e1acc0c58b337dec4054d78c28b48b2e77e0784.\n\nbug: 70388312\n\nChange-Id: I6782d6eceeece1bad998b02af26c0119da70a13d\n"
    },
    {
      "commit": "3e1acc0c58b337dec4054d78c28b48b2e77e0784",
      "tree": "effae4bc8d462d03cb0bc1507ac0222ac47c90eb",
      "parents": [
        "eda72c27cab52c41016d8ce138438a2d59973231"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 01 16:07:37 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 05 17:33:35 2017 +0000"
      },
      "message": "refactor AudioRecord and AudioFlinger openRecord()\n\nRefactor the mechanism used by audio record tracks to query and\nattach to an input mixer/stream in audio flinger. This will:\n - reduce the number of binder transactions needed to create a record track\n - move sample rate, framecount and flags validations to audio server side\n - move audio session allocation to audio server side\n - prepare restriction of certain binder transactions to audioserver only\n\nAlso:\n - renamed openRecord() to createRecord() for consistency with AudioTrack\n - make AudioRecord mStatus update consistent when calling default\n contructor + set() or constructor with arguments\n - make AudioClient, CreateTrackXXX and  CreateRecordXXX classes derive\n from Parcelable\n - restore audio session ID validity check in AudioFlinger::createTrack()\n\nTest: CTS tests: AudioRecordTest, AudioRecordingConfigurationTest, AudioPreProcessingTest\nTest: manual test for capture use cases: camcorder, OK Google, VoIP calls\nChange-Id: I72edaa7ddef1da11c77df21e88378e3aa9012d58\n"
    },
    {
      "commit": "ef6cf3fc6cfb12e089e787efcbf1fc485ed54931",
      "tree": "a197eb396f5e84684d937da00e091a27c7de7f2e",
      "parents": [
        "693cb2bde52b4d73c391c529f1c6bf7a02be9f72",
        "94a1ee822686e920a33e312f4032f991731aea07"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Nov 22 19:39:53 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 22 19:39:53 2017 +0000"
      },
      "message": "Merge \"Converting effect chains to float point by default.\""
    },
    {
      "commit": "94a1ee822686e920a33e312f4032f991731aea07",
      "tree": "5a8e84b19269529153e94fa2f0a6b927823f6848",
      "parents": [
        "c275189ccbfe8ca29437a24256195c61de2f2a6d"
      ],
      "author": {
        "name": "rago",
        "email": "rago@google.com",
        "time": "Fri Jul 21 15:11:02 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Nov 21 20:39:19 2017 -0800"
      },
      "message": "Converting effect chains to float point by default.\n\nRemoved additional conversions from/to int16/float.\nFixed config file restrictions.\nDetection of native format (int16/float) of effects.\nOn-the-fly conversion to/from 16 bit effects if necessary.\nWIP: testing effects in all possible configurations.\n\nBug: 63935479\nTest: Bufflog dumps, frequency analysis comparison, SoloTester\nChange-Id: Id4cabc5c5698befc90a5d68b0b996a9b9adebfc4\n"
    },
    {
      "commit": "21da647792c0b78ab3943be0f32066015d5e8c34",
      "tree": "15ad0b64bf6eaabf24223d7fd376ef9ac00eb9cc",
      "parents": [
        "a4fa4760fa417473324e009b3f4117a2d539c486"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 09 16:29:26 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 16 11:33:12 2017 -0800"
      },
      "message": "refactor AudioTrack and AudioFlinger createTrack()\n\nRefactor the mechanism used by audio tracks to query and attach\nto an output mixer/stream in audio flinger. This will:\n- reduce the number of binder transactions needed to create a track\n- move sample rate, framecount and flags validations to audio server\nside\n- move audio session allocation to audio server side\n- prepare restriction of certain binder transactions to audioserver only\n\nTest: CTS tests for AudioTrack\n\nChange-Id: If4369aad6c080a56c0b42fbfcc97c8ade17a7439\n"
    },
    {
      "commit": "8589ce7045fd4f5520aabbc773f00c7136925fd7",
      "tree": "a02b3ba722bc13f798c9c10cc51d19b670388452",
      "parents": [
        "f24d95960d85c891fc40db6f1e9644385efb4eb3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 08 17:03:42 2017 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 08 17:06:32 2017 -0700"
      },
      "message": "Split nblog off from nbaio\n\nnbaio is an acronym for \"non-blocking audio I/O\", and nblog means\n\"non-blocking logger\" so nblog does not belong with nbaio.\n\nThere are a lot of improvements planned for nblog, and having the\nrestructuring done will make it clearer as more files are added.\n\nTest: builds OK\nChange-Id: Ib28bada2566c1d64bdbe9f5d7a5ce40e080178ef\n"
    },
    {
      "commit": "8cf3a0788df2ee184b498086b1b8da322eeadcca",
      "tree": "1bd36129bbd4afa491689deca23977dbf30930f6",
      "parents": [
        "a5ec8b0ec9c94fd9474fae1d1d1dc798ae6c4d2d"
      ],
      "author": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Wed Aug 09 09:01:33 2017 -0700"
      },
      "committer": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Fri Sep 01 10:14:30 2017 -0700"
      },
      "message": "Generate the IPlayer interface with AIDL.\n\nThis removes the manually rolled IPlayer implementation and instead uses\nan aidl generated implementation. The IPlayer aidl file is moved from\nframeworks/base/.\n\nTest: run cts --module CtsMediaTestCases\nBug: 64223827\nChange-Id: Ia609f7ba1cc6f71ce919d6174dd8b5e0e1b05575\n"
    },
    {
      "commit": "e32eb6dc4c087daa9b2467f97cccc0a53283ebcb",
      "tree": "94b787277ec84cffcb392c241155d6a8751763cf",
      "parents": [
        "2f1bc21fba397242af2510f6d31b4af73c44d1ef",
        "ff6900d8f991aac0b67b625f8a1d4d0461b4c50e"
      ],
      "author": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Thu Aug 10 00:34:08 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 10 00:34:08 2017 +0000"
      },
      "message": "Merge \"Generate IAudioRecord with AIDL.\""
    },
    {
      "commit": "ff6900d8f991aac0b67b625f8a1d4d0461b4c50e",
      "tree": "1c81319f27784e4d611f7895d519b7754f869c26",
      "parents": [
        "ce10f65fb5b48d81798caa2c2914b016082b5089"
      ],
      "author": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Tue Aug 01 15:47:38 2017 -0700"
      },
      "committer": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Wed Aug 09 09:15:59 2017 -0700"
      },
      "message": "Generate IAudioRecord with AIDL.\n\nUse AIDL to generate the IAudioRecord interface rather than using\na manually implemented interface.\n\nBug: 64223827\nTest: Ran the AudioNativeTest and CtsMediaTestCases CTS tests.\n\nChange-Id: Iade23c73253a97c358050bbd697ebe592b89a4c0\n"
    },
    {
      "commit": "9fabbf8a8ae755c3c07637f8ca7677c63a1607bb",
      "tree": "9f3be1ca67e5ea192cdd9b2c289c9ebe6095218d",
      "parents": [
        "909f4a6cada3d5fb7594da7d1809ba62d1b47340"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Aug 03 12:02:00 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Aug 03 15:27:38 2017 -0700"
      },
      "message": "audioflinger: prevent crash in MmapThreadHandle destructor\n\nThe mThread smart pointer was getting cleared while the\nthread was still in use.\n\nBug: 64316921\nTest: use input_monitor.cpp, see bug for repro steps\nChange-Id: I46095b4e67648208a2fb979696fc2d655432448b\n"
    },
    {
      "commit": "d8365c54d049aade9e02ccae722f311f846cad9a",
      "tree": "b0678982480e7a46b21fd0a855fd1cfd242ffdb1",
      "parents": [
        "30bf42ca7242f5f7849cbe7ce61fc994b88c5b56"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 16 15:27:05 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 17 15:26:56 2017 -0700"
      },
      "message": "audio flinger: fix AEC and NS suspend logic\n\nMake sure we suspend/restore AEC and NS only when the suspend condition\nactually changes to avoid mismatch in number of suspends/restores\ncausing the ref counting mechanism to leave the effects in suspend mode\nwhile they should not.\n\nAlso clear the suspend state on an effect session before parking it in\nthe orphan chains list so that it is in default state whne attached to a\nnew record thread.\n\nBug: 63015903\nTest: verify that switching BT SCO on/off with Duo enables or disables\nAEC and NS accordingly\n\nChange-Id: I4d0f0bf818deca3952da3c67bb7e83cb500429c7\n"
    },
    {
      "commit": "cb4dae216758d9e9a28050f65097f1ce905c03e9",
      "tree": "4c3c49679384d70006675e9e06c7e8e8117e206c",
      "parents": [
        "0acb3209107802e2ab116f8374aab886579729bb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Jul 01 19:39:32 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 12 12:17:33 2017 -0700"
      },
      "message": "aaudio: indicate client UID and PID to audio flinger\n\nImplement correct indication of client UID and PID to audio flinger\nfor AAudio MMAP streams in both exclusive mode and shared mode.\n- Add start/stop client methods on MMAP streams used only when the MMAP\nstream is in AAudio service and carries a mix of shared streams.\n- Add \"In Service\u0027\" indication from \"client\" side to AAudioServiceStreamMMAP\nso that the behavior can be adapted accordingly.\n- Modify logic on audio flinger side with regard to mmap tracks and\naudio HAL stream activity:\n  - use same audio session for all clients on a same stream to match\n  audio policy logic to share same direct output stream for clients on same\n  session. This is also more consistent with current volume and effect\n  handling as all MMAP  clients sharing the same output stream have the\n  same volume and use case.\n  - start/stop the HAL when the stream is started/stopped with the initial client\n  handle (returned when the stream is opened) but do not create a track.\n  AAudioService implementation will always send an additional start command before\n  first client starts and a stop command after last client stops,\n  in both shared and exclusive mode.\n  - start/stop a track only if the start/stop stream command is received\n  with a handle different from the initial handle.\n- Allow more than one active client from the same UID on a MMAP input in audio policy.\n\nBug: 62950008\nTest: verify playback and capture in mmap mode\nMerged-In: I86151bbb637ff172d2fd5f813056eab13a7bcd3c\nChange-Id: I86151bbb637ff172d2fd5f813056eab13a7bcd3c\n"
    },
    {
      "commit": "bf49308851509d38dbf3f57d9682a819d9f983c9",
      "tree": "89168af93deeb8337376b130e40db86179f4a4d2",
      "parents": [
        "064ac067e3e9c2e68d363aa5db57cdd6e2911cdd"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Apr 17 17:37:12 2017 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Apr 17 17:43:36 2017 -0700"
      },
      "message": "audioflinger: Make use of android-base/macros.h\n\nReplace local definitions of \"array size\" macro, and\ndeclarations of non-copyable objects with corresponding\nconstructs from android-base/macros.h.\n\nAlso change \"protected:\" to \"private:\" for classes\nnot designed to be inherited.\n\nChange-Id: I2d1e6d153511ed84d52fe6377879f83258890653\nTest: make\n"
    },
    {
      "commit": "444841ffd7f56f7eadc3cccd59e62738626f0c33",
      "tree": "aa221059eeba7e4b10174a565a27d61a6ea2ba40",
      "parents": [
        "fbd7e12c373435c77aa5b20bdf321a0589521746"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 15:36:43 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 13 12:52:05 2017 -0700"
      },
      "message": "Get declarations from the proper header file\n\nTest: builds OK\nChange-Id: I759e49570cd00b3e5101f38164fcac5ac53faa6c\n"
    },
    {
      "commit": "5b2191a4a36746b66ba3e8f73b711f49fdb83b4b",
      "tree": "1a9844681191d98fe5a92c3463de78f99453e01b",
      "parents": [
        "fb91f95fb75b2c2f4247b7fef8674e46ea0bc978"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 19 11:44:47 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 13 09:39:48 2017 -0700"
      },
      "message": "Add a tee sink filename suffix to distinguish type\n\nTest: tee sink filenames have a _C (capture), _P (playback), or _T (track) suffix\nChange-Id: Ib8ddadb0f3e3ba3ac620e33072bb212d5cde4978\n"
    },
    {
      "commit": "eef598c5539aa2be5a106f2483b19e368e4b8c0e",
      "tree": "677e3f98c4f1b3deb9d653dc5ad00b4a7e881028",
      "parents": [
        "3ab8d66ad1c47a5ee1f87ad9f5ee2666cf89b32d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 03 14:41:13 2017 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Apr 07 14:46:35 2017 -0700"
      },
      "message": "Add histograms for FastMixer\n\nBug: 37153050\nTest: dumpsys media.log shows histograms for audio activity on FastMixer\nChange-Id: I6bb4bf19d62da1ed1d8cda43d428b03153a35de3\n"
    },
    {
      "commit": "293558ad1977e24e65f7ba78f47382d33fc77d64",
      "tree": "125f39f7efcb1c44fde136bdfefeef1bdc8af2a4",
      "parents": [
        "01c10f8cdcd58d1e7025f426a72e6e75ba5d7fc2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 21 12:19:20 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 24 17:06:30 2017 -0700"
      },
      "message": "AudioFlinger: Improve Thread logging.\n\nTest: dumpsys media.audio_flinger\nBug: 30572472\nChange-Id: I43f72354a6ece045f5f9f664946a406166974258\n"
    },
    {
      "commit": "886deb506ea2938cfec40fc0dd2bff072850386b",
      "tree": "c766adb78101eaee0cf091d14cbd26f3377f14e1",
      "parents": [
        "1e039394f351ef77592689f32294a1c73840ad0e",
        "d3bb645f0b7f567b033b8664499d685f8ec10628"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 13 16:37:07 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 13 16:37:08 2017 +0000"
      },
      "message": "Merge \"Re-format to decrease the maximum line length of files to 100 characters\""
    },
    {
      "commit": "d3bb645f0b7f567b033b8664499d685f8ec10628",
      "tree": "1f1093b9594df4691cc99a2e2c81bc67ea0de136",
      "parents": [
        "0012417ddc1320c6df79258266da1e869036b211"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 05 18:14:37 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 13 16:36:17 2017 +0000"
      },
      "message": "Re-format to decrease the maximum line length of files to 100 characters\n\nTest: compiles OK\nChange-Id: Ibe663032cd390ed2bcca6dc921d47732e6e15e21\n"
    },
    {
      "commit": "89e5a2b102b484fe19dbda2a0b118edfefc70241",
      "tree": "7d569d72d3a2e16c77a10e08de04746fab6ad52e",
      "parents": [
        "ca47e6d574cd3d02821b87657a80d84b328d4f26",
        "dcdfaecc1fa630a799e1fdb508a9b92da55abc36"
      ],
      "author": {
        "name": "Nicolas Roulet",
        "email": "nicoroulet@google.com",
        "time": "Thu Mar 09 22:55:06 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 09 22:55:06 2017 +0000"
      },
      "message": "Merge \"NBLog periodic merging thread\""
    },
    {
      "commit": "dcdfaecc1fa630a799e1fdb508a9b92da55abc36",
      "tree": "407138ab3b7cef085ca4f283ea24378910ce775e",
      "parents": [
        "cca34c05ca2d5e7ac6c2fbee3ac2db88f059143d"
      ],
      "author": {
        "name": "Nicolas Roulet",
        "email": "nicoroulet@google.com",
        "time": "Tue Feb 14 10:18:39 2017 -0800"
      },
      "committer": {
        "name": "Nicolas Roulet",
        "email": "nicoroulet@google.com",
        "time": "Thu Mar 09 12:30:24 2017 -0800"
      },
      "message": "NBLog periodic merging thread\n\nBug: 35468674\nTest: no change in functionality, everything works as before\nChange-Id: Id2cea243bc15767ca6803c9505bf23a18411500e\n"
    },
    {
      "commit": "18b570146c971fe729c391bfbb869391084e623d",
      "tree": "44427ed969851fc0e8638b508e265d6d039556b9",
      "parents": [
        "421c434e615a417d9f5443af9e52a30e3b29c256"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 13 16:23:52 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 08 00:33:34 2017 +0000"
      },
      "message": "audioflinger: add standby() method to MmapStreamInterface\n\nBug: 33398120\nTest: open/start/stop/close MMAP no IRQ stream for capture and playback\n\nChange-Id: I48ec202a71565f759c441c2a835d8c8190e76334\n"
    },
    {
      "commit": "30d48d9542fb3f85889108c1ee2daff98a4860e7",
      "tree": "b85955dd0493f049b91a5b4ab32527f39a4ba6e2",
      "parents": [
        "b129be34d1b08440d2867702b22e81c037be899a",
        "9fc8b5cd4a64ef07e84c69112461324d5c13a0b0"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 14 01:38:56 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 14 01:38:57 2017 +0000"
      },
      "message": "Merge \"VolumeShaper: Initial implementation\""
    },
    {
      "commit": "9fc8b5cd4a64ef07e84c69112461324d5c13a0b0",
      "tree": "2d058e73f09f1822108daad51948a34c420634e3",
      "parents": [
        "ed1abbfc73d4ade0ef08239fc56ac66d70a00a92"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 24 13:36:48 2017 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Feb 13 14:31:46 2017 -0800"
      },
      "message": "VolumeShaper: Initial implementation\n\nThe VolumeShaper is used to apply a volume\nenvelope to an AudioTrack or a MediaPlayer.\n\nTest: CTS\nBug: 30920125\nBug: 31015569\nChange-Id: I42e2f13bd6879299dc780e60d143c2d465483a44\n"
    },
    {
      "commit": "7863c791dba8c4e5e9591b6837d410e580be0a25",
      "tree": "5199273fa3bac5303b0aa8dcdfd984f49f75e30f",
      "parents": [
        "94a20830fc0768efc138ab7f746f80e8b3d60c15",
        "6acd1d432f526ae9a055ddaece28bf93b474a776"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 10 20:24:21 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 20:24:22 2017 +0000"
      },
      "message": "Merge changes from topic \u0027mmap_no_irq\u0027\n\n* changes:\n  Add support for mmap stream\n  audioflinger: define MMAP HAL Stream control interface\n"
    }
  ],
  "next": "8981605d43e24c46d395acb5f145b99589d45917"
}
