)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "fa97d9b1736ee5cdbfc9f454811343c7cd876d2e",
      "tree": "b85246e5b0aed76f4932261eb379d44eb46f2b56",
      "parents": [
        "464a1f3f00320bdd603e6f2d0b069280fe1b11f4"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Feb 05 14:08:21 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Feb 05 14:45:30 2019 -0800"
      },
      "message": "audioflinger: Fix move semantics in PatchPanel\n\nThe old code was not implemented correctly.\n\nTest: make and run TV with MSD device\nChange-Id: I64eec7c0c78705fd0497022ff86fa1aef05745b2\n"
    },
    {
      "commit": "2dbffc2af5e200dbddfa1aeb79569e7811dfbc9a",
      "tree": "4dad85d78b86420b84000686f13d4de995623eff",
      "parents": [
        "c8fddf3dc6a1d51058d9d3b207e818e84ac80fed"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 08 18:50:41 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 13 18:21:03 2018 -0700"
      },
      "message": "AudioFlinger: Incorporate downstream patch latency into timestamps\n\nAvailable for MSD BUS devices.\n\nTest: MSD YouTube playback and audioflinger dumpsys\nBug: 112435419\nChange-Id: Ifd35b68a77464e0db79ad1ed50b72b00a616c253\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": "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": "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": "9dfa2641d0ce00113747c580f9731cf36c6b68cd",
      "tree": "300279114b7fb6882ab38444dce59fe7ca2e4ab9",
      "parents": [
        "99c58a82ce17440d3b050c8efbaa99f6db3f0668"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 10 10:09:19 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 10 15:47:36 2018 -0700"
      },
      "message": "PatchPanel: follow up to remove false warning from ~Patch\n\nWhen a new patch is being added to mPatches in this line:\n\n    mPatches.insert(std::make_pair(*handle, std::move(newPatch)));\n\nthe source of the move--`newPatch` remains intact, and if it\nis a software patch, it has playback and record patch handles\nremaining to be non-NONE values. Thus, on destruction it falsely\nwarns that it hasn\u0027t been cleared.\n\nThe solution is to define a move constructor for Endpoint which\n\"transfers\" patch handle ownership.\n\nAlso delete copy constructors to make sure that each Patch is\na unique resource.\n\nTest: create a software patch, watch logcat\nChange-Id: I41ea2dff087696252132e79d827e705378baaf8f\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": "e964d4e421e2d1ca937227a580c0c837091a11e3",
      "tree": "876478fb4d5b18ddf8ba3b761440e46651b45ecb",
      "parents": [
        "f6d5a13c3a7a84e35e28b9840dde0f29728b6849"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Aug 09 14:31:32 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 10 11:35:57 2016 -0700"
      },
      "message": "Fix clang-tidy warnings in audio and playerservice.\n\n* Add explicit keyword to conversion constructors.\nBug: 28341362\n* Use const reference type for read-only parameters.\nBug: 30407689\nTest: build with WITH_TIDY\u003d1\n\nChange-Id: I265f3b094e08d5705b506b3fbba51439c134af84\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": "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": "1c333e252cbca3337c1bedbc57a005f3b7d23fdb",
      "tree": "327f985a0db89dad8fc742baf5b198c3b78c429b",
      "parents": [
        "4b123406c10c17852734a1b691bb9ce2a4cb7caf"
      ],
      "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": "Tue May 27 10:53:51 2014 -0700"
      },
      "message": "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"
    }
  ]
}
