)]}'
{
  "log": [
    {
      "commit": "ef03eef383dd33d8dca48a8301e0487d20154dcf",
      "tree": "084f6c5e70548cacb0ef20cbffe796b9cd87d733",
      "parents": [
        "1ab91b43ec864237e3bd12929669420b55c25bf6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 05 16:30:04 2021 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 05 16:30:04 2021 +0100"
      },
      "message": "audio flinger: fix use of local variable after std:move\n\nFix potential problem introduced by commit 74c38dc7\n\nBug: 139894721\nTest: atest AudioTrackTest\nTest: atest RoutingTest\nTest: atest AudioPolicyManagerTestMsd\nChange-Id: I2bb2cb29e872115d6448dfbeb7d957c52f56289a\n"
    },
    {
      "commit": "74c38dc7e39125a9ae17daa3b810324621c0fad2",
      "tree": "55b4d2bfdb04674b707e07e1a7d15723684f1e74",
      "parents": [
        "dc66d284ad1cdfffc3e65cf352e270e43dc47ff8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 23 18:19:44 2020 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 05 08:37:54 2021 +0000"
      },
      "message": "audio flinger: report actual sink device for MSD playback threads\n\nWhen a playback thread is routed to an MSD module, make sure that the\nactual sink device selected by the software patch at the output of the\nMSD module is reported to AudioTrack clients.\n\nBug: 139894721\nTest: atest AudioTrackTest\nTest: atest RoutingTest\nChange-Id: Ie52ebe198e9ebdfe5f2a38dcd44c551c705a7931\n"
    },
    {
      "commit": "5385847f517bae5b5067507dea4df68ead351932",
      "tree": "52f652fee054bb7a8a4b8fcdba39d1885ac3fab2",
      "parents": [
        "f9dd9246bf47c72c1e38f0cc5a012f056627dce7"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Mon Nov 30 11:04:46 2020 -0800"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Tue Dec 01 10:04:13 2020 -0800"
      },
      "message": "Move business logic out of IAudioFlinger\n\nIAudioFlinger should only contain transport logic, in preparation for\nAIDL conversion.\n\nTest: Audio-related CTS tests from CtsMediaTestCases\nChange-Id: I2a6d8f16da720a3db7c673e5b2bb9bbd23bbf985\n"
    },
    {
      "commit": "b4fed19dd0c7ccbcd476e74ff123165ec315d8dd",
      "tree": "bd9c475e7ab5b6a7d562bf5b98407af0002ccafd",
      "parents": [
        "b1c141b95ac1d2fb14d371e6dae530a841a13cb4"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 22 14:45:40 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 18 08:43:29 2020 -0800"
      },
      "message": "Call getAudioPort to get supported attributes for audio devices.\n\nGetAudioPort API will return the supported attributes for the devices.\nCall getAudioPort to get the supported attributes for the audio\ndevices so that it is no needed to get supported attributes via\ngetParameters API.\n\nBug: 160352965\nTest: make\nTest: atest audiopolicy_tests AudioPlaybackCaptureTest\nChange-Id: Icdfe76e15066bbff10308d6dfd1cf742da33fec9\n"
    },
    {
      "commit": "3a0cf4747666fd0d38c7b95f3cbaee094ce6b9e8",
      "tree": "38537e76b2e160c2041098d6e7854b000ebcf451",
      "parents": [
        "3b4270ecbebad2b5c0d6733eee3fb52e1ddb76aa"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Tue Nov 03 17:29:35 2020 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Tue Nov 03 17:29:35 2020 +0000"
      },
      "message": "Revert \"Call getAudioPort to get supported attributes for audio devices.\"\n\nThis reverts commit 3b4270ecbebad2b5c0d6733eee3fb52e1ddb76aa.\n\nReason for revert: b/172307055\n\nChange-Id: Ic22dad674bbd9eee9d3b24308e2a2e964c6406f2\n"
    },
    {
      "commit": "3b4270ecbebad2b5c0d6733eee3fb52e1ddb76aa",
      "tree": "863c12584b2c54fc3539bfbb85e29e670a41e740",
      "parents": [
        "29ac42b5105591c64454e06bf81b7b6782e54e81"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 22 14:45:40 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Oct 14 18:19:49 2020 -0700"
      },
      "message": "Call getAudioPort to get supported attributes for audio devices.\n\nGetAudioPort API will return the supported attributes for the devices.\nCall getAudioPort to get the supported attributes for the audio\ndevices so that it is no needed to get supported attributes via\ngetParameters API.\n\nBug: 160352965\nTest: make\nTest: atest audiopolicy_tests\nChange-Id: I6bd109fcb6ffb825cbb9cf539d569e9cad44bb37\n"
    },
    {
      "commit": "c9324c6fd9f92107ea2367d683104602dad4c97a",
      "tree": "19c71f5ee4fd63d3106fcee0f845fd7495b1adb9",
      "parents": [
        "b495377cac061d5856f0666b69bef42fdd244fb1",
        "2a836dd6cae60c7a8de52ca6badfb0fb6c8aa898"
      ],
      "author": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Jan 15 18:24:15 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Jan 15 18:24:15 2020 +0000"
      },
      "message": "Merge \"PatchPanel: Fix crash when tearing down \"pass thru\" software patch\" am: f27d1e474b am: 8a56a515b3 am: 2a836dd6ca\n\nChange-Id: If93298123cfe85b1230240c36ed52ade149bd868\n"
    },
    {
      "commit": "f27d1e474b8dfe0f52bb22407394591a5dc471f9",
      "tree": "4ab62e77cc4942322234705c98e4bd53dd747a4d",
      "parents": [
        "ba385271f7deb6acbf4998a89a364547ae4d81ee",
        "dd91ce21677b5dbb42e9d5ecf25c9db66616211e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 15 17:33:44 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 15 17:33:44 2020 +0000"
      },
      "message": "Merge \"PatchPanel: Fix crash when tearing down \"pass thru\" software patch\""
    },
    {
      "commit": "9b2064c3afe14f893afff019bdcd4c4d40ce13ed",
      "tree": "0a49d5049cfd60fb6de3387460f5bb41a58e2ed1",
      "parents": [
        "249dba6eb7b1f71a424290e1c58c3bedb76a0595"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 17:25:04 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 13 23:05:34 2020 +0000"
      },
      "message": "AudioFlinger: implement device specific audio effects\n\nAdd management of audio effects applied to a specific input\nor output audio device.\n\nA new class DeviceEffectProxy derived from Effectbase is added\nto represent an effect attached to a particular audio device type and\naddress. This proxy manages one or more actual EffectModule instances\nautomatically added to a playback or capture thread or directly to the\naudio HAL when the targeted audio device is used by an audio patch.\n\nA new DeviceEffectManager class is added to manage creation and release\nof DeviceEffectProxy instances and monitor creation and release of audio\npatches and create or release actual effect instances accordingly.\n\nBug: 136294538\nTest: make\n\nChange-Id: I23b9f9db4459136039c5ee327cf3b1aefa7db5af\nMerged-In: I23b9f9db4459136039c5ee327cf3b1aefa7db5af\n"
    },
    {
      "commit": "dd91ce21677b5dbb42e9d5ecf25c9db66616211e",
      "tree": "91ff0ebd15816e5e59359a96d0ff684753bc7023",
      "parents": [
        "3c9b9af1533d562576dae545dc5d4f633df6e79e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jan 13 11:34:30 2020 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jan 13 11:50:45 2020 -0800"
      },
      "message": "PatchPanel: Fix crash when tearing down \"pass thru\" software patch\n\nThe pass thru software patch is normally used with the MSD module.\n\nThere is no need to establish a peer reference from PatchRecord\nbecause its I/O code only gets executed by PatchTrack\ninitiative. In fact, this also means PassthroughPatchRecord\ncan\u0027t be stopped synchronously, so the usual software patch tear\ndown logic in PatchPanel leads to a null pointer dereference\nbecause it races with PatchTrack I/O activity on a separate\nthread.\n\nFix by skipping the sp\u003c\u003e setup / clear logic in PatchPanel\nfor PassthroughPatchRecord.\n\nBug: 147599144\nTest: force teardown of MSD patch, check logcat for crash\nChange-Id: I4a2abc16ad705244767b33ea529e1ace2213d19f\n"
    },
    {
      "commit": "b82e6b724e45b1f88ed746c316b445b3bb8036b3",
      "tree": "4fd55853fe2b97b98bf27bff61142d9b2b92f28f",
      "parents": [
        "9ce5404e8ee6cf247a9004500cb91bf3b8114b14"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 17:25:04 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 07 17:05:07 2020 -0800"
      },
      "message": "AudioFlinger: implement device specific audio effects\n\nAdd management of audio effects applied to a specific input\nor output audio device.\n\nA new class DeviceEffectProxy derived from Effectbase is added\nto represent an effect attached to a particular audio device type and\naddress. This proxy manages one or more actual EffectModule instances\nautomatically added to a playback or capture thread or directly to the\naudio HAL when the targeted audio device is used by an audio patch.\n\nA new DeviceEffectManager class is added to manage creation and release\nof DeviceEffectProxy instances and monitor creation and release of audio\npatches and create or release actual effect instances accordingly.\n\nBug: 136294538\nTest: make\n\nChange-Id: I23b9f9db4459136039c5ee327cf3b1aefa7db5af\n"
    },
    {
      "commit": "7d6d1ef2aaaf60061ed67749be217d3533cf985b",
      "tree": "dd681cf232990c90267a6f90f88dcc2e9b7229af",
      "parents": [
        "94e872e6894dce7d89954d0515c140ec626d20ba",
        "801d72f468890cb7fc8371f5434c4ce0414f0476"
      ],
      "author": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Dec 18 01:53:27 2019 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Dec 18 01:53:27 2019 +0000"
      },
      "message": "Merge \"Use max of play/record frame counts for PassthruPatch track\" am: e93545d3ae am: dd35e2c49d am: 801d72f468\n\nChange-Id: Ic5d65eb77d307f3f2eb70e5608f377719374a641\n"
    },
    {
      "commit": "b3643899c48dfe9bec2876e40faaf8b913aa4627",
      "tree": "924f685a4c1e434999fa70ae4907982bf16d1ae5",
      "parents": [
        "e17f0c1c1e065d2985113ee6703fe40186b74963"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Wed Dec 18 08:38:37 2019 +1100"
      },
      "committer": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Wed Dec 18 10:39:31 2019 +1100"
      },
      "message": "Use max of play/record frame counts for PassthruPatch track\n\nThis patch avoids pseudo LCM buffer calculation oversized buffer\ncausing posix_memalign error in cases of large play/record frame\ncounts (such as 24596) for PassthruPatchRecord patches.\n\nTest: MSD to Primary audio patch with play/record frame counts\n      of 24596.\nChange-Id: I3a2f3795330e99984388b01033d8e7c1685d01f2\n"
    },
    {
      "commit": "10d86fd087218d43254ec781612a9f86c0022e9d",
      "tree": "35246193cf7aaf924548f3cd15d763bd297d44aa",
      "parents": [
        "c010683e081f48eb72e21cbcf0458efc17184e6b"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 31 17:20:42 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:42:23 2019 -0800"
      },
      "message": "Refactor audio device type in audio flinger.\n\nAs audio device type must not be used as a bit mask, there is a\nrequirement to refactor the code in audio flinger. This CL includes:\n1. Use DeviceTypeSet for recording output devices in Threads. The input\nand output device types in Threads will only be updated when creating\nan audio patch.\n2. Use helper functions in audio flinger for checking whether an audio\ndevice type is a certain category.\n3. Use DeviceDescriptorBaseVector as vector of DeviceDescriptorBase.\nDeviceDescriptorBaseVector will be used in RecordThread to record output\ndevices, which will be used in audio effect.\n4. Do not use set parameters when communicating output devices to\nRecordThread. Instead, adding a new event in Thread to update output\ndevices directly.\n\nBug: 135621476\nTest: atest AudioTrackTest AudioRecordTest AudioPlaybackCaptureTest\nTest: atest AudioHostTest AudioServiceHostTest RoutingTest\nTest: atest AudioEffectTest BassBoostTest DynamicsProcessingTest\nTest: atest AAudioTests\nTest: audio smoke test, run OboeTester\nChange-Id: I87f3e59fd01b0b100232d61a9abbc471c61110c4\nMerged-In: I87f3e59fd01b0b100232d61a9abbc471c61110c4\n"
    },
    {
      "commit": "9bcfa7c7550e36f2b594a25896103f675751af80",
      "tree": "df29ec56d37f93bb31ece05e55454e1d84b732d4",
      "parents": [
        "d203cb92c9c9628b3bead45ec08f826544c1d649"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 21 15:45:04 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 21 15:49:41 2019 -0800"
      },
      "message": "audioflinger: fix reuse of audio HAL patch handle\n\nFix bug in PatchPanel::createAudioPatch() were the previous\naudio HAL assigned patch handle was dropped when modifying an exiting\naudio patch\n\nBug: 137300168\nTest: manual test with USB headset insertion removal\nChange-Id: Ie8345ca97502a2d7327535f0228e0ff0bc95f8e9\n"
    },
    {
      "commit": "c52b1ffec2ad11ad0ea1fb7e702da1086c9df437",
      "tree": "b55dcb697023b715848166282b3b588c0aa72530",
      "parents": [
        "c76250c8279552db0be9068e49f65696f931c011"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 31 17:20:42 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Nov 08 11:37:27 2019 -0800"
      },
      "message": "Refactor audio device type in audio flinger.\n\nAs audio device type must not be used as a bit mask, there is a\nrequirement to refactor the code in audio flinger. This CL includes:\n1. Use DeviceTypeSet for recording output devices in Threads. The input\nand output device types in Threads will only be updated when creating\nan audio patch.\n2. Use helper functions in audio flinger for checking whether an audio\ndevice type is a certain category.\n3. Use DeviceDescriptorBaseVector as vector of DeviceDescriptorBase.\nDeviceDescriptorBaseVector will be used in RecordThread to record output\ndevices, which will be used in audio effect.\n4. Do not use set parameters when communicating output devices to\nRecordThread. Instead, adding a new event in Thread to update output\ndevices directly.\n\nBug: 135621476\nTest: atest AudioTrackTest AudioRecordTest AudioPlaybackCaptureTest\nTest: atest AudioHostTest AudioServiceHostTest RoutingTest\nTest: atest AudioEffectTest BassBoostTest DynamicsProcessingTest\nTest: atest AAudioTests\nTest: audio smoke test, run OboeTester\nChange-Id: I87f3e59fd01b0b100232d61a9abbc471c61110c4\n"
    },
    {
      "commit": "48f1d4579f9fe1cd6ff672fe9daa27fec83d82c7",
      "tree": "7958f3d8e8f59dbbcc0474cf84ddae8bc889ba35",
      "parents": [
        "e6eb348b793736f1f4e441b53167d0c09e614f6b"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 01 16:52:14 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 04 16:00:03 2019 -0700"
      },
      "message": "Use PassthruPatchRecord for DIRECT to DIRECT connections\n\nWhen both input and output connected by a software patch\nare in \u0027DIRECT\u0027 mode (no framework processing), use\nPassthruPatchRecord as it helps to reduce the latency\nsignificantly by avoiding intermediate buffering.\n\nRemove \u0027std::nothrow\u0027 from tracks creation in PatchPanel\nfor consistency with other code.\n\nBug: 117564323\nTest: with MSD module\nMerged-In: I52ec5b02a207548ebc4073c1033e396f444c041c\nChange-Id: I52ec5b02a207548ebc4073c1033e396f444c041c\n"
    },
    {
      "commit": "9515fc85a6b7de9c0520315f33c5a6d6421e738b",
      "tree": "a38e5f2becb61c48da950eaf1b03ef3bcb811b8e",
      "parents": [
        "caf5994f652e33336e7bded702c30e29c1d85eb6"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 01 16:52:14 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 03 12:21:41 2019 -0700"
      },
      "message": "Use PassthruPatchRecord for DIRECT to DIRECT connections\n\nWhen both input and output connected by a software patch\nare in \u0027DIRECT\u0027 mode (no framework processing), use\nPassthruPatchRecord as it helps to reduce the latency\nsignificantly by avoiding intermediate buffering.\n\nRemove \u0027std::nothrow\u0027 from tracks creation in PatchPanel\nfor consistency with other code.\n\nBug: 117564323\nTest: MS12 MSD, AOSP MSD\nChange-Id: I52ec5b02a207548ebc4073c1033e396f444c041c\n"
    },
    {
      "commit": "ae22b4843b3cfcbbf6fdbc21e60f1bd0c1d1f763",
      "tree": "91ebed531eb0e24fbe9d9fc0ad9577a4c337e80f",
      "parents": [
        "e905b6b18738572062e9c30735539836af683643"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 09 15:38:55 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 09 17:02:49 2019 -0700"
      },
      "message": "AudioFlinger: Do not permit fast patch tracks if not compatible\n\nTest: atest AudioPlaybackCaptureTest\nBug: 132346038\nChange-Id: I67939ed7f98c546d41148d36764d93723353c893\n"
    },
    {
      "commit": "d3f301ccb9431a70c0489e9954e45add600919be",
      "tree": "0a25a32ea71bf729d572d7d5d6e4339248b3e2ec",
      "parents": [
        "0428b8e5a53c3c37e0f76decc7a8f32854488062"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 11 08:58:03 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 11 08:58:03 2019 -0700"
      },
      "message": "audioflinger: Fix crash on patch creation attempt\n\nThe code for clearing software patch connections was missing\na check for a null track pointer.\n\nBug: 126789266\nBug: 128269566\nTest: see repro steps in b/128269566\nChange-Id: Ice6887622d5fa2fa3198ce15146bff3cb05f7451\n"
    },
    {
      "commit": "abfab20fdbdc41168f816272c31caa6c1264ba46",
      "tree": "940b8444b6e54cd0beee1b51427dab2715d7453a",
      "parents": [
        "4e7c08a1343cc9a47c17950359fb0845b262dc40"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 07 19:45:54 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 08 10:37:15 2019 -0800"
      },
      "message": "PatchPanel: Keep peer alive during use.\n\nTest: BT call, switch from hearing aid to headset\nBug: 126789266\nChange-Id: I589e5ecaac25c1ce1d504a387662b96cf50f63ba\n"
    },
    {
      "commit": "2224c5a0f7ff52d8b40cc3e8b67f3f71560f842e",
      "tree": "d87577ba156774092ce9395bb281f5bbbc115eed",
      "parents": [
        "e04ba51703c3fb797f6b7e22d5848d0ed3801bc6"
      ],
      "author": {
        "name": "juyuchen",
        "email": "juyuchen@google.com",
        "time": "Mon Jan 21 12:00:58 2019 +0800"
      },
      "committer": {
        "name": "juyuchen",
        "email": "juyuchen@google.com",
        "time": "Wed Feb 13 12:00:28 2019 +0800"
      },
      "message": "audio: use SinkMetaData to route voice call with hearing aid.\n\nBug: 121173695\nTest: manual audio test\n\nChange-Id: If51b7c5063d0578ec4b8b16ec8ccd1712ae2c85c\n"
    },
    {
      "commit": "3903e9f58fdbdea94052f5870792f1e61a2f0f2b",
      "tree": "084a33e117db465218fdae52984e1b26d58113fa",
      "parents": [
        "aa1523c14af06a2f213e570d12ce01b71422b26a",
        "b4e037e01450cbc99191a89e507805974d347899"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 18 03:37:23 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 18 03:37:23 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: provide downstream sink device to software patch source\""
    },
    {
      "commit": "526aa572bbc5dd1fa1b103a98d9f91a758d8d5c4",
      "tree": "561cdfdb680a1cef61e5a80a7d96983569ca3a29",
      "parents": [
        "26f23259c6ccbebf59e5266b9b39057db92e9dc6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 15 10:54:58 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 15 11:00:51 2019 -0800"
      },
      "message": "audio flinger: clear possible stale audio patch on inputs and outputs\n\nIn PatchPanel::createAudioPatch() verify that when creating a patch with\nan output or input mixer as source or sink, no patch with the\nsame output or input mixer remains in the patch list.\nThis will prevent a call to releaseAudioPatch(() received\nlater with a stale patch handle due to delayed request to clear current\noutput or input routing.\n\nTest: play music and insert USB headset.\nChange-Id: I9417bf061f5ef1d93cf3871a9ed51ee2b6ae62ef\n"
    },
    {
      "commit": "b4e037e01450cbc99191a89e507805974d347899",
      "tree": "9e1dff2e3afe399eec542594a4ed480a9d1adf99",
      "parents": [
        "8292a716361d0f02de2b79242aec4630664bc770"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jan 14 15:56:33 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jan 14 15:56:33 2019 -0800"
      },
      "message": "AudioFlinger: provide downstream sink device to software patch source\n\nWhen opening an input stream for a software patch, pass in\nthe downstream destination device info. This helps the intermediate\nmodule to set up any device-specific processing.\n\nNote that the intermediate module must implement Audio HAL V5.0\nin order to be able to receive this information. It\u0027s not available\non the legacy audio HAL API either.\n\nBug: 120859615\nTest: make\nChange-Id: I542a47d2c299fe19f576d5f5c2b237cc00ae5b93\n"
    },
    {
      "commit": "b8b6097e135cbf0c48a9924a592de992b3396e17",
      "tree": "1a057d2074c0d086f9396531f203597b17f901c6",
      "parents": [
        "c5fee0a8854f5decd3b567d2383cd38f0aada4f4"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Sep 13 12:55:43 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Sep 13 12:55:43 2018 -0700"
      },
      "message": "PatchPanel: Specify latency units for patches\n\nWhen the latency number is too high, it becomes ambiguous\nwhether it\u0027s in milli- or nano-seconds.\n\nTest: dumpsys\nChange-Id: I175a562f403dc4d67e50687927cd4edf9bc7d922\n"
    },
    {
      "commit": "30282562329b3031b6bfa0869bd76ff5f543ebba",
      "tree": "82ba1641c178b26419735faf7f99be6bc1ffc9c1",
      "parents": [
        "182d359515fbf4ba0fc14709b583c29edce30897"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 08 18:27:03 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 13 16:27:59 2018 -0700"
      },
      "message": "AudioFlinger: Add patch latency for direct record/playback\n\nThis relies on being able to obtain presentation position and\ncapture position accurately from the HAL, in the presence\nof potential underruns or overruns.\n\nTest: MSD hal dumpsys\nBug: 112428710\nChange-Id: I9aad574baaff60b5e0c5d8c39a2147d19ee613f5\n"
    },
    {
      "commit": "01c8f5681ce875bb60b6451929bb3fbd0876ca61",
      "tree": "eb31a887a84e973ead1f4266a4a8f45db9909306",
      "parents": [
        "88585f96fe27f60c8c90699466f9da80fca6d658"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Jul 19 17:47:28 2018 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jul 27 16:20:49 2018 -0700"
      },
      "message": "Use fast mode with patch track and patch record if possible.\n\nUse fast mode with patch track/patch record if fast mixer/fast capture\nis enabled. With the fast track and fast mixer/fast capture, we can get\na better performance on latency.\n\nBug: 111800664\nTest: make phone call on marlin/walleye with enabling legacy usb hal\nChange-Id: I0edd5978049e7c55da217a7a19e45fcbe5c3ac62\n"
    },
    {
      "commit": "c9932fb7c3fa68e3a56e44346638ce93400d6c62",
      "tree": "a73e1cfa03fe1c32880174b0af5f80411aad48eb",
      "parents": [
        "afa8c7024bdb34650c4c1686410867a05dc0b6d2",
        "776eb210f79bb3f944e4b7405a1f8a9ea00438f6"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 20 20:17:11 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 20 20:17:11 2018 +0000"
      },
      "message": "Merge \"audioflinger: Fix stream type for device-\u003edevice patch\""
    },
    {
      "commit": "776eb210f79bb3f944e4b7405a1f8a9ea00438f6",
      "tree": "368b37a599f29a5052fb9a65ccedcc24941c19dc",
      "parents": [
        "24b617232c7400c9165bde09542bdb41cb113089"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 19 15:14:11 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 19 15:14:11 2018 -0700"
      },
      "message": "audioflinger: Fix stream type for device-\u003edevice patch\n\nThis logic got broken in ag/668511. The stream type was always\nextracted from the 2nd patch source, which does not present\nfor device-\u003edevice patches.\n\nTest: MSD prototype, USB headset telecom calls in Pixel\nChange-Id: Idc8314819010c3a315c5220785a4190e26e55b47\n"
    },
    {
      "commit": "67bae2cd210377e140fac0dc68ebe3e207c34143",
      "tree": "854f37f1420260ba772e1a00e113bd0485cd7aa4",
      "parents": [
        "24b617232c7400c9165bde09542bdb41cb113089"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 16 15:44:35 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 16 15:44:35 2018 -0700"
      },
      "message": "audioflinger: Honor config flags when opening s/w patch output\n\nIf the patch sink configuration specifies sampling rate, format,\nand channel mask, use them when opening the output side of\na software patch.\n\nBug: 63901775\nTest: MSD prototype; Telecom calls via USB headset on Pixel.\nChange-Id: I705d46524cfcc59c88c57b18a45bee0c6b922b62\n"
    },
    {
      "commit": "adca70f3a1526943d69b506922553b15fa58564c",
      "tree": "41c3b6a045f623aa660a7f289cfedc789b89af27",
      "parents": [
        "66c153a4e59006920865383372f86e829fdd0263"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 09 12:49:25 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 13 09:32:30 2018 -0700"
      },
      "message": "PatchPanel: store \"downstream\" patches for a device\n\nWhen the system inserts an intermediate processing module between\naudio flinger and hardware HAL, and they are connected via a\nsoftware patch, the threads of this patch need to receive\nmetadata passed to the thread serving the \"upstream\" device of\nthe processing module.\n\nPatchPanel stores an association between \"upstream\" streams\nand the software patch. This allows audio flinger to access\nthe patch threads.\n\nFor more info, see the comments in PatchPanel.h\n\nBug: 63901775\nTest: manual\nChange-Id: I60e578c37a1bc7385daf32d379ea143120584a31\n"
    },
    {
      "commit": "ac9858be02edea7770ab3bb27d1cc15e4640fb26",
      "tree": "ff0385983e0302f6f81a902d0e63b680d6c83ff5",
      "parents": [
        "908c7d77355ae2c63a179a4ebfce69b7a6d31e3f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jun 15 13:12:37 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 09 14:01:15 2018 -0700"
      },
      "message": "Use and test patch utilities from system/audio.h\n\nUse `audio_patch_is_valid` function.\n\nAdd basic tests for the following functions:\n  audio_patch_is_valid\n  audio_port_config_has_hw_av_sync\n  audio_patches_are_equal\n\nBug: 63901775\nTest: systemaudio_tests\nChange-Id: I378ab544e4148fda0dd7b9520d6fd57ff01cb34b\n"
    },
    {
      "commit": "7c6ae98049e422454f6e9ea21d9d3fd6a7bfd217",
      "tree": "06f9d2dc1df52505e59968677bc1dc8d042a1e55",
      "parents": [
        "495d8f29c82be95d499f8897311411ccc74ec52b"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jun 14 12:33:38 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jun 14 17:03:06 2018 -0700"
      },
      "message": "audioflinger: Add support for RecordTrack with no conversion\n\nWhen piping encoded audio data via software patch, it needs\nto be created without the buffer converter. In this case the audio\ndata is copied directly from ResamplerBufferProvider.\n\nAdded input flag AUDIO_INPUT_FLAG_DIRECT to indicate to PatchPanel\nthat the PatchRecord track needs to be opened in this mode.\nThis flag can be later added to minor Audio HAL update.\n\nBug: 63901775\nTest: MSD scenario; verified that phone over USB headset still works\n      on marlin / sailfish\n\nChange-Id: If2745778d356769b143fb3c29910275ddef119ac\n"
    },
    {
      "commit": "c3ab7730885d26b95014be1768dfac3db53dd7c1",
      "tree": "32ef50ad282a1e19c01f38140aa63266188c2b0e",
      "parents": [
        "000adb5e9135a739b5e3a0607604cdf6be6fe11b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 01 13:46:29 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 04 11:36:49 2018 -0700"
      },
      "message": "PatchPanel: Add latency information for software patches\n\nTest: audioflinger dumpsys when patches present\nBug: 80546849\nChange-Id: Ib5b26e065ab20b5f8d530db57398e7b4a59ed1f1\n"
    },
    {
      "commit": "32abc2bfbf3bc8db0bdcbdc0f700350d7a5bc547",
      "tree": "15f2b1791e1d27b28779b330392c7c1f0f97f5e4",
      "parents": [
        "f4d3741b3a721f8e1f72ec3ca2684efe22526d80"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 24 12:57:11 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 30 15:48:58 2018 -0700"
      },
      "message": "Use the new audio_port_config.flags field\n\n- When filling out audio_port_config from AudioPortConfig and\n  AudioFlinger\u0027s threads, populate audio_port_config.flags when needed.\n\n- When creating software patches, apply the flags provided\n  in audio_port_config_flags to the created threads.\n\nBug: 63901775\nTest: use USB headset for telephony on sailfish\nChange-Id: I7704797a84427f7a9431e5132b8f5c51538f9217\n"
    },
    {
      "commit": "5ebb948176e82286107c023d894e4e2c47be6fcd",
      "tree": "2e7342620e5b3f58a89902d51428f9acee3a1ba4",
      "parents": [
        "45af9cd0cf716426cb29c9ea1ae8df5cfad9e5c5",
        "c589a49b2efbb6cb6cbe9221269bdd7953ae6d06"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon May 21 17:03:29 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon May 21 17:03:29 2018 +0000"
      },
      "message": "Merge \"PatchPanel: Fix typo in patch validation\""
    },
    {
      "commit": "31e2127d4b78daeedd36b6daabc4ba7dfe1b7ec7",
      "tree": "94cb659b36b481757c4dce0c8260f1689c3c07df",
      "parents": [
        "808dba40e49855a3537fee311a93ad76e443d1b8",
        "ab7ef300b74904bce6c5c810d9e5679abfa582e6"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 18 17:42:55 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 18 17:42:55 2018 +0000"
      },
      "message": "Merge \"Move ServiceUtilities from audioflinger to libmediautils\""
    },
    {
      "commit": "201369ba583a63b87f40dacbbc2d9c2a13cbb958",
      "tree": "048683ea45de57cd5a62c9cff279e564ef52cecf",
      "parents": [
        "4dbb7193c5fde752707bee899a018511e872f1e5"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 16 16:52:32 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 17 10:45:31 2018 -0700"
      },
      "message": "audioflinger: Dump software patches\n\nExample output:\n\n    Software patches:\n      Patch 44: thread 0xa6d83900 \u003d\u003e thread 0xa7dfe000\n\nThis helps to identify threads used for the patch.\n\nTest: adb shell dumpsys media.audio_flinger\nChange-Id: I6c70945abd8e4abd46cd0311559d35efb6127555\n"
    },
    {
      "commit": "ab7ef300b74904bce6c5c810d9e5679abfa582e6",
      "tree": "dadb05ba8da176c046139ca43c3fae48a14191c3",
      "parents": [
        "1f2bfd3ac9d61982acb348d2c78f95c7d4b0bf05"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 15 19:35:29 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 16 18:49:09 2018 -0700"
      },
      "message": "Move ServiceUtilities from audioflinger to libmediautils\n\nTest: Play Music, Play Movies, Camera, Photos\nBug: 79485140\nChange-Id: Ib8382547828e386024145c416321d24e4af182db\n"
    },
    {
      "commit": "c589a49b2efbb6cb6cbe9221269bdd7953ae6d06",
      "tree": "706b7c5545c31cd96f72de7b0e9df01833b95942",
      "parents": [
        "f1040d20210338eb850b000d4344ddc9a04eb493"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 16 11:14:57 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 16 11:14:57 2018 -0700"
      },
      "message": "PatchPanel: Fix typo in patch validation\n\nThis piece of logic does not seem to be correct:\n\n(patch-\u003esinks[i].type \u003d\u003d AUDIO_PORT_TYPE_MIX ||\n patch-\u003esinks[i].ext.mix.hw_module !\u003d srcModule)\n\nI assume it should be:\n\n(patch-\u003esinks[i].type \u003d\u003d AUDIO_PORT_TYPE_MIX ||\n    (patch-\u003esinks[i].type \u003d\u003d AUDIO_PORT_TYPE_DEVICE \u0026\u0026\n     patch-\u003esinks[i].ext.device.hw_module !\u003d srcModule)\n\nWas working fine because \u0027hw_module\u0027 is the first field both\nin audio_port_config_device_ext and audio_port_config_mix_ext.\n\nTest: make\nChange-Id: Icf80cec701048bddc4d63eaedf00fc75b5b891dd\n"
    },
    {
      "commit": "dc769682023ba8a8a5da07c3e3a3adfabe4bd612",
      "tree": "6f6a0991e71927cda302c4c489f69bd239023597",
      "parents": [
        "f1040d20210338eb850b000d4344ddc9a04eb493"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 15:34:08 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 16 09:43:33 2018 -0700"
      },
      "message": "audio_server: Unify audio_patch creation\n\nProvide PatchBuilder helper class instead of fiddling with\nstruct audio_patch directly.\n\nRename \u0027getAudioPortConfig\u0027 methods of AudioFlinger helper\nclasses into \u0027toAudioPortConfig\u0027 to match classes\nof AudioPolicyManager.\n\nFactor out common code in AudioPolicyManager that was\nadding audio patches. For that, AudioOutputDescriptor now inherits\nfrom AudioSessionInfoProvider, and the latter has been extended\nwith \u0027setPatchHandle\u0027 method.\n\nTest: switch to/from Bluetooth on phone calls and media playback,\n      use camcorder\nChange-Id: Idd99645dc6943ed078c4d94d0197fead7831ab4d\n"
    },
    {
      "commit": "444ecc3476107a1e80f1573b20ceca5e9949e4ae",
      "tree": "0c431300c26a616e77e1200f3d3b46638f1668e5",
      "parents": [
        "6205a06d20d6b92d52044e8076beaac4c7873a21"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue May 01 17:40:05 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 11:05:38 2018 -0700"
      },
      "message": "PatchPanel: Cleanup and refactoring\n\n  * Unified software patch endpoints management code.\n\n  * Noticed that Patch::clearConnections is only called before\n    getting rid of Patch instance, so there is no need\n    to explicitly clear references to endpoints\u0027 Track and Thread.\n\n  * Fixed out-of-memory handling when creating tracks for\n    a software patch.\n\n  * Factored out finding HAL Device by module handle.\n\nTest: verify transitions to/from BT while playing media and making calls\nChange-Id: If6459c477054d6dff60dfa13f2d99ee2d6e887ad\n"
    },
    {
      "commit": "dea53040273928d1cf4dc028c93afac706445c49",
      "tree": "2f1de9deed88e8dbe142d39dfab92a00afba09a8",
      "parents": [
        "03625f6e43934ebf53864160a6e325eefcc3336e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 26 13:10:21 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 26 16:45:06 2018 -0700"
      },
      "message": "Refactor PatchPanel\n\nMajor changes:\n\n * since PatchPanel is internal to AudioFlinger, and has the same\n   lifetime period, there is no need to use reference counting;\n\n * setAudioPortConfig moved to AudioFlinger;\n\n * store Patches in std::map instead of SortedVector, and\n   directly--not as pointers;\n\n * move {create|clear}PatchConnections into Patch class;\n\n * use __func__ in logging.\n\nTest: test basic audio functionality on taimen\nChange-Id: I813fd8430a0e97cd01cc74e6b3b828b10ff5acd4\n"
    },
    {
      "commit": "1bc088a918d7038603230637d640941953b314d4",
      "tree": "e231c2b22d944eaed29445fe4a35861fddb50e54",
      "parents": [
        "e54461ae132a79d0ffa9d3ec4631df13eb5c7809"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 09 15:57:31 2018 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 16 15:50:32 2018 -0800"
      },
      "message": "Call AudioMixer only from MixerThread threadLoop.\n\nAs part of change:\nRemove track name offset by TRACK0.\nMove track name management to the Tracks class.\nSync mixer track name to FastMixer track index.\n\nFixes regression introduced by commit 8ed196a.\n\nTest: SoundPool, AudioTrack CTS, Usability\nBug: 72937362\nBug: 73004420\nChange-Id: I2f1a33f6f0da66bcd7aa91e2a4b663ff822df645\n"
    },
    {
      "commit": "8fe68036c2a670abb9eb0cc67ab9830c2c23de81",
      "tree": "f1ab9bb9ef108d9812188a38c021cd5ad6b184c6",
      "parents": [
        "12852bd16b84f0157cf500389304ab1e35993a81"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 05 16:17:51 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jun 13 12:35:16 2017 -0700"
      },
      "message": "Track: Check buffer size\n\nTest: Native POC\nBug: 38340117\nChange-Id: Ia7edd9a802905214a27961dbcec6352f6ef98f73\n"
    },
    {
      "commit": "6acd1d432f526ae9a055ddaece28bf93b474a776",
      "tree": "5035b942396a0e907e0c23f803a349d17dc50ad5",
      "parents": [
        "fc23520d9c3f15e28baa81de5f7dfa6c1b0af426"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 04 14:23:29 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 11 12:59:06 2017 -0800"
      },
      "message": "Add support for mmap stream\n\nAdd support for MMAP streams created by Oboe service.\n- A new audio thread class MmapThread deriving from ThreadBase\nis added to manage permissions, volume, routing and wakelocks for activity\non MMAP streams.\n- Requests received over MmapStreamInterface to open, start and stop\na MMAP stream are forwarded to audio policy manager so that activity\non MMAP capture and playback streams is visible to audio policy and\ntaken into account in volume and routing management.\n`\n\nBug: Bug: 33398120\nTest: manual test\nChange-Id: I957906495fe9277d2972d810b633f50cd1e14ec3\n"
    },
    {
      "commit": "9ee0540d3a61bff03d561ca431a371c3d9335d2b",
      "tree": "1bf7817725f35ec9c0755e819cb5f58fdf0bf487",
      "parents": [
        "e7e8d636b486cf49487db1d8da5e8e7cb15d9549"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 13 15:58:17 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Oct 19 09:46:33 2016 -0700"
      },
      "message": "Remove last references to hardware/audio.h\n\nDeviceHalInterface transitioned to \"capabilities\" model\n(similar to the one already used by streams, e.g. \u0027supportsDrain\u0027).\nNo direct checking of the HAL version is needed.\n\nAudioPolicy uses its own version read from the configuration,\nand these values never checked against the actual HAL version,\nthus it does not need versions and macroses from hardware/*.\n\nTest: make \u0026 run on N6P\nChange-Id: Ic4a56bfa19a9a61edac2b9f9a163fd8f63a0ff87\n"
    },
    {
      "commit": "00260b5e6996b0a4b12f71c5b84e44adea040534",
      "tree": "7e93a2e3cc5f918d8f7a7409d9c98712eed0d2fe",
      "parents": [
        "47677e3edda7b15bc0b48c6863a01ae052785e0c"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 13 12:54:24 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 13 14:02:38 2016 -0700"
      },
      "message": "Remove dependencies on hardware/audio_effects.h and EffectsFactoryApi.h\n\nAlso remove some outstanding dependencies on hardware/audio.h.\n\nMost of the time, only constants and structs from audio_effects.h\nare used, and no actual calls into HAL are made. Move these\ndefinitions into system/audio_effect.h, and generate constants\nfrom TREBLE HAL definition.\n\nFor parameters, always use values from AudioParameter class.\n\nThere are still some outstanding includes of hardware/audio.h\nin code that directly deals with audio modules. Need to extend\nlibaudiohal interfaces to support required functionality.\n\nTest: make\n\nChange-Id: I0bcdf8ae199485d4d65f3eeb7e7a3b9b5cdb6ab6\n"
    },
    {
      "commit": "e4f1f63a2c54ee8687ad8cca18df0f6639ad7c81",
      "tree": "941cdb35111e5e01ece553475e5bbf7841a7116c",
      "parents": [
        "1724ee3caa5f0b4e73979036073f0b71a115083a"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Aug 31 11:35:10 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Sep 13 16:27:15 2016 -0700"
      },
      "message": "Abstract away access to audio devices HAL\n\nIn this CL all direct access to audio_hw_device_t and its functions is\nencapsulated within the new class DeviceHalLocal. Loading of hardware\nmodules is encapsulated withing DevicesFactoryHalLocal.  AudioFlinger\nuses interface classes DevicesFactoryHalInterface and DeviceHalInterface\nto access these functions.\n\nBug: 30222631\nChange-Id: Ic88b20c55813a24b898f4a832e082c17d81935b7\n"
    },
    {
      "commit": "b997d3a3d61a86dc9525860e863c7b690356d405",
      "tree": "db13caad2f0c052fff8d565a6a154639883ebb18",
      "parents": [
        "2f8e63b5be5b0160302cffe1f1f18e560d31d3e7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 07 18:23:45 2016 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 08 15:51:10 2016 -0700"
      },
      "message": "audioflinger: fix reused audio patch resource release\n\nAdd missing explicit release of audio HAL patch\nwhen a patch is created reusing the same patch handle but\nthe source or sink devices are not on the same HW module.\n\nBug: 28953359\n\nChange-Id: Ib751a4b5b2badd745f3b43e69734dd6a3e60eabe\n"
    },
    {
      "commit": "050677873c10d4da308ac222f8533c96cca3207e",
      "tree": "fa2d3e91f74c5d838330f52cf158be8c774eec7f",
      "parents": [
        "53c87d5bb06a168290575099378bc7bfe1dca02b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 01 18:27:28 2016 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 03 16:46:38 2016 -0700"
      },
      "message": "Add AudioTrack and AudioRecord flag checks\n\nVerify that the requested flags are compatible with the input\nor output flags when creating and AudioRecord or AudioTrack\n\nGet rid of IAudioFlinger::track_flags_t which was redundant\nwith audio_input_flags_t and audio_output_flags_t.\n\nChange-Id: I0dd9232f857b2737e99a8c668806e45bce09cdbd\n"
    },
    {
      "commit": "0666cc5b6b430cc5a815dab0bcba3dd73da8061a",
      "tree": "38cae5fe4c86705889a0e80547d3cdb73d67d0cd",
      "parents": [
        "f0f4f1e494a80ce300a68cfce0e1dc627c09c29a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 15 10:14:06 2015 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 25 08:42:19 2016 -0700"
      },
      "message": "audio flinger: fix audio patch release\n\nRelease playback and capture threads associated to a softwware\naudio patch when the patch handle is reused.\n\nBug: 25638953.\nChange-Id: Ie832513043525dda9089f8e83018810add2a4d6e\n"
    },
    {
      "commit": "8ae73129e7e79d826b293238c2f037f723d0e6e8",
      "tree": "a6a5acadaea37f33ccfc316ffd68483951106e29",
      "parents": [
        "aff4e460d4cf278909316412c17c042d7366178f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 12 10:13:29 2016 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 12 17:47:57 2016 -0700"
      },
      "message": "audio policy: fix call audio over 24 bit USB device\n\nTake into account voice RX source device properties when\nconfiguring the audio patch bridging the voice RX device\nto the USB output device.\n\nBug: 25643110\n\nChange-Id: I06f282d3cc12493f21500bf9ab35a3ceb93f14af\n"
    },
    {
      "commit": "a13cde98a880341f0a56d91da6364b093fb5d24e",
      "tree": "3974215c7cc52f2136c04e3e38568e0483c03129",
      "parents": [
        "45993ad8833063a50af83f76ec1ddeba673b5277"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 28 15:26:02 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 29 13:43:18 2016 -0700"
      },
      "message": "Use audio_module_handle_t and audio_patch_handle_t consistently\n\nBug: 27814144\nChange-Id: I54b7a73ec318779fd3addb060998f4d94141152d\n"
    },
    {
      "commit": "c42e9b462661673dff480ee71757a58b0f806370",
      "tree": "c9d53e761500f2466b7b8c4cfeb78b072d424e29",
      "parents": [
        "02c4f1c02b832868bbae2bf2c62039e54dc0b6d4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 21 11:35:03 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 21 12:05:28 2016 -0700"
      },
      "message": "Fix build warnings\n\nChange-Id: Idfdaff3a7a8f60cd8817bd306bfba28020a391c8\n"
    },
    {
      "commit": "57c4e6f7464d458eb52d209c2a63524913d6406d",
      "tree": "b7fae46bbc981c62460d572b51d6f68b9f9b847d",
      "parents": [
        "560a198f1f95a085e24944b20df536e75e21cedb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 18 14:54:07 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 18 17:36:37 2016 -0700"
      },
      "message": "Fix build warnings\n\nChange-Id: I33178dbe0bfc087d6599579ca0529ad853c669ed\n"
    },
    {
      "commit": "d848eb48c121c119e8ba7583efc75415fe102570",
      "tree": "06733e396ad546bf39be0a6699193d041883edad",
      "parents": [
        "38246e482ea3bd1e0f88f7133934ec4537b48bbd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 08 13:42:11 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 16 14:04:22 2016 -0700"
      },
      "message": "Use audio_session_t consistently\n\nBug: 27562099\nChange-Id: I328d8226191386b163f2ace41233607294c50dcd\n"
    },
    {
      "commit": "f27ce4051c81a90f8f937a1b381e9e6ffa2bfa6b",
      "tree": "f6d8bfa6ae08c78ac4df513338627550b59bf67d",
      "parents": [
        "d5ef65ea897a7c0e3704000e33975f357bfc1c56"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Mon Mar 14 13:43:14 2016 -0700"
      },
      "committer": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Mon Mar 14 13:43:14 2016 -0700"
      },
      "message": "PatchPanel: Avoid null pointer dereferences.\n\nWe wait until after checking \u0027handle\u0027 and \u0027patch\u0027 for NULL before\ndereferencing those pointers for logging.\n\nChange-Id: I5b90b87536f83c8f809b390951471d40cd8c27a4\n"
    },
    {
      "commit": "eeecb980ff4c202d0a3c4b0bfe040dce2f73336d",
      "tree": "decce0d925acd9efd68f2d540bbabb60c0661c6b",
      "parents": [
        "91afc2297dd1c39302dba6ff68e9839aae27d39a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 26 10:44:04 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 01 08:32:58 2016 -0800"
      },
      "message": "Add use for audio_unique_id_t\n\nBug: 25641253\nBug: 21019153\nChange-Id: I65dc128e760c245f3d90559635a8981b186c87d7\n"
    },
    {
      "commit": "d60560af7cb559762593161c8202459cc01fb0f5",
      "tree": "d2913f6eb8ded236fba95d7920cca8f7906288e6",
      "parents": [
        "0443ba44a1ebda31bc3642cd91a0570694f29ec1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 10 11:31:20 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 29 16:55:40 2015 -0700"
      },
      "message": "audio policy: add support for external audio sources\n\nAdd support for activity on external audio sources.\nAn external source reflects activity on an input audio device\nthat must be controlled (both routing and volume) by the\naudio policy manager.\nFirst, the input device must be connected with setDeviceConnectionState().\nThen, the source activity is indicated with startAudioSource() and\nstopAudioSource() APIs.\nstartAudioSource() indicates the source device with an audio port configuration\nand the use case by the audio attributes.\n\nOnce a source is active, its routing and volume are controlled by the policy manager\nas it would for a software source (AudioTrack).\n\nChange-Id: If5805d58a4356b2f681f1aabf54375f62b55b98a\n"
    },
    {
      "commit": "a0169a073d88efefbfb35fa0ea8e94f7b31d7469",
      "tree": "42240d72b6de6728a4bbe92f3ed8ddba338d5c02",
      "parents": [
        "e59c6a33e724579f4b8ac76586e6f667fa0b8572"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 06 18:32:01 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 06 18:32:01 2015 -0700"
      },
      "message": "audio: Do not delete PatchRecord before Peer is stopped\n\nPatchPanel::clearPatchConnections deletes PatchRecord before\nthe peer PatchTrack is stopped. This can cause an access to already\nfree\u0027ed memory leading to a crash in PatchTrack::getNextBuffer.\n\nFix is to delete PatchRecord and PatchTrack only after removing\nboth of them from active tracks list\n\nBug: 22304526.\nChange-Id: I7003756d3d2dd8912ce5e3b2fc31f5e82f455888\n"
    },
    {
      "commit": "054d9d3dea1390294650ac704acb4aa0a0731217",
      "tree": "4d67c48a2cf367d661f1e33a6670cda052a569a3",
      "parents": [
        "f62a067a5b21c840c915d36392679346ac0abfd7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 24 08:48:48 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 28 19:05:19 2015 -0700"
      },
      "message": "PatchPanel: do not use setParameters() internally.\n\nDo not use setParameters() with AUDIO_PARAMETER_STREAM_ROUTING\nwhen communicating the input or output device selected to playback or\nrecord threads, even for HAL version less than 3.0.\nUse createAudioPatch()/releaseAudioPatch() instead.\nThis allows to send more information on the output or input device being\nselected.\n\nAlso fix a regression introduced in L where the output device selection\nwas not communicated to effects on record threads.\n\nChange-Id: I4780ada53241d56694b005c992171e173c3bf8f5\n"
    },
    {
      "commit": "3bcf8597189c592713675ec58326ecbef0ac4ae9",
      "tree": "5656987c2e9d6fe9c99bb632865318489432fe36",
      "parents": [
        "322b4d25387a04c9afebe998326d005bbdf17ede"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 03 12:13:24 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 08 12:38:08 2015 -0700"
      },
      "message": "audio flinger: improve device to device audio patches\n\nAllow creation of audio patches between input and output\ndevices managed by the same audio HW module.\n\nChange-Id: I4b83268a4d5c41f3d5905d7581202cf5193efd32\n"
    },
    {
      "commit": "63238efb0d674758902918e3cdaac322126484b7",
      "tree": "07fdf37a2bc73a886d8ea41f69e722ed914754af",
      "parents": [
        "d7e1d08c2ac21cdd2f3b7f83fec7094f6a98fc08"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 02 15:50:29 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 03 08:50:40 2015 -0800"
      },
      "message": "Remove redundant semicolon from namespace closing\n\nChange-Id: I163f9d3d216c283ae1160ce4802e5247cf44fba7\n"
    },
    {
      "commit": "d8cd47792bac11a44096ef8233bb5268a6674bec",
      "tree": "a297a02667e5b2dbed97c6aa03afda3c33aaab1b",
      "parents": [
        "bd08223c450a7a2e8e8d79e6be148ed1ac64caa3"
      ],
      "author": {
        "name": "soon1.choi",
        "email": "soon1.choi@lge.com",
        "time": "Mon Jan 05 14:27:42 2015 +0900"
      },
      "committer": {
        "name": "Soon-won Choi",
        "email": "soon1.choi@lge.com",
        "time": "Mon Jan 05 07:57:42 2015 +0000"
      },
      "message": "fix memory leak in PatchPanel\n\nBefore the audio patch is created, audio patch with same handle is\nremoved from vector for patches. At this time, Patch allocated in the\nheap is not freed. This causes memory leaks in the mediaserver.\n\nChange-Id: Id0d28c36a7e7fbf473753bf4ead7518f28c1b998"
    },
    {
      "commit": "f8fd8d6daab5ced86ce950be68070d27c24d487f",
      "tree": "4ccbca767b6711112f9aacdaf72ca40fa7473e06",
      "parents": [
        "8270e1d13a101fa946848871b9903b31ff11981f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 09 17:00:14 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 09 17:00:14 2014 -0700"
      },
      "message": "audioflinger: fix audio patch release\n\nFix error in PatchPanel:releaseAudioPatch() causing\nthe wrong patch handle to be passed to the audio HAL.\n\nBug: 17368621.\nChange-Id: I037fd2e6273508c830414b5900d07c0178b96dae\n"
    },
    {
      "commit": "874c4287a4e49c59ac88767751dce00fcd3edb73",
      "tree": "2a0e4adc0bd18f26c8488b74d7e3df9751d493df",
      "parents": [
        "0912a5738d6baf2df7cd62e877240e3807b4b21f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 08 15:13:39 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 08 17:07:31 2014 -0700"
      },
      "message": "audio policy: enable more than one sink per audio patch.\n\nAllow creation of audio patches with more than one sink.\nMore than one sink is enabled when:\n- Connecting an input device to output devices on the same audio HW module.\n- Connecting an output mix to output devices on the same audio HA module.\n\nAll other patches are limited to one sink.\n\nBug: 16879363.\nChange-Id: I95be6948ef29df64e51e5b8ace38c2db7f3e89f2\n"
    },
    {
      "commit": "cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bf",
      "tree": "26824707249d553efaabe2003381b4e9159e199d",
      "parents": [
        "97117153a0d681be70bfa9dc9876541375355c47"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 25 16:20:43 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 28 12:06:00 2014 -0700"
      },
      "message": "AudioFlinger: update openInput() and openOutput()\n\nAdd parameters to openInput() and openOutput(): device address,\ninput source.\nAllow caller to specify a given I/O handle\nGroup parameters in a struct audio_config.\n\nBug: 12378680.\nChange-Id: I7e9af74c0d996561cc13cbee7d9012d2daf33025\n"
    },
    {
      "commit": "83b8808faad1e91690c64d7007348be8d9ebde73",
      "tree": "b541b1172f804e04bd19b29f7878a1becf6205d7",
      "parents": [
        "c15c265676da2226a18a5373812608b19d4719d7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 20 18:31:16 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 24 02:56:47 2014 +0000"
      },
      "message": "audio flinger: add patch connection between hw modules\n\nAdd support for audio device connections between different audio\nhw modules.\nThe patch is performed by creating a bridge between the playback\nthread connected to the sink device and the record thread connected\nto the source device using a pair of specialized PlaybackTrack and\nRecordTrack.\n- Added PatchTrack and PatchRecord classes.\n- Added TrackBase type to indicate more clearly the track behavior.\n- A TrackBase can allocate the buffer or reuse an existing one.\n- Factored some code in openOutput() and openInput() for internal use\nby PatchPanel.\n\nBug: 14815883.\n\nChange-Id: Ib9515fcda864610458a4bc81fa8f59096ff4d7db\n"
    },
    {
      "commit": "24478d47fc631ab33208f4dd9d034abb6839c992",
      "tree": "386cecb452110d9959ce43eef557d05c822fea83",
      "parents": [
        "62aaabb3905c61bb7acd6037414c206240a31c32"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 04 20:02:57 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 04 20:02:57 2014 -0700"
      },
      "message": "AudioFlinger: fix PatchPanel debug log.\n\nBug: 14815883.\nChange-Id: I71cf2ef74a96d3cdb27f2beb1b76b8979c738335\n"
    },
    {
      "commit": "62aaabb3905c61bb7acd6037414c206240a31c32",
      "tree": "55b1f59fa16bc0cf762c88a96e5a5f9a5d82d08c",
      "parents": [
        "e1715a465a29db625da9d0ea365edf371e39e201"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 02 10:40:54 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 02 10:40:54 2014 -0700"
      },
      "message": "audio policy: fix unitialized hw module in audio port\n\nThe hw module handle was not initialized when creating\nand audio port configuration from an input stream descriptor.\n\nBug 15376641.\n\nChange-Id: I6c784cded68a5c665fd22c3643765c63f70eb241\n"
    },
    {
      "commit": "e1715a465a29db625da9d0ea365edf371e39e201",
      "tree": "771fdda7b99935e05e7b3c36487abf523930dd34",
      "parents": [
        "1afeecb88bea660b2c10b2096be0fd02433303ce"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 20 11:30:42 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 30 17:22:58 2014 -0700"
      },
      "message": "audio policy: add audio port gain control\n\nImplement setAudioPortConfig() API to configure an\naudio port.\nCurrently limited to gain control.\n\nBug: 14815883.\n\nChange-Id: Ic1b268e5ba5c277e9f5b8fa63c81dd7c0b250024\n"
    },
    {
      "commit": "6a94d69dc4f32abb53c466a96f905bb199be6417",
      "tree": "eef3552877f202429801a0b20f2ae31aad7801e7",
      "parents": [
        "32f93b7bedc44b425ba99d69dec998334e759532"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 20 11:18:06 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 29 17:57:55 2014 -0700"
      },
      "message": "audio policy: implement routing control\n\nAdd implementation of audio routing control via AudioSystem APIs.\n\nThe following APIs are implemented:\n- listAudioPorts(): return a list of devices and output/input mixers ports\nthat can be used as sources or sinks for audio patches.\n- createAudioPatch()/releaseAudioPatch(): create/release a connection patch between\ntwo audio ports (e.g. to connect input from an HDMI device to a speaker output device).\nOnly one client application can own a patch from a given source.\nWhen an audio port (device or mix) is part of an application created patch, its routing cannot\nnot be changed by a policy decision.\n- listAudioPatches(): return a list of existing patches.\n\nEach audio port addition/removal and each audio patch creation/release increments a generation count.\nThis generation count is used to ensure consistency betwen calls to\nlistAudioPorts() and listAudioPatches().\n\nBug: 14815883.\n\nChange-Id: I022b638c2f5f0bb41543c7cfca7488fb45cfdd80\n"
    },
    {
      "commit": "951f455566775e5f01e67c5ee26863d7d19209d7",
      "tree": "39fc248f74f7585b7108c0cb00e2d36d22b3e1b7",
      "parents": [
        "1cda6afaf6207a41303e653a6ecd7909d73186eb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 20 10:48:17 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 28 14:29:47 2014 -0700"
      },
      "message": "DO NOT MERGE - audioflinger: first patch panel implementation.\n\nAdded a new PatchPanel subclass to AudioFlinger\nto handle audio ports and audio patches configuration\nand connection.\nThe first implementation does not add new functionnality.\nAudioPolicyManager uses patch panel interface to control\ndevice routing.\nAudioFlinger:\n- Added PatchPanel class. The first implementation does not\nadd new functionnality. PatchPanel handles routing commands\nfor audio HAL after 3.0 or converts to setParameters for audio\nHALs before 3.0.\n- Added config events to ThreadBase to control synchronized\naudio patch connection.\nAudioPolicyManager:\n- Use PatchPanel API to control device selection isntead of setParameters.\n- New base class AudioPort common to audio device descriptors\nand input output stream profiles. This class is RefBase and groups\nattributes common to audio ports.\n- Use same device selection flow for input as for outputs:\n getNewInputDevice -\u003e getDeviceForInptusiource -\u003e setInputDevice\n\nChange-Id: Idaa5a883b19a45816651c58cac697640dc717cd9\n"
    }
  ]
}
