)]}'
{
  "log": [
    {
      "commit": "55773033ed1f23c4e8f3d2704002fbd0cedbf7a5",
      "tree": "54bc894243fa3c52e611c85aed75ee6677056c13",
      "parents": [
        "7aed66e788c8955ddd22a1235856bb9dac34d82a"
      ],
      "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": "Thu Oct 08 18:12:55 2020 -0700"
      },
      "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\n"
    },
    {
      "commit": "f4de36d17ea278672c61fd1be94d36bc3ea5c340",
      "tree": "17eb2dc1f7c5b7cc4c7b1773ba6ad8684ab5d89d",
      "parents": [
        "a7f98a1ea6d6896673fa7f027c1ff3fc321f6a32"
      ],
      "author": {
        "name": "yucliu",
        "email": "yucliu@google.com",
        "time": "Mon Sep 14 14:57:56 2020 -0700"
      },
      "committer": {
        "name": "Yuchen Liu",
        "email": "yucliu@google.com",
        "time": "Tue Sep 15 17:24:47 2020 +0000"
      },
      "message": "Invalidate stream when unregistering audio policy mix\n\nInvalidate the stream if the audio policy mix on the client is removed,\nso that the client can reconnect to another output stream.\n\nBug: 167605686\nTest: Unregister audio policy by killing the app. Audio resumes.\nChange-Id: I9a00311142613df8c019206c9b7c873ec8f42b88\n"
    },
    {
      "commit": "f9cddbfe7dd95817c26b513ce6b0eecd6ec1bdfa",
      "tree": "d561c698108b245469a558f1266d39154bd54068",
      "parents": [
        "242cf3379de223e0ae5c9ceeba05e6a397b44e2d",
        "0a488938fa1c1b2b0c02b1c101281c01ff8ed103"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 13 02:24:42 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 13 02:24:42 2020 +0000"
      },
      "message": "Merge changes from topics \"devicesRoleForStrategy\", \"useAudioDevicesTypeAddrVector\"\n\n* changes:\n  Introduce device(s) role for strategy.\n  Use AudioDeviceTypeAddrVector instead of Vector\u003cAudioDeviceTypeAddr\u003e\n"
    },
    {
      "commit": "0a488938fa1c1b2b0c02b1c101281c01ff8ed103",
      "tree": "4686aa2bca38cccbbc572bbb75a2bd82d2b9153b",
      "parents": [
        "6a02d53b76d0a3ccb234a3e3d56318883cadd733"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Aug 07 17:32:40 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 12 16:19:35 2020 -0700"
      },
      "message": "Introduce device(s) role for strategy.\n\nAdding interface to get/set/removeDevicesRoleForStrategy. The interfaces\nallows to modify the devices\u0027 role, such as preferred, for strategy.\nGet/set/removePreferredDeviceForStrategy is reimplemented by the new\ninterfaces.\n\nTest: atest AudioHostTest\nTest: atest AudioServiceHostTest\nTest: atest AudioServiceTest\nTest: atest audiopolicy_tests\nBug: 160352965\nChange-Id: I0af737542a8599938cae4e142b733159f21ed5a8\n"
    },
    {
      "commit": "6a02d53b76d0a3ccb234a3e3d56318883cadd733",
      "tree": "4bd9652fccb6530787e8a25292aeb81c1d93c612",
      "parents": [
        "1d2a159395df0767ecb2320aff4dd4db3d26e6b2"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Aug 07 11:56:38 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 12 11:24:46 2020 -0700"
      },
      "message": "Use AudioDeviceTypeAddrVector instead of Vector\u003cAudioDeviceTypeAddr\u003e\n\nAudioDeviceTypeAddrVector is std::vector\u003cAudioDeviceTypeAddr\u003e. In that\ncase, it is not needed to use Vector\u003cAudioDeviceTypeAddr\u003e. It is also\nsuggested to use the std::vector instead of Vector.\n\nTest: atest AudioHostTest\nTest: atest AudioServiceHostTest\nTest: atest audiopolicy_tests\nBug: 160352965\nChange-Id: Ibcd91fcba95c53e3c172ae62fc6f30e70509de51\n"
    },
    {
      "commit": "5ce77ca4aaa406fd3d21b86c82f0d847ad4b39fb",
      "tree": "212b27f783be6c16aa9f73b5a2c5becd863f67b4",
      "parents": [
        "dabaf72cf774fefcd788f9f057214d8bfde3f471",
        "c42df45d4b99c06391bca841638563335d0f59ef"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 10 21:25:55 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 10 21:25:55 2020 +0000"
      },
      "message": "Merge \"audio: add device definitions for BLE Audio\""
    },
    {
      "commit": "f356189f05884926290b1f7920241ef15674cbc6",
      "tree": "e22f60c5bc88e0a1d332a2d0728de52df0ce74af",
      "parents": [
        "b44da94f383678f71f9adaeb3c340b3701a4e161",
        "3e17f40a7288ea33c23161dd921d2d22ddaf5354"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Aug 07 18:36:37 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 07 18:36:37 2020 +0000"
      },
      "message": "Merge \"APM: Do not add null DeviceDescriptor to DeviceVector.\""
    },
    {
      "commit": "c42df45d4b99c06391bca841638563335d0f59ef",
      "tree": "e5dd396d67122456532e0b9ca6fee8d19871273e",
      "parents": [
        "a524c363821353a541442e3b23449875b797b09d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 07 10:51:53 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 07 11:05:01 2020 -0700"
      },
      "message": "audio: add device definitions for BLE Audio\n\nAdd support for device type enums for BLE Audio.\nThis CL just adds basic support in parsers and voloume curve\ncategories.\nNo policy implemented yet for the new devices.\n\nBug: 161358428\nTest: make flash and boot\nChange-Id: I86134ea8436b24f817a9fe0f856e3489dd22fcc8\n"
    },
    {
      "commit": "3e17f40a7288ea33c23161dd921d2d22ddaf5354",
      "tree": "da24935ffe8ca470fbab7d868ba7a5ccc38ef0ba",
      "parents": [
        "3dd716be2d145b1f58651dd6b0dd471a412b2c95"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Aug 03 17:53:06 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 05 18:14:41 2020 -0700"
      },
      "message": "APM: Do not add null DeviceDescriptor to DeviceVector.\n\nIt make no sense to have null pointer kept in DeviceVector. In that\ncase, never add null to DeviceVector.\n\nBug: 162772516\nTest: make\nChange-Id: Iebf850189de025be9fe205ef0797eb4660898cae\n"
    },
    {
      "commit": "c581f4f5efb6e6f9be16823203cfed1711f465a0",
      "tree": "fc1ce79b1314dc17fff8623f49c5073cc836929b",
      "parents": [
        "6af7e11e739f272bf2215b21a65eb154bd7f9ca6",
        "478a0f32b8212bc72a269be4a539277129d33e4e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jul 31 05:30:08 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Jul 31 05:30:08 2020 +0000"
      },
      "message": "Do not log sensitive information. am: 827df1b7f9 am: 8d82281992 am: 478a0f32b8\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/12276952\n\nChange-Id: If8627b9da11a0b4f649709c50049a86185076d48\n"
    },
    {
      "commit": "827df1b7f99d30de9cf65755f5fc4d674ec577a2",
      "tree": "eb64fc7f0561740301a008396eaa0064f990480f",
      "parents": [
        "39075258a92d969a6ea438cfe2ad298de01de7ad"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Jul 29 15:09:52 2020 -0700"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Fri Jul 31 03:03:43 2020 +0000"
      },
      "message": "Do not log sensitive information.\n\nWhen logging device descriptor, do not log the IP address and MAC\naddress.\n\nTest: make, dumpsys media.audio_policy\nBug: 162299985\nChange-Id: Ia255d733d9d638786d0f3b444c57e787c45ad8d7\n"
    },
    {
      "commit": "2fc9d15ee62c7291c30c33dd82c386bf8e071f07",
      "tree": "7b8034a795fd0cc519d80992c292f1c8e658f1fb",
      "parents": [
        "c19184310b3e24433d23658e4f2e72314b557225",
        "ebb6af45d3741a33259ea6bf8a5fc87881982943"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 07 00:06:16 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 07 00:06:16 2020 +0000"
      },
      "message": "Merge \"Select haptic output when haptic-generating effect exists.\""
    },
    {
      "commit": "ebb6af45d3741a33259ea6bf8a5fc87881982943",
      "tree": "f4ce87071a3b0a650d5dc12d9301436417c58e09",
      "parents": [
        "1495d23d7b282a1e9a5d522eafe565a924667351"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Jun 09 17:31:17 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Jun 23 15:25:17 2020 -0700"
      },
      "message": "Select haptic output when haptic-generating effect exists.\n\nHaptic-generating effect must be attached to haptic output thread as it\nrequires writing haptic channels. In that case, when haptic-generating\neffect exist, try to select the output that it is attatched to.\n\nBug: 136490803\nTest: make\nChange-Id: I6be84a3edac1094d6e457b3226c3930f28219167\n"
    },
    {
      "commit": "af6d36f23a359a6d1ae6629c084655d776bfe2c5",
      "tree": "ef3d18d83d3a9c3eca74302031f5bca53234d0b5",
      "parents": [
        "f00b91b986fca9d87b900ed0e34c963bb85519f1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Jun 20 13:14:09 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Jun 20 20:25:57 2020 +0000"
      },
      "message": "audio policy: do not consider telephony TX device as a local device\n\nExclude playback over AUDIO_DEVICE_OUT_TELEPHONY_TX when evaluating\nlocal playback activity on a HW module as this is a virtual device\ninjecting audio to telephony TX path and as such not interfering\nwith local playback.\n\nBug: 159480161\nTest: repro steps in bug\nChange-Id: I8cd27acc0033725fa66f95c7661c58b38d31532a\n"
    },
    {
      "commit": "c209fe49e74dc30100a6f409c616f04382d48f05",
      "tree": "afa05faf2118a2f09b308341a9d227df57bcb723",
      "parents": [
        "ea5f4133c7c029ffb988f4aa454c45c86294531c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 05 18:11:23 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 08 18:56:15 2020 -0700"
      },
      "message": "audio policy: output selection upon dynamic policy registration\n\nForce reevalution of output selection for AudioTrack clients when a\ndynamic audio policy (DAP) of type RENDER is registered or unregistered.\nFor LOOPBACK policies, this is not needed because the remote submix\ndevice is connected or disconnected triggering output reevaluation.\n\nAlso refactor checkOutputForAttributes to take actual output selection\nfor each client associated to a DAP instead of blindly forcing stream\ninvalidation as soon as an output associated with a DAP is found.\nThis covers direct outputs as the output is not opened when the DAP\nis registered.\n\nBug: 130296239\nTest: AudioHostTest\nTest: AudioServiceHostTest\nTest: audiopolicy_tests\nTest: regression with auto projected mode and live caption\nChange-Id: I07977e7902eb31c59621462a8fe2d7d1a4b1ba36\n"
    },
    {
      "commit": "1c4794bfdee92c9491312432bd966d2439c49179",
      "tree": "0947f6dea04e00753357a87d2ab38cb9d6fd13e4",
      "parents": [
        "eaad70fbfcec64206f42a11071efa683efe0c3ab"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue May 05 10:08:05 2020 -0700"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Fri May 08 00:37:55 2020 +0000"
      },
      "message": "Support query encapsualtion modes and metadata types.\n\nWhen a new device is attached to hardware module, query the HAL to get\nthe supported encapsulation modes and metadata types.\n\nTest: atest EnumDevicesTest, manually\nTest: atest audiofoundation_parcelable_test\nBug: 155799506\nChange-Id: I903e46e35a44416c9f2d206c128face8a6c61dcb\n"
    },
    {
      "commit": "0e26e3f980a9904f23f24b0390844dcfeedd1418",
      "tree": "537c172187d9dd6bf3155c0a2a9c85c7b0a06669",
      "parents": [
        "ec660f185a1e212b1d22125de81e9bd1d0ff58a3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 29 14:24:16 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 30 00:15:50 2020 +0000"
      },
      "message": "Audio policy: fix areAllDevicesSupported()\n\nFix areAllDevicesSupported() where HwModules.getDeviceDescriptor()\nmust be called with matchAddress \u003d\u003d true: if the caller does not want to\ndistinguish on address it can leave the address field empty in the\nAudioDeviceTypeAddr passed which has the same effect as using\nmatchAddress \u003d\u003d false.\n\nAlso fix places where device_distinguishes_on_address() was improperly\nused in place of audio_is_remote_submix_device().\n\nBug: 155224229\nTest: build and launch car emulator\nTest: AudioHostTest\nTest: AudioServiceHostTest\nTest: audiopolicy_tests\nTest: manual mirroring and car projection tests\nChange-Id: I74295de95bcd82e7fa439c396ae32749b9c70c05\n"
    },
    {
      "commit": "c529cf6fa9b500506d675ec971909dba18cfb71b",
      "tree": "ebd662d9270ac9ca37849fa7a44b16fe73cd4abd",
      "parents": [
        "02d69c15b683418de39901a74f1eea8ddbfcbf40"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 17 18:19:10 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 27 14:42:06 2020 -0700"
      },
      "message": "audio policy: allow direct outputs for dynamic audio policies\n\nAdd support for direct outputs with RENDER audio policy mixes.\nA mix of type render can be registered even if no corresponding\noutput is opened to reach targeted device provided a direct output\nprofile exist for this device.\n\nAlso:\n- Fix setUidDeviceAffinities(): was not closing direct outputs\nopened by checkOutputsForDevice() and was not re-evaluating routes\n\n- Fix removeUidDeviceAffinities(): was not re-evaluating routes\n\n- Implement consistent sanity checks on selected devices in\nsetUidDeviceAffinities(), setUserIdDeviceAffinities() and\nsetPreferredDeviceForStrategy().\n\n- Fix onNewAudioModulesAvailableInt(): attached devices reachable only\nvia direct outputs were not loaded.\n\nBug: 130296239\nTest: AudioHostTest\nTest: AudioServiceHostTest\nTest: audiopolicy_tests\nTest: manual test: Auto projection over USB, screen mirroring\nChange-Id: I54470b61b4bc7e041e3a295764d368c5ded21268\n"
    },
    {
      "commit": "99a3463d17da6c287e6db05790372b5b943d6468",
      "tree": "acda2bb9a80c4b740768eccd3a1f31c950a090b1",
      "parents": [
        "a4cfeca69f76fbd2eedd6217b058d118844a5d4c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 16 16:52:38 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 20 16:30:13 2020 +0000"
      },
      "message": "audio policy: fix volume for unsupported device\n\nDo not allow changing volume on an output when\nthe specified device is not supported by the\ncorresponding output profile.\n\nThere is a similar sanity check in setOutputDevices()\nbut there was none in AudioOutputDescriptor::setvolume().\n\nBug: 153411189\nTest: atest AudioManagerTest\nTest: manual audio smoke tests\nChange-Id: I539697c54d70c442ba1ce38d212b43cd3ef0138c\n"
    },
    {
      "commit": "26874fed269f1f88d5e9eaef831d0d4c14ba74be",
      "tree": "1b53a2407f10fbf3197a7859d24899f79cb8fd1f",
      "parents": [
        "141095dce0006e73b7941367c4b03f64c6ae997d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 13 15:52:39 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 13 15:52:39 2020 -0700"
      },
      "message": "audio policy: fix crash in findPreferredDevice() on duplicating outputs\n\nDuplicating outputs do not have an associated IOProfile and\ngetPolicyAudioPort() returns null.\n\nAdd a method to AudioIODescriptorInterface to query if the\ninput or output descriptor corresponds to MMAP IO profile or not.\n\nBug: 153849965\nTest: repro steps in the bug\nChange-Id: I300356880198f1785e3a5e1359ffd393c6ae4190\n"
    },
    {
      "commit": "85732f4121889191410448cfc19c336e0ea69285",
      "tree": "95f34d584a0ad4a2695b67ef7de733a5825b357f",
      "parents": [
        "f57740fc311c80bc7e62fde8b03b4f8f4d34ccda"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 19 11:31:10 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 19 17:49:51 2020 -0700"
      },
      "message": "audio policy: fix mmap stream invalidation logic\n\nImplement a MMAP stream invalidation logic consistent with AAudio\ndisconnect callback policy.\n\n- When a MMAP stream is opened with a preferred device selection:\n  Invalidate the stream only when the preferred device becomes unavailable,\n  either because disconnected or not selectable by highest priority use case.\n- When a MMAP stream is opened without explicit device selection:\n  Invalidate the stream when current device selection changes due to the\n  routing rules applicable to the stream\u0027s audio attributes (attributes\n  of first client on that stream).\n\nBug: 144020984\nTest: OboeTester \u003e TEST DISCONNECT\n\nChange-Id: I70fde0bc8ab9d544b8d3badb713e6239d792cbdb\n"
    },
    {
      "commit": "fa2ea8d036e6533bdf2116d0db0eb9b71cdd4c0d",
      "tree": "58e017b3391b075c98bd2f70b2728c68e4d28a04",
      "parents": [
        "aa22b0cd8e15c7a97836fcbb3a3f9a2a29c7f3f2",
        "f90036285d193c6903fe8c2ffc4b27ae40701c2d"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 12 23:17:39 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 12 23:17:39 2020 +0000"
      },
      "message": "Merge \"audiopolicy: Remove global static initializers\" into rvc-dev"
    },
    {
      "commit": "f90036285d193c6903fe8c2ffc4b27ae40701c2d",
      "tree": "9b9a264025963188e857adb7e3d9466e32342ed9",
      "parents": [
        "c62ad13ad8da6b31168f0d9f3e5f2a770ed0bbee"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Mar 10 13:15:08 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Mar 10 22:29:12 2020 +0000"
      },
      "message": "audiopolicy: Remove global static initializers\n\nReplace global static instances of non-primitive\ntypes with function static instances. The latter\nget initialized on the first call to the function\ninstead of module load time.\n\nThis also gets rid of ASAN UAF errors reported\nduring unit test execution.\n\nBug: 150649241\nTest: atest audiopolicy_tests\nTest: atest audio_health_tests\n  (for ASAN-instrumented libraries and test)\nChange-Id: I514c9205b9d3e7a3f0a1d8aa71d71fcc792e7a7b\n"
    },
    {
      "commit": "c0d04987f6f7bd6e054210b1ca33a827afce650b",
      "tree": "32385a3831d727298a1a766d09183c28a93e2f5d",
      "parents": [
        "c62ad13ad8da6b31168f0d9f3e5f2a770ed0bbee"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 02 21:02:28 2020 +0000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 09 20:19:42 2020 +0000"
      },
      "message": "Allow for late audio module discovery in APM\n\nExtract code that loads hardware modules and fills out\nmAvailable{Input|Output}Devices into a reusable function.\nIt is used both during APM initialization and on\nreceiving a notification that a new HAL service has\nbeen discovered.\n\nBug: 149854039\nTest: atest audiopolicy_tests\nChange-Id: Ifb7f0b61b06a0609802e63dccb26f3472328ef48\n"
    },
    {
      "commit": "4dc6d002af4915c19e54dcb0e524a5c6dfb43a44",
      "tree": "4c7680da75a59f4158b998db81eb4fd62bee9062",
      "parents": [
        "a199662c6a891c009329b619782f2475dff60822"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 13 17:47:56 2020 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 13 18:36:28 2020 -0800"
      },
      "message": "audio policy: fix a2dp output detection\n\nThe logic in IOProfile::devicesSupportEncodedFormats()\nwas only checking if the first device in the list of supported devices\nwas supporting currently selected A2DP encoding format.\nBut if more than one devices match the queried types, we need to check\nall devices in case one of them supports the selected encoding format.\n\nBug: 147789166\nTest: repro steps in the bug.\nChange-Id: I704c5c6278eed524f15e7b73cec68a24f04d3a8c\n"
    },
    {
      "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": "3158c93704e0574c31eed69aff4a5259acfb267d",
      "tree": "eb5f6fb31daad1b5176c00f07ca9adfbb2df4b90",
      "parents": [
        "a170e61fb4e99fc56ab328b25180d321d278867e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jan 31 18:11:59 2020 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Feb 04 12:29:04 2020 -0800"
      },
      "message": "User id match rule should be applied when doing mix matching.\n\nTest: atest AudioPlaybackCaptureTest\nBug: 148559127\nChange-Id: Ifaa00797ccc9deb9371ef949fcdb8b6723e5e28d\n"
    },
    {
      "commit": "90c5793536026f6f6f0299640321e18870aed761",
      "tree": "cad510a72b42070805b3a27d0336059c267cbabc",
      "parents": [
        "10ef43ff1c024fa9c61d42cc5dca00b6c66de112",
        "e8e0e7a52b4ead4a4eb4e3616e4810994f37966d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 24 02:32:53 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 24 02:32:53 2020 +0000"
      },
      "message": "Merge changes I249d9ef1,I2c75b4bf,I0da109d6,I82738d11\n\n* changes:\n  [AudioPolicyService] Add creation of DeviceEffects\n  [audioeffect] add support of device effect in config parser\n  audioeffect: add missing sources to deserializer config file\n  audiopolicy: apm: factorize internal patch creation/release\n"
    },
    {
      "commit": "afd4cea46c12f55a7ccd47271314d59d833aa5c0",
      "tree": "4d920dc931fe9605f8d5197b38da07bd913816ad",
      "parents": [
        "0bc6f60e1f036380bd48d022631e6561b90f210c"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Nov 18 15:50:22 2019 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 23 15:40:06 2020 -0800"
      },
      "message": "audiopolicy: apm: factorize internal patch creation/release\n\nThis CL removes duplicated code for patch creation for\n-voice call\n-system API to create patches.\n-system API to start/stop AudioSource\n\nIt creates internal methods to create/release Audio Patches.\n\nThe benefit of this rework is to have startAudioSource now working\nwhatever Sw or HW bridging is used.\n\nTest: Voice Call\nBug: 136294538\nChange-Id: I82738d116abd94f7738fce8ca3a1c3466942060a\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "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": "8475ae5dbb082802f97ec4e3e9b82770c193f419",
      "tree": "c5a24494368e9a38494203b459d8b21afb2709d4",
      "parents": [
        "9c3728b04f5fe4cca599556581fc5a38a1481b02"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Nov 19 09:50:48 2019 +0100"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jan 15 16:34:34 2020 -0800"
      },
      "message": "audiopolicy: managerdefinitions: add attribute for engine dynamic loading\n\nThis CL updates the parser to support a new attributes in GlobalConfiguration\nin order to support dynamic loading of engine.\nThe given value shall be \u003c\u003cnone\u003e|default|configurable\u003e\nXSD for HAL v6.0 has been updated accordingly.\n\nBug: 141989952\nTest: build \u0026 audio check\n\nChange-Id: I5774597e252261d8369cd7dc3cce9bb7056e1569\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "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": "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": "36e2dea740c54ef4f374fa533a3ae48abca242d3",
      "tree": "9f8dd8a3b18655069e8c798af99f76d6a0f20038",
      "parents": [
        "c76250c8279552db0be9068e49f65696f931c011"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Nov 07 15:47:01 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Nov 08 11:16:15 2019 -0800"
      },
      "message": "Add constructor with type and address for DeviceDescriptor.\n\nType and address are used to distinguish a device, it makes more\nsense to set device type and address when creating a DeviceDescriptor.\n\nBug: 135621476\nTest: make, atest audiopolicy_tests\nChange-Id: I5f9063bd8c756ace77c162e86a8c0dd685da79b4\n"
    },
    {
      "commit": "5d51ca9555e95c54e223e4d23272eafa2f40e419",
      "tree": "8b36e276717699940f5b855edc6971eef7b3c8e0",
      "parents": [
        "05b5edd08b0b846f6ffb749805a7b8bce31ce4f8"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 05 11:59:53 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 06 13:53:18 2019 -0800"
      },
      "message": "Use AudioDeviceTypeAddr in DeviceDescriptorBase.\n\nAudioDeviceTypeAddr is moved to libaudiofoundation. In that case, it can\nbe used in DeviceDescriptorBase.\n\nBug: 135621476\nTest: make, atest audiofoundation_parcelable_test\nTest: play music, record audio\nChange-Id: Ia66dce29c8fb9d25c40598d9bada6eb295313884\n"
    },
    {
      "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": "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": "9a3361e4c6bb01db24c135921b0891e917f71419",
      "tree": "3ee2499fd3e267607c9ae56f120687c4bbb5d67b",
      "parents": [
        "1865ec9e8a38506e2c7062793f39113f98da0543"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Oct 01 09:38:30 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Oct 11 17:33:15 2019 -0700"
      },
      "message": "Clear up bit mask usage in audio policy.\n\nThis change includes:\n1. Use DeviceTypeSet to represent a combination of audio device types.\n2. Add helper functions for DeviceTypeSet\n3. Stop using audio device type as a bit mask in DeviceVector\n\nTest: atest AudioTrackTest AudioRecordTest AudioPlaybackCaptureTest\nTest: atest AudioHostTest AudioServiceHostTest audiopolicy_tests\nTest: audio smoke test\nChange-Id: If80513b689848bcab6094f70a572f053856afa82\n"
    },
    {
      "commit": "b124ec521a5549d9a52bf460b4258d7263e28116",
      "tree": "fceeb77d5d5f254ec90d2495acdb8343c344db64",
      "parents": [
        "2ba82e4618c00b8513487d2dec8828b12d612a2f"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Sep 18 15:13:13 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Sep 18 17:21:26 2019 -0700"
      },
      "message": "Stop using audio device types as bit mask in policy.h\n\nBug: 135621476\nTest: atest AudioHostTest, AudioPlaybackCaptureTest\nTest: atest AudioServiceHostTest, audiopolicy_tests\nTest: listen to music, make phone call with BT device\nTest: test play music via Android Auto emulator\nChange-Id: I154555579b0ebb8b020d00e9c05c8b9f79a08db4\n"
    },
    {
      "commit": "5c2dc7ad49e701fa972683462608044c83194135",
      "tree": "7aa2f822994b0ba037ea5980490f7fc2c98161bb",
      "parents": [
        "cc968e2a3dd6103ebce043990c7f6d30025a1334",
        "ce9f20e40b0d8511c8b9a2ea4c0fa904404566af"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 18 00:41:32 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 18 00:41:32 2019 +0000"
      },
      "message": "Merge changes I70ebe6bc,I9a6d6401,Icbde26fe,I40299d95,Ifd8eb281, ...\n\n* changes:\n  Create DeviceDescriptorBase.\n  Copy DeviceDescriptor to libaudiofoundation.\n  Rename AudioPort and PolicyAudioPort accordingly.\n  Make audio port in policy not derive from audio port base\n  Rename AudioProfileVector.h as AudioProfileVectorHelper.h\n  Leave AudioProfileVector only in libaudiofoundation.\n"
    },
    {
      "commit": "ce9f20e40b0d8511c8b9a2ea4c0fa904404566af",
      "tree": "120f9e88b0d1196275994a499e356a011c4d61e5",
      "parents": [
        "6ae65d8c2ae06da90a091ac5e15ff29d572a38b7"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 12 16:29:15 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 17 13:11:40 2019 -0700"
      },
      "message": "Create DeviceDescriptorBase.\n\nDeviceDescriptorBase is a class that derives from AudioPort and\nAudioPortConfig and contains extensions to describe a audio port that is\na hardware device. DeviceDescriptor derives from DeviceDescriptorBase\nand contains policy related stuff.\n\nTest: atest AudioTrackTest AudioRecordTest AudioManagerTest\nTest: atest AudioPlaybackCaptureTest AudioHostTest audiopolicy_tests\nTest: audio smoke test\nBug: 135621476\nChange-Id: I70ebe6bca70a77bbfc8f6855de3fd4c4ffa1c487\n"
    },
    {
      "commit": "e128485cea169cc3adf7d6285bd30c8f5f57790b",
      "tree": "940553bf3a4a3c20fac15cceb887c33a98f57f1c",
      "parents": [
        "4ef934543dd2d469ba8ffa765c6b05a4e196c0ce"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Sep 11 10:15:46 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 17 12:30:37 2019 -0700"
      },
      "message": "Rename AudioPort and PolicyAudioPort accordingly.\n\nMake the file name consistent as the class name.\n\nTest: make\nBug: 135621476\nChange-Id: Icbde26fe1798e344c3746f4678db098688456654\n"
    },
    {
      "commit": "4ef934543dd2d469ba8ffa765c6b05a4e196c0ce",
      "tree": "05e1966989d89ea7ee0de51d7b9ec2b4a0119ad0",
      "parents": [
        "811797a66929293bd64e0a2e51a761819901d83c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 10 14:29:54 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 17 12:30:20 2019 -0700"
      },
      "message": "Make audio port in policy not derive from audio port base\n\nThis patch aims to make the structure for libaudiofoundation and policy\nstuff simpler, including:\n1. Make AudioPortBase as AudioPort in libaudiofoundation. Create\nPolicyAudioPort that contains policy related stuff, which is used by\naudiopolicy.\n2. Make AudioPortConfigBase as AudioPortConfig in libaudiofoundation.\nCreate PolicyAudioPortConfig that contains policy related stuff.\n3. DeviceDescriptor derives from AudioPort, AudioPortConfig, PolicyAudioPort\nand PolicyAudioPortConfig. IOProfile derives from AudioPort,\nPolicyAudioPort. AudioInputDescriptor/AudioOutputDescriptor derives from\nAudioPortConfig, PolicyAudioPortConfig.\n\nTest: atest AudioTrackTest, AudioRecordTest, AudioManagerTest\nTest: atest audiopolicy_tests, AudioHostTest\nTest: audio smoke test\nBug: 135621476\nChange-Id: I40299d95dda3b3fc0ea88b079f2fe38d8f7e5b31\n"
    },
    {
      "commit": "811797a66929293bd64e0a2e51a761819901d83c",
      "tree": "b7cfe0824b193b5a39cdcda71e82808372258518",
      "parents": [
        "3e277cc0f12477b9e2ac2875cbca029f167a2f57"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 10 14:29:14 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Sep 16 12:03:10 2019 -0700"
      },
      "message": "Rename AudioProfileVector.h as AudioProfileVectorHelper.h\n\nThe file only contains helper functions for AudioProfileVector.\n\nTest: make\nBug: 135621476\nChange-Id: Ifd8eb281cbb7d6395fd5d4b4d6f308d58e6ded3d\n"
    },
    {
      "commit": "3e277cc0f12477b9e2ac2875cbca029f167a2f57",
      "tree": "e3da1697e39ff53d10eb2389bd36af8eccb6e4b2",
      "parents": [
        "861df4b5ff6fd4b9c8ac95d8fd080bda78e7ce5c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 10 14:27:34 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Sep 16 12:00:44 2019 -0700"
      },
      "message": "Leave AudioProfileVector only in libaudiofoundation.\n\nMake AudioProfileVector only in libaudiofoundation. In policy part,\ninstead of having policy specific AudioProfileVector deriving from\nAudioProfileVector in libaudiofoundation, make all the functions as\nglobal functions. In that case, AudioPortBase does not need to be a\ntemplate class. That helps make the structure clearer.\n\nTest: audio smoke test\nTest: CTS for AudioTrack, AudioRecord, AudioManager\nTest: audiopolicy_tests, AudioHostTest\nBug: 135621476\nChange-Id: I36b12123cf52c3f82cef09a965403791dff74093\n"
    },
    {
      "commit": "57ac2cef01ee57dd5edc85b275e40b82724c2a8e",
      "tree": "d9e12d30a65e64ed836a03bc89f5ea926833fa27",
      "parents": [
        "0f6aaed13c22a8f5a428390ae2b89429a8922668"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 11 09:29:41 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 11 09:32:24 2019 -0700"
      },
      "message": "audiopolicy: Match DIRECT and MMAP_NOIRQ flags exactly in IOProfile\n\nPrevent selection of DIRECT and MMAP_NOIRQ output profiles\nif these flags were not requested.\n\nUpdate the test APM configuration to use PCM16 on all outputs,\nso they are all equivalent in terms of format and only differ in flags.\n\nTest: atest audiopolicy_tests\nChange-Id: I6940caed519b6237ea3038e646a84e4403a0c1ed\n"
    },
    {
      "commit": "0756bbff56944eb500ec69e91be690475b383b82",
      "tree": "c92065417c41d1675e29a775660fc010506e215e",
      "parents": [
        "5f5ee1ccd75a23df68fd506142348f1476e1e5b6"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 06 13:53:26 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Sep 09 12:33:21 2019 -0700"
      },
      "message": "Require HW AV sync flag match for compatible output IOProfile\n\nPreviously, Audio HAL implementers need all HW A/V sync profiles\ndeclared after non HW A/V sync profiles in their audio policy\nconfigurations, otherwise a HW A/V sync profile match could be\nfound for a non HW A/V sync (e.g. direct only) request, the\nAudio HAL output stream would be opened with the HW A/V sync\nflag, and Audio HALs typically fail to process the stream as\nthey are setup to parse in-band HW A/V sync headers (even if\nthey don\u0027t receive keyStreamHwAvSync AudioParameter).\n\nTest: atest audiopolicy_tests\n  AudioPolicyManagerTVTest#MatchOutputNoHwAvSync fails w/o IOProfile change,\n  passes with the change.\nBug: 140447125\n\nChange-Id: Icfc806497b5b23013e63621a585c28d1d7a9882a\n"
    },
    {
      "commit": "3ce82b056a93012e90de5c906b60e99cf40bad7e",
      "tree": "8b8d489145e37860ab4ac31513f2e4a3bb45d072",
      "parents": [
        "1e00b66086511f28eb8ad44196a3556f542a1ec1",
        "5740f08a85214ebdb994fdcfd91dab186fc312fc"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 04 21:42:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 04 21:42:03 2019 +0000"
      },
      "message": "Merge changes I05611b70,I6cd1a53e,Ic2e08efc,I13ac0673\n\n* changes:\n  Add AudioPortFoundation, AudioPortBase and AudioPortConfigBase.\n  Copy AudioPort.h to libaudiofoundation.\n  Make AudioProfile as a common class and create AudioProfileVectorBase.\n  Preparation for moving AudioProfile to libaudiofoundation.\n"
    },
    {
      "commit": "5740f08a85214ebdb994fdcfd91dab186fc312fc",
      "tree": "0da56c9af676f4c0cfa95bdc14fe3b1463b14710",
      "parents": [
        "ea87a0ce074dd93916f8918efc2eeb9d868a2093"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Aug 19 15:08:30 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 03 14:44:25 2019 -0700"
      },
      "message": "Add AudioPortFoundation, AudioPortBase and AudioPortConfigBase.\n\nThe purpose of this change is to make a generic AudioPort class that\ncould be used by vendor.\n1. Add AudioPortFoundation and AudioPortBase. AudioPortFoundation\ncontains generic members of an audio port. AudioPortBase is a template\nclass that derives from AudioPortFoundation. It takes audio profile\nvector as a template parameters. That makes it more feasible to use\ncustomized audio profile stuff as needed. In audio policy, AudioPort\nderives from AudioPortBase and contain policy related stuff.\n2. Add AudioPortConfigBase. AudioPortConfigBase contains generic members\nof an audio port config. AudioPortConfig derives from AudioPortConfigBase\nand contains policy related stuff.\n3. Use std::string instead of String8 in AudioPort and AudioPortConfig.\n\nBug: 135621476\nTest: CTS for AudioRecord, AudioTrack, AudioManager, RoutingTest\nTest: audiopolicy_tests, AudioServiceHostTest\naudio smoke test\nTest: dumpsys media.audio_policy\nChange-Id: I05611b7067c18006660de2c678acd56bdd34010a\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": "9bb3a1e0631c56ab5c182b88de921703d2f0ae82",
      "tree": "6acd83877268aa965c19b3a7c563f721b81978d4",
      "parents": [
        "e46870e935e31839c07400743d68fd99defb360a"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Aug 19 10:10:17 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 21 14:21:21 2019 -0700"
      },
      "message": "Make AudioProfile as a common class and create AudioProfileVectorBase.\n\nAudioProfile is a class that contains information for an audio profile.\nAudioProfileVectorBase is a base class that contains operations for a\nvector of audio profiles. AudioProfileVector derives from\nAudioProfileVectorBase and contains policy related stuff.\n\nBug: 135621476\nTest: CTS for AudioRecord, AudioTrack, AudioManager\nTest: audio smoke test, audiopolicy_tests\nTest: dumpsys media.audio_policy\nChange-Id: Ic2e08efcc5efa99e499a931811b7042fbd5ddf04\n"
    },
    {
      "commit": "e46870e935e31839c07400743d68fd99defb360a",
      "tree": "8056ff7441912399111703c164402db4acfcdbac",
      "parents": [
        "34bbfc447ad5c3b615acf9e924a97b2a3d678ab7"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Aug 13 15:17:08 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 21 14:21:21 2019 -0700"
      },
      "message": "Preparation for moving AudioProfile to libaudiofoundation.\n\nCopy AudioProfile from audio policy to libaudiofoundation. Note that\nAudioProfile in libaudiofoundation has not been added into the make\nfile as it needs some more change to make it work. Doing this just to\nmake a cleaner diff for later change.\nRename AudioProfile in managerdefinitions folder as AudioProfileVector\nsince AudioProfile will be moved to libaudiofoundation.\n\nBug: 135621476\nTest: make\nChange-Id: I13ac067317648bbfd8d3960d16a1ea56ded83011\n"
    },
    {
      "commit": "c48ed6678719f9ee318f1f32259126873502e0c0",
      "tree": "53f04a2aed31916363867abb108ca317ce8a72f6",
      "parents": [
        "5dd8c0fdfe4b3e205033e3cc624da9004433ed52",
        "f502d15d7232c774ff5302d6762de8e3eaf5f555"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 08 23:02:00 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 08 23:02:00 2019 +0000"
      },
      "message": "Merge \"Return DeviceDescriptor or DeviceVector in Engine.\""
    },
    {
      "commit": "f502d15d7232c774ff5302d6762de8e3eaf5f555",
      "tree": "8ecff716ed4ff6557e5dd04e9335758afc962821",
      "parents": [
        "433e8a2730ce7280beb2ce49f42f41f9401ad6e4"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 07 14:43:33 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 07 16:01:55 2019 -0700"
      },
      "message": "Return DeviceDescriptor or DeviceVector in Engine.\n\nTo remove the limit on the number of audio device types, there is a\nneed to remove the return value as a combination of audio_devices_t.\nUsing DeviceDescriptor or DeviceVector in Engine is a starting point.\n\nTest: audiopolicy_tests, smoke test\nTest: CTS for AudioTrack, AudioRecord, AudioManager\nBug: 135621476\nChange-Id: I0d87fd76385629e6e6b74cdd37dbd334ae02c04f\n"
    },
    {
      "commit": "06e4bab5451f1594d6843fc3af698bf8b4c1047e",
      "tree": "2eeec151cc1285a8707bfcaf73582fee9ffc69dd",
      "parents": [
        "433e8a2730ce7280beb2ce49f42f41f9401ad6e4"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Jul 29 10:13:34 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 07 14:36:18 2019 -0700"
      },
      "message": "Use standard containers for audio stuff in audio framework\n\n1. Add SampleRateSet, FormatSet, ChannelMaskSet, FormatVector\nusing std::vector and std::set in libaudiofoundation.\n2. Use SampleRateSet, FormatSet, ChannelMaskSet, FormatVector in\naudio framework.\n\nBug: 135621476\nTest: make, CTS for AudioRecord, AudioTrack, AudioManagerTest\nTest: play and record audio\nChange-Id: Ic04e637bcc6ba9df84c5e7561ec3c03f18a7d242\n"
    },
    {
      "commit": "433e8a2730ce7280beb2ce49f42f41f9401ad6e4",
      "tree": "ced52c62e970c2987f85fd077bc3612001aa70c2",
      "parents": [
        "28355761d73f1495bba8994dc3c0dc631ae245a8",
        "bad450e52a5f1c6d93bb226b3aa709e95f2239a7"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Aug 07 00:15:13 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 07 00:15:13 2019 +0000"
      },
      "message": "Merge \"Revert \"Return DeviceDescriptor or DeviceVector in Engine.\"\""
    },
    {
      "commit": "bad450e52a5f1c6d93bb226b3aa709e95f2239a7",
      "tree": "415dde36e620efe6d37deff32782b761b33f8fbb",
      "parents": [
        "6cb004ae262499898bd4fcae2a6f4ba875c917d9"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Tue Aug 06 22:40:42 2019 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Tue Aug 06 22:41:43 2019 +0000"
      },
      "message": "Revert \"Return DeviceDescriptor or DeviceVector in Engine.\"\n\nThis reverts commit 6cb004ae262499898bd4fcae2a6f4ba875c917d9.\n\nReason for revert: This break telephony call\n\nBug: 138866657\nChange-Id: Ie288c13a152491bf4df99595d30b80d9122b970c\n"
    },
    {
      "commit": "30533d67977b09fc2cbd37b773695f20f9cec46a",
      "tree": "449666dd28220b2434af8817ae3b4bb0f8b3a6f3",
      "parents": [
        "dad6494a98a10922a6af0ad0f1a4e3298f4303a1",
        "6cb004ae262499898bd4fcae2a6f4ba875c917d9"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Aug 02 20:32:07 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 02 20:32:07 2019 +0000"
      },
      "message": "Merge \"Return DeviceDescriptor or DeviceVector in Engine.\""
    },
    {
      "commit": "f5fd58d26e82466b902dec3794acbd09729f1eb7",
      "tree": "c802863b91b074280f76759932a3bdb68cbccc86",
      "parents": [
        "b639c40f904f53d2926639f266eaeee329f412eb",
        "84e43c724aa359055171a4c4e8c73e1df222ae4b"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Aug 02 18:01:41 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 02 18:01:41 2019 +0000"
      },
      "message": "Merge changes from topic \"addlibaudiofoundation\"\n\n* changes:\n  Make AudioGain parcelable.\n  Move AudioGain to libaudiofoundation.\n"
    },
    {
      "commit": "9ccb28b1ccb214b06461f5285e5bce7d3734ea19",
      "tree": "1b9ce993373a1f5450815c401943f787a406b45b",
      "parents": [
        "e6138376f0578d464037d645f7985c87db60565e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Jul 31 09:59:09 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Jul 31 17:23:06 2019 -0700"
      },
      "message": "Move AudioGain to libaudiofoundation.\n\n1. Create folder for libaudiofoudation.\n2. Move AudioGain to libaudiofoudation. The goal is to make AudioGain\nbe able to use in binder call and be vendor-available later.\n\nBug: 135621476\nTest: make, CTS for AudioTrack, AudioRecord, AudioManagerTest\nChange-Id: Ibf16ad9cb7f2ac657a02632ccbe4f934b5a12731\n"
    },
    {
      "commit": "6cb004ae262499898bd4fcae2a6f4ba875c917d9",
      "tree": "2450eaf843dfa90d79c19d3ce03a57440dc24623",
      "parents": [
        "e6138376f0578d464037d645f7985c87db60565e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jun 21 11:43:56 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Jul 31 12:26:10 2019 -0700"
      },
      "message": "Return DeviceDescriptor or DeviceVector in Engine.\n\nTo remove the limit on the number of audio device types, there is a\nneed to remove the return value as a combination of audio_devices_t.\nUsing DeviceDescriptor or DeviceVector in Engine is a starting point.\n\nTest: audiopolicy_tests, smoke test\nTest: CTS for AudioTrack, AudioRecord, AudioManager\nBug: 135621476\nChange-Id: I7603481d92184549a5fed6b1166cb0044c965570\n"
    },
    {
      "commit": "8396187d87cfb2ef4b14692e2bd06d419a10ef15",
      "tree": "5931f1e90bce3ed18efa4e86ddd04ddfc1517fff",
      "parents": [
        "471842123a6c30fe2ff06ed4f660653351781127",
        "0132854a2c508ab9c06a6ff7ba01739ab7ed5bb0"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jul 03 22:53:51 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jul 03 22:53:51 2019 -0700"
      },
      "message": "Merge \"Audio policy: fix HwModuleCollection::getDeviceDescriptor\" into qt-r1-dev am: 6d5ee512f5\nam: 0132854a2c\n\nChange-Id: I5119723f27364cef4cbe6f2a7b2c3a8aad87e2ba\n"
    },
    {
      "commit": "947c0f18f5f0836f745ac97e19ae1e9d1e29b6be",
      "tree": "fb2e83e91c22f3216cfd38f582af4d98749640f2",
      "parents": [
        "91eaf16f58f27fba8d963b90c172f28ad6b9c12f"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jul 02 09:28:16 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jul 02 22:36:37 2019 +0000"
      },
      "message": "Audio policy: fix HwModuleCollection::getDeviceDescriptor\n\n  The deprecated method AudioManager.isBluetoothA2dpOn() calls\ngetDeviceConnectionState on APM with an empty address, which\ncaused HwModuleCollection::getDeviceDescriptor to set an empty\naddress on the DeviceDescriptor for the currently connected\nA2DP device. This method is called by MediaRouter.\n  When the address was reset, the java listener for audio device\nconnection monitoring was reporting the connection of an A2DP\ndevice with an empty address, which in turn caused AvrcpManager\nto behave as if the audio device connection failed.\n  If MediaRouter called isBluetoothA2dpOn() before AvrcpManager\nreceived its called for device connection, the error would occur.\n\nBug: 132416679\nTest: call isBluetoothA2dpOn() and check for valid address in dumpsys media.audio_policy\nTest: atest AudioServiceHostTest#testInjectForRecord ; atest AudioHostTest ; atest AudioPlaybackCaptureTest\nChange-Id: I1370edbbca46657506a990855d06a176f07c54d3\n"
    },
    {
      "commit": "375c4a641db68ee760e57a63c8d14bfc336e9cb0",
      "tree": "6688fc3e30f818076c1d313c07992864d3ae48da",
      "parents": [
        "57b10c474b9dde57ff83c8c2b9f19681e09fdee7",
        "33e5d494d6a4ce8e1bfa7b0bd77035885f3599a9"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Jun 10 18:12:00 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jun 10 18:12:00 2019 -0700"
      },
      "message": "Merge \"Fix remote-submix not found for MIX_TYPE_RECORDERS LOOPBACK\" into qt-dev am: ed95748f36 am: c7aedb3844\nam: 33e5d494d6\n\nChange-Id: I33cee3236aa5038b465dd3776a3b958a253b459c\n"
    },
    {
      "commit": "4e5f402253592726d05f4864b2f30b740abf15fc",
      "tree": "985acb69bb0c83784662238236e2a9bfd4e1adf7",
      "parents": [
        "90d1d53862638210d848ddedef2600aae35337d3"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Sat Jun 08 02:32:21 2019 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Jun 10 14:06:11 2019 -0700"
      },
      "message": "Fix remote-submix not found for MIX_TYPE_RECORDERS LOOPBACK\n\n[Context]\nWhen a LOOPBACK dynamic audio policy mix PLAYER/RECORDER\nis registered, first the REMOTE_SUBMIX device that will be\nused by the app to capture/play respectively is activated.\n\nEg a mix RECORDER (used to inject audio to apps recording),\nwhen registered will activate an OUT_REMOTE_SUBMIX.\n\nThen the app can open a record/playback track on this\nREMOTE_SUBMIX, which will trigger the other end of the pipe\nto be activated.\n\nFollowing this the playback/Record Tracks that match the\nmix will be routed to the IN/OUT REMOTE_SUBMIX.\n\n[Example for an app FUU]\n 1) App FUU register Playback/record mix\n    2) APM activates out/in remote submix\n 3) App FUU opens track to out/in remote submix\n    4) APM activates in/out remote submix\n 5) tracks matching mix are redirected to the out/in remote submix\n\nWhen an OUT_REMOTE_SUBMIX is activated, it tries to check if it matches\na mix, if it does, it saves the output in the mix (in mOutput).\nThis output is then used to find a matching mix output in\ngetOutputForAttr(). If a mix has no output is is considered inactive.\n\nNote that IN_REMOTE_SUBMIX do not save their input in the mix, the\ninput is queried by APM each time in its mAvailableInputDevices.\n\n[Issue]\nThe issue is that in step (2), when an OUT_REMOTE_SUBMIX is\nactivated (thus for a MIX_TYPE_RECORDERS), no mix is matched because the\nmix is of type IN_REMOTE_SUBMIX as it will be used to route AudioTracks\nin step (5).\nThus no mix output is found in getOutputForAttr and the step (3) fails.\n\nThis is a recent regression as previously the type was not checked when\nlooking up for a mix in step (1).\n\nThe Change-Id of the patch that caused the regression is:\nI4dc7f23bef19a7d47afc2998102da07dde41fbca, its sha1 is:\n679172768d86e29a47b9e15dd56776694128cf59\n\n[Workaround]\nFor now, given the release timing, implement a minimal fix that restore\nthe previous behavior for the OUT_REMOTE_SUBMIX output save lookup.\nAka, make sure to query for a IN_REMOTE_SUBMIX mix in step (2).\n\nStep (4) is fine as the mix type is the same as the REMOTE_SUBMIX type.\n\nAs IN_REMOTE_SUBMIX do not attempt to save their output in the mix, no\nissue is present on this code path.\n\nA proper fix needs to be implemented on master, preferably by having the\nsame device save behaviour on both mix type.\n\nBug: 134068143\nTest: Wifi calling call screening\nTest: atest AudioPlaybackCaptureTest AudioHostTest\nChange-Id: I1547948ae412dbdeb2d85cc62bf18f7ac5f1efc0\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "aa78f89a973efe8448e64a4ff26bd2c27f5d9fd9",
      "tree": "c66c79d79b0ecd4e2b700be1859f871e82617d9a",
      "parents": [
        "91eb9949d4bbd8ea81712543baf3f2e8941aa2d6",
        "7b827a52e7e8168997048ca340d296f77e1eb25d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri May 24 20:27:09 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 24 20:27:09 2019 -0700"
      },
      "message": "APM: make AudioPolicyMixCollection inherit from Vector am: 679172768d am: ed11faffbb\nam: 7b827a52e7\n\nChange-Id: I4fcb2a65f8e660067b250fc0a79a95a0e975e7b7\n"
    },
    {
      "commit": "679172768d86e29a47b9e15dd56776694128cf59",
      "tree": "f96e84cd5dcf55079976366eb1d8c8be210262dd",
      "parents": [
        "5592ee268507a8ee90fd374530e55a6279dbf0de"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed May 22 11:54:37 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri May 24 07:27:52 2019 -0700"
      },
      "message": "APM: make AudioPolicyMixCollection inherit from Vector\n\n  Modify AudioPolicyMixCollection to inherit from Vector instead\nof KeyedVector so all so the collection of mixes stays in the same\norder as the mixes were added.\n  Also make the mix selection take the deviceType into consideration,\nnot just the address to enable the same address to be associated to\ndifferent devices.\n\nBug: 131090322\nTest: see bug for multi bus scenario\nTest: atest AudioPlaybackCaptureTest\n\nChange-Id: I4dc7f23bef19a7d47afc2998102da07dde41fbca\n"
    },
    {
      "commit": "47835553b6e9b019acab78ead590727bc40e44ee",
      "tree": "07d496b011732ae2b8559ba8426289ca248adac0",
      "parents": [
        "b82f9fbdb1903a3bfa136b85dc7d24ab01c9fb21"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue May 14 10:32:51 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 22 16:18:17 2019 -0700"
      },
      "message": "audiopolicy: Load the engine library dynamically\n\nAndroid provides 2 audio policy engines:\nlibaudiopolicyenginedefault and\nlibaudiopolicyengineconfigurable. This change makes the engine\nto be loaded dynamically based on the configuration (currently\nthe engine name is hardcoded into AudioPolicyConfig). Dynamic\nloading allows building and installing of both libraries without\nany conflicts.\n\nTechnical changes:\n\n - AudioPolicyManagerInterface renamed to EngineInterface\n   for clarity;\n\n - For the purpose of dynamic loading, APM does not depend\n   anymore on the EngineInstance class. The class got removed\n   from the default AP engine, but left in the configurable engine\n   because it is also used by its plugins;\n\n - Added EngineLibrary class to encapsulate dynamic loading\n   of the AP engine. The class name EngineInstance is repurposed\n   for a smart pointer to EngineInterface;\n\n - services/audiopolicy/managerdefault/Android.mk converted\n   into Android.bp;\n\n - Added engine loading failure test;\n\nBug: 132639720\nTest: sanity tests for audio; audiopolicy_tests\nChange-Id: I0581569a172f810e030aec879225e817bfa7851a\n"
    },
    {
      "commit": "ad0c3a7b7a9f54d6a51887cba75126a7fecb4e36",
      "tree": "92b0139474981bd8d4fa5b98c689ddfe0cb8b27d",
      "parents": [
        "56e8082c65e0babfe6d80e22dd0cecb736186ed9",
        "8d00c0e01cd34165d863f0645a1117a10bc49d76"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat May 11 03:33:12 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat May 11 03:33:12 2019 -0700"
      },
      "message": "Merge \"audio policy: fix channel match rule for input profiles\" into qt-dev am: d4e2ab1785\nam: 8d00c0e01c\n\nChange-Id: Id5ec679ef7e2c857553cb7e175472edf6de2ce24\n"
    },
    {
      "commit": "526d23f2b1c88af42d57105903360c3f24c32a51",
      "tree": "4486ed28861b98f9b9cc940499ea157ea1db218a",
      "parents": [
        "1a903f96ed1d3b29c82ef252136ebe1a90bb90c4",
        "5f5158fe34d8ff5b119d46ad261225b1d8d689f3"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Sat May 11 01:15:32 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat May 11 01:15:32 2019 -0700"
      },
      "message": "Merge \"APM: uid-device affinity: fix for multiple concurrent apps\" into qt-dev am: b09f621af6\nam: 5f5158fe34\n\nChange-Id: Ic766a8ef35f7d4826819ca53a51def1f6c659882\n"
    },
    {
      "commit": "d4e2ab1785d813aa336479a57de634f30fb13a92",
      "tree": "eb7ee11fab376ca0fc7bf75c7490e6b508ccdb89",
      "parents": [
        "eb99a27ffabbdf1795c063bd630f437a5d446052",
        "6e16157202e8c273d3c84be001e68bf7b13c9ee8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat May 11 02:46:59 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat May 11 02:46:59 2019 +0000"
      },
      "message": "Merge \"audio policy: fix channel match rule for input profiles\" into qt-dev"
    },
    {
      "commit": "6e16157202e8c273d3c84be001e68bf7b13c9ee8",
      "tree": "ec83ddec857579985597cad7ffd8be10c25f187c",
      "parents": [
        "459e59820f8914a10c1d015fb4fa09b723cacaca"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 10 15:53:08 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 10 17:44:09 2019 -0700"
      },
      "message": "audio policy: fix channel match rule for input profiles\n\nModify channel mask match rule for input profiles in order to\nfavor profiles with positional masks and less than 2 channels.\nThis reflects the audio HAL convention to not list index channel\nmasks for less than 2 channels.\n\nBug: 131943885\nTest: repro steps in bug.\nChange-Id: I85e06f3afc2833b6aa7d52675bfd1ffda524fbcf\n"
    },
    {
      "commit": "e383de2a99cb0acf399143ed53b07e646f60ad82",
      "tree": "569961aaabbeea8ac16fbc0de5614feb9b80fe1d",
      "parents": [
        "9e58248b110ba687adf2078c57edfafd0745f3a2"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 10 14:15:52 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 10 14:15:52 2019 -0700"
      },
      "message": "audiopolicy: Remove legacy audio_policy configuration\n\nRemove the \"template\" configuration file and the header file.\n\nBug: 132435217\nTest: make\nChange-Id: I0b8ae921ac046e11b020d5766a60f9b341e1d6ee\n"
    },
    {
      "commit": "e2f34be1b70a564a9e7866934f0b626e98be999f",
      "tree": "e57d0b82ebd689f5734c8bedd84ecbe091d3dd72",
      "parents": [
        "3350096bf8e52b2d96f7b7ba95642d92c05e8f09"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu May 09 12:31:06 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri May 10 09:52:56 2019 -0700"
      },
      "message": "APM: uid-device affinity: fix for multiple concurrent apps\n\nAudio mix rules that contain both a match and exclude for a uid\n  or usage are ignored for routing evaluation. The implementation\n  of the uid-device affinity caused uid matches and exclusions to\n  be added to any mixes, causing previously valid mixes to be\n  discarded in the routing logic.\nThe fix consists in implementing the uid-device affinity by only\n  applying uid exclusions on mixes that:\n  a/ are compatible with the concept (mixes of players that are\n     render only),\n  b/ do not route to the selected devices\n  c/ do not have a uid match rule (such mixes are already exclusive\n     to the uid to match)\n  d/ do not already have a uid exclusion for the uid\nFix removeUidDeviceAffinities() that skipped the wrong mixes.\n\nBug: 124319394\nBug: 131180578\nTest: atest AudioHostTest#testUidDeviceAffinity\nChange-Id: I813c4cfb15956e56599740948775c32562266c21\n"
    },
    {
      "commit": "16c66dd1e60d6b65b846f371c2ae4bf2b673545f",
      "tree": "f93c6935379a10245958db1e490208a31894a1bc",
      "parents": [
        "2ddd17ca5c49fe02c459b7026d4c271bf76c4e3c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 01 17:54:10 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 03 15:44:44 2019 -0700"
      },
      "message": "aaudio: fix multichannel legacy streams\n\nTwo fixes for multichannel playback over USB from\nAAudio legacy streams:\n1: AAudio use a channel index mask and not a positional mask\nwhen channel count is greater than 2.\n2: audio policy gives priority to an output mixer which can support\nthe requested channel mask without downmixing\n\nBug: 131685020\nTest: play multichannel audio over USB\nChange-Id: I13f2da48d47fcf81f522096d90ba59a89379cffb\n"
    },
    {
      "commit": "66ea39290308e4851a5c6fe149e576b7d6249e5f",
      "tree": "f0fe4950c8d77207be8ce281623f9345e448e478",
      "parents": [
        "09940bbc0e7eb687c1b08c1ba0252852752f68ab",
        "2996f67767ff90617cc5f7801c7bd8dc67c9dd66"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 25 18:01:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 25 18:01:03 2019 +0000"
      },
      "message": "Merge \"AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\" into qt-dev"
    },
    {
      "commit": "2996f67767ff90617cc5f7801c7bd8dc67c9dd66",
      "tree": "d20af841b6537ca44a0b1bf7a839e0ba3f9c7a91",
      "parents": [
        "3208826f676b1be78e1c04692d7f17249e45c3ea"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 18 12:29:59 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Apr 24 14:49:52 2019 -0700"
      },
      "message": "AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\n\nThe client must provide a unique Record ID (RIID) when creating\nan AudioRecord. This RIID is passed down to AudioInputDescriptor\nin AudioPolicyManager which sends configuration updates\nvia IAudioPolicyServiceClient callback.\n\nBy supplying RIID, the Audio Service can coalesce start / stop\nevents coming from clients (apps) with recording configuration\nupdate events.\n\nFor AAudio MMap clients everything is handled at the server\nside because they correspond directly to audioserver objects.\n\nBug: 123312504\nTest: android.media.cts.AudioRecordingConfigurationTest\n      AudioRecordTest#testAudioRecordInfoCallback\n      MediaRecorderTest#testAudioRecordInfoCallback\n      manual testing using Oboe and Solo test apps\n\nChange-Id: I3d32241752d9a747736606dc4cb1e068e6b7aa3b\n"
    },
    {
      "commit": "962ba215fbffcf27b3c69827a9221e0a82108ff0",
      "tree": "e0ef04ba1857443ef150e35e146522c84fcbb41f",
      "parents": [
        "48601f013a60c916187591e6e05dfaf76a87b698"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Apr 03 16:21:39 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 24 09:03:17 2019 -0700"
      },
      "message": "audiopolicy: fix build issue by going on switching to bp\n\nBug: 130284799\nTest: make\n\nChange-Id: I60d41eaa41564fecdeef6d4cb223a8367883db50\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "df8638b4c4cfabcdeade1a3af497cd6e0521cb89",
      "tree": "d4b192648cf45213baaa415f6842af7c58242e12",
      "parents": [
        "a74c7274069fdfa95e4f9768e14bd2ce7ed1219e",
        "b20cf7db9e669169bbae5f0da97018a866c3f634"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 18 19:15:42 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 18 19:15:42 2019 +0000"
      },
      "message": "Merge \"audio policy: concurrent capture effects\" into qt-dev"
    },
    {
      "commit": "b20cf7db9e669169bbae5f0da97018a866c3f634",
      "tree": "96e88e1850e1fb27fcc0bad53cc575e837d86c60",
      "parents": [
        "aceea8bddd0324df4414673bc39a3f38fe16e8a1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 05 19:37:34 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 19:27:20 2019 -0700"
      },
      "message": "audio policy: concurrent capture effects\n\nAdd pre processing effect management for concurrent capture scenarii.\nWhen several clients on the same input stream have enabled audio effects,\nonly the effects attached to the top priotity client are active.\nOther effects are suspended.\n\nAdd AudioFlinger API to suspend/restore audio effects build on top\nof exisiting internal effect suspend mechanism.\n\nRecordThread now supports more than one effect chain.\n\nAOSP pre processing implementation supports more than one effect session\nper input.\n\nRefactor AudioPolicyManager::closeAllInputs() to call closeInput() on\nall inputs instead of partially duplicated code.\n\nBug: 128419018\nTest: make\nChange-Id: I685286da4c2905a8894a4354679f9787b1400621\n"
    },
    {
      "commit": "9e1533cd0b8f3bf08eb9c81c21cd42f5782474f4",
      "tree": "3ba52e0b3d83ce58a20ebb69a61f2811a4c3a9f6",
      "parents": [
        "4b8d5ce58d98d4a163f63e17735450a7cac4821c"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Apr 11 16:07:36 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 14:05:50 2019 -0700"
      },
      "message": "audiopolicy: audioflinger: manage stream patch volume\n\nAudioPolicy used to hide activity of stream patch to prevent changing\nthe volume.\nThis CL replaces the filtering of the stream patch activity on the policy\nby a full volume range within audio flinger.\nIt updates also product strategies example for automotive to add associated\nstrategy and full range volume.\n\nBug: 130284799\nTest: make\n\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: I6e77dc2cbed0289f0a1341f7597b1c25abee5f7d\n"
    },
    {
      "commit": "6c79632bbece71f7af0c2453bb62a5d6f0cca664",
      "tree": "a70a17d1f723b7e0241bb762bf5478e3c9947348",
      "parents": [
        "2cb1a8ccbd402d74a06ee34721f5dd787ecb396f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 09 14:13:17 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 10:29:30 2019 -0700"
      },
      "message": "refactor mutexes for audio effects in audio flinger and audio policy\n\nRemove effect specific mutex (mEffectLock) in AudioPolicyService: Due to\nconcurrent capture (among other reasons), it is necessary that the audio\npolicy manager state preserved by mLock includes audio effects\nregistration and enabling.\n\nMoved all audio policy API calls from audio flinger out of locked regions\nfor audio flinger, thread and effects mutexes to avoid cross deadlocks\nbetween audioflinger and audio policy manager:\n- centralized audio policy API calls in EffectModule::updatePolicyState()\n- the enabled state now reflects the state requested by the controlling\nhandle, not the actual effect processing state: a suspended effect is\nnow considered enabled.\n\nA new audio policy manager API moveEffectsToIo() is added to atomically\nhandle moving effects to a new input or output without having to call\nunregister \u003e register \u003e enable sequence.\n\nAlso fix assert in setStreamVolume to match volume group refactoring\nin audio policy manager.\n\nBug: 128419018\nTest: CTS tests for audio effects.\nTest: manual tests with Duo calls, Play Music, Youtube, notifications\n with and without Bluetooth and wired headset.\n\nChange-Id: I8bd3af81026c55b6be283b3a9b41fe4998e060fd\n"
    },
    {
      "commit": "94114a21c855fb7525cf47fcfe965bf0735e19f1",
      "tree": "a10bbc96b77cb71681a358fdb7913b54d47b5483",
      "parents": [
        "d233276ad591814829b6ccbd2d7577558522fe3f"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Apr 01 19:38:23 2019 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Apr 05 01:12:42 2019 +0000"
      },
      "message": "APC: Disable MMAP when a stream is to be captured\n\nAs MMAP does not support APC, it is disabled when a render loopback\npolicy is installed.\n\nTest: adb shell write_sine_callback -pl # mmap is used\n      adb shell audiorecorder  --target /data/file1.raw \u0026\n      adb shell write_sine_callback -pl # mmap is NOT used\nBug: 129948989\nChange-Id: Ia90c24953890de7e19fd99485bf760788f81126d\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n(cherry picked from commit c1dde631401a9cda122cf3058a99e36274906801)\n"
    },
    {
      "commit": "67336139290c89ac891f8899f70e78f0726e75eb",
      "tree": "450e7ca7132b4c6a4140e176a93441aa4b689eae",
      "parents": [
        "0f56f0a9173e17173b408486ddc1aff401a1d8f2",
        "83d17c208422b6c5df57716e9782925b0a787ee2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 03 23:04:52 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 03 23:04:52 2019 +0000"
      },
      "message": "Merge \"audio policy: fix stream to volume source mapping\""
    },
    {
      "commit": "f1273c07a7b718504c1d0bbff5bcea4ef0379c38",
      "tree": "5f9bee88cee4b88f593bef847003c2033e48a79b",
      "parents": [
        "66abdd2ff0de06c87a54e059c37147f4c6f486f8",
        "7795e4a3fda5623acbb8dd985150207642059218"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Apr 03 17:28:27 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 03 17:28:27 2019 +0000"
      },
      "message": "Merge \"Audio Policy: Do not stop getOutputForAttr on invalid Mix\""
    },
    {
      "commit": "7795e4a3fda5623acbb8dd985150207642059218",
      "tree": "b87dbf908c1f340ad10ceb74f1c2936a8f1f1ccf",
      "parents": [
        "32fa5079485232f3cb22afab91a275bba28d841b"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Apr 02 18:21:51 2019 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Apr 02 18:25:03 2019 -0700"
      },
      "message": "Audio Policy: Do not stop getOutputForAttr on invalid Mix\n\nThis would allow an app that successfully registered an invalid mix to\nblock all following mixes.\n\nTest: none\nBug: 111453086\nChange-Id: I3c1630b7b697dd70e08a5708d1515e097d683401\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "83d17c208422b6c5df57716e9782925b0a787ee2",
      "tree": "44d0bbff2b15b05854120487ed7fa115b45e8eb9",
      "parents": [
        "b02be352c78d9db1c876a114199a9d4259c194e2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 02 17:10:01 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 02 17:20:47 2019 -0700"
      },
      "message": "audio policy: fix stream to volume source mapping\n\nremove use of obsolete method streamToVolumeSource()\nand replace it by toVolumeSource() which actually queries\nthe engine for stream to volume source mapping.\n\nBug: 129439600\nTest: make\n\nChange-Id: Ie4e4e93aa5925315078fa96a957bb3ed71e7dc76\n"
    },
    {
      "commit": "3afa9b1b80a90cfffdbf5aff5e8d17351422fda6",
      "tree": "0a127c4244c561da58e71192f07e4ed36e8a8eea",
      "parents": [
        "fc332471b307dff3ab152db2f0cb35f12c7a50aa"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 01 14:02:18 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 01 14:21:09 2019 -0700"
      },
      "message": "audio policy: fix dynamic policy remote submix device removal\n\nThe life cycle of an IO profile on remote submix module\nassociated with a dynamic audio policy is different from other profiles\nsupporting removable devices with addresses: the profile must not be\ncleaned up when the device is disconnected but when the dynamic policy\nis unregistered.\n\nBug: 121200677\nTest: phone call while connected to Android auto head unit simulator\nChange-Id: I8c9f64697b736dab379a7d85b9d93568139e4e84\n"
    },
    {
      "commit": "fc332471b307dff3ab152db2f0cb35f12c7a50aa",
      "tree": "2162255b15a030492de380e820e65193e6fb528c",
      "parents": [
        "394a80a78c4812e8570f358e5b8fdcb061fab022",
        "af3777782de2e0a0d4e38d9c6f9667e2e055a4a7"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Mar 30 11:30:49 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 30 11:30:49 2019 +0000"
      },
      "message": "Merge \"audio policy: fix configurable engine and dynamic policies take 2\""
    },
    {
      "commit": "af3777782de2e0a0d4e38d9c6f9667e2e055a4a7",
      "tree": "839c6d315056e19e26ca6cdd48fbdbd06db26a31",
      "parents": [
        "235684f2c8d9f37c8a8358739a2c2c50164816b0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 29 14:50:21 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 29 15:44:24 2019 -0700"
      },
      "message": "audio policy: fix configurable engine and dynamic policies take 2\n\nExclude remote submix devices with non \"0\" (legacy) addresses from devices\nreturned to Engine by AudioPolicyManagerObserver::getAvailableOutputDevices()\nand AudioPolicyManagerObserver::getAvailableInputDevices()\n\nBug: 129144725\nTest: make\nChange-Id: If1ce89acb2a35a6bede195f520b4047f92b928bd\n"
    },
    {
      "commit": "204745c7a078c72e7f9991f4b79cf329ee434fd1",
      "tree": "85c8d78fe7306c4532797bfe1bb26e6895784a3c",
      "parents": [
        "235684f2c8d9f37c8a8358739a2c2c50164816b0",
        "aba3b4b493fe84cd95780971f9a4ba2e22095264"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 29 20:18:11 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 29 20:18:11 2019 +0000"
      },
      "message": "Merge \"audiopolicy: Fix dump for AudioPolicyMix criterias\""
    },
    {
      "commit": "aba3b4b493fe84cd95780971f9a4ba2e22095264",
      "tree": "a0d3b2af7473d03f044e32fdd0aa508db31dbe3e",
      "parents": [
        "c70268aa433e7d307819184ae5c2ec96a3e5b6af"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Mar 27 12:53:29 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Mar 29 09:30:55 2019 -0700"
      },
      "message": "audiopolicy: Fix dump for AudioPolicyMix criterias\n\nThe dump code was not using AudioMixMatchCriterion class fields\ncorrectly.\n\nBug: 112151391\nTest: 1. run and pause AudioPolicyTest#testMixByUidCapturing\n      2. adb shell dumpsys media.audio_policy\n\nChange-Id: I5f74a0e6dc1a7039eab1470402179b7f9d1cd962\n"
    },
    {
      "commit": "736a102604f2fed737e737552f6ff461cd326081",
      "tree": "e56c647874935e274a7fc5c209ec1afd75547971",
      "parents": [
        "08762400e90b646cdfb93a144eeb3af3525df3bb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 27 18:28:46 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 28 15:16:17 2019 -0700"
      },
      "message": "audio policy: fix configurable engine and dynamic policies\n\nMake sure the Engine is never aware of remote submix devices with non\n\"0\" (legacy) addresses as the Engine does not have to deal with devices\nonly used by dynamic audio policies.\n\nBug: 129144725\nTest: make\nChange-Id: Ifa19c952e22ac18c5d47e731cbfa41f81fe5c32c\n"
    },
    {
      "commit": "e9cecf0f8865fa43d8c2977c314f9c81fb20ba3b",
      "tree": "bf5643963711c81c5dc3e1ab748b6a9a08edbb95",
      "parents": [
        "c70268aa433e7d307819184ae5c2ec96a3e5b6af",
        "36b17553b2c3aad4d8f600edd2e82f9a583ee05a"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Mar 27 20:41:06 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 27 20:41:06 2019 +0000"
      },
      "message": "Merge \"Introduce a system APC with its corresponding opt-out\""
    },
    {
      "commit": "f5d25e6f10c7bda31a533bb5903e4ca8e6c077b2",
      "tree": "4edeb1ad14f50fb405ddca698a8f3bbfe5bd50fd",
      "parents": [
        "76e348fc43d7b8bda0362ccbf14bf0eeac09a7c9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 25 16:33:26 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 25 16:33:26 2019 -0700"
      },
      "message": "audiopolicy: fix AudioRecordingConfiguration callback\n\nSuppress first callback sent by startInput() as the input device is not\nyet set and it results in a spurious AudioRecordingConfiguration callback\nsent by RecordingActivityMonitor with a null audio device.\n\nAlso fix a bug in getInputForAttr() where the wrong audio attributes\nwere stored in the RecordClientDescriptor resulting in a failure to\ncreate the audio patch when DEFAULT audio source is used.\n\nBug: 129287962\nTest: cts-tradefed run cts-dev -m CtsMediaTestCases -t android.media.cts.AudioRecordingConfigurationTest\nChange-Id: Ia67abfa56ea653cf69e68bfabbb3d19a12adc310\n"
    },
    {
      "commit": "36b17553b2c3aad4d8f600edd2e82f9a583ee05a",
      "tree": "b07a90eaf6bcba6f06fd56ab3976d1c71c7fd712",
      "parents": [
        "791d3370830b8e22b8bbaf41c3de900de48d2be3"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Mar 07 18:48:07 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Mar 22 17:21:30 2019 -0700"
      },
      "message": "Introduce a system APC with its corresponding opt-out\n\nFor system application with the new permission CAPTURE_MEDIA_OUTPUT, or\nCAPTURE_AUDIO_OUTPUT, allow to capture the audio of playing apps that\nallow it.\n\nTest: adb shell audiorecorder --target /data/file1.raw\nTest: atest android.media.cts.AudioPlaybackCaptureTest\nBug: 111453086\nChange-Id: I5bfca51e48992234508897c595a076d066db26b2\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "bb0f557d3d0b7db071595f306555d715092dc6c5",
      "tree": "49347935de8beb756f05f06fa8e394c8c9874237",
      "parents": [
        "b3527ddc7e9f6d57890656732747c6394b8f2b71"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 11 14:29:03 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Mar 12 10:43:21 2019 -0700"
      },
      "message": "AudioPolicy: Fix UAF of a temporary DeviceVector\n\nAudioOutputDescriptor::devices() returns a DeviceVector\nby value. That means, the returned vector must be held\nas long as we need its elements.\n\nAdded a FIXME to consider other devices because the\ncurrent code looks suspicious.\n\nBug: 128327759\nTest: make\nChange-Id: Ifd3a7c8faf89b2c4fc3400aac0060d0e9e673e73\n"
    }
  ],
  "next": "b3527ddc7e9f6d57890656732747c6394b8f2b71"
}
