)]}'
{
  "log": [
    {
      "commit": "24bf51ae92285202bdbe3fa00c7c83e93c5a03e2",
      "tree": "a5a5b4eb56e7edefcb3ffc1c6742f2e6f1c16404",
      "parents": [
        "72b9ee114d4b5b0017578afe826e8431f0362f96",
        "9baf44fbba5b0e794cb9f2cbe0c7cbe154b27e98"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 09 19:34:53 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 09 19:34:53 2018 +0000"
      },
      "message": "Merge \"AudioPolicyManager: Abort on input descriptor inconsistency\""
    },
    {
      "commit": "72b9ee114d4b5b0017578afe826e8431f0362f96",
      "tree": "1d110a34c0f7b6442be8e316c1936294a7fac87c",
      "parents": [
        "b003ba18ad8746ef945d0622586b140f3dfadcbe",
        "c29d82b089c3a6409640c697c4832eb5de357a54"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 09 17:32:16 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 09 17:32:16 2018 +0000"
      },
      "message": "Merge \"AudioPolicyManager: Convert dump to use String8 (part 2)\""
    },
    {
      "commit": "b003ba18ad8746ef945d0622586b140f3dfadcbe",
      "tree": "4a6052b8a04ee6b14e262b8aa30a7a0e964560cb",
      "parents": [
        "7e8b1832c6f99a7998f81b942472f456efd24830",
        "bb54e20ba9afcf61cc6b41500ff8ab3dfc897203"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 09 17:07:14 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 09 17:07:14 2018 +0000"
      },
      "message": "Merge \"AudioPolicyManager: Convert dump to use String8 (part 1)\""
    },
    {
      "commit": "c29d82b089c3a6409640c697c4832eb5de357a54",
      "tree": "3e61976439f1942204d30a084a602a081b0ea918",
      "parents": [
        "bb54e20ba9afcf61cc6b41500ff8ab3dfc897203"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 05 12:23:17 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 08 13:11:51 2018 -0700"
      },
      "message": "AudioPolicyManager: Convert dump to use String8 (part 2)\n\nTest: dumpsys of APM, diffs.\nBug: 117333182\nChange-Id: I18761416ec9dc97418b41054f85af67e6eb59f3a\n"
    },
    {
      "commit": "bb54e20ba9afcf61cc6b41500ff8ab3dfc897203",
      "tree": "99d0c86990fbf905083d4f41c215311ec75c4e09",
      "parents": [
        "d10b735cfd4eea74846bb5f53d37c8c2a3114d58"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 05 11:42:02 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 08 12:59:33 2018 -0700"
      },
      "message": "AudioPolicyManager: Convert dump to use String8 (part 1)\n\nTest: dumpsys of APM, diffs.\nBug: 117333182\nChange-Id: Ic046acb491efa363423b38a389b046c09ae9d5c9\n"
    },
    {
      "commit": "9baf44fbba5b0e794cb9f2cbe0c7cbe154b27e98",
      "tree": "0bdd4f54a8972b4bee5e4b2aa87c3f4b9383a88e",
      "parents": [
        "4cc873cc1dcf9e69572c2e52b68af1aebea0ad98"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 05 17:58:00 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 08 19:34:25 2018 +0000"
      },
      "message": "AudioPolicyManager: Abort on input descriptor inconsistency\n\nTest: audio sanity\nBug: 116415490\nChange-Id: I8e1953f75af5d886a6109c05473234eb4268ac5b\n"
    },
    {
      "commit": "778bc1f6393c5437acb45943866d88607c67b1e5",
      "tree": "31e6043ab875d05a18636faa5da5d3f6313f3b2b",
      "parents": [
        "b4e880abdcde87ff89937f4f8de819af0cfe371f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 14 16:28:52 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 05 09:32:51 2018 -0700"
      },
      "message": "audiopolicy: Move surround configuration to xml\n\nMove the configuration for supported surround formats\ninto APM xml config file.\n\nBug: 116356348\nTest: on elfin\nChange-Id: Ifba218fa2c03136a3a59eeee8077b00fba77c069\n"
    },
    {
      "commit": "39efb7a1267ac8b1131eecab260a7ae2887a9b0c",
      "tree": "c47ad805bdc6aa615b9d84e4632f3320267362a3",
      "parents": [
        "af036dab1e2075e1277883ef696a48f47d974413"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 26 15:39:28 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 02 20:05:13 2018 -0700"
      },
      "message": "AudioPolicyManager: abort when client is removed while active\n\nThis can result in a refcount mismatch. It is safer to\nabort immediately.\n\nTest: Audio sanity, phone call\nBug: 112067674\nChange-Id: I7835e75342b4c1aa3d6d910ee782d3bc818bd553\n"
    },
    {
      "commit": "af036dab1e2075e1277883ef696a48f47d974413",
      "tree": "bc775cb5a2823dbe73354b5f36dd5fd0acaaf518",
      "parents": [
        "bbbfdd69d89ca651f855777c3c66b12793dc85ae"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 21 10:46:21 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 02 18:18:11 2018 -0700"
      },
      "message": "AudioOutputDescriptor: improve refcount logging\n\nImprove refcount to match exact client descriptor\nAbort on invalid client descriptor refcounts\nLog changes to active clients and refcounts\n\nTest: dumpsys of media.audio_policy\nBug: 112067674\nChange-Id: I5fe4d3e7135efbf9bc5bffb258374115d87c24e6\n"
    },
    {
      "commit": "43c386c8c686b73c4a9a7ffc3537753aa3d1a56d",
      "tree": "aa5c33e07c114985173a6af230b9342ac62af18c",
      "parents": [
        "a77c9edb91589d8673d3af6e2243b6f087430a11"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 19 12:38:29 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 28 20:17:33 2018 +0000"
      },
      "message": "audiopolicy: More XML deserializer refactorings\n\n -- use root and cur argument names consistently;\n\n -- replace \u0027while\u0027 loops with \u0027for\u0027 loops;\n\n -- avoid passing around of \u0027xmlDoc\u0027;\n\n -- get rid of PtrElement, parametrize adding to collections.\n\n -- make possible to return immutable elements via Return\u003c\u003e\n    container from android::hardware.\n\nTest: Compare dumpsys media.audio_policy A/B, check audio\nChange-Id: I5e499bdd7196703c4f788d881f331eb9629bf790\n"
    },
    {
      "commit": "e754a45738ac25ff23790e86431503be23525016",
      "tree": "6219140fc4ff41e8cb3bac88185b24ee2c3771eb",
      "parents": [
        "e84a3e65acb3e77404dd2007947f364197952cdd"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Thu Sep 20 17:08:23 2018 -0700"
      },
      "committer": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Thu Sep 20 18:12:09 2018 -0700"
      },
      "message": "Remove invalid constexpr until we get to C++17.\n\nframeworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp:236:16: error: constexpr variable cannot have non-literal type \u0027const android::(anonymous namespace)::(lambda at frameworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp:236:38)\u0027\nconstexpr auto xmlDeleter\u003cxmlChar\u003e \u003d [](xmlChar *s) { xmlFree(s); };\n               ^\nframeworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp:236:38: note: lambda closure types are non-literal types before C++17\nconstexpr auto xmlDeleter\u003cxmlChar\u003e \u003d [](xmlChar *s) { xmlFree(s); };\n                                     ^\n\nBug: http://b/110779387\nBug: http://b/111067277\nTest: Builds with new compiler.\nChange-Id: Ia7ed01bf0ff064f422be2cf6026cfe8329c404bf\n"
    },
    {
      "commit": "a289aea016a66fd8929e120e46268da8cf5a2f34",
      "tree": "677b63bd14f4c341eb707d003db0acdab46ebb1c",
      "parents": [
        "05fa8856abaa1e050c3c8e6ba97fc8878ed7600a"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Sep 17 15:26:23 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Sep 20 09:11:24 2018 -0700"
      },
      "message": "audiopolicy: Refactor XML deserializer for the APM config\n\n -- Move deserialization traits classes into the .cpp file;\n\n -- Use unique_ptr for managing libxml objects lifetime;\n\n -- Define node and attribute names inline. This makes them\n    inlined in the code, but that\u0027s OK since they are typically\n    only used once.\n\n -- Avoid using reference types for \"out\" parameters.\n\n -- Check the status of deserializing collections.\n\n -- Misc renamings and generalizations for clarity.\n\nTest: Compare dumpsys media.audio_policy A/B, check audio\nChange-Id: Ib188964dee94acbccd701a58d45d3df206487d81\n"
    },
    {
      "commit": "bd9b5935fdbd67d3eaf124e3e80470b8cae1ecd1",
      "tree": "d8aeb92342d15ec51bf074630fcd2e5ec54cbc83",
      "parents": [
        "ca7988602fe3b281bdc814e549d84d15557b99ac",
        "36fc92d5c30b0cae6aea48f85b9d4cc11eae696b"
      ],
      "author": {
        "name": "Hochi Huang",
        "email": "hochi.huang@mediatek.com",
        "time": "Sun Sep 16 08:09:15 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sun Sep 16 08:09:15 2018 -0700"
      },
      "message": "Merge \"audio policy: fix getOutputFromId and getInputFromId\" am: f8d13dee65 am: 4d9a25ccf0\nam: 36fc92d5c3\n\nChange-Id: I0eb25c089d36a36c2546b017cee33c4c7492adc7\n"
    },
    {
      "commit": "36fc92d5c30b0cae6aea48f85b9d4cc11eae696b",
      "tree": "c712fcf42f0135f875f5b57d278bdacf81ccc2eb",
      "parents": [
        "6ff79a0dd1cc27302c466764bf9b9d4f21502e1a",
        "4d9a25ccf002a9eec0dc3d69767418379bdf871e"
      ],
      "author": {
        "name": "Hochi Huang",
        "email": "hochi.huang@mediatek.com",
        "time": "Sun Sep 16 08:03:02 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sun Sep 16 08:03:02 2018 -0700"
      },
      "message": "Merge \"audio policy: fix getOutputFromId and getInputFromId\" am: f8d13dee65\nam: 4d9a25ccf0\n\nChange-Id: I676995ac79a1900df5ccee86a9f36fbed70fb0b7\n"
    },
    {
      "commit": "f731de72e9eff742fcb1f860321aa15fae7dccd9",
      "tree": "17bdda0c0f45e4546f6a0486f02a805b390296b1",
      "parents": [
        "79b9d483d346fc2c2bd680c2154569adf199f26b"
      ],
      "author": {
        "name": "Hochi Huang",
        "email": "hochi.huang@mediatek.com",
        "time": "Wed Sep 05 22:03:19 2018 +0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Sun Sep 16 14:47:27 2018 +0000"
      },
      "message": "audio policy: fix getOutputFromId and getInputFromId\n\nIt should return NULL instead of the last descriptor handle\nif mismatching specific output/input id.\n\nBug: 115474937\nTest: manual test.\nChange-Id: I37ff9622392f3fa3fbfd0c2a3362c704340bd72c\n"
    },
    {
      "commit": "227342aa95b7994dc6fa361aea2f1cc4f039be46",
      "tree": "f0bc62cf5bda69988481513c1d1aed8c7446f4e7",
      "parents": [
        "c5fee0a8854f5decd3b567d2383cd38f0aada4f4"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 14 11:42:37 2018 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 14 11:42:37 2018 -0700"
      },
      "message": "Add missing SPEAKER_SAFE device in DEVICE_CATEGORY_SPEAKER\n\nExplicitly list AUDIO_DEVICE_OUT_SPEAKER_SAFE in getDeviceCategory\n  function, so it\u0027s not relying on default case.\n\nTest: build\nChange-Id: If465311694c405a35aa8a5d36bfe16948a3b56b4\n"
    },
    {
      "commit": "592dd7bf150cee7990958632425c411366252083",
      "tree": "4cee35a646c148839ed4839a96d03a2464b425ba",
      "parents": [
        "8f42ea1fd1c813d9ed97ade72d7514e883cf7cb9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Aug 05 18:58:48 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 10 14:07:45 2018 -0700"
      },
      "message": "audiopolicy: refactor playback activity ref counting\n\nPlayback activity ref couting is now based on active state\nof PlaybackClientDescriptor.\n\nThe active reference count per stream on each output is still\nused because it provides a simple implementation for duplicated output.\n\nTest: CTS tests for AudioTrack and Routing\nTest: manual audio smoke test\n\nChange-Id: Ifadb1d24131581461aace14a5b25e7c7582c57cb\n"
    },
    {
      "commit": "8f42ea1fd1c813d9ed97ade72d7514e883cf7cb9",
      "tree": "4a6c16fd8b856a10fd122170d55a93899cc2613c",
      "parents": [
        "97ac871cd4f075b3d4b47557a81e9e05ad7762ec"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 08 09:08:25 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 10 14:07:45 2018 -0700"
      },
      "message": "audio policy: remove AudioSession class\n\nNow that clients are tracked individually, tracking by\naudio session is no needed anymore.\nModify management of client activity, preempted sound trigger\nsessions and silenced uids to rely on RecordClientDescriptor\ninstead of AudioSession.\n\nTest: CTS test for AudioRecord\nTest: manual capture audio tests for all use cases\n\nChange-Id: Ieef3e05daea98aec9320412393f912bd6bd7e046\n"
    },
    {
      "commit": "97ac871cd4f075b3d4b47557a81e9e05ad7762ec",
      "tree": "a6a547e02e4d736e45f275b4c93c2576ef30e675",
      "parents": [
        "dd6f1835aa352c167d04f4280289988faed7f590"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 27 18:59:02 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 10 14:07:45 2018 -0700"
      },
      "message": "audio policy: refactor preferred route implementation\n\nRemove SessionRoute class and replace by use of\npreferredDevice and active state in ClientDescriptor\n\nAlso fix the behavior for other clients using same strategy as\nclient with preferred route: the preferred route is only used if\nno other clients using the same strategy are active without a preferred\nroute.\nIf all clients have a preferred route, the route of the last active\nclient is used.\n\nAlso fixed getOutputForAttr() to return correct selected device ID when\ndynamic policies are used.\n\nTest: CTS RoutingTest, AudioPlayRoutingNative, AudioRecordRoutingNative\nTest: Manual: AudioExplicitRouting, UplinkMusicSampleApp\n\nChange-Id: Id342c2241ace3e1a359ea74f4a539a395f793b86\n"
    },
    {
      "commit": "ea8ebd5fcbfe399c7876909e2e680d59fba59cf0",
      "tree": "ad95f8981f1b2ee6c8124a10624925d947285ea3",
      "parents": [
        "6497af909a1218a842ae65f12f7d1f4c98159580"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 23 14:15:40 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 30 21:16:14 2018 +0000"
      },
      "message": "audio policy: fix regression in Audio MMAP device selection\n\nCommit f3a5a601 caused a regression for AAudio MMAP playback use case\nwhere disconnecting currently selected device does not generate a\ndisconnect callback to client causing silent audio until the\nstream is closed and reopened.\n\nThis CL fixes a logical flaw in method SessionRouteMap::getActiveDeviceForStream()\nintroduced by commit f3a5a601 causing a stale forced device to be\nreturned after this device was disconnected.\n\nBug: 111711159\nBug: 79878501\nTest: CTS tests for audi routing and AAudio. Audio smoke tests\nMerged-In: Ibb16e26bc59b9e3f99bc74eb944601c6be5026dd\nChange-Id: Ibb16e26bc59b9e3f99bc74eb944601c6be5026dd\n"
    },
    {
      "commit": "3e6c7e15913a812b8658504105100063d57d1d6e",
      "tree": "2ec1571636c46201df600aa9c25f57a727617b48",
      "parents": [
        "f344afa981e537b5f354352284272a8a51cf6759"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 27 17:09:23 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 30 11:34:53 2018 -0700"
      },
      "message": "audio policy: refactor HW audio sources\n\nRefactor management of hardware audio sources to make use of\nClientDescriptor class:\n- HW sources are now tracked by port ID and not audio patch handle.\n- startAudioSource() and stopAudioSource() APIs are updated to use\naudio_port_handle_t as source identifier.\n- AudioSourceDescriptor class is deleted and replaced by\nSourceClientDescriptor class deriving from TrackClientDescriptor\n\nTest: make.\nChange-Id: Ie418b566519a591f036b538a77319f8e30aa99a8\n"
    },
    {
      "commit": "fa69dc61def2931f01a1e14a3b385ffc56a4f2bc",
      "tree": "d2b183d167be035424bb641ae2052000316d0efb",
      "parents": [
        "93adab132cfdd6e71cee2af14eea711b49a4c76d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 27 09:58:58 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 27 16:30:29 2018 -0700"
      },
      "message": "audiopolicy: Add AudioProfileVector::findBestMatchingOutputConfig\n\nAssuming that the call target AudioProfileVector contains\ninput profiles, the method finds the best matching config\nfrom provided AudioProfileVector of output\nprofiles. Matching is performed according to the given\npreferences for audio formats and channel masks.\n\nBug: 63901775\nTest: MSD prototype\nChange-Id: Id005aad9de8bfe8cea5cb6291efc278d6260210c\n"
    },
    {
      "commit": "93adab132cfdd6e71cee2af14eea711b49a4c76d",
      "tree": "b0bd97d6a7e070d6142a0cd15b12c51c87e45faa",
      "parents": [
        "23e617d032700449f4a24521cc89734e514a6bf6",
        "e50f628034f4b0b5a87f8e9f9eb3c170eef62955"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 27 00:47:08 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 27 00:47:08 2018 +0000"
      },
      "message": "Merge \"audio policy: Refactor AudioProfile\""
    },
    {
      "commit": "23e617d032700449f4a24521cc89734e514a6bf6",
      "tree": "d26b170b13b8f19c4f440882f22d7635e0c56ed4",
      "parents": [
        "9366193e6ba8e2c554de747a3ab58a336297c067",
        "8fc147b21a7627eeda6383ae501add4dc903634e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 27 00:06:24 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 27 00:06:24 2018 +0000"
      },
      "message": "Merge \"audio policy: use client descriptors\""
    },
    {
      "commit": "8fc147b21a7627eeda6383ae501add4dc903634e",
      "tree": "a2f8b9232c40384188296887ab22a66d8200ce54",
      "parents": [
        "fa4fd528583279049b334a75e3782c12e832403b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 22 19:13:55 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 27 00:05:08 2018 +0000"
      },
      "message": "audio policy: use client descriptors\n\nFirst step in implementing use of ClientDescriptor class to keep track\nof playback and capture activity:\n- update AudioPolicyInterface methods to just use port ID as\nclient identifier\n- add list of clients in input and output descriptors and update list\nwhen clients are added and removed.\n- list clients in audio policy manager dump.\n\nTest: Audio smoke tests. CTS tests for AudioTrack, AudioRecord, routing, recording and playback configurations\n\nChange-Id: Ia0f62f295d421fb845d57afcaa0ce77cd2c58775\n"
    },
    {
      "commit": "e50f628034f4b0b5a87f8e9f9eb3c170eef62955",
      "tree": "5b2c96e36150dc75c89a4fadc4747028f59d89dd",
      "parents": [
        "19283e9de83b5ade80a93b43589ea9a799414290"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 16:20:43 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 16:20:43 2018 -0700"
      },
      "message": "audio policy: Refactor AudioProfile\n\n * Move non-trivial method definitions into .cpp file;\n * Re-organize method definitions by name and by functionality;\n * Update and sort includes.\n\nThe code of the methods left unchanged.\n\nBug: 63901775\nTest: make\nChange-Id: Ic1b1c456983a23f078947dd84a837dc194bd48cc\n"
    },
    {
      "commit": "9366193e6ba8e2c554de747a3ab58a336297c067",
      "tree": "f6d9fe9e7cbe37902d023b33c24463f99d26b3fd",
      "parents": [
        "19283e9de83b5ade80a93b43589ea9a799414290"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 14:37:41 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 14:37:41 2018 -0700"
      },
      "message": "audiopolicy: Refactor DeviceVector::getDevicesFromHwModule\n\nRename method audio_devices_t DeviceVector::getDevicesFromHwModule\ninto getDeviceTypesFromHwModule.\n\nIntroduce method DeviceVector DeviceVector::getDevicesFromHwModule.\n\nBug: 63901775\nTest: make\nChange-Id: Ieec0c116fa0a6ff20241d61f65202a8eaf9f0674\n"
    },
    {
      "commit": "5a7913b405ac893998591fbad1242d7d9b7b2a62",
      "tree": "ab285ef604cf9c459e3abf56b7d68ecdcadefd01",
      "parents": [
        "fa4fd528583279049b334a75e3782c12e832403b"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 24 12:35:06 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jul 25 11:21:05 2018 -0700"
      },
      "message": "Add utility functions to AudioProfile\n\nAdded AudioProfileVector::getFirstValidProfileFor for retrieving\nfirst valid profile supporting the given format.\n\nAdded ChannelsVector::as{In|Out}Mask for reversing direction on all\ncontained channel masks.\n\nBug: 63901775\nTest: make\nChange-Id: Ib4a816abd9a3904a552f670ee75266e7dd890011\n"
    },
    {
      "commit": "fa4fd528583279049b334a75e3782c12e832403b",
      "tree": "efc7f94b1ade01d7c87aa85f161795e40ca58e4c",
      "parents": [
        "3fcfb3c014335da69e381cef47d0065ef01350e6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 20 18:23:34 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 24 19:09:40 2018 -0700"
      },
      "message": "audio policy: add client descriptors\n\nAdd client descriptors to keep track of opened AudioTrack and\nAudioRecord individualy. Client descriptor contains audio attributes,\nsampling rate, format, channels, uid, session, preferred route etc...\n\nTest: make.\n\nChange-Id: I785bdf7548670769f463549a3245114ac4c86e41\n"
    },
    {
      "commit": "a18d8004284b7fb0e0372f595716974141cc6e79",
      "tree": "1e286ccfb6943b979fc5f6706c6c69a7756237c7",
      "parents": [
        "0f7d299c5e308bc32333766590797992e7690966",
        "a18dced5af77307be66d8c05ac05e6160ab8d8ed"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 24 22:20:00 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 24 22:20:00 2018 +0000"
      },
      "message": "Merge \"audio policy: refactor record activity tracking (AudioSession)\""
    },
    {
      "commit": "bc3ee5af87c5815a92aa67729c2d2ed540f4163e",
      "tree": "3dbc1a73978ea1148b45d39bfe3270afd5d696e8",
      "parents": [
        "9f50e3af9ee18973576cd3e161c515461001ec92",
        "04ff947b07f0b4becacfa0668862b2d48437a6be"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 24 17:24:05 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 24 17:24:05 2018 +0000"
      },
      "message": "Merge \"audio policy: fix regression in Audio MMAP device selection\""
    },
    {
      "commit": "9de8bd18b21642f6f1fb4e3ef75e44a2cc79f3ce",
      "tree": "3be2f968af8f8c7b3b52ae8fa52e7a052fa80fee",
      "parents": [
        "a2a19382e5870fb133b56dacc7ff3048cdaa407d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 23 16:41:31 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 24 08:52:14 2018 -0700"
      },
      "message": "AudioPolicy: Reuse SortedVector comparison from AudioProfile\n\nOperation for comparing sorted vectors was defined twice in APM code:\nonce in AudioProfile.h as operator\u003d\u003d, then in APM as \u0027vectorsEqual\u0027\nmethod. Remove the latter and use the operator instead.\n\nTest: make\nChange-Id: I0697843aabb13539b7b552773d96dbb7fb56daa4\n"
    },
    {
      "commit": "04ff947b07f0b4becacfa0668862b2d48437a6be",
      "tree": "b1e0ca42b6fb7478bb8f130dcd147b1e1da2e748",
      "parents": [
        "a2a19382e5870fb133b56dacc7ff3048cdaa407d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 23 14:15:40 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 23 18:15:09 2018 -0700"
      },
      "message": "audio policy: fix regression in Audio MMAP device selection\n\nCommit f3a5a601 caused a regression for AAudio MMAP playback use case\nwhere disconnecting currently selected device does not generate a\ndisconnect callback to client causing silent audio until the\nstream is closed and reopened.\n\nThis CL fixes a logical flaw in method SessionRouteMap::getActiveDeviceForStream()\nintroduced by commit f3a5a601 causing a stale forced device to be\nreturned after this device was disconnected.\n\nBug: 111711159\nBug: 79878501\nTest: CTS tests for audi routing and AAudio. Audio smoke tests\nChange-Id: Ibb16e26bc59b9e3f99bc74eb944601c6be5026dd\n"
    },
    {
      "commit": "a18dced5af77307be66d8c05ac05e6160ab8d8ed",
      "tree": "f23e3ffe92d2753871f194de45d8a69a60180726",
      "parents": [
        "68234ec840e4eefdb9d0bf400c745a09a07156c9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 20 15:14:54 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 20 15:30:25 2018 -0700"
      },
      "message": "audio policy: refactor record activity tracking (AudioSession)\n\nRefactor input activity ref counting and callbacks to align\nwith implementation for output.\n\nThis will help migration to per client activity tracking.\n\nTest: audio smoke test, CTS for AudioRecord\nChange-Id: I8806446f33d3090f1042e0956df81318646d5285\n"
    },
    {
      "commit": "21b43364f0eb3916264d046718d74c7fb98efe59",
      "tree": "e7b6c3754aa85e33329225a41a06c02b91490751",
      "parents": [
        "20bd30baf9fcd59e7000e7c626cc8bc1e85637bc"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jun 04 10:37:09 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jun 04 17:04:21 2018 -0700"
      },
      "message": "APM test: Fix default config, add test for \u0027dump\u0027\n\n - Fix AudioPolicyConfig::setDefault so the config is valid again;\n\n - Enhance the default config with dynamic profiles;\n\n - Factor out the code for creating a full dynamic profile;\n\n - Add a method to unit test that verifies calling APM::dump.\n   This is also useful to examine how the default config looks\n   like.\n\nTest: audiopolicy_tests\nChange-Id: I102071e160b835da50ed5806bd2d62102a10d775\n"
    },
    {
      "commit": "e20a509ebdc7209af3d5031efe7b8b81f8179d7b",
      "tree": "073eea80be14f750ef9308942de7401fc397b4af",
      "parents": [
        "e53b517372983b6efdb50abcc3517d09216c2a48",
        "708e038f7e6c452de8186e2d6981de7540495094"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 01 22:37:24 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 01 22:37:24 2018 +0000"
      },
      "message": "Merge \"audiopolicy: Brush up DeviceVector::getDevice... methods\""
    },
    {
      "commit": "708e038f7e6c452de8186e2d6981de7540495094",
      "tree": "fef4228ffb73cd20eb8a2a921ee6df687c92adc2",
      "parents": [
        "f4d3741b3a721f8e1f72ec3ca2684efe22526d80"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 30 09:53:04 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jun 01 12:39:15 2018 -0700"
      },
      "message": "audiopolicy: Brush up DeviceVector::getDevice... methods\n\nThe semantics of these methods wasn\u0027t consistent and wasn\u0027t clear\nfrom their names (and aggravated by the fact that audio_devices_t can\nbe used either as a single device, or as a mask):\n\n * sp\u003cDeviceDescriptor\u003e getDevice(type, address) -- \u0027type\u0027 is a single\n   device; if \u0027address\u0027 is an empty string, and no matching device\n   with an empty address is found, returns any device of this type;\n\n * DeviceVector getDevicesFromType(type) -- \u0027type\u0027 is a mask,\n   device addresses get ignored;\n\n * DeviceVector getDevicesFromTypeAddr(type, address) -- \u0027type\u0027 is\n   a single device, address is matched exactly. So in practice, only\n   1 device could be returned.\n\nChanges:\n\n * \u0027getDevicesFromType\u0027 renamed to \u0027getDevicesFromTypeMask\u0027 --\n   emhpasizes the fact that \u0027type\u0027 can be a mask;\n\n * \u0027getDevicesFromTypeAddr\u0027 removed, usages replaced with a call to\n   \u0027getDevice\u0027. There were just 2 usages, and their intent seem\n   to be covered by the semantics of \u0027getDevice\u0027.\n\nTest: verified basic audio functionality and Auto with simulator\nChange-Id: If3e42e4c06f42573fd33ba1303febe0625e079e6\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": "bd1a7046c0ad30f5a6ca214023c618a6080da04e",
      "tree": "a4720becac883cefd1f37444986eb94a98397196",
      "parents": [
        "150bbbc71adc612b45264ad7a5fa180e8deef4ef",
        "c65863d32ed0bf83128b72346bdbd8ec1fd791d4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 24 12:25:31 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 24 12:25:31 2018 -0700"
      },
      "message": "Merge \"audio polcy: fix explicit device routing in call\" into pi-dev am: 944c05e857\nam: c65863d32e\n\nChange-Id: I291dc90b37f3ac07135ab2bfa7f2e748c16c0304\n"
    },
    {
      "commit": "7be71d225fd6d44cc38eaef532c2eb502dcadb91",
      "tree": "fd930e9c5f1f45015264e9548c75301b7e16cc61",
      "parents": [
        "85599801bae7907bd1bc0e4cad1b834d16920776"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 23 16:51:46 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 23 17:15:11 2018 -0700"
      },
      "message": "Zero initialize audio_port_config and containing structs\n\nAdd zero initialization for struct audio_port_config and\nthe structures that contain it: audio_port and audio_patch.\n\nLeft intact places where the struct is overwritten completely\nor memset\u0027d right after declaration.\n\nTest: make\nChange-Id: I889e55fd7c7b8810ef840090a9f0a85d55eaedb3\n"
    },
    {
      "commit": "f3a5a6014a8bf7915bcf9297d536c707c212086d",
      "tree": "36e3815839146def5e5a0e1584a3a5bdf2f2bd8d",
      "parents": [
        "c2d0641bc02e08a74c458002d9460299cd1ff490"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 22 18:42:55 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 23 08:51:46 2018 -0700"
      },
      "message": "audio polcy: fix explicit device routing in call\n\nMake sure tracks with an explicit routing request are not systematically invalidated\nwhen starting while another track on the same strategy is already active.\n\nAlso fix a problem where explicit routing is not taken into account by\ngetNewOutputDevice() when in call because the strategy with the\nexplicit routing is not evaluated.\n\nBug: 69680975\nBug: 79878501\nTest: voice call regression, CTS for explicit audio routing, test case\nfor b/79878501\n\nChange-Id: I99b83f8a3304549bf327c3c327f6671f777cfb4b\n"
    },
    {
      "commit": "4dbb7193c5fde752707bee899a018511e872f1e5",
      "tree": "e1b3fe47323886a0fd5751aafe35ce7dc5add0d6",
      "parents": [
        "815fc56caa35b91df0c8a4bb4659438e59e91152",
        "dc769682023ba8a8a5da07c3e3a3adfabe4bd612"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 16 17:47:25 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 16 17:47:25 2018 +0000"
      },
      "message": "Merge \"audio_server: Unify audio_patch creation\""
    },
    {
      "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": "7ced919cddad4f8db132da56737a2527f9e0e242",
      "tree": "25ff97a06c0d5fac0ed8ed01e02d7f7cd7ca9be3",
      "parents": [
        "99c58a82ce17440d3b050c8efbaa99f6db3f0668"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 10 17:07:20 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 10 17:07:20 2018 -0700"
      },
      "message": "AudioPolicy: Improve audio patches dump\n\nWas:\n\n    Audio Patches:\n      Audio patch 1:\n      - handle:  5\n      - audio flinger handle: 12\n      - owner uid: 1041\n      - 1 sources:\n        - Mix ID 1 I/O handle 13\n      - 1 sinks:\n        - Device ID 3 AUDIO_DEVICE_OUT_SPEAKER\n\nNow:\n\n    Audio Patches:\n      Patch 1: owner uid 1041, handle  5, af handle 12\n        [src  1] Mix ID 1 I/O handle 13\n        [sink 1] Device ID 3 AUDIO_DEVICE_OUT_SPEAKER\n\nTest: adb shell dumpsys media.audio_policy\nChange-Id: I164ab9b384e77929ef44dae019b7ec15239dceaa\n"
    },
    {
      "commit": "1ed007c1e1d1a400cbfa55c4ea649dd48eab09ef",
      "tree": "6c202c71bb9763fbe0e887d1e71f0c75cffe66f0",
      "parents": [
        "6205a06d20d6b92d52044e8076beaac4c7873a21"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 15:41:10 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 15:41:10 2018 -0700"
      },
      "message": "Remove obsolete include path from makefiles\n\nframeworks/av/services/audiopolicy/utilities does not exist,\nremove it from audio service components\u0027 makefiles.\n\nTest: build\nChange-Id: I6c29052b449099d4b0942b7fc0a7ae68d0dc1ba7\n"
    },
    {
      "commit": "5c3c29e53490558a8e538044921daa263df22414",
      "tree": "7f12f78fb46190f2802c9257775ddbed498d55db",
      "parents": [
        "5ec6e0d87fba281c66dd1644fcf9989bb9c95762",
        "e9108d0f23dfb59f59da8a55db8c91f2bdc3297f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 26 11:58:22 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Apr 26 11:58:22 2018 -0700"
      },
      "message": "Merge \"audiopolicy: fix preferred device selection\" into pi-dev am: 90033d1913\nam: e9108d0f23\n\nChange-Id: I8ee6ed31b4f205f7c6178db8219439a56168bf95\n"
    },
    {
      "commit": "2157f5bc0c54a77318e75076365eff739e07056f",
      "tree": "5e7ba0e1b401517aeaaebb68a8c6d2f7eab9a6e8",
      "parents": [
        "64da22285776f07a775afd45f9fc36cea1aa05e3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 25 18:33:02 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 25 18:33:02 2018 -0700"
      },
      "message": "audiopolicy: fix preferred device selection\n\nMake sure preferred device selection is taken into account\nin getOutputForAttr() even if called twice on the same session:\nForce changed flag when adding a SessionRoute even if\nthe same device is specified.\n\nAlso renamed SessionRoute isActive() to isActiveOrChanged() and\nhasRouteChanged() to getAndClearRouteChanged() for clarity.\n\nBug: 69680975\nTest: manual\nChange-Id: I3f3a659568c4dfc825a788753b0302136fd89871\n"
    },
    {
      "commit": "2e5167e17a4c860a297c451e9892660db0ad8dab",
      "tree": "7ada8498a06a1f3226fc0ec4bc035fbbf5bc6bba",
      "parents": [
        "c08db98c40e76a49da296e8834fd0a5a51214f60"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 19 13:41:22 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Apr 20 16:45:53 2018 -0700"
      },
      "message": "AudioPolicy: Print the actual config file name in the dump\n\nSince the audio policy config file is looked up in many locations,\nspecify which one we have ended up using.\n\nSimplify rendering of the audio policy state header.\n\nTest: adb shell dumpsys media.audio_policy\nChange-Id: I0d410eb697898acf4e4beb2333949b1daf08c92b\n"
    },
    {
      "commit": "7e820c5cfdc8d9fd2f8c34ffe287f2479b6577d2",
      "tree": "1df43cf09ba654b6dc9e6feb5ef472ed35dc430d",
      "parents": [
        "018c8a09a35c6da526af2bcb130522ed593e9432"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 17 19:52:45 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 17 19:52:45 2018 -0700"
      },
      "message": "Fix string copy termination\n\nTest: CTS regression\nBug: 78198288\nChange-Id: Id433eb3197d4faf530d5f5090ff95e51689e7088\n"
    },
    {
      "commit": "f255369091d48ba7475ee4aae840a8a9c7a15f07",
      "tree": "41a75f7dece0aae3664a6ab896535580bd38a85d",
      "parents": [
        "85d2e91d3cb2faaf42338df28d34c1cc1bc968bd",
        "0389387677385a5ab0341e7505258f489e5aacf5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 17 16:55:26 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 17 16:55:26 2018 +0000"
      },
      "message": "Merge changes from topic \"silence_mmap_capture_fix\" into pi-dev\n\n* changes:\n  audiopolicy: fix shared mmap capture\n  audioflinger: fix mmap interface callback lock\n  Revert \"Revert \"audioflinger: implement silenced capture for mmap\"\"\n"
    },
    {
      "commit": "0389387677385a5ab0341e7505258f489e5aacf5",
      "tree": "2120e789a785be627628652b86aa3e66c832b057",
      "parents": [
        "734046ead103df5ec86b1dbd29e9945034a1ecb0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 16:53:54 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 17:08:26 2018 -0700"
      },
      "message": "audiopolicy: fix shared mmap capture\n\nChange default maxActiveCount for MMAP input profiles to 0 (unlimited)\nto enable simultaneaous capture by several streams in shared mmap mode.\n\nBug: 72134552\nTest: \u0027adb shell write_sine_callback -m3 -pl -s100 -x\u0027 and Plug headphones in and out.\nTest: AAudio CTS tests\n\nChange-Id: I8743c2a8afb043c20babf8716878e5ca44bd72a4\n"
    },
    {
      "commit": "730b926555ccb9ad5f7d4c47bf01ade526cceef0",
      "tree": "86d3404a2113dca7252c57f56829ec73d8569690",
      "parents": [
        "c4b259a584be3e7dc9aad83e0ead06c913ceb998"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 29 15:01:26 2018 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 16 12:16:16 2018 -0700"
      },
      "message": "Make AudioPolicyManager::getInputForDevice prefer profile match on input fast flag\n\nBug: 77292903\nTest: log name of selected profile\nChange-Id: Idad75627f399f01f353d49d5fd78d7cdb2953d60\n"
    },
    {
      "commit": "1443bf8fff29b94470819aa1647bbc98d5780436",
      "tree": "1dd2f79f5e3807101c757fad512cd6af5a993a8b",
      "parents": [
        "247cc0a3c81ec629a2ae51b40bdcb2afc0e94210"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Apr 13 17:46:54 2018 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Apr 13 17:46:54 2018 -0700"
      },
      "message": "AudioPolicy: fix volume curve query for min/max index\n\nFunction to look up dB attenuation from index in volume curve\n  didn\u0027t check against invalid index values.\n\nBug: 77731632\nTest: cts-tradefed run cts-dev -m CtsMediaTestCases -t android.media.cts.AudioManagerTest#testGetStreamVolumeDb\nChange-Id: Ia89cdbe84dcd586f54b5d08de3774054197aada0\n"
    },
    {
      "commit": "836949cbc2e7a79102e20d766927a061f3f762c7",
      "tree": "0bb9128fdca1e1862f3a4f0560cdcdc91ce38297",
      "parents": [
        "07ea253a2189d5c7a18f6ea18929789348780082",
        "f2f6999b329654641e6af29678f5aa047325d3a0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Apr 06 17:00:04 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 06 17:00:04 2018 +0000"
      },
      "message": "Merge \"Init gain config to prevent uninit leak.\" into pi-dev"
    },
    {
      "commit": "f2f6999b329654641e6af29678f5aa047325d3a0",
      "tree": "4d0ee59b5c7a5782708374f54ea154c270dbb5f5",
      "parents": [
        "93768b1382f021f29772cc72da6f48dc2fb225f7"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Apr 05 17:16:20 2018 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Apr 05 17:16:20 2018 -0700"
      },
      "message": "Init gain config to prevent uninit leak.\n\nIn AudioPortConfig, we only initialize index for audio_gain_config, but\nnot other fields. That may cause uninit leak at listAudioPorts and\nlistAudioPatches.\n\nBug: 77238250\nBug: 77238762\nTest: try repo steps at the bug description.\nChange-Id: I57e3bd0598f9aa698a6fa3d3c0218b046de34e2f\n"
    },
    {
      "commit": "7d08bf4ec05777c7089f1ccba1e42c09786a1511",
      "tree": "d6baa9fdf9a7abacac1cb403cf48a706885df805",
      "parents": [
        "24b0a892cd14a0852277f325f7bb8dbceb420969"
      ],
      "author": {
        "name": "Jakub Pawlowski",
        "email": "jpawlowski@google.com",
        "time": "Wed Apr 04 10:58:20 2018 -0700"
      },
      "committer": {
        "name": "Jakub Pawlowski",
        "email": "jpawlowski@google.com",
        "time": "Wed Apr 04 18:01:57 2018 +0000"
      },
      "message": "Build fix - add sHearingAidVolumeCurve definition in Gains.h\n\nTest: compilation\nBug: 69623109\nChange-Id: I021834d8013eced600c669b1be3f08721fd35092\n"
    },
    {
      "commit": "24b0a892cd14a0852277f325f7bb8dbceb420969",
      "tree": "7826feae528654ff25c2901c6ba8ec3feb51dbf7",
      "parents": [
        "e8c3ff270ef06ab3f4d016f864a92de7b78edd6d"
      ],
      "author": {
        "name": "Jakub Pawlowski",
        "email": "jpawlowski@google.com",
        "time": "Mon Apr 02 19:17:11 2018 -0700"
      },
      "committer": {
        "name": "Jakub Pawlowski",
        "email": "jpawlowski@google.com",
        "time": "Tue Apr 03 22:17:57 2018 -0700"
      },
      "message": "Hearing Aid volume curve\n\nHearing Aid uses volume value from -127 to 0dB. Make sure that volume\ncurve used is able to adjust volume in whole range.\n\nTest: play music using Hearing Aid, try lowering volume to smallest\nnon-mute value.\nBug: 69623109\nFixes: 76434849\nChange-Id: I8b8d64405016252f08ddda823fab74115352de4e\n"
    },
    {
      "commit": "a8ee996bc065d6938c0e0a5904df7fff5d946fea",
      "tree": "e335626781eed7e03d6bc68b110297ca2dedcd4f",
      "parents": [
        "dce7559514917e7975a0d2dcc11aaa97d770367a"
      ],
      "author": {
        "name": "Aniket Kumar Lata",
        "email": "alata@codeaurora.org",
        "time": "Wed Jan 31 20:24:23 2018 -0800"
      },
      "committer": {
        "name": "Petri Gynther",
        "email": "pgynther@google.com",
        "time": "Mon Mar 12 19:16:49 2018 +0000"
      },
      "message": "audiopolicy: Check if A2DP playback happens via primary output\n\nAudio policy implementation assumes A2DP playback to happen\nvia HW module other than the primary HAL. This need not be true\nalways, since primary audio HAL can support A2DP playback too.\nAdd an API to check if A2DP playback is supported via primary HAL,\nand if it is supported avoid suspendOutput.\n\nBug: 63932139\nBug: 68824150\nTest: A2DP offload verified on supported codecs\nChange-Id: Ic5546bc2df632462dcc28442af561d05ba2d7c58\n(cherry picked from commit 68364ffbd312cdc28dd44e66c4d80ce5a6ec49ba)\n"
    },
    {
      "commit": "58a73fc8445db7fc587e4ef494e59bf5663f8b77",
      "tree": "953f7a1db4c4b6da60818709f0efea126902d3b1",
      "parents": [
        "966c158717dea42a7aa4f69a002f30a73c8713cb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Feb 21 18:46:13 2018 -0800"
      },
      "committer": {
        "name": "Jakub Pawlowski",
        "email": "jpawlowski@google.com",
        "time": "Sat Mar 10 00:44:56 2018 +0000"
      },
      "message": "Add Bluetooth Hearing Aid routing and configuration\n\nBug: 69623109\nTest: connect to Hearing Aid, make phone call, verify audio is heard\nChange-Id: I92267fb48608fb721c5c4ef7ec9fceeafc8ea192\n"
    },
    {
      "commit": "5babc4f104885c16a3dcfdfb5d99903c27ff2bd9",
      "tree": "2f260fb33ee4424dcea806c3ba3d96faedb9b644",
      "parents": [
        "31832c60d57558c2d5ddb2e45e4c6111ce9e55bb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 15 12:33:44 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 15 17:36:04 2018 -0800"
      },
      "message": "audio policy: fix regression with duplicated output handle\n\nCommit fe2311274 made that IO Handle for duplicated outputs\nwere not allocated properly causing volume commands to be sent\nwith an invalid IO handle to audio flinger.\nWe then hit another problem with a legacy behavior which broadcasts volume\ncommands to all output threads if received with IOHandle 0.\n\nBug: 70332110\nTest: manual test.\nChange-Id: Ib133abab1575e3c90ba235f0a52d5ab845514719\n"
    },
    {
      "commit": "61309523e6332addbd648c0d1bf25d35d6fd7b90",
      "tree": "d7bd244a6e75f5d7b443606ade3d2809b0ef6fc3",
      "parents": [
        "bd1f998721a5c17623043c415fa2a0bb3e57601f"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jan 23 09:58:17 2018 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jan 23 17:36:24 2018 -0800"
      },
      "message": "Notifications are not duplicated over multiple devices\n\nSonifications follow media routing, except for speaker playback\n  where they follow the \"safe\" path when available in the\n  absence of media playback.\n\nTest: 1/ plug headphones on phone, play notification, verify it\n         comes only from headset\n      2/ mirror device and play media, then notification, verify\n         it only comes from the speaker\n\nChange-Id: I762ad0688e879ad1e5565b4b77a7393fa7ce7ac5\n"
    },
    {
      "commit": "766fb020a50b64bf9a808bd80df60c54c2ca8cc3",
      "tree": "acb92cb201889d2b56f41bc2a437da1aaae72c4e",
      "parents": [
        "652f9299bb8a7a50148d57a75de6ede831bfed85"
      ],
      "author": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Sun Jan 07 12:18:03 2018 +0200"
      },
      "committer": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Mon Jan 22 23:05:23 2018 +0200"
      },
      "message": "Support routing audio playback to telephony uplink\n\nThis change enables phone apps to play audio to the uplink stream\nduring a call.\nThis change maks the AUDIO_OUTPUT_FLAG_INCALL_MUSIC_UPLINK flag to be added to the flags that are sent to the HAL when an ongoing call is active, the chosen output device is the TX telephony device, the stream type is music, and the calling app has the MODIFY_PHONE_STATE permission.\nFor this change to take place, the following changes were made to the signature of getOutputForAttr in IAudioPolicyService:\n  1. Add pid (process id) parameter to getOutputForAttr.\n  2. Make the flags parameter a pointer so changed value can be\n  examined by calling function.\n\nBug: 69973354.\nTest: tested manually.\nChange-Id: I74cef3f8b66de6e0e8f87b6235130c2cdf423da7\n"
    },
    {
      "commit": "f4ddfefc8ba59a8486d91826154cc9447821409e",
      "tree": "b24bb43846003ef5523f0d470e49389086138679",
      "parents": [
        "d6be64a3f22be3eceb0d6209c88dcad573c08191"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 16 07:37:58 2018 -0800"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Jan 18 00:17:52 2018 -0800"
      },
      "message": "Don\u0027t record audio if UID is idle - media framework\n\nTo protect user\u0027s privacy if a UID is in an idle state we allow\nrecording but report silence (all zeros in the byte array) and once\nthe process goes in an active state we report the real mic data.\nThis avoids the race between the app being notified aboout its\nlifecycle and the audio system being notified about the state\nof a UID.\n\nTest: Added - AudioRecordTest#testRecordNoDataForIdleUids\n      Passing - cts-tradefed run cts-dev -m CtsMediaTestCases\n                    -t android.media.cts.AudioRecordTest\n\nbug:63938985\n\nChange-Id: I1442a9dda1553e9ea7a4a654c50555ac1ec06aa0\n"
    },
    {
      "commit": "7a098c5e4366b9e2503b0211a82463e8a1cb0525",
      "tree": "d0c93e2f27d2937b456aefeb0c7474c2bd727399",
      "parents": [
        "0ee31da6c3dabe244559561ae94169784efef376"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Wed Dec 06 15:25:17 2017 -0800"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Thu Jan 04 16:11:08 2018 -0800"
      },
      "message": "Check audio profile by config mask\n\nBug: 68231490\nTest: lunch gcar_emu-x86 \u0026\u0026 m -j\nChange-Id: I8f63fb75ff0095a9855db3846ae9bb310bf934ee\n"
    },
    {
      "commit": "bcbcb1bdda4f1970830fa4924e3a5f24171ae005",
      "tree": "9b1523a2e1e60e1a44582240f040581617fedaf0",
      "parents": [
        "823267338b2bee8c279306c07775feabfc2434a5"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 13 13:03:35 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Sat Dec 16 00:52:18 2017 +0000"
      },
      "message": "audiopolicy: Add more tests, fix issues found\n\nAdded tests that ensure correct initialization of APM.\n\nFixed issues:\n\n  -- UB in VolumeCurvesForStream::volIndexToDb due to not\n     checking that the pointer is non-null;\n\n  -- AudioInputDescriptor::open and SwAudioOutputDescriptor::open\n     were not checking that the returned IO handle is valid,\n     this was causing an infinite loop in\n     AudioPolicyManager::selectOutputForMusicEffects, added an\n     assertion.\n\n  -- Memory leak of VolumeCurves collection in APM.\n\nTest: audiopolicy_tests\nChange-Id: Ia4ecca1dd03b74d7f93720f042da05d5a0c74a6b\n"
    },
    {
      "commit": "ad3f8a1082c101f2c218be64e48ae615676952ea",
      "tree": "ec94ad27cebafe5eccc8e04fa9b80ad20932813d",
      "parents": [
        "ceedc87e48c92e248123b9a9476053456e62e006"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Dec 12 13:24:23 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 13 16:20:45 2017 -0800"
      },
      "message": "audiopolicy: Add unit tests build target\n\nThis change adds audiopolicy_tests target for running\nunit tests of AudioPolicyManager class.\n\nAudioPolicyManager class is modified to allow\nfiner control over the configuration loading.\n\nTest: audiopolicy_tests\nChange-Id: Icf0cd7ff5b3b8b827b4f6909ff2c138ac2a2b82e\n"
    },
    {
      "commit": "733ce945741b1fc12cee92d8133c3136b4e6e0e0",
      "tree": "fbf765136f3dcccf9595c49bdc949e426194c379",
      "parents": [
        "447d53631b7560eace6016b2711a75533339cbcc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 12:18:25 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 12:45:51 2017 -0800"
      },
      "message": "audio policy: fix HAL stream activity ref counting\n\ncommit f05fc906 did not take into account the specificities of duplicated\noutputs causing a crash when accessing the profile (null for duplicated outputs)\nand not counting activity resulting from duplicated output activity.\nAlso account for HW source activity when connected to an output mix.\n\nBug: 70319466\nTest: CTS tests for AudioTrack and AudioRecord\nTest: audio smoke tests\n\nChange-Id: Id0364170794302e42212a90e1b40e28c1e7193fe\n"
    },
    {
      "commit": "447d53631b7560eace6016b2711a75533339cbcc",
      "tree": "aee66d64d06c2651d19e09774d824aeabb7a0933",
      "parents": [
        "ae60317f881c9ed064a2cc75a091d2451ae23a0a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 17:59:20 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 12:45:51 2017 -0800"
      },
      "message": "Revert \"Revert \"audio policy: fix regression in A2DP playback\"\"\n\nThis reverts commit 460451e5d7b9813926fe8fc17283e77b63adaee7.\n"
    },
    {
      "commit": "ae60317f881c9ed064a2cc75a091d2451ae23a0a",
      "tree": "976efafd8eb23d9e0b08d4ea06e92ea876c9ef7d",
      "parents": [
        "3974e3b22856ef35dd73760056ff38b7a4062176"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 17:59:01 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 12:45:51 2017 -0800"
      },
      "message": "Revert \"Revert \"audio policy: add parsing for profile max open and active count\"\"\n\nThis reverts commit 79e94ec95e5d2a8c13998c2f05ae63326f7468d0.\n"
    },
    {
      "commit": "3974e3b22856ef35dd73760056ff38b7a4062176",
      "tree": "2d6d5c222659f327302f69a833744b5ba7e1f74f",
      "parents": [
        "ea5523d88c6dc9662621db5fc62bf50eff0fe4ba"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 17:58:43 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 12:45:51 2017 -0800"
      },
      "message": "Revert \"Revert \"audio policy: add open and active count for IO profiles\"\"\n\nThis reverts commit 7b0e95327267f08e36b38fdd8fb2624e251b8e97.\n"
    },
    {
      "commit": "53b810ead5b726994fe6a28c6fa955e7b8799aaa",
      "tree": "15653882b1b062369bc046d9ef92ccfdffbe1281",
      "parents": [
        "5fb93fa294ee05a25f86312e926b5ca4e0d1d3b2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Dec 10 17:25:10 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 11 14:30:37 2017 -0800"
      },
      "message": "audio policy: fix device address passed when opening HAL  streams\n\nCommit fe231127 caused a regression where the device address is\nnot passed properly to audio HAL by openInputStream() or\nopenOutputStream(). The address must be read from available\ndevice descriptors, not supported devices in profiles which do not\nhave the current device address for removable devices.\n\nBug: 70321528\nTest: audio smoke tests,CTS  AudioRecordTest\nChange-Id: I83211a31f86391b80c3c244b436a2e36923ccea0\n"
    },
    {
      "commit": "1b2a794a27caab3a1320d22b872b04ef73e96555",
      "tree": "79f53eef61b788a5f49aaf26b5c897d7a6dac49f",
      "parents": [
        "2773dd7219e6cdc56471501c90808a1bafc31d39"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 10:18:09 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 12:06:18 2017 -0800"
      },
      "message": "audiopolicy: Remove ; after namespace bracket\n\nSemicolons are not needed after the closing bracket of\na namespace, remove it.\n\nTest: compiles\nChange-Id: Ie82930365f738fd9c95a9163839a68b772e49d95\n"
    },
    {
      "commit": "2773dd7219e6cdc56471501c90808a1bafc31d39",
      "tree": "9a514d61c4b618a1a2599c766e0e5b088876e542",
      "parents": [
        "a5e165d3a9074c09b67df5a89aa26b153cf69562"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 10:12:11 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 12:03:28 2017 -0800"
      },
      "message": "audiopolicy: Use C++11 atomics, factor out handle generation\n\nUpdate the code to use C++11 atomics. Make sure that\nunsigned ints are used as id counters (signed ints have undefined\noverflow behavior). Factor out common code from AudioPatch\nand AudioPort.\n\nTest: compiles\nChange-Id: Ic359e97795a6282a2937d88bead8a1de27c8db7a\n"
    },
    {
      "commit": "a5e165d3a9074c09b67df5a89aa26b153cf69562",
      "tree": "c41079e712a68ff295d8bb7bf713885ca63a2682",
      "parents": [
        "22f920a8a520614d872024400bf0e371c77dcc7e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 17:08:02 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 12:01:19 2017 -0800"
      },
      "message": "audiopolicy: Make fields of HwModule private\n\nIt\u0027s a good practice not to expose fields of the class.\nUse getter / setter methods instead.\n\nTest: compiles\nChange-Id: I9d939d17fafdfff016a300d4f5a979bdc8414f2b\n"
    },
    {
      "commit": "2478d528186436f693b02c3534f04425086b638c",
      "tree": "d0b3cd0db05607b688da0b4c24f23513dcb47c46",
      "parents": [
        "cf84e596c53d5f85b64665a66ed2ec212ecff618"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 13:02:28 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 16:43:38 2017 -0800"
      },
      "message": "audiopolicy: Use range for loops in managerdefinitions classes\n\nUse \"range for\" loops where it improves readability.\n\nChange-Id: I4fc0360956b7aa70b9e282b83f6bb371c05a8522\nTest: compiles\n"
    },
    {
      "commit": "7b0e95327267f08e36b38fdd8fb2624e251b8e97",
      "tree": "0c412e78c95e72016e18612167e463ccb3205da2",
      "parents": [
        "79e94ec95e5d2a8c13998c2f05ae63326f7468d0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 12:20:56 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 22:26:21 2017 +0000"
      },
      "message": "Revert \"audio policy: add open and active count for IO profiles\"\n\nBug: 70319466\n\nThis reverts commit f05fc9061254a3329bf0a3b40e27cac87b51b4cc.\n"
    },
    {
      "commit": "79e94ec95e5d2a8c13998c2f05ae63326f7468d0",
      "tree": "54df020a89feb83f12f0fd0ecef243e1c8d3f875",
      "parents": [
        "64ed5cb45b3226c5c946603c026e1b73d14ee7d8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 12:20:45 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 22:24:40 2017 +0000"
      },
      "message": "Revert \"audio policy: add parsing for profile max open and active count\"\n\nBug: 70319466\n\nThis reverts commit 89984a0cbb2bc52112d7b98f5f1c13001326b130.\n"
    },
    {
      "commit": "64ed5cb45b3226c5c946603c026e1b73d14ee7d8",
      "tree": "75df581a30722231c471363983f5bff75b2cede0",
      "parents": [
        "44804b4c684b4b870cf0df1e7ace11a152eeec19",
        "460451e5d7b9813926fe8fc17283e77b63adaee7"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 07 21:53:30 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 07 21:53:30 2017 +0000"
      },
      "message": "Merge \"Revert \"audio policy: fix regression in A2DP playback\"\""
    },
    {
      "commit": "460451e5d7b9813926fe8fc17283e77b63adaee7",
      "tree": "7fb04597d265f47100d93d98ae91a394ae2ade21",
      "parents": [
        "3a0bd6fcb215376eb3f27b5b4588a13f6f0f9a34"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 12:20:33 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 07 21:17:40 2017 +0000"
      },
      "message": "Revert \"audio policy: fix regression in A2DP playback\"\n\nBug: 70319466\n\nThis reverts commit 995ba712ed77e36129485f5ac811cf328d0a27f6.\n"
    },
    {
      "commit": "44804b4c684b4b870cf0df1e7ace11a152eeec19",
      "tree": "0da1c4240615fdac87dfa2de5a293dae6e2cdd4b",
      "parents": [
        "3ad57c2e5b0e8d58f05314c947ff615671571e97",
        "d4120148e72b2352f19f74dd493e903992371ef9"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 16:41:57 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 07 16:41:57 2017 +0000"
      },
      "message": "Merge \"audiopolicy: Refactor HwModuleCollection\""
    },
    {
      "commit": "d4120148e72b2352f19f74dd493e903992371ef9",
      "tree": "fe81d9ec22eda9966fddaf89388c7870efb76a58",
      "parents": [
        "3a5608cf069994725f6e50950f0462e91dcd8c51"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 06 15:49:22 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 06 18:00:54 2017 -0800"
      },
      "message": "audiopolicy: Refactor HwModuleCollection\n\n -- make AudioPolicyManager::mHwModules to only store\n    loaded modules; all modules stored in mHwModulesAll;\n    this removes lots of checks for HwModule::mHandle;\n\n -- use \"for range\" loops when iterating over mHwModules;\n\n -- use HwModulesCollection::getModuleFromName for finding\n    the remote submix module;\n\n -- log statements print HwModule\u0027s name instead of index.\n\nTest: audio still works\nChange-Id: I2d86caae23e87e25b6a367cb4042741f0b32e99c\n"
    },
    {
      "commit": "995ba712ed77e36129485f5ac811cf328d0a27f6",
      "tree": "9159f47fec4b7e14b950cd3602bfefba8bb84997",
      "parents": [
        "1b2de88f1659106dadf31794907f4fb66d8baec1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 05 18:45:46 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 05 18:45:46 2017 -0800"
      },
      "message": "audio policy: fix regression in A2DP playback\n\ncommit f05fc906 introduced a regression preventing playback over A2DP\nto resume after the second time an A2DP device is connected.\n\nBug: 70245910\nTest: Audio smoke test, CTS test for AudioTrack.\nChange-Id: Ic6b5da96debf62be08ae12efec27ad36854fe3c5\n"
    },
    {
      "commit": "89984a0cbb2bc52112d7b98f5f1c13001326b130",
      "tree": "313ee27abab6102d5c72367a3d15c788f276f031",
      "parents": [
        "f05fc9061254a3329bf0a3b40e27cac87b51b4cc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 22 15:43:49 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 28 09:36:49 2017 -0800"
      },
      "message": "audio policy: add parsing for profile max open and active count\n\nAdd parsing of \"maxOpenCount\" and \"maxActiveCount\" for input and\noutput profiles in audio_policy_configuration.xml\n\nTest: Manual with modified audio policy configuration file\nChange-Id: I352875912bacd81776e9f2e72c37bc3d3d2ac4df\n"
    },
    {
      "commit": "f05fc9061254a3329bf0a3b40e27cac87b51b4cc",
      "tree": "aa6f6c000bc5dcf7264e76cc24a354265fd53970",
      "parents": [
        "fe23112742eeb6199c3aa1f3dfcf800fc2aa0e26"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 21 12:08:15 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 28 09:35:17 2017 -0800"
      },
      "message": "audio policy: add open and active count for IO profiles\n\nRemove the hardcoded limit of one open output stream per IO profile\nand add a max open count per IO profile.\nSame thing for maximum number of active input streams per IO profile.\n\nNow both the maximum number of opened streams and active streams for\na given profile is stored in that profile.\n\nFor now only defaults are set corresponding to legacy behavior,\nbut these values will be loaded form the audio policy configuration file.\n\nTest: AudioTrack and AudioRecord CTS tests\n\nChange-Id: I5ebcc7f8a06b3f0a52815d241c561bb65e036026\n"
    },
    {
      "commit": "fe23112742eeb6199c3aa1f3dfcf800fc2aa0e26",
      "tree": "5297ab7f4a098bd8c0c0e89e27a54e9fd450ce5a",
      "parents": [
        "a221a7c81776add538e6cd82cddfa427364beb79"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 17 17:48:06 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 21 14:14:49 2017 -0800"
      },
      "message": "audio policy: refactor output and input opening\n\nRefactor the way input and output streams are open so that common\nlogic is centralized in AudioOutputDescriptor and AudioInputDescriptor\nclasses.\n\nThis is in preparation of adding reference counting for ouputs and inputs\nopened for a given profile.\n\nTest: Manual\nChange-Id: Id806e23077eb41f6398400ab40aeaa694c7d5603\n"
    },
    {
      "commit": "7db8b99d00f2399faba9de2f8b2c13b05d10aec5",
      "tree": "cef4ea60750b20629d21f3c3f33789acc8aaf12e",
      "parents": [
        "68f1d2842541f043ca318b01690a7cdb41b1df78"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Tue Nov 14 13:26:54 2017 -0800"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Tue Nov 14 14:18:59 2017 -0800"
      },
      "message": "Adds AUDIO_DEVICE_IN_FM_TUNER/_BUS to virtual input device list\n\nBug: 69311798\nTest: m -j\nChange-Id: I4e7de370c61be48b8dcfd178bbc47d7ce68fe107\n"
    },
    {
      "commit": "575bb3aa6358661addac9fa8204630a27056b129",
      "tree": "fd8a1ace3283d4c4094d76ac17a267667ba3241d",
      "parents": [
        "6086cd30a510375fb7d060467ef062f7ba697f3c"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Oct 27 16:49:20 2017 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Oct 27 16:49:20 2017 -0700"
      },
      "message": "Config deserialization: allow negative gain\n\nAudio policy configuration deserializer did not support negative gains\nin audio profiles.\n\nAs those gains are most always attenuation (negative) this mean that\nprofile can not currently contain gains.\n\nTest: policy sysdump show negative gain\nTest: play music and assistant work on speaker, skylab\nBug: 68229318\nChange-Id: I7d72a0dd464aa77847d7e3ec0cfb4dcf7ac25b24\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "e156e8fff8b6523c82692ac3d75adb1005d36201",
      "tree": "9086e4f884f11a3842ccd8df53a3d87708d86b57",
      "parents": [
        "cadabe1d7243f9d78e50b7834842f9f86dbaab63",
        "f3b73f46c70a5a5530e1e628d59baf055c6ffd56"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 05 23:25:28 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 05 23:25:28 2017 +0000"
      },
      "message": "Soundtrigger service: fix cross deadlock with audio policy service am: 338e8ba374\nam: f3b73f46c7\n\nChange-Id: I8fdf045c57eb96e099d632f1a00b89bd6b3e62c5\n"
    },
    {
      "commit": "338e8ba374432cc4ee853f4fcefcf7bd7bae3bb9",
      "tree": "0f22e5975405924e3935701ae973ab3201f7524e",
      "parents": [
        "7b7f4e0f8bdf7542561ece15c4ffc2542fb7750d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 05 10:58:38 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 05 11:56:38 2017 -0700"
      },
      "message": "Soundtrigger service: fix cross deadlock with audio policy service\n\nDo not hold Module mutex when calling into audio policy manager to\navoid cross deadlock with audio poicy service mutex: Audio policy manager\ncan call into sound trigger service with its mutex held in methods like\nstopInput().\n\nRegression introduced by fix for b/64340921 commit f759b8c4\n\nBug: 64340921\nBug: 67310830\nTest: repro steps in b/67310830\nChange-Id: Ie50b2e7c55fe9828a3fd8de6b31eb4a492791583\n"
    },
    {
      "commit": "5cd72d8b4f07ced237eaaa24c24ca90c5832bac7",
      "tree": "eb1a3e921face541ebff4911458604f5ce2cd381",
      "parents": [
        "13e4dad5f0eafbe1c46fcbde6da9b37fcd57e422"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Aug 24 11:12:56 2017 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Aug 24 12:33:03 2017 -0700"
      },
      "message": "audiopolicy: Fix null port handling in AudioOutputDescriptor\n\nAudioOutputDescriptor can be created with a null port\nfor a duplicated output descriptor (see\nAudioPolicyManager::checkOutputsForDevice). There used to be\na check for null port in getModuleHandle method prior to\nag/Ie90943ee3102cdb8adf89fdd2addd2c279b1e5bf. Restoring\nthe null check to prevent crash in getModuleHandle.\n\nBug: 63715585\nChange-Id: If3f9563c58cd44ac95c8e27e0560375a404e5db6\nTest: make\n"
    },
    {
      "commit": "a54f1283fdd9adbd64ecca4e14af56aaa0e8c825",
      "tree": "cdadd19276119f775480482778c2df15a6ae264f",
      "parents": [
        "20e6916035865710b7a30ac7f2eac1311e2c2e70"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Jul 01 19:39:32 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 11 18:21:40 2017 -0700"
      },
      "message": "aaudio: indicate client UID and PID to audio flinger\n\nImplement correct indication of client UID and PID to audio flinger\nfor AAudio MMAP streams in both exclusive mode and shared mode.\n- Add start/stop client methods on MMAP streams used only when the MMAP\nstream is in AAudio service and carries a mix of shared streams.\n- Add \"In Service\u0027\" indication from \"client\" side to AAudioServiceStreamMMAP\nso that the behavior can be adapted accordingly.\n- Modify logic on audio flinger side with regard to mmap tracks and\naudio HAL stream activity:\n  - use same audio session for all clients on a same stream to match\n  audio policy logic to share same direct output stream for clients on same\n  session. This is also more consistent with current volume and effect\n  handling as all MMAP  clients sharing the same output stream have the\n  same volume and use case.\n  - start/stop the HAL when the stream is started/stopped with the initial client\n  handle (returned when the stream is opened) but do not create a track.\n  AAudioService implementation will always send an additional start command before\n  first client starts and a stop command after last client stops,\n  in both shared and exclusive mode.\n  - start/stop a track only if the start/stop stream command is received\n  with a handle different from the initial handle.\n- Allow more than one active client from the same UID on a MMAP input in audio policy.\n\nBug: 62950008\nTest: verify playback and capture in mmap mode\nChange-Id: I86151bbb637ff172d2fd5f813056eab13a7bcd3c\n"
    },
    {
      "commit": "b64230e6f42e87a84725d9934d9e25c638d761b1",
      "tree": "92d4d93a541195da3719b35474b89e89ebfaa8ab",
      "parents": [
        "ab5c38a7ac2ba27e680a95cac6c0b9d61c08771b",
        "9f2b9d3a001834c1e1990ac8e2a8717ad38c7eee"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 11 18:02:26 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 11 18:02:26 2017 +0000"
      },
      "message": "Merge \"audio policy: fix audio device properties loading\" into oc-dr1-dev am: ed0f8f425d\nam: 9f2b9d3a00\n\nChange-Id: Ieb6145d4120f3197a7b841fccc9250f92db5f384\n"
    },
    {
      "commit": "83efe1c6bd6fa206560377960358ec95aa6a1c41",
      "tree": "5dd69d5f069370fffc9ae73660f9c8641017b636",
      "parents": [
        "15fb0ee6bd752ccde960b961dd1e9113c37e5f8b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 09 16:51:08 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 09 16:51:08 2017 -0700"
      },
      "message": "audio policy: fix audio device properties loading\n\nOnly load removable digital device properties from streams\nwith dynamic profiles. This avoids aggregating properties from\nother stream profiles when the device can also be reached via those\nprofiles.\n\nBug: 38423100\nTest: connect various USB devices and check properties are loaded\nproperly.\n\nChange-Id: Ie5eed397d3a475848a3d423d18ffae9d55917ac4\n"
    },
    {
      "commit": "ac4e42982d4537732b30e71c9a00ba0077944984",
      "tree": "1774e0b1cba1a173c29aaca85d4147e178c69346",
      "parents": [
        "c407bd4b32b99cab78e773ac51a57f49cd0985ea"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Dec 22 11:39:31 2016 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Jun 19 18:03:28 2017 +0000"
      },
      "message": "Monitoring of recording: uid of recording session\n\nPass uid of recording session along with other existing information\n  in the recording monitoring callback.\nDefine new structure, record_client_info, to group uid (new),\n  session id (existing) and source (existing) and simplify\n  method signatures and marshalling code.\n\nTest: run cts -m CtsMediaTestCases -t android.media.cts.AudioRecordingConfigurationTest#testAudioManagerGetActiveRecordConfigurations\nBug 62579636\n\nChange-Id: I18f66d7e55640a21f31021416a12a3e8094c3690\n"
    },
    {
      "commit": "2ee7aab4a39139a86a24ca14f718eb20a1b355db",
      "tree": "1a7501567d6af64aa958f26453ee9360833bfd4a",
      "parents": [
        "bcbc56bfd43e071cf8b199e9e6dfc835d1f29ab6"
      ],
      "author": {
        "name": "YOUNG HO CHA",
        "email": "ganadist@gmail.com",
        "time": "Thu May 25 23:16:51 2017 +0900"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu May 25 11:26:52 2017 -0700"
      },
      "message": "Android.mk: remove $TOP in LOCAL_C_INCLUDES\n\nTest: make systemimage\n\nChange-Id: I5f83786afe3f2c65819b127b041cb74fc4c989ac\nSigned-off-by: YOUNG HO CHA \u003cganadist@gmail.com\u003e\n"
    },
    {
      "commit": "be08ba90dfb26f7b7425d19a5db90c09756e7d17",
      "tree": "752336f46e794bea2c522f9d3f0e20e11f76363f",
      "parents": [
        "65d96f774d9a01fd54fd2b3fbfaf21036ba321e6",
        "46260c37420f82a6e664b740365b2537767e5a76"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu May 18 21:41:43 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 18 21:41:43 2017 +0000"
      },
      "message": "Merge \"audiopolicy: Two session can not offload concurrently\" into oc-dev\nam: 46260c3742\n\nChange-Id: I26ab34add9e632eddec417fc7b042387dc4d1c0a\n"
    },
    {
      "commit": "169753cd5f71ba92560e993bb7cb461d2f094272",
      "tree": "7414ab09392201eb08c3ef966d40f2f88abd518f",
      "parents": [
        "9ec59fc5d016a609adffdb7e68236b9d5d05254d"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Mar 06 14:18:23 2017 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri May 12 16:39:22 2017 -0700"
      },
      "message": "audiopolicy: Two session can not offload concurrently\n\nPreviously the patch I98a8913d6faf5092a1e43a0bdd0f1ce1482221a9\nforbade two tracks from different application to be offloaded\nconcurrently.\n\nConcurrent offload is only needed for back to back playback...\nDetect this use case by checking the session id instead of the\nPID.\n\nTest: call \u0026 play music \u0026 assistant\nTest: run new CTS testConcurentPlayAudio\nBug: 35841692\nChange-Id: I2c09c54adedf12644205bef115f1a2e16b05de91\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "b0bb2ec974c7382dca7179082c7db3c7486c6854",
      "tree": "ef18e7698796e8265d2acc12777aa57a2df7c58e",
      "parents": [
        "2bedf7bba6f938c0e9cbabab9b299bdd00de8bcb"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Apr 27 16:15:51 2017 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 28 23:59:34 2017 +0000"
      },
      "message": "Fix warnings hidden by -isystem\n\nFix -Wundefined-var-template and -Wsign-compare warnings that were\nhidden by the use of -isystem to include frameworks/av.\n\nTest: m -j native\nBug: 31751828\nChange-Id: I28e07b238d5bc913ea2f3dfa09fa02f577d5a250\n(cherry picked from commit d995c0186ee0fc13f397a35808a1bc8045ab48d0)\n"
    },
    {
      "commit": "38f86713cbd22caae9fdd4ac2f0bb76ff91df34d",
      "tree": "0a63e9771a87a74837cad231f54e15c1ce8eb635",
      "parents": [
        "ef0b6b64144b6e062bbb445a6df73c365b66646d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Apr 11 14:10:17 2017 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Apr 11 15:03:51 2017 -0700"
      },
      "message": "Audio policy / flinger: updates to recording callback and record stop\n\nDo not trigger the callback for recording events when the patch\n  handle is NONE, the patch handle will be updated for the\n  recording session later.\nWhen stopping recording, only stop the record thread if the\n  track is not active, not if it\u0027s not the first one.\n\nTest: cts-tradefed run cts-dev -m CtsMediaTestCases -t android.media.cts.AudioRecordingConfigurationTest\nBug: 36569938\n\nChange-Id: I1b7445ef4115d6337ba7b926f7e6b068361926a7\n"
    },
    {
      "commit": "904d632a24db8f94de83e44f7179d1c0af022b03",
      "tree": "e86d16495e3fe207153c0f2bcadcb00d14d76aec",
      "parents": [
        "93e29c0846e0f7583ae96edafbf5e8a3169711ee"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 17 17:20:47 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 22 14:40:29 2017 -0700"
      },
      "message": "Add support for USB headset device\n\nAdd missing rules for USB headset devices in routing, volume and effects\nmanagement.\n\nTest: playback and catpure regression tests.\nChange-Id: I42cd157f483deba2371a05d332cd11dceb2b2fa3\n"
    }
  ],
  "next": "05d19b08f3affa6fa8407e779f67e7ad1c1ca84f"
}
