)]}'
{
  "log": [
    {
      "commit": "a9f86651eaaf2f702b3759ec38dbb64ca8858356",
      "tree": "913a55b14107e7f94335bec0ad6705f9557255a0",
      "parents": [
        "c241b0dfc49014087123dae92f7341db8d30d443"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 28 17:23:11 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 19 18:05:00 2018 -0800"
      },
      "message": "audo policy: more info in onRecordingConfigurationUpdate\n\nReport more information in onRecordingConfigurationUpdate() callback:\n- For client:\n  - Port ID\n  - Enabled effects\n  - Silenced by policy\n- For stream:\n  - Active effects\n  - Active audio source\n\nBug: 111438757\nTest: make\nChange-Id: I34c3d0ee6251576de7d793bfaa2bc2c34efa2319\n"
    },
    {
      "commit": "cfd2830436e4bd400c4bf9c223642ef567c5aa6e",
      "tree": "48b0ac20dd90fba526d31467e6058fc7c7c965e1",
      "parents": [
        "e21f3418be2e323ad1ed64d79f862474f2c98c76"
      ],
      "author": {
        "name": "Michael Groover",
        "email": "mpgroover@google.com",
        "time": "Tue Dec 11 19:16:46 2018 -0800"
      },
      "committer": {
        "name": "Michael Groover",
        "email": "mpgroover@google.com",
        "time": "Tue Dec 18 10:59:53 2018 -0800"
      },
      "message": "Prevent recording when sensor privacy is enabled\n\nTest: Manually verified audio was not recorded when sensor privacy \\\n      was enabled.\nBug: 110842805\n\nChange-Id: I3bb966d9322e258a8aba43fb4e9f65badd7c3506\n"
    },
    {
      "commit": "45d34272dfa8462adda0f11ccfa169c5afa49621",
      "tree": "45450f514f133a91a4746eb6b232c86dc3280806",
      "parents": [
        "cf80f34cc5e8d16d939df21879d770200defaf6e",
        "6012f913f0772cf0b73f379778efc671ce72c557"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 12 02:32:28 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 12 02:32:28 2018 +0000"
      },
      "message": "Merge \"Querying capability of haptic playback.\""
    },
    {
      "commit": "6012f913f0772cf0b73f379778efc671ce72c557",
      "tree": "c77bb87b93b7fd9e3ad78532761d7e4ac7cfe9e6",
      "parents": [
        "6b6a0f05248fc646d42f09cb891d8b6fda19426e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Nov 02 17:06:30 2018 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 11 16:18:09 2018 -0800"
      },
      "message": "Querying capability of haptic playback.\n\nBug: 111454766\nTest: Manually test\nChange-Id: Ib200d6b8f02354a01cf599a96fb1a9062dcd3050\n"
    },
    {
      "commit": "a223769e7767765ba7a546f66887508fbb19f54d",
      "tree": "a24bbadad46856fca743a3d6d31d0c046f55f73f",
      "parents": [
        "7ce82e7ccf47ec5ea00a85a15665eb51edd9b258",
        "a94fbb22404ef26d12fbb3ad0376df15f84f47ec"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 11 13:54:38 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 11 13:54:38 2018 +0000"
      },
      "message": "Merge \"Implement AudioTrack.isDirectPlaybackSupported method\""
    },
    {
      "commit": "a46bedb84a6c972f128e17e7bed114ad0863b0b3",
      "tree": "d0a35a7aa88bf66dea6334eecfdf3689a1dd22f2",
      "parents": [
        "4eb58f1f36606ad7af392a920e1d029a5fb1e797"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 07 18:01:26 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 10 15:45:51 2018 -0800"
      },
      "message": "audio policy: fix capture policy for assistant\n\nFix concurrent capture policy for assistant: allow assistant to capture if\nrunning as foreground service too and not only if on top.\n\nSame fix for accessibility service.\nAlso refine logic for single active client on top by retaining the\nlatest started capture from an app on top (in case several apps can be on top).\nAlso fix priority between app on top and app with foreground service.\n\nBug: 120588242\nBug: 111438757\nTest: Manual capture tests with solotester and Camera, Assistant and Duo\nTest: CTS tests for AudioReco\nChange-Id: I2fc54853a584b9e9e48c012b0c3a2bcc8436a340\n"
    },
    {
      "commit": "4eb58f1f36606ad7af392a920e1d029a5fb1e797",
      "tree": "c1599fda024344eaf6da5e1d33fc410384127550",
      "parents": [
        "5a2048c3095478482a5ac16639514d3a0a214713"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 07 16:41:02 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 10 14:10:05 2018 -0800"
      },
      "message": "Revert \"Revert \"audio policy: concurrent capture\"\"\n\nThis reverts commit df628924e691e01da190c1ac5db173304442e54a.\n\nBug: 120588242\nBug: 111438757\nTest: make\nChange-Id: If58ff2143fdb744678bb84394598104ced01f5b9\n"
    },
    {
      "commit": "df628924e691e01da190c1ac5db173304442e54a",
      "tree": "e2dda15a881c963a14520117128b5b9857834759",
      "parents": [
        "4c1ef4b64d113be6ee1106375bd10cdc643e80d8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 06 21:45:51 2018 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 06 21:45:51 2018 +0000"
      },
      "message": "Revert \"audio policy: concurrent capture\"\n\nThis reverts commit 4c1ef4b64d113be6ee1106375bd10cdc643e80d8.\n\nReason for revert: b/120588242\n\nBug: 120588242\nChange-Id: Iac41f371cb739c54d5ce519232688bebe2285c72\nTest: Launch QSB and capture from mic icon\n"
    },
    {
      "commit": "a94fbb22404ef26d12fbb3ad0376df15f84f47ec",
      "tree": "b4a8052d5ce8726541ba7a25e3f1f449d351acd9",
      "parents": [
        "b079c02b1fa4f1b5c5b6334b93af584797b4454f"
      ],
      "author": {
        "name": "Michael Chan",
        "email": "mzchan@dolby.com",
        "time": "Tue Apr 24 14:31:19 2018 +1000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 05 15:35:35 2018 -0800"
      },
      "message": "Implement AudioTrack.isDirectPlaybackSupported method\n\nThe method checks whether the provided AudioFormat can be played\nvia currently connected output devices w/o SRC or downmixing\nby the framework.\n\nThe implementation methods are called \u0027isDirectOutputSupported\u0027\nto match APM\u0027s terminology.\n\nBug: 120044865\nTest: atest CtsMediaTestCases:AudioTrackTest#testBuilderValidate\nChange-Id: I11769f796c34583fb2641415d2faab00ac526123\n"
    },
    {
      "commit": "4c1ef4b64d113be6ee1106375bd10cdc643e80d8",
      "tree": "203b9b1ca84efc9342514175d616c0a7c22150ad",
      "parents": [
        "973db02ac18fa1de9ce6221f47b01af1bdc4bec2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 13 16:46:26 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 04 12:06:37 2018 -0800"
      },
      "message": "audio policy: concurrent capture\n\nImplement concurrent capture in audio policy manager:\n- Attach AudioRecord client to already opened input when possible\ninstead of systematically opening a new input for each client.\n- Always allow inputs to start even in case of concurrency.\n- Clients are selectively silenced based on their app state by audio\npolicy service.\n- In case of concurrency on a given input stream, device and source is\nchosen based app states and source priority.\n\nBug: 111438757\nTest: Manual capture tests with solotester and Camera, Assistant and Duo\nTest: CTS tests for AudioRecord\n\nChange-Id: I302710ff545f67361d9aca89e81de40771ce7fb0\n"
    },
    {
      "commit": "e8c8b4359835a12a3d1bf84f281c36bce031bb33",
      "tree": "cac3af958f25ed4f7163b8ddfe2134a957aafc9b",
      "parents": [
        "6b6a0f05248fc646d42f09cb891d8b6fda19426e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 17 10:08:02 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 03 16:28:21 2018 -0800"
      },
      "message": "audio policy: implement uid state management for capture\n\nReceive app state updates from ActivityManager and use it to implement\nconcurrent capture policy.\n\nBug: 111438757\nTest: Manual test with solotester app concurrently with Camera, Duo and\nAssistant\n\nChange-Id: I979ad4ecc8b926abb64e1b321b43bd7bd442a8f1\n"
    },
    {
      "commit": "b78763e6098baa33f441abef74d53636f72c6d6e",
      "tree": "f9dbf113c768761cfa7b10ebcce917a2b7a2beba",
      "parents": [
        "f32108e7bab9ce2eb8107678c74701d1428a7b2c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 17 10:08:02 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 26 14:32:41 2018 -0800"
      },
      "message": "audio policy: receive assistant and a11y service UIDs\n\nAdd APIs to communicate assistant and accessibility service UIDs\nto audio policy service in order to implement the new concurrent\ncapture policy.\n\nBug: 111438757\nTest: enable and disable Google Assistant and Voice Access.\n\nChange-Id: Ia804613051edab2ebd57d317b5b7509c98e7c6b4\n"
    },
    {
      "commit": "f32108e7bab9ce2eb8107678c74701d1428a7b2c",
      "tree": "4282d410be7fde9df128a6c3ecb5775198aebc5f",
      "parents": [
        "3df5310387cb396892d49f3576ba52a22413baa6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 04 17:22:04 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 26 14:32:41 2018 -0800"
      },
      "message": "audio policy: extend API used to silence capture from a given app\n\nIn preparation for concurrent capture policy, extend current audio policy\ninterface setRecordSilenced(uid...) to a more generic API setAppState(uid...)\n\nBug: 111438757\nTest: CTS test AudioRecord.testRecordNoDataForIdleUids\nChange-Id: Idba540e2724a6c71ec275a5ff73c312e5b6040a4\n"
    },
    {
      "commit": "fe726a6ecb1ff0787d2610540134901cab813fe3",
      "tree": "db480c62c456ec4329bd02a6f8c1cb29204065a0",
      "parents": [
        "37013f15b32aa124647135d4e14da4d5434902eb"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Sep 27 15:17:25 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 02 13:49:38 2018 -0700"
      },
      "message": "AudioFlinger: Synchronize removing client from output descriptor\n\nAvoids race condition where APM::stopOutput is called after\nAPM::releaseOutput.\n\nTest: audio sanity\nBug: 112067674\nChange-Id: I244267d4a157078961589649b1e184206ee23248\n"
    },
    {
      "commit": "20993fa7abe98f7821cf4039b43a1503751610a7",
      "tree": "91d8a64771d88c63192bbb3e6a5ea2cf3de1c1f3",
      "parents": [
        "9a03f226b3c3c4f4a69cd9ac4ed58c2b720fc802",
        "e74e76d59723a4c5439ad3a902655d7e2ae5c76a"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Sep 04 09:47:22 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Sep 04 09:47:22 2018 -0700"
      },
      "message": "Merge \"Fix potential memory leak.\" am: 89bdf3ae71 am: 5c86ca4a50\nam: e74e76d597\n\nChange-Id: Idad7c5e994ac2a4ce686e79cb3ca9db65c60f2cc\n"
    },
    {
      "commit": "0307768305a87dd94f1b02d36ad2f53e3041bdaf",
      "tree": "2c1358d093500e82d6b6037766b8d3627501b653",
      "parents": [
        "4eeaffe5ee9e806fa56dce69657ea30c11e0fbad"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Aug 30 14:11:00 2018 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Aug 30 14:11:00 2018 -0700"
      },
      "message": "Fix potential memory leak.\n\n* Do not reset caller\u0027s *param to NULL when realloc fails.\n  The caller will free *param.\n\nTest: build with WITH_TIDY\u003d1\nChange-Id: Iadd800b77fea4ea423d440e6e97e4dfc00c09fcd\n"
    },
    {
      "commit": "24628310591c3b4d9701ebad9df7f5750dc599b2",
      "tree": "84cad83437f52596eec9ff5a90763550e7bb0f48",
      "parents": [
        "edf39faeee8fbd0743e25ae7071ebcf0418e6c50"
      ],
      "author": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Mon Aug 13 15:01:09 2018 -0700"
      },
      "committer": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Thu Aug 16 10:53:29 2018 -0700"
      },
      "message": "Add dynamic source default effects\n\nAllows runtime modification of what effects should be default\nattached to sources of different types. The core functionality\nwas already in the AudioPolicyEffects system, this allows\nthe dynamic modification of the lists.\n\nBug: 78527120\nTest: Builds, manually tested an app adding a source effect,\ntested both media on the specified source and on a different source.\nAlso tested by Android Things integration tests.\n\nChange-Id: I4da15787278c79d80043e172f4f81d3b2a139f44\n"
    },
    {
      "commit": "7119600ddc4d6e64d6461f338387d49f503e45a4",
      "tree": "0d90c41af199119a4b995726b8fcd0f32f39f0a7",
      "parents": [
        "7f1732ee0d2c0571f8a00cd6ccbaa74cf8dd260c",
        "433722eeb72ab11bb945664fa939cf7ef737af6d"
      ],
      "author": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Thu Aug 02 23:10:53 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 02 23:10:53 2018 +0000"
      },
      "message": "Merge changes from topic \"dynamic_stream_effects_master\"\n\n* changes:\n  Add dynamic stream default effects\n  Add helper method to convert usage to stream type.\n  Update getEffectDescriptors() to include type\n"
    },
    {
      "commit": "433722eeb72ab11bb945664fa939cf7ef737af6d",
      "tree": "194eab009f7fad2010a5baa3c82b1a497d4543e3",
      "parents": [
        "5c00d01c85430178d19f6266f1bc5c94a29853c1"
      ],
      "author": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Tue Apr 24 14:25:22 2018 -0700"
      },
      "committer": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Thu Aug 02 11:34:36 2018 -0700"
      },
      "message": "Add dynamic stream default effects\n\nAllows runtime modification of what effects should be default\nattached to streams of different types/usages. The core functionality\nwas already in the AudioPolicyEffects system, this allows\nthe dynamic modification of the lists.\n\nBug: 78527120\nTest: Builds, manually tested an app adding a stream effect,\ntested both media on the specified stream and on a different stream.\nAlso tested by Android Things integration tests.\nChange-Id: Ie0426b17ff7daece58b8c85d72fbef620844325b\n"
    },
    {
      "commit": "1e61d6c374998df89ef2def6358a85b8225f7fbc",
      "tree": "6cc544f041ef787a969fc2c516f8608495a0b90b",
      "parents": [
        "b63e5c63e5cd21e28fb0ec8329c01762ab6f7d96",
        "70ec5e892f83b2c2d0c0832571974d9d0a9b2b39"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 02 07:17:54 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 02 07:17:54 2018 +0000"
      },
      "message": "Merge \"audio policy: fix mutex in stopOutput\""
    },
    {
      "commit": "70ec5e892f83b2c2d0c0832571974d9d0a9b2b39",
      "tree": "76c8dca2979a5e29f2461322a8ee66953bdb290c",
      "parents": [
        "f344afa981e537b5f354352284272a8a51cf6759"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 01 18:45:37 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 01 18:54:21 2018 -0700"
      },
      "message": "audio policy: fix mutex in stopOutput\n\nCommit d7fe086d introduced a problem by acquiring the AudioPolicyService\nmutex in stopOutput(). stopOutput() and releaseOtuput() can be called\nfrom audioflinger thread loop and should never acquire the main\nAudioPolicyService mutex.\nRemoved unnecessary check on valid port Id as this check is also performed\nwhen doStopOutput() is executed by the command thread.\n\nBug: 111966786\nTest: verify no timeout when starting or ending a call.\nChange-Id: Id09eaae7a4409dfc54c6fbb1eced1624cd7b3536\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": "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": "d7fe086d3b45f088083170006367dfc4246f70b0",
      "tree": "fa89edfbebbd2cffdccc0ab6f01caa9a06d02390",
      "parents": [
        "b05e9b139f8cc5c20f7e94d0a9cf2f7430b52cf2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Jul 14 16:48:01 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 17 13:02:28 2018 -0700"
      },
      "message": "audio policy: refactor audio playback APIs\n\nRefactor audio policy service APIs controlling audio playback (startOutput, stopOutput, releaseOutput)\nTo allow finer grain control per AudioTrack client.\n\nTest: AudioTrack CTS test. manual test of playback use cases.\nChange-Id: I49a681f3c2a8211e524824993049b24d8086376d\n"
    },
    {
      "commit": "999ad2cf2a0a687abfb7ee147c3261f609cc4806",
      "tree": "d46e88da85036904f02551459b1c9508049c2cda",
      "parents": [
        "908c7d77355ae2c63a179a4ebfce69b7a6d31e3f",
        "dcd4ab18a3cdb8f5d382a635c8602a18288137c1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 04 00:47:14 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 04 00:47:14 2018 +0000"
      },
      "message": "Merge \"audio policy: remove special notifications handling in call\""
    },
    {
      "commit": "dcd4ab18a3cdb8f5d382a635c8602a18288137c1",
      "tree": "c0f4c63eef85a850dc01687bc7f17be4cd24031e",
      "parents": [
        "87a837c62a1bd1be9143aee3660bb171424a08a5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 29 17:45:13 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 18:03:17 2018 -0700"
      },
      "message": "audio policy: remove special notifications handling in call\n\nNot needed anymore as this is handled by NotificationManager.\nExtend caping of alarm and ringtone volume to call volume to all\noutput devices (was only done for earpiece).\n\nTest: make\nChange-Id: I9a1cd8610e42fefd0518f6ccc68e50e5541884ed\n"
    },
    {
      "commit": "908c7d77355ae2c63a179a4ebfce69b7a6d31e3f",
      "tree": "8dc487eaedba65d0493657a4393807c0e26ae54b",
      "parents": [
        "87a837c62a1bd1be9143aee3660bb171424a08a5"
      ],
      "author": {
        "name": "luochaojiang",
        "email": "luochaojiang@xiaomi.com",
        "time": "Thu Jun 21 14:58:04 2018 +0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 15:20:34 2018 -0700"
      },
      "message": "audiopolicy: Restrict the audio port callbacks by both uid and pid\n\nSet audio port callbacks enabled is called by each client, the client\nmaybe has the same uid by different pid. And the notification clients\nis indexed with uid in services, so the audio port cb may be disabled\nby other pid. Here is the steps to reproduce this issue:\n1.make a phone call\n2.plugin a USB headset\n3.check the P-sensor\nThe screen will get black when the hand is near to the phone, actually\nit should not get black\n\nTest: make, take a photo, record a video and play video; make a call,\nplugin a USB headset, and check the P-sensor status.\n\nChange-Id: I43970ca0ab78ef47bd34d1c7191d4c8c3ad2b793\nSigned-off-by: luochaojiang \u003cluochaojiang@xiaomi.com\u003e\n"
    },
    {
      "commit": "fbdfebe55b23934e8f97c72065d653b7ced6330a",
      "tree": "1d79d423fddbd5c523ea1170417065d31aff6415",
      "parents": [
        "a59b02d12c312f66c7cccf79ae3cbf3fc1630a14"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Jun 18 12:30:40 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Jun 18 19:40:31 2018 +0000"
      },
      "message": "Audio policy: remove using namespace std in header\n\nIntroduced by I1442a9dda1553e9ea7a4a654c50555ac1ec06aa0\n\nBug: 79417899\nTest: m -j\nChange-Id: I4d5a598ea1a376f12c133c0fc6a425a738da7a7a\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "5186695a2fd99806dc2b05a51bc3a6ca79adcb39",
      "tree": "1b805511d462f8c732a2b7ed34e06e7da89131aa",
      "parents": [
        "c1c6ce630effa27ab85d1cf39ec5216d81c92170"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Wed May 30 11:22:27 2018 -0700"
      },
      "committer": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Wed May 30 14:52:08 2018 -0700"
      },
      "message": "mediea metrics audiopolicy pkg fields\n\nif the requesting/active package field is empty, substitute in\nthe uid of the corresponding app -- so we get some identification.\n\nBug: 80441117\nTest: dumpsys media.metrics\nChange-Id: I5dfe014b82c30bd25cb9a4b129a351949c12945f\n"
    },
    {
      "commit": "475c0acdd3fc8131c5bf2e70dca31ef34bdbef0a",
      "tree": "696b9a20abef0ccc67a2174cbd79b24123e73757",
      "parents": [
        "b2a830255967abac2d45e2eb528a18b63501e9ae",
        "08a61c2ddb08faba873cbb35681505a9d5706d65"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Thu May 24 21:14:18 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 24 21:14:18 2018 -0700"
      },
      "message": "Merge \"reduce metrics data for \u0027audiopolicy\u0027\" into pi-dev am: df1ecbf26a\nam: 08a61c2ddb\n\nChange-Id: I65313c7b1add7b3346308042df8cadc8d7f18903\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": "f6a57cdbf3adb56c24388f15a6cad0c9d4d9014d",
      "tree": "de446acf528dadf5c3895f75faf0d78dd339e646",
      "parents": [
        "a5691fa5c6dd06f64f1524f32b3c34fbdb2051ad"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Tue May 22 16:20:54 2018 -0700"
      },
      "committer": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Tue May 22 16:22:59 2018 -0700"
      },
      "message": "reduce metrics data for \u0027audiopolicy\u0027\n\nno longer log audiopolicy records on success, only log on failure.\nThis drastically reduces the volume of data generated.\n\nBug: 78595399\nTest: dumpsys media.metrics, check records\n"
    },
    {
      "commit": "298e1b3db0f94396249933c823b6ff55cf8fc1cc",
      "tree": "8deeed6f3a7001d40440a130e9f377ec3fb59a89",
      "parents": [
        "868c0a9e91df17dcad52b5a0dcacc51205dd8f46",
        "4ef19fa450e8b523741a22fabee8f62691abec37"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 22 20:47:54 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 22 20:47:54 2018 +0000"
      },
      "message": "Merge \"Update audio permission checking\""
    },
    {
      "commit": "d8ba3c4d8a56abf3afb8e793caaec97216251b41",
      "tree": "f7c31740b155cf5a8bba9c87e50b8e498322619c",
      "parents": [
        "31e2127d4b78daeedd36b6daabc4ba7dfe1b7ec7",
        "1888c866419cb11a422a36ad08e2e6ca2c2f8aeb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 18 11:30:44 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 18 11:30:44 2018 -0700"
      },
      "message": "Merge \"audio policy: add device to audio record media metrics\" into pi-dev am: 1ea2c0f91c\nam: 1888c86641\n\nChange-Id: Ic914228c52f19b2f745541aa5edd12bbd2f66419\n"
    },
    {
      "commit": "99fcae46d54639e7841d87b1dcacbc229bbf8dc4",
      "tree": "f1f6c0ffb8e22e7df27fbe5b5cd42e3bef3e7658",
      "parents": [
        "0ba1ae398e65718fba66bb1bd258d4d0a9ba6c28"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 17 16:59:18 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 17 18:17:44 2018 -0700"
      },
      "message": "audio policy: add device to audio record media metrics\n\nAdd information about requested and active input device type in\naudiopolicy media metrics on recording clients.\n\nBug: 78595399\nTest: recording over several devices, dumpsys media.metrics\nChange-Id: Ifeeb2c51ee3ed2dbb86406c0e8d74e7aa70dd8fb\n"
    },
    {
      "commit": "4ef19fa450e8b523741a22fabee8f62691abec37",
      "tree": "5d0eaaf73cebe029d1d8dd935d5c6fddb12ee70f",
      "parents": [
        "ab7ef300b74904bce6c5c810d9e5679abfa582e6"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 15 19:35:29 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 17 18:11:55 2018 -0700"
      },
      "message": "Update audio permission checking\n\nChange captureAudioOutputAllowed to check client pid.\n\nCheck calling uid with AID_AUDIOSERVER instead of calling pid with\nown pid. This is consistent, and works if AudioFlinger and\nAudioPolicyManager exist as different processes.\n\nRemove getpid_cached since getpid() is very fast. This removes\nany initialization issues.\n\nReplace getuid() with AID_AUDIOSERVER to remove ambiguity of\nmultiple native audio services for multiple users. Only\none exists regardless of users.\n\nDo not use multiuser UID checks for certain native services\nthat do not spawn for multiple users to prevent accidently exposure.\n\nMove permission checks to use ServiceUtilities for control and\nconsistency.\n\nRename isTrustedCallingUid to isAudioServerOrMediaServerUid\nso that permission check is explicitly known to caller.\n\nUpdate MediaLogService to use ServiceUtilities.\n\nTest: Basic sanity\nTest: AudioTrackTest, AudioRecordTest, SoundPool, SoundTrigger\nBug: 79485140\nChange-Id: Ib8ccb36929a9b4806c01626f32fa023a046d6020\n"
    },
    {
      "commit": "ab7ef300b74904bce6c5c810d9e5679abfa582e6",
      "tree": "dadb05ba8da176c046139ca43c3fae48a14191c3",
      "parents": [
        "1f2bfd3ac9d61982acb348d2c78f95c7d4b0bf05"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 15 19:35:29 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 16 18:49:09 2018 -0700"
      },
      "message": "Move ServiceUtilities from audioflinger to libmediautils\n\nTest: Play Music, Play Movies, Camera, Photos\nBug: 79485140\nChange-Id: Ib8382547828e386024145c416321d24e4af182db\n"
    },
    {
      "commit": "f824853eabf8eab483de7387c001493dda63966b",
      "tree": "2d56a1a846f7adf1e25a7cf4465d34d648cd861a",
      "parents": [
        "625e3020f8c070c8d8449af1bdaeaa002c11cc03",
        "817729095966c338615a8a791d2dbf774fc034ef"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Tue May 15 20:54:28 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 15 20:54:28 2018 +0000"
      },
      "message": "Merge \"Add support for manually set surround formats.\" into pi-dev"
    },
    {
      "commit": "817729095966c338615a8a791d2dbf774fc034ef",
      "tree": "b9c23fc427ec841575b37c59280000467c5a1648",
      "parents": [
        "183eb5fb74b9c723ba8e8da9b3c962031bac2c6a"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Apr 02 17:52:27 2018 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu May 10 18:20:24 2018 -0700"
      },
      "message": "Add support for manually set surround formats.\n\nTo make surround sound setting more clear to users, we are changing\nsurround setting from ALWAYS to MANUAL. With MANUAL, users could enable\nsurround formats according to their need.\n\nBug: 67479735\nTest: Try creating AudioTrack with enable/disable surround formats.\nChange-Id: Ia6c0e1210ff6215f4b80a278a0aa90ca9543f262\n"
    },
    {
      "commit": "f4a28339fff6af3696d540d2e6eccb2feb9ce658",
      "tree": "ee6b7584e239726f29269d31ac953dbfc1801f89",
      "parents": [
        "ff5ab0678880ade264efda5410822b4aee58d12d",
        "744be48d57da2c39f1479bc5a5ad0b7589814704"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 10 19:32:21 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 10 19:32:21 2018 +0000"
      },
      "message": "Merge \"Check voice call recording permission according to source.\" into pi-dev"
    },
    {
      "commit": "e17378d11b275daecd20ff840bcb7d275b6801bf",
      "tree": "3f49ff9153c5bd7be9d17e38532efcfc0d98cc1a",
      "parents": [
        "183eb5fb74b9c723ba8e8da9b3c962031bac2c6a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 09 14:43:01 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 09 14:43:01 2018 -0700"
      },
      "message": "audio policy: re enable setForceUse for system apps.\n\nSome system apps (not having system AIDs) still need this\nhidden API due to lack of better option for media use case routing.\n\nAdd protection by privileged permission MODIFY_AUDIO_ROUTING instead.\n\nBug: 79475856\nTest: manual regression for music playback over speaker and bluetooth\nChange-Id: Icaa585a9fa4c043c291f24c9bab4a93f02406955\n"
    },
    {
      "commit": "744be48d57da2c39f1479bc5a5ad0b7589814704",
      "tree": "7c3130520c6336b859837f6eefe02fe85d5fafd5",
      "parents": [
        "84e84a5dd3b6d9ee4cf032e8d6206c70969b7107"
      ],
      "author": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Tue May 08 13:26:21 2018 +0300"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 08 16:00:00 2018 +0000"
      },
      "message": "Check voice call recording permission according to source.\n\nAdded a check for CAPTURE_AUDIO_OUTPUT according to the audio source, in\naddition to the already existing check according to the device type.\n\nTest: Tested manually.\nBug: 77228430.\n\nChange-Id: I84bbe41c9abcdbbd25354b2c160ae47c9c959de4\n"
    },
    {
      "commit": "84e84a5dd3b6d9ee4cf032e8d6206c70969b7107",
      "tree": "49fd8e4e911d62ac8be44ae91fdaf35902a234d9",
      "parents": [
        "527da4c9d30c977c0105a288b20a77f0f9e8d0d3"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Thu May 03 18:45:07 2018 -0700"
      },
      "committer": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Mon May 07 16:32:02 2018 +0000"
      },
      "message": "collect more media metrics around audio\n\nnew fields in the media metrics \u0027audiorecord\u0027 record for more detail\nlength of time recorded, error conditions\nadd new media metrics type \u0027audiopolicy\u0027 that describes attempts to get\nmicrophone access -- success, failure on contention, what type of access\nwas requested, and (important for the contention) which programs are\ndoing the requesting and holding of the microphones.\n\nwhitelist the \u0027audiopolicy\u0027 metrics type with the  media.metrics service.\n\nBug: 78595399\nTest: concurrent/serial recordings, dumpsys media.metrics\nChange-Id: Ia17860940d4c329b0215b4cf97c6dacacb6a8e32\n"
    },
    {
      "commit": "f1047e87767be1acd2c32f4d36028d1d0014f4c0",
      "tree": "4affc2ed3ee3f81e94f90dd4d3a012afa0ee364e",
      "parents": [
        "554e08c6b00b2a57348f4545d450915a9e8c870a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 19:18:20 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 17 09:45:32 2018 -0700"
      },
      "message": "audioflinger: filter out reserved keys from setParameters()\n\nOnly allow setParameters() for reserved keys when received from\naudioserver UID. For instance, keys used to control routing or audio\nstream configuration are reserved for use by audio policy manager.\n\nAlso use multiuser_get_app_id() instead of duplicated code to\nextract application ID from UID.\n\nBug: 77869640\nTest: manual audio smoke tests.\nChange-Id: I88852e8fddf7f705e4a084fc02d9ced1f4b0de92\n"
    },
    {
      "commit": "10b7123bd6ce29fe756422aeedc5cfe469c4309f",
      "tree": "340803c949b9500ce5e2873fbf874fcec782fd3f",
      "parents": [
        "258fb48d1498c8d34d6877700db993938cc89f71"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 13 18:14:44 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 13 18:18:49 2018 -0700"
      },
      "message": "audiopolicy: clear caller identity before calling audio policy manager\n\nAudio policy manager methods must always be executed with the\nlevel of priviledge of audioserver process.\nAfter checking calling permissions, audio policy service will\nclear binder caller identity before calling into audio policy manager.\n\nAlso add restrictions for start source and stop source binder\ntransactions.\n\nBug: 77869640\nTest: manual audio smoke tests\nChange-Id: I993d4fddcea9bfa3f44093c38406b85d69ca8890\n"
    },
    {
      "commit": "eba668adbdee1ecfcf00fa9f9fc066c022cfddba",
      "tree": "b6935bd6cfd0d641abd14d20240f2b3fdad7df80",
      "parents": [
        "79d1ed9b6473f4d094aaa6b53f41a6ba92916e42"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 05 08:13:15 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 05 08:13:15 2018 -0700"
      },
      "message": "AudioPolicyService: Fix typo in UidPolicy::isUidActive\n\nCopy-paste bug.\n\nBug: 77300296\nBug: 77624334\nTest: make\nChange-Id: Id5352dafe70003d7027a2ec71144570ac927ea73\n"
    },
    {
      "commit": "eae73eb726c141056caf5a7ff95d45c3bcdd999f",
      "tree": "f0e034a867acf3af218b60a9bdc947ddc31e47cc",
      "parents": [
        "728f909a1fecb99e565a0239580c5e9fff264209"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Apr 03 16:57:36 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Apr 04 15:55:12 2018 -0700"
      },
      "message": "AudioPolicyService: Properly handle service restarts in UidPolicy\n\nAdd logic in UidPolicy for handling audioserver restarts as well\nas ActivityManager (system server) restarts.\n\nAlso, refactor the UidPolicy logic to simplify reasoning about\nactive state lookup. As a result, 4 layers are considered:\n\n1. Service UIDs--always active.\n2. Overrides--controlled via \u0027adb shell cmd\u0027.\n3. Cached UIDs from ActivityManager--also updated via IUidObserver.\n4. ActivityManager ground truth.\n\nBug: 73405145\nBug: 77300296\nTest: android.media.cts.AudioRecordTest#testRecordNoDataForIdleUids\n      manual tests with SoloTester\nChange-Id: I426dd5d4d9c9c2570c0e03dde390e18f672c1b1d\n"
    },
    {
      "commit": "2af67733ac8616ccc763afaa6f6cfebeffc090a3",
      "tree": "50d7ecf1ef9fe42d3c09094ed143e574f50eac9d",
      "parents": [
        "2ad6e528d603fe45d170ecb56ed522fe467244fd"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 30 18:17:20 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 30 18:25:22 2018 -0700"
      },
      "message": "audio policy: disable silencing of background UID record\n\nThere is a problem when audioserver process restarts where we fail to\nreload the list of active UIDs causing silent capture for all apps\nuntil they are restarted.\n\nBug: 77300296\nBug: 63938985\nTest: crash audioserver and check that capture still works.\nChange-Id: Ie1a93c496516c1b7208780949054832a8a073044\n"
    },
    {
      "commit": "96c7eed596077ff84e75b7b1c6f20c3a29219bd1",
      "tree": "cf06852ef755e4d7dccfa81a7d3d4909d6159c60",
      "parents": [
        "bebc764c6b3e90024a56c9af4517a1a68713f3e7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 26 17:57:01 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 27 14:49:16 2018 +0000"
      },
      "message": "audioserver: fix UID checks for multi user\n\nFix UID checks in audioserver to take into account multi user UIDs\nwhere the top part above AID_USER_OFFSET contains the user number.\n\nBug: 76439650\nTest: manual audio smoke tests.\nChange-Id: I6dbd616021bcb2639c7b7369000ce911c7e7e030\n"
    },
    {
      "commit": "6e64137e95362a8f6eef43ea676418567b327c96",
      "tree": "8a2ed91d013a14058c606d6f41d044ecca7e184e",
      "parents": [
        "dc9df6a12d848b32fbd041421c663d2014f32403"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Mar 02 09:21:30 2018 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Mar 09 21:49:03 2018 +0000"
      },
      "message": "Revert \"Revert \"Use start/finish app op API for mic use\"\"\n\nThis reverts commit 599ec462d94136949e0c90419ea99b0d9ba83eac.\n\nIn addition it fixes an incorrect comparison against opPackageName\ninstead of resolvedOpPackageName creating incorrect short circuit.\n\nTest: atest android.media.cts.AudioRecordAppOpTest\n      \"Okay Google\" works fine\n\nbug: 64085448\n\nChange-Id: I77a8486dfd6e4f020efdf05d28a856a32579ef31\n(cherry picked from commit 5b81f550759c975fe6716e4e7870b11e523834d0)\n"
    },
    {
      "commit": "599ec462d94136949e0c90419ea99b0d9ba83eac",
      "tree": "0774e6abd59eec5530f78d6788a8da27217bac63",
      "parents": [
        "9b887324b8c3f86f012915a6f637081b158a221b"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Mar 01 22:19:55 2018 +0000"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Mar 01 16:10:34 2018 -0800"
      },
      "message": "Revert \"Use start/finish app op API for mic use\"\n\nThis reverts commit 55bb217cd1fea3e791d0d7cf73e09e27fed8c36e.\n\nReason for revert: Causes a regression\n\nbug:74061812\n\nChange-Id: I119937cfce79ba824185634f2b81dad1606a875d\n"
    },
    {
      "commit": "55bb217cd1fea3e791d0d7cf73e09e27fed8c36e",
      "tree": "08b19af105e7aa492f732e815928e4420aa7f1c6",
      "parents": [
        "1d519106f7a3d31cc89e3c4a1146106b0478a410"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Feb 27 20:25:51 2018 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Feb 28 04:48:29 2018 +0000"
      },
      "message": "Use start/finish app op API for mic use\n\nSince recording is a long running operation we need to use\nthe start/finish app op APIs since now system UI would watch\nfor active mic/camera/overlay ops and badge app notifications\nwith icons denoting that these capabilities are being used.\n\nTest: atest android.media.cts.AudioRecordAppOpTest\n\nbug: 64085448\n\nChange-Id: I47d9b507ef5d757d34d65484c112cea6cdc246e1\n"
    },
    {
      "commit": "31225688b7b09ad15f5b1fb8ab2868cecc551f15",
      "tree": "3a9cb9b1644044132ddde4c48a30d47c4e6da0f4",
      "parents": [
        "e54461ae132a79d0ffa9d3ec4631df13eb5c7809"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Feb 12 11:08:38 2018 -0800"
      },
      "committer": {
        "name": "George Burgess",
        "email": "gbiv@google.com",
        "time": "Mon Feb 12 19:15:08 2018 +0000"
      },
      "message": "Fix a memory leak\n\nStatic analyzer complaint:\nframeworks/av/services/audiopolicy/service/AudioPolicyEffects.cpp:551:5:\nwarning: Potential leak of memory pointed to by \u0027fx_param\u0027\n[clang-analyzer-unix.Malloc]\n\nThis is because we unconditionally assign the result of realloc to\nparam: if realloc fails, it will not free the given pointer value, but\nwill return NULL. Hence, code like:\n\nbool safeGrowParamSize(char **param, size_t size,\n                       size_t *curSize, size_t *totSize) {\n  if (growParamSize(param, size, curSize, totSize) \u003d\u003d 0) {\n    free(*param);\n    return false;\n  }\n  return true;\n}\n\n...Will fail to free param on failure.\n\nBug: None\nTest: None\nChange-Id: I7a430e7965ab29e183c82ebcb298a2ffb42339b1\n"
    },
    {
      "commit": "7dca8a83b7c6922a69e266aa9f2b5693a4d773a9",
      "tree": "cd09df52888de8f7af339c9decc3f21367272c1b",
      "parents": [
        "fee1976a2849c37a53d8a01ac10327d522a1ba93"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 29 18:44:26 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 09 16:09:06 2018 -0800"
      },
      "message": "Revert \"Revert \"audio flinger: move record permission checks to audio policy service\"\"\n\nThis reverts commit 67651f97c9c3880a4440c86618337f8a64c3e1a9.\n\nBug: 72628781\nTest: manual camcorder tests\nChange-Id: Id3687d2a4ab90f01d66ff30b2d77e6ec4ae72b3f\n"
    },
    {
      "commit": "fee1976a2849c37a53d8a01ac10327d522a1ba93",
      "tree": "5b8a259a93f6f84a964badf5417c113a308e67c9",
      "parents": [
        "98c15702ca0c814fee9110efa14d70fc9937514e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 29 18:44:13 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 09 16:08:31 2018 -0800"
      },
      "message": "Revert \"Revert \"audio policy: refactor audio record APIs\"\"\n\nThis reverts commit e9ebcdbb0580bd4a75f4530b957b1859e535c028.\n\nBug: 72628781\nTest: manual camcorder tests\nChange-Id: I9fb550a9f62d2d15cafbd7534e5e7eaa155a7213\n"
    },
    {
      "commit": "34c238eaf4af84787648c714289de9dcfa1668d3",
      "tree": "a48681eb6b1e2dcc17d829e2e049112277b22ad0",
      "parents": [
        "d54bacf09c2384987ad9186de67c4225db1eed1d",
        "4980df29f61d5fad95e17ca1d1969f6ca4c1f296"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 31 03:20:08 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 31 03:20:08 2018 +0000"
      },
      "message": "Merge \"audio: filter reserved binder calls\""
    },
    {
      "commit": "4980df29f61d5fad95e17ca1d1969f6ca4c1f296",
      "tree": "c7e38eb5c4c223ac0a9b08e7636adf71de7a9c62",
      "parents": [
        "5f07c65af5356a4a95410804ce19fc017d6478f8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 26 18:04:09 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 29 17:28:43 2018 -0800"
      },
      "message": "audio: filter reserved binder calls\n\nBlock incoming binder calls to audio flinger and audio policy service\nfor sensitive functions if they are not coming from a system UID.\n\nBug: 72278478\nTest: audio smoke tests. CTS tests for AudioTrack and AudioRecord\nChange-Id: I78e02efffe135d5450ced125e51e2084719ca03d\n"
    },
    {
      "commit": "e9ebcdbb0580bd4a75f4530b957b1859e535c028",
      "tree": "a603313572aeef80fb8a26d2ff38f7a6541e835c",
      "parents": [
        "67651f97c9c3880a4440c86618337f8a64c3e1a9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 29 14:27:18 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 29 14:37:24 2018 -0800"
      },
      "message": "Revert \"audio policy: refactor audio record APIs\"\n\nThis reverts commit 0f4b3c5449f85c1cd78e1b9ac4850de962b8edbe.\n\nBug: 72628781\nTest: Capture several videos from camera app\nChange-Id: I6bcc87c618ac9bfe5c911915cbb37de616bc727a\n"
    },
    {
      "commit": "67651f97c9c3880a4440c86618337f8a64c3e1a9",
      "tree": "843940703c4fca05bf8cf6df7091fbcc42eb0154",
      "parents": [
        "5f07c65af5356a4a95410804ce19fc017d6478f8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 29 14:27:03 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 29 14:35:06 2018 -0800"
      },
      "message": "Revert \"audio flinger: move record permission checks to audio policy service\"\n\nThis reverts commit c7b71a1b3a16231d7741f9ef52c5f84ec8de0c31.\n\nBug: 72628781\nTest: Capture several videos from camera app\nChange-Id: If633e677d87320335e368a8340599c9e4a398201\n"
    },
    {
      "commit": "c7b71a1b3a16231d7741f9ef52c5f84ec8de0c31",
      "tree": "803306733146625da98f061ceec491569fd184ba",
      "parents": [
        "0f4b3c5449f85c1cd78e1b9ac4850de962b8edbe"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 08 17:21:56 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 24 17:07:22 2018 -0800"
      },
      "message": "audio flinger: move record permission checks to audio policy service\n\nMove audio permission checks to getInputForAttr and startInput.\n\nTest: AudioRecord CTS tests. Manual test of capture use cases.\nChange-Id: Ifaefc1198248b46fc59aecd6c9ec3aa892656e05\n"
    },
    {
      "commit": "0f4b3c5449f85c1cd78e1b9ac4850de962b8edbe",
      "tree": "63641f2dea738a745946c63f80803557a74ec12b",
      "parents": [
        "c6116926de37cabb1d35ddd57eaff0e19fcec8bc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 05 11:46:13 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 24 16:56:52 2018 -0800"
      },
      "message": "audio policy: refactor audio record APIs\n\nRefactor audio policy service APIs controlling audio record (startInput, stopInput, releaseInput)\nTo allow finer grain control per AudioRecord client and prepare for new concurrent capture\npolicy\n\nTest: AudioRecord CTS test. manual test of capture use cases:\ncamcorder, OK Google VoIP\n\nChange-Id: I4992fd5a115853c47be5dac5465989eb53f1287c\n"
    },
    {
      "commit": "52fe83f701640479f606ac89ed6b04f786313bc3",
      "tree": "b13597625361786062945e5fcc020462318d921e",
      "parents": [
        "7a4b8ab1bae94697d6d4daadf638d1bd9ca8b81a",
        "766fb020a50b64bf9a808bd80df60c54c2ca8cc3"
      ],
      "author": {
        "name": "Nadav Bar",
        "email": "nadavbar@google.com",
        "time": "Mon Jan 22 23:20:50 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 22 23:20:50 2018 +0000"
      },
      "message": "Merge \"Support routing audio playback to telephony uplink\""
    },
    {
      "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": "5ae1f559717296fe82c2a252039a8017e7eaf2c7",
      "tree": "c2d53e4402eab49b37efd3dc0c47d10c68e2e668",
      "parents": [
        "65a438c6429c7f46cb0ab056c7f672ea0aa9e7f5"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Sat Jan 20 22:53:37 2018 -0800"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Sat Jan 20 22:53:52 2018 -0800"
      },
      "message": "Fix a pointer reference\n\nTest: manual\n\nChange-Id: I9f9dde1652f15a521e9b01e17dc0b9b405278833\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": "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": "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": "f4e63452b37c799c9387a6a88b46e6191f6a5f7e",
      "tree": "5c46fb22c92c574b84335fedca13f98e13434db8",
      "parents": [
        "e198f26cae6f0b5c67340935c291363fdfff87f1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 06 19:31:46 2017 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 06 19:31:46 2017 +0000"
      },
      "message": "Revert \"Revert \"audio policy: refactor getOutput() method\"\"\n\nThis reverts commit e198f26cae6f0b5c67340935c291363fdfff87f1.\n\nChange-Id: I65eb2905adb45c3809a499d85c1a8ef68cec7ed5\n"
    },
    {
      "commit": "e198f26cae6f0b5c67340935c291363fdfff87f1",
      "tree": "a08455486befa3d1ed0ebd6d3eb8257f51dcfb7d",
      "parents": [
        "e1dd2075105317ef8ff2b924423c88856e8fe8ea"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Nov 04 00:13:42 2017 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Nov 04 00:13:42 2017 +0000"
      },
      "message": "Revert \"audio policy: refactor getOutput() method\"\n\nThis reverts commit e1dd2075105317ef8ff2b924423c88856e8fe8ea.\n\nChange-Id: I4b7a2177af5bff5013ec4fe7fcdeb722f6b158c5\n"
    },
    {
      "commit": "e1dd2075105317ef8ff2b924423c88856e8fe8ea",
      "tree": "5c46fb22c92c574b84335fedca13f98e13434db8",
      "parents": [
        "9a60e1ad4762bd428ddc158e5a50641649698ec4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 03 09:26:21 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 03 09:26:21 2017 -0700"
      },
      "message": "audio policy: refactor getOutput() method\n\ngetOtuput() was long replaced by getOutputForAttr() for the purpose of\nquerying an appropriate HAL output stream for a given playback use case.\nIt is now only used internally by AudioSystem to find an existing output\ncorresponding to a given stream type in limited cases.\n\nThis CL simplifies getOutput() by removing unused arguments and just\nreturning an output from already opened outputs.\nThis is in preparation of limiting access to audio policy binder calls\nto what is strictly needed by apps.\n\nTest: test main playback, capture and call use cases.\nChange-Id: I137c5526aa7e82303b43948326c77ec798f432f5\n"
    },
    {
      "commit": "5ff158fd499f581bdc1c3e91bbc03ce15eeeb77c",
      "tree": "75a48894b0cdb09735bd00750aa5caf03136ad32",
      "parents": [
        "ad764cd0e198a0ede404c53e2da5fd38ecb1e049"
      ],
      "author": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Mon Oct 30 09:06:24 2017 -0700"
      },
      "committer": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Mon Oct 30 09:06:24 2017 -0700"
      },
      "message": "Fix integer sanitizer in audiopolicyservice.\n\nA size_t was being converted to a ssize_t after an intended overflow\nhad already occurred. This makes the conversion explicit.\n\nunsigned integer overflow: 0 - 1 cannot be represented in type \u0027unsigned\nint\u0027\n\nTest: Compiled with the change and checked the sanitizer output.\nBug: 30969751\nChange-Id: Ic15cc4b5d8295e14e3588ffa240830f7570dcaf3\n"
    },
    {
      "commit": "0111e0fe975a4ff43e9133f4a4ab7805dc188325",
      "tree": "1de516e31ccace0773ae406bcd6ca4b82ee02d80",
      "parents": [
        "6cebbee7fcd45cce33b312e87e023173f6243225",
        "19f0196da3e386c2b73240870b3580468181903c"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Sep 11 22:39:48 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 11 22:39:48 2017 +0000"
      },
      "message": "Merge \"AudioPolicyService: Acquire mutex for SoundTriggerSession\" into mnc-dev am: e472e51100 am: 0a8a0c4474 am: ae465be454 am: b995c31415 am: d08327d1a2 am: 74f84d987b am: 355a18f58d am: c8f3cf02eb am: 8cad724158 am: 122ec92c42 am: fa5a0cedea\nam: 19f0196da3\n\nChange-Id: Ia47b4f3d752e74ba9c4bf02ccb74c33c9c5f9dd4\n"
    },
    {
      "commit": "fa5a0cedea92c922e695a9846148965a519eba53",
      "tree": "98e36586f95b4c193d3e269c86f1303d433aed0f",
      "parents": [
        "337a3fbbfca38472641d88b6f659f37f6f6eb477",
        "122ec92c425ce898753d24edd4a43d634a630959"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Sep 11 22:35:53 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 11 22:35:53 2017 +0000"
      },
      "message": "Merge \"AudioPolicyService: Acquire mutex for SoundTriggerSession\" into mnc-dev am: e472e51100 am: 0a8a0c4474 am: ae465be454 am: b995c31415 am: d08327d1a2 am: 74f84d987b am: 355a18f58d am: c8f3cf02eb am: 8cad724158\nam: 122ec92c42\n\nChange-Id: Ifa8953ad8057a4d7dcddeae1793e00168ea90c58\n"
    },
    {
      "commit": "122ec92c425ce898753d24edd4a43d634a630959",
      "tree": "34f6484abb85cfc9b4eed000c1812f1f63be5fdb",
      "parents": [
        "099005643902d7a26bbefa5d316ea85cdd2d53bc",
        "8cad7241589b1473ee4dac3e4f2fdc559520da59"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Sep 11 22:33:46 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 11 22:33:46 2017 +0000"
      },
      "message": "Merge \"AudioPolicyService: Acquire mutex for SoundTriggerSession\" into mnc-dev am: e472e51100 am: 0a8a0c4474 am: ae465be454 am: b995c31415 am: d08327d1a2 am: 74f84d987b am: 355a18f58d am: c8f3cf02eb\nam: 8cad724158\n\nChange-Id: I1d0102e75a068bd6a2af21b9126b907703928db7\n"
    },
    {
      "commit": "355a18f58d63882c122db64702fdee66ce6fe857",
      "tree": "6973b6a87b1525c63ef10b465d6c88f527a31355",
      "parents": [
        "6b936f54ff3e54367a2176f455c4fb8700c91d99",
        "74f84d987be37b971f02eb0b4d824599626a9936"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Sep 11 22:21:26 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 11 22:21:26 2017 +0000"
      },
      "message": "Merge \"AudioPolicyService: Acquire mutex for SoundTriggerSession\" into mnc-dev am: e472e51100 am: 0a8a0c4474 am: ae465be454 am: b995c31415 am: d08327d1a2\nam: 74f84d987b\n\nChange-Id: Ie2c1acfdc523c6774dd2f90e0b42a9f274731d57\n"
    },
    {
      "commit": "74f84d987be37b971f02eb0b4d824599626a9936",
      "tree": "3207477eda89f12135465200e6e9af1ce1a58b4e",
      "parents": [
        "c66d4db7053b3e132c9b378f34f8c667b4be3f71",
        "d08327d1a2782f7ff7b8d46da106f7cc63bbef44"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Sep 11 22:17:17 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 11 22:17:17 2017 +0000"
      },
      "message": "Merge \"AudioPolicyService: Acquire mutex for SoundTriggerSession\" into mnc-dev am: e472e51100 am: 0a8a0c4474 am: ae465be454 am: b995c31415\nam: d08327d1a2\n\nChange-Id: Ia8bdb1eae19450a3c6df255945a8cded55b15909\n"
    },
    {
      "commit": "d08327d1a2782f7ff7b8d46da106f7cc63bbef44",
      "tree": "4971eea7f1bd719b3ed02c651947be3adbc9ec80",
      "parents": [
        "177ee220b9b5051065c01c8b8ca9ce7d29fe29a0",
        "b995c31415c73917f9ab907ec2334e69e638feda"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Sep 11 22:15:47 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 11 22:15:47 2017 +0000"
      },
      "message": "Merge \"AudioPolicyService: Acquire mutex for SoundTriggerSession\" into mnc-dev am: e472e51100 am: 0a8a0c4474 am: ae465be454\nam: b995c31415\n\nChange-Id: Iff099acd6ee928f37d2b91144a06d9c78a2a5aae\n"
    },
    {
      "commit": "7504b9eb4561df88550f874cf0ce95b6f4d09927",
      "tree": "0991a83bf78a67170a0707d8e300578c9c46727f",
      "parents": [
        "2c8c51d4aeffc4d561a67b06d20fff67d9a5a5aa"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 15 18:17:26 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 16 08:29:05 2017 -0700"
      },
      "message": "soundtrigger: require RECORD_AUDIO permission for DSP hotword\n\nCheck android.permission.RECORD_AUDIO permission in addition to\nandroid.permission.CAPTURE_AUDIO_HOTWORD for DSP hotword operations\nas those require access to device microphone.\n\nBug: 62265680\nTest: check \"OK Google\" detection with and without DSP\nChange-Id: Icba2520331164bcd618e91916ca701e677d419b8\n"
    },
    {
      "commit": "f759b8c4bcce2d3b3d45551be461f04297fa2bd3",
      "tree": "6b1f8510c36843e66653474c5fb06399e2e13566",
      "parents": [
        "a0388f92c70e4321ebfe3c41e08c454d63937998"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Aug 15 12:48:54 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Aug 15 19:55:28 2017 +0000"
      },
      "message": "AudioPolicyService: Acquire mutex for SoundTriggerSession\n\nTest: Enable always on GSA\nBug: 64340921\nChange-Id: I05d8c680be97ba4c92081425596addcc038f7dda\n"
    },
    {
      "commit": "4fb615c2774c04b4d36d8f9d88dd4aa291296288",
      "tree": "6ce96b0a49b22c440b7b70be61a862e214d8d960",
      "parents": [
        "8f5520a7378e7af0fcc6a8b693f29a6ddffbbbcd"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Jun 26 10:28:13 2017 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 07 17:20:47 2017 -0700"
      },
      "message": "Audio policy: Parse new audio policy configuration file\n\nFor treble, files shared between vendor and system must have a schema.\nAs .conf did not support such feature, transition to an xml based\nconfiguration file.\n\nThis new format has several changes:\n - library path are now relative to the standard effect directories\n - effect parameters are no longer supported (nobody used them)\n\nTest: Check that the dumpsys is similar than with the legacy formal\nBug: 37492580\nChange-Id: Ie6bd84ed88124991600fa238cc13714874eefad9\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "2ac7694396640821f6723672e25b2372220bf060",
      "tree": "0cd5a8c58898fcb145f4b879ea64aeb260266ce2",
      "parents": [
        "ffd80b92df8521dd28ab5fd08b1098a58cb280e8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 22 17:17:09 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 26 16:29:08 2017 +0000"
      },
      "message": "Set initial audio device for AudioTrack and AudioRecord\n\nBug: 62090113\nTest: run AAudio test and verify a valid device is reported just\nafter opening playback or capture streams in legacy mode.\n\nMerged-In: Ic8be42e1735690eb00c811ef0cb8b5abb36172d6\n\nChange-Id: Ic8be42e1735690eb00c811ef0cb8b5abb36172d6\n"
    },
    {
      "commit": "9ae8c597d9a0c8cedc4047fc4716d7361453f6ab",
      "tree": "4c8824f15e744d82243f4a3caab1d67b208afd47",
      "parents": [
        "5af194cf79f280034430f2f65b02a89f261dbbc8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 22 17:17:09 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 26 08:04:19 2017 -0700"
      },
      "message": "Set initial audio device for AudioTrack and AudioRecord\n\nBug: 62090113\nTest: run AAudio test and verify a valid device is reported just\nafter opening playback or capture streams in legacy mode.\n\nChange-Id: Ic8be42e1735690eb00c811ef0cb8b5abb36172d6\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": "ac9cef5f3288df6e65cb4488e2615cc3c07b70d0",
      "tree": "3369bd965510d5c3e8ea6257bb1368a677e535c6",
      "parents": [
        "3c1ba2cd6276ee4304ba082fbe40fd870c1746c8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 09 15:46:26 2017 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 15 10:42:59 2017 -0700"
      },
      "message": "audio policy: add method to query dB attenuation for a certain volume and device\n\nBug: 62492975\nTest: Check dB value returned to AudioService when stream volume is\nchanged\n\nChange-Id: I8d0a945e9151d230b93634e4b9e57bab68f44fa8\n"
    },
    {
      "commit": "d7c5ec857930496bb8a1045dc8b87b2fdd99899c",
      "tree": "1febd0054f7833de4bfd877faea92b6c66a3d89a",
      "parents": [
        "67d0d7eb36e7c36d0a9dec9264c0cab832196d57",
        "4b058e7e5d58fb1bc6ba82eba94f7664e5b85706"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Jan 11 19:30:56 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jan 11 19:30:56 2017 +0000"
      },
      "message": "Merge \"Add missing nullptr checks for data.readCString() strings\" am: ce961d374f am: 238c48e42e am: 877f779979\nam: 4b058e7e5d\n\nChange-Id: Idc3298b161380e9ace8b7fcceb4339b0805a3123\n"
    },
    {
      "commit": "877f77997987212ae0fbfecb24b35c03a0573006",
      "tree": "784bda81ca3055da5341cb11f86e0e0fddc06d90",
      "parents": [
        "7ceeb44566c54be121136a456142143e6bc4c4ac",
        "238c48e42e9e4daafc4cde73bc5c1856e7c10614"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Jan 11 19:20:24 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jan 11 19:20:24 2017 +0000"
      },
      "message": "Merge \"Add missing nullptr checks for data.readCString() strings\" am: ce961d374f\nam: 238c48e42e\n\nChange-Id: I2e9cb8ec6752506cc5445aee3d38ae92e4f5e514\n"
    },
    {
      "commit": "c694ff449bef4ca1e45a6506f34e66c613757311",
      "tree": "36f66657e3389dbb6b30b7e122ff415f9ce5f40c",
      "parents": [
        "20adbc00032d6df980a3300f1ae974610f16f81f"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Mon Jan 09 23:27:29 2017 -0800"
      },
      "committer": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Jan 11 16:51:37 2017 +0000"
      },
      "message": "Add missing nullptr checks for data.readCString() strings\n\nProtect the Audio Policy Manager by adding extra checks\nfor data.readCString() strings when parsing / decoding\na Binder transaction.\n\nAlso:\n * Moved audio_is_output_device() / audio_is_input_device() checks\n   inside handleDeviceConfigChange()\n   from the AudioPolicyInterface to the AudioPolicyManager\n * Removed similar redundant checks inside\n    AudioPolicyService::setDeviceConnectionState()\n\nTest: code compilation\nChange-Id: Ib32a28ba2669b73aaf32b31bb18f41c8dd7d2605\n"
    },
    {
      "commit": "5fd7ccaeba88da7e170f067bfd754b3f64ff5566",
      "tree": "5e2a0f1495c8ea9a68598cea2028e3c092049e3a",
      "parents": [
        "0ce91633d8a4f5dcb3706a7734c02ddb5099eefd",
        "c6fe843463abc965f3082738c8812506cf5ba232"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Thu Dec 29 00:25:36 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Dec 29 00:25:36 2016 +0000"
      },
      "message": "Merge \"Add a mechanism for handling audio device configuration change\" am: 549e431947 am: a1b496ac35 am: fcc1132010\nam: c6fe843463\n\nChange-Id: I7812e3e4426e526b886c1a414ac8ddec7649291e\n"
    },
    {
      "commit": "fcc113201018703727a0d6b17dd165efce00db1a",
      "tree": "70eca9738ea18322a92ebc4bb94a0894e1735034",
      "parents": [
        "1121dfb5f30a04393ddce02fe7808589fa9e3e25",
        "a1b496ac35a8bbdcae6b0315e91a5cf52b2af00d"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Thu Dec 29 00:12:05 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Dec 29 00:12:05 2016 +0000"
      },
      "message": "Merge \"Add a mechanism for handling audio device configuration change\" am: 549e431947\nam: a1b496ac35\n\nChange-Id: Ie8871fad611dc16d7cd08a85e4cd748cf3c4650d\n"
    },
    {
      "commit": "f862bc6a7a35054e38cb50fa16ae7a07f683ee01",
      "tree": "12f33970e876ba71df008d7e38a58984c5b357b5",
      "parents": [
        "a05da2eea41306d526ce645ea44aa2e05054f651"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Mon Dec 26 18:57:22 2016 -0800"
      },
      "committer": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Dec 28 14:35:01 2016 -0800"
      },
      "message": "Add a mechanism for handling audio device configuration change\n\n* Added new call handleDeviceConfigChange() to the Media Framework.\n  That call can be used when there are device configuration changes\n  (e.g., Bluetooth A2DP codec configuration has changed).\n* Added new method AudioPolicyManager::handleDeviceConfigChange().\n  That method toggles the UNAVAILABLE/AVAILABLE connection state of the\n  device, so it can be reconfigured as appropriate - e.g., the audio\n  feeding parameters can be updated.\n* Fix ALOGVV compilation errors when extra logging is enabled.\n\nTest: A2DP streaming to headsets\nBug: 30958229\nChange-Id: I388abbbb3ec4d1a003b441cb0c77e00d80cad668\n"
    },
    {
      "commit": "6a308b02f138e358fb239ee2df5d54dd988f34fd",
      "tree": "730e19d7ae133e2086c37dcec42d0b88e77ba01b",
      "parents": [
        "0a2ea58394190408a3d532bfcc242ba64ca71538",
        "20b9ef0b55c9150ae11057ab997ae61be2d496ef"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 16 17:12:23 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 17:12:23 2016 +0000"
      },
      "message": "Merge \"Add unique audio port IDs to AudioTrack and AudioRecord\""
    },
    {
      "commit": "bc7f347ff5dc890ad0fa306f58d145e934e31ed4",
      "tree": "0164bf05d87776c3e073a32fba021b041f7a45b1",
      "parents": [
        "ec982d462866b8b985b4ed13a2e99556de094c0d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 01 15:28:29 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 15 19:27:57 2016 -0800"
      },
      "message": "DO NOT MERGE - improve audio effect framwework thread safety\n\n- Reorganize handle effect creation code to make sure the effect engine\nis created with both thread and effect chain mutex held.\n- Reorganize handle disconnect code to make sure the effect engine\nis released with both thread and effect chain mutex held.\n- Protect IEffect interface methods in EffectHande with a Mutex.\n- Only pin effect if the session was acquired first.\n- Do not use strong pointer to EffectModule in EffectHandles:\nonly the EffectChain has a single strong reference to the EffectModule.\n- Check reply size before writing status in EffectHandle::command()\n\nBug: 32707507\nBug: 32095713\n\nChange-Id: Ia1098cba2cd32cc2d1c9dfdff4adc2388dfed80e\n"
    },
    {
      "commit": "b37f28adaea5e64ba61fc6533ed9a7f5a76b9f78",
      "tree": "4f33d868a5057f6bbf77f6efc29119d3f8f7b207",
      "parents": [
        "f574a9722f1f80fc03091f5ccdcfc123c7198730"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 01 15:28:29 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 15 17:31:12 2016 -0800"
      },
      "message": "DO NOT MERGE ANYWHERE - improve audio effect framwework thread safety\n\n- Reorganize handle effect creation code to make sure the effect engine\nis created with both thread and effect chain mutex held.\n- Reorganize handle disconnect code to make sure the effect engine\nis released with both thread and effect chain mutex held.\n- Protect IEffect interface methods in EffectHande with a Mutex.\n- Only pin effect if the session was acquired first.\n- Do not use strong pointer to EffectModule in EffectHandles:\nonly the EffectChain has a single strong reference to the EffectModule.\n\nBug: 32707507\nBug: 32095713\nChange-Id: Ia1098cba2cd32cc2d1c9dfdff4adc2388dfed80e\n"
    },
    {
      "commit": "72db998b4f41e795420055cda362847d5c5f8c92",
      "tree": "83e824d5f21d33051a683256f949d1f4c1b076e6",
      "parents": [
        "56d69ea84fb6c75cd5e855f067f90cae5a085d27",
        "993c09b27bc5b2b9f93b29fac8e212a196a52c67"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 15 17:55:44 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Dec 15 17:55:44 2016 +0000"
      },
      "message": "DO NOT MERGE - improve audio effect framwework thread safety am: b378b73dd7\nam: 993c09b27b\n\nChange-Id: Ib46c5c88aa112e819fe320857b2136f14f84db1a\n"
    },
    {
      "commit": "20b9ef0b55c9150ae11057ab997ae61be2d496ef",
      "tree": "21bd57d748dd47600b1e62bfb18d4acb08e15438",
      "parents": [
        "8526d86ab12284135ed4ca27aeb816371c10c0e6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 05 11:03:16 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 12 12:29:41 2016 -0800"
      },
      "message": "Add unique audio port IDs to AudioTrack and AudioRecord\n\nThis will allow to track activity at the track level instead of\nat audio session level as only possible with current implementation.\n\nAudioTracks and AudioRecords will receive a unique audio port ID the\nfirst time they register to audio policy with\ngetOutputForAttr()/getInputForAttr() and keep this ID for their\nlifetime.\n\nThis CL is the first partial change and just updates the\naudio policy and audio flinger APIs used at track creation time.\n\nTest: basic regression test of audio playback and capture use cases\n\nChange-Id: I8d612e67738e120494f61e3f7c60bfd0b2c6a329\n"
    },
    {
      "commit": "b378b73dd7480b584340b8028802c9ca2d625123",
      "tree": "00439baacf771d5439c6ec1747cfcdff13eeb4e5",
      "parents": [
        "5ed0c9ffdae597a023bdcade0868566832a01c2b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 01 15:28:29 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 09 10:25:06 2016 -0800"
      },
      "message": "DO NOT MERGE - improve audio effect framwework thread safety\n\n- Reorganize handle effect creation code to make sure the effect engine\nis created with both thread and effect chain mutex held.\n- Reorganize handle disconnect code to make sure the effect engine\nis released with both thread and effect chain mutex held.\n- Protect IEffect interface methods in EffectHande with a Mutex.\n- Only pin effect if the session was acquired first.\n- Do not use strong pointer to EffectModule in EffectHandles:\nonly the EffectChain has a single strong reference to the EffectModule.\n\nBug: 32707507\nChange-Id: Ia1098cba2cd32cc2d1c9dfdff4adc2388dfed80e\n"
    },
    {
      "commit": "b643627a557e44b9ab5879cf71e162af2d514ce3",
      "tree": "995bc0b0fa9a614687aa8df2f119ab7fff0c7a88",
      "parents": [
        "8526d86ab12284135ed4ca27aeb816371c10c0e6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 07 19:24:50 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 08 12:14:32 2016 -0800"
      },
      "message": "fix client pid for effects applied by audio policy\n\nTest: Hangouts call, Play Music with and w/o effects\n\nChange-Id: Ia9b20f94be667dd92e0497f8ef9c0dc0e95afe28\n"
    },
    {
      "commit": "f10c709fda87d971a206eebd5df47356e7f2aa39",
      "tree": "98b1a47d6a12c11a4b5a02e2a7fb5129b2a6680f",
      "parents": [
        "7cdef381717e3a96acc6c5786c88bf1eaf03d2f2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 06 17:09:56 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 07 09:40:43 2016 -0800"
      },
      "message": "audio policy: remove effects before releasing input\n\nmodify releaseInput() implementation so that effects added by policy\nrules are removed before closing the input stream to avoid\nfailure to destroy the effect chain\n\nmake sure that orphan effect chains are checked when an EffectHandle is\ndisconnected after thread destruction.\n\nTest: make and run Hangouts\nBug: 32707507\n\nChange-Id: I7833b4c5e42c0057a4477eb4485a20dd26ca2f90\n"
    },
    {
      "commit": "8243fcd644bd4b4865c3977435bb758c981ccf65",
      "tree": "82e0b1a2b2f0fa71b82e815a1f3df91b5cfb8d1d",
      "parents": [
        "bd54eef2d289f786a7ae02139ce3bb9db2b03b24"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 28 17:51:14 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 28 17:53:13 2016 -0800"
      },
      "message": "remove support for legacy audio policy manager\n\nTest: make\n\nChange-Id: I7294a52674abadfdbc4da40a72c8fe1a229d0815\n"
    },
    {
      "commit": "559d439c6fe8679e3c52f1cf265d46d7d2e65b68",
      "tree": "9e23625c0b55e45e79842d6605e027dba01f0fe0",
      "parents": [
        "bd0f59e493dbd67d1871b243ddad9cce3b50d7ce"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 29 13:42:57 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 19 18:19:29 2016 +0000"
      },
      "message": "Use audio_patch_handle_t in startAudioSource() and stopAudioSource()\n\nBug: 27903060\nChange-Id: Iafc2095f484b74978c6f080c54f548e293bf945e\n"
    }
  ],
  "next": "c2f710f89ec1a3ea8e448bfafcc02b03529cc681"
}
