)]}'
{
  "commit": "ba2cf0f2e39d8302babbda3a98127daaf2ea7376",
  "tree": "4a86852dbc034802d93ab5528591dc941a68c01c",
  "parents": [
    "ffb2516cc730b5ac621ad8a92e827faf4e86b8ca"
  ],
  "author": {
    "name": "Francois Gaffie",
    "email": "francois.gaffie@renault.com",
    "time": "Wed Dec 12 16:40:25 2018 +0100"
  },
  "committer": {
    "name": "Eric Laurent",
    "email": "elaurent@google.com",
    "time": "Thu Feb 07 11:20:57 2019 -0800"
  },
  "message": "audiopolicy: fix dynamic device \u0026 explicit routing management\n\nWhile a playback is ongoing using explicit routing\nand the device is disconnected, setOutputDevices() will bail out\nif the new device is incompatible with the io profile. So the device\nwill not be reset in the output.\nMoreover, if another device of the same type/address is connected,\nthis device will have a new unique ID.\nIf a track wants to use it as explicit, as the first playback/capture is still\non going, the function findPreferredDevice will return the previous device id.\n\nThis CL enforces:\n-setOutputDevices() to check if new device is not compatible AND previous devices\nare still available\n- When a device is disconnected, go over all clients to clear any preferred device\nreferring to the device being removed.\n- Sanitize preferred device received by get\u003cOutput|Input\u003eForAttr() according to\nconnected devices.\n\nTest: AudioPolicyTests --gtest_filter\u003dDynamicAddressOutputDevice/DeviceConnectionTest.DeviceConnectionState/*\nTest: audio smoke tests\nTest: CTS tests for AudioTrack, AudioRecord, AudioRouting\n\nChange-Id: Ib3a2d54d902def0fcfc2a623c25bb92d65b1ab98\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d4cfd1ebd0143c3b5f811d291a89eadec2ecdf4d",
      "old_mode": 33188,
      "old_path": "services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h",
      "new_id": "803cfacc759c8e7c29339e0fff9d729a59a5522f",
      "new_mode": 33188,
      "new_path": "services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h"
    },
    {
      "type": "modify",
      "old_id": "6132bb47822045bc60f3d513949d24ee64ab656d",
      "old_mode": 33188,
      "old_path": "services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h",
      "new_id": "c84636e7e637613db6e75f1ad35bfae4dd5bd783",
      "new_mode": 33188,
      "new_path": "services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h"
    },
    {
      "type": "modify",
      "old_id": "c880e675bedc4c3003d76c189b6ce8ac2300b698",
      "old_mode": 33188,
      "old_path": "services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp",
      "new_id": "1fa11231b8bbb607a1549a873452d0dae4c806c6",
      "new_mode": 33188,
      "new_path": "services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp"
    },
    {
      "type": "modify",
      "old_id": "1dfd88a20f790ed7509763743307fe71fa64667b",
      "old_mode": 33188,
      "old_path": "services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp",
      "new_id": "77e7add511c534404515535a7d2e9708c1d51f0a",
      "new_mode": 33188,
      "new_path": "services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp"
    },
    {
      "type": "modify",
      "old_id": "ccec93f40aa1da048c20ea38ad15adf41b162c85",
      "old_mode": 33188,
      "old_path": "services/audiopolicy/managerdefault/AudioPolicyManager.cpp",
      "new_id": "2854a98d63cc6842ebfae5a4cf1b926a79ed8493",
      "new_mode": 33188,
      "new_path": "services/audiopolicy/managerdefault/AudioPolicyManager.cpp"
    }
  ]
}
