)]}'
{
  "log": [
    {
      "commit": "2996f67767ff90617cc5f7801c7bd8dc67c9dd66",
      "tree": "d20af841b6537ca44a0b1bf7a839e0ba3f9c7a91",
      "parents": [
        "3208826f676b1be78e1c04692d7f17249e45c3ea"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 18 12:29:59 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Apr 24 14:49:52 2019 -0700"
      },
      "message": "AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\n\nThe client must provide a unique Record ID (RIID) when creating\nan AudioRecord. This RIID is passed down to AudioInputDescriptor\nin AudioPolicyManager which sends configuration updates\nvia IAudioPolicyServiceClient callback.\n\nBy supplying RIID, the Audio Service can coalesce start / stop\nevents coming from clients (apps) with recording configuration\nupdate events.\n\nFor AAudio MMap clients everything is handled at the server\nside because they correspond directly to audioserver objects.\n\nBug: 123312504\nTest: android.media.cts.AudioRecordingConfigurationTest\n      AudioRecordTest#testAudioRecordInfoCallback\n      MediaRecorderTest#testAudioRecordInfoCallback\n      manual testing using Oboe and Solo test apps\n\nChange-Id: I3d32241752d9a747736606dc4cb1e068e6b7aa3b\n"
    },
    {
      "commit": "df8638b4c4cfabcdeade1a3af497cd6e0521cb89",
      "tree": "d4b192648cf45213baaa415f6842af7c58242e12",
      "parents": [
        "a74c7274069fdfa95e4f9768e14bd2ce7ed1219e",
        "b20cf7db9e669169bbae5f0da97018a866c3f634"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 18 19:15:42 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 18 19:15:42 2019 +0000"
      },
      "message": "Merge \"audio policy: concurrent capture effects\" into qt-dev"
    },
    {
      "commit": "b20cf7db9e669169bbae5f0da97018a866c3f634",
      "tree": "96e88e1850e1fb27fcc0bad53cc575e837d86c60",
      "parents": [
        "aceea8bddd0324df4414673bc39a3f38fe16e8a1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 05 19:37:34 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 19:27:20 2019 -0700"
      },
      "message": "audio policy: concurrent capture effects\n\nAdd pre processing effect management for concurrent capture scenarii.\nWhen several clients on the same input stream have enabled audio effects,\nonly the effects attached to the top priotity client are active.\nOther effects are suspended.\n\nAdd AudioFlinger API to suspend/restore audio effects build on top\nof exisiting internal effect suspend mechanism.\n\nRecordThread now supports more than one effect chain.\n\nAOSP pre processing implementation supports more than one effect session\nper input.\n\nRefactor AudioPolicyManager::closeAllInputs() to call closeInput() on\nall inputs instead of partially duplicated code.\n\nBug: 128419018\nTest: make\nChange-Id: I685286da4c2905a8894a4354679f9787b1400621\n"
    },
    {
      "commit": "9e1533cd0b8f3bf08eb9c81c21cd42f5782474f4",
      "tree": "3ba52e0b3d83ce58a20ebb69a61f2811a4c3a9f6",
      "parents": [
        "4b8d5ce58d98d4a163f63e17735450a7cac4821c"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Apr 11 16:07:36 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 14:05:50 2019 -0700"
      },
      "message": "audiopolicy: audioflinger: manage stream patch volume\n\nAudioPolicy used to hide activity of stream patch to prevent changing\nthe volume.\nThis CL replaces the filtering of the stream patch activity on the policy\nby a full volume range within audio flinger.\nIt updates also product strategies example for automotive to add associated\nstrategy and full range volume.\n\nBug: 130284799\nTest: make\n\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: I6e77dc2cbed0289f0a1341f7597b1c25abee5f7d\n"
    },
    {
      "commit": "6c79632bbece71f7af0c2453bb62a5d6f0cca664",
      "tree": "a70a17d1f723b7e0241bb762bf5478e3c9947348",
      "parents": [
        "2cb1a8ccbd402d74a06ee34721f5dd787ecb396f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 09 14:13:17 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 17 10:29:30 2019 -0700"
      },
      "message": "refactor mutexes for audio effects in audio flinger and audio policy\n\nRemove effect specific mutex (mEffectLock) in AudioPolicyService: Due to\nconcurrent capture (among other reasons), it is necessary that the audio\npolicy manager state preserved by mLock includes audio effects\nregistration and enabling.\n\nMoved all audio policy API calls from audio flinger out of locked regions\nfor audio flinger, thread and effects mutexes to avoid cross deadlocks\nbetween audioflinger and audio policy manager:\n- centralized audio policy API calls in EffectModule::updatePolicyState()\n- the enabled state now reflects the state requested by the controlling\nhandle, not the actual effect processing state: a suspended effect is\nnow considered enabled.\n\nA new audio policy manager API moveEffectsToIo() is added to atomically\nhandle moving effects to a new input or output without having to call\nunregister \u003e register \u003e enable sequence.\n\nAlso fix assert in setStreamVolume to match volume group refactoring\nin audio policy manager.\n\nBug: 128419018\nTest: CTS tests for audio effects.\nTest: manual tests with Duo calls, Play Music, Youtube, notifications\n with and without Bluetooth and wired headset.\n\nChange-Id: I8bd3af81026c55b6be283b3a9b41fe4998e060fd\n"
    },
    {
      "commit": "959e2d068b21e6b9443d5e98fa25a607d1f93993",
      "tree": "c889e8fbdd9d07065759b82e354b3ef42ad255d0",
      "parents": [
        "c70268aa433e7d307819184ae5c2ec96a3e5b6af"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 28 11:08:19 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 28 11:23:00 2019 -0700"
      },
      "message": "audioserver: Use timed lock instead of bouncing for dumps\n\nThe technique of bouncing lock attempts does not work well\nin the case when another lock has higher priority and acquires\nthe lock frequently. Timed lock works better in this case\nbecause the acquiring thread is then put in a queue and gets\nthe lock as soon as another thread releases it. The wait time\nin the worst case (deadlock) is the same.\n\nBug: 118842894\nTest: Run VOICE_COMMUNICATION capture + AEC effect, dump audioflinger\nChange-Id: Idc4fc2b6f5faf6988979f9354dd92441af33e600\n"
    },
    {
      "commit": "444bb5555e064271b2eafc1478f238b73f417941",
      "tree": "bb269cdf062c9cdef7b7ca3340cff6b9e6a4cda6",
      "parents": [
        "b893fcd9978e730c0e00eddce63a08bef727261e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 17:06:39 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 22 17:51:47 2019 -0700"
      },
      "message": "AudioFlinger: Clarify effect creation comments and warnings\n\nTest: CTS audio effect tests, instrumented test\nBug: 128633662\nChange-Id: I31e4cbec6c34d2419d2f7bbcced98e8bbb8ce78d\n"
    },
    {
      "commit": "7c697395faf6e467902117983c5e3660446712d5",
      "tree": "b353ae562cc55c01c0c66eaccc0f88f6fa25cad2",
      "parents": [
        "e9955729faa3a33483b9739f085856b5b4b451d5",
        "6096dcd538ef55fa2f121260956bdc6ed508b07a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 18 20:37:57 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 18 20:37:57 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: createEffect - check for proper sessionId\""
    },
    {
      "commit": "88a6078ced774995aa8326468f36cf7fa2924aae",
      "tree": "91252acb979a248ff47aa654200705a552264b9f",
      "parents": [
        "ef9d3a6952cf538d9b8ac58a74aa1952c1fd9529",
        "e778c4254d3018553ff245448aa9d750c5628699"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 15 19:47:37 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 15 19:47:37 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: createEffect always look for same session effect chain.\""
    },
    {
      "commit": "b4946b6d3719cde8187b106f7aad2d6be2b6dadb",
      "tree": "a740b088de5af1654921b7b8e2769a3ad9c2ebd7",
      "parents": [
        "0a2fc30b155c92db29ed483f85c8e92c3c9cf85b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 11:19:28 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 16:01:19 2019 -0700"
      },
      "message": "AudioFlinger: Close MMap threads in destructor\n\nFor aesthetic symmetry.\n\nTest: compiles\nChange-Id: I5876409cf0ebf0c1945def19bcfd455d87dd4542\n"
    },
    {
      "commit": "e778c4254d3018553ff245448aa9d750c5628699",
      "tree": "c60e1d80b508471c7de9d409420e563813cabbf9",
      "parents": [
        "0a2fc30b155c92db29ed483f85c8e92c3c9cf85b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 15:04:30 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 14 15:37:55 2019 -0700"
      },
      "message": "AudioFlinger: createEffect always look for same session effect chain.\n\nTest: CTS AudioEffect tests\nBug: 128630419\nChange-Id: Ieb08abfcb7a983e05fa8f25f6609468d9bd4620b\n"
    },
    {
      "commit": "6096dcd538ef55fa2f121260956bdc6ed508b07a",
      "tree": "112c1d99ac6dafeb6f66887d05be3a4a08449faf",
      "parents": [
        "1631f06feb36df5406ad00e850dcca9394f67772"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 13 13:20:30 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 13 13:32:47 2019 -0700"
      },
      "message": "AudioFlinger: createEffect - check for proper sessionId\n\nOutput error messages on failure.\n\nTest: CTS effects, dedicated test with bad sessionId\nBug: 128528126\nChange-Id: Icdd306c30e8eb818b0a27d6463fa785bac2fb707\n"
    },
    {
      "commit": "1631f06feb36df5406ad00e850dcca9394f67772",
      "tree": "e4c002b79d79dedba6441380a9d651c7e69c692f",
      "parents": [
        "d9c99eafe6d3727b2892aeae5df568c6a97b6e76"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 12 19:39:03 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 12 19:47:07 2019 -0700"
      },
      "message": "AudioFlinger: Prevent multiple effect chains with same sessionId\n\nAllow at most one effect chain with same sessionId on mPlaybackThreads.\n\nTest: poc, CTS effect tests\nBug: 123237974\nChange-Id: Ide46cd23b0a9f4295f0dca2fea23379a76b836ee\n"
    },
    {
      "commit": "abfab20fdbdc41168f816272c31caa6c1264ba46",
      "tree": "940b8444b6e54cd0beee1b51427dab2715d7453a",
      "parents": [
        "4e7c08a1343cc9a47c17950359fb0845b262dc40"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 07 19:45:54 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 08 10:37:15 2019 -0800"
      },
      "message": "PatchPanel: Keep peer alive during use.\n\nTest: BT call, switch from hearing aid to headset\nBug: 126789266\nChange-Id: I589e5ecaac25c1ce1d504a387662b96cf50f63ba\n"
    },
    {
      "commit": "bf6b0ecd91172d6cd6cdd7c44f9ceecab4c29f27",
      "tree": "5af2b932484555dc58c2eb0ec338a4062ba99b81",
      "parents": [
        "f39a648edbb1502f278ab10310e42500692dc3df"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Feb 12 12:30:12 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Feb 15 09:47:23 2019 -0800"
      },
      "message": "Refactor haptic constant.\n\nUse the constant from IExternalVibratorService.\n\nBug: 124318236\nTest: play audio-haptic coupled file\nChange-Id: Ice2ac13d0f6a6a749bb6243230524336144fa5f4\n"
    },
    {
      "commit": "9aeb1770d49bab13ea5c6454c969a713641fe686",
      "tree": "cf31e60cf96f213535899a4dd14722868cf1a530",
      "parents": [
        "186f4ac0f006de84d940a460bb44ee0e325fd1eb"
      ],
      "author": {
        "name": "Weiyin Jiang",
        "email": "wjiang@codeaurora.org",
        "time": "Fri Apr 27 00:39:29 2018 +0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 08 13:31:05 2019 -0800"
      },
      "message": "audio: ensure effect chain with specific session id is unique\n\nIt\u0027s possible that tracks with the same session id running on various\nplayback outputs, which causes effect chain being created on the same\nsession twice. As a result, the same effect engine will be released\ntwice as the same context is reused.\n\nOutput that has effect chain with same session id is more preferable.\n\nTest: No regression with Play Music and Effects\nBug: 123082420\nChange-Id: I690ea3cb942d1fdc96b46048e271557d48000f43\n"
    },
    {
      "commit": "c43ea147033817dc46b76d8993a84f0e5ee4e4e0",
      "tree": "4900174eb6395b5980753c40fbdab9064501b37a",
      "parents": [
        "153f92d57b6a1d2fdc7fa601bbc86db31646a8f9"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Jan 31 18:17:37 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 06 16:13:13 2019 -0800"
      },
      "message": "Propagate track status to interception patch track\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: Icbf627ce36b6d9390439f51237ef9515a2eba8cb\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "153f92d57b6a1d2fdc7fa601bbc86db31646a8f9",
      "tree": "0d380f13a58ff8fdf073dd974dcb55e4d18ef75c",
      "parents": [
        "45986c74cd5253bcc81b1b4954e3ff3300f7e6d8"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Dec 18 18:33:28 2018 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Feb 06 15:49:11 2019 -0800"
      },
      "message": "Add secondary output to audio tracks\n\nThe secondary are returned from mixes (from DAP loopback\u0026render),\nfrom getOutputForAttr.\nAll getOutputForAttr* of the stack are update.\nInternal getOutputForAttr use descriptor, external one use handles.\n\nThe secondary output are saved in each track and the track is\ninvalidated if the list of secondary output changes.\n\nIn audio flinger, create a pair of recordTrack \u0026 patchTrack to pipe\nthe intercepted audio audio to the secondary output.\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: Id6523d9e383c15a0e39313d5f355df809b7e72fe\n"
    },
    {
      "commit": "ae340bde6d16f0046887fa0e73fba00cdd5405d9",
      "tree": "8b84e19910fcba4e4ba54f0a7b1e6649bf7d8bb8",
      "parents": [
        "def408939dec9f3a4ff21d84c44b6fcad1797396",
        "3fae037db39ff89707c3a58ef1419229a00ad71d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 01 01:53:28 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 01 01:53:28 2019 +0000"
      },
      "message": "Merge \"Add master audio balance\""
    },
    {
      "commit": "57303cc4312686e02e754ba99a81f0cf71144757",
      "tree": "5118a0c03e035d13c203118e1336e33803b1de08",
      "parents": [
        "77270b880570e07a5d80b23371f53638ec30fb5c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 18 15:45:57 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 30 17:07:10 2019 -0800"
      },
      "message": "Interface between audio server and vibrator service\n\nThe haptic playback should be controlled by vibrator service. Via the\ninterface, audio server could notify vibrator service about starting or\nstopping haptic playback and get vibrator intensity from vibrator\nservice. Vibrator service could call mute/unmute to control the haptic\nplayback.\n\nTest: Manually\nChange-Id: Iad24813977e4dea0d67a91f8f8b390a016ce4ca2\n"
    },
    {
      "commit": "3fae037db39ff89707c3a58ef1419229a00ad71d",
      "tree": "33087aa031e45fdc65add4ffaaf74e6a7872cf0f",
      "parents": [
        "48f59ed61b902f0e6cb7811bd8ee5fa60ab63abe"
      ],
      "author": {
        "name": "Richard Folke Tullberg",
        "email": "richardfolke.tullberg@sony.com",
        "time": "Fri Jan 13 09:04:25 2017 +0100"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 28 16:21:52 2019 -0800"
      },
      "message": "Add master audio balance\n\nTest: Change Balance through Settings, play audio\nBug: 28390736\nCo-author: Ed Savage-Jones \u003cedward.savage-jones@sony.com\u003e\nChange-Id: I0169b436ccbaa5628584d9f4954dd7c76d021aae\n"
    },
    {
      "commit": "b4e037e01450cbc99191a89e507805974d347899",
      "tree": "9e1dff2e3afe399eec542594a4ed480a9d1adf99",
      "parents": [
        "8292a716361d0f02de2b79242aec4630664bc770"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jan 14 15:56:33 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jan 14 15:56:33 2019 -0800"
      },
      "message": "AudioFlinger: provide downstream sink device to software patch source\n\nWhen opening an input stream for a software patch, pass in\nthe downstream destination device info. This helps the intermediate\nmodule to set up any device-specific processing.\n\nNote that the intermediate module must implement Audio HAL V5.0\nin order to be able to receive this information. It\u0027s not available\non the legacy audio HAL API either.\n\nBug: 120859615\nTest: make\nChange-Id: I542a47d2c299fe19f576d5f5c2b237cc00ae5b93\n"
    },
    {
      "commit": "973db02ac18fa1de9ce6221f47b01af1bdc4bec2",
      "tree": "e2dda15a881c963a14520117128b5b9857834759",
      "parents": [
        "f4a342abd2959904caa18b5a0671e8107581ff24"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 20 14:54:31 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 04 12:06:37 2018 -0800"
      },
      "message": "audio flinger: return port ID as track ID to client\n\nReturn the port ID allocated by audio policy manager instead of the\ninternal track ID allocated by audio flinger when an AudioTrack or\nAudioRecord is created.\nThis information is more useful for logs and allows to associate information coming\nfrom audiopolicy manager with a specific client instance.\n\nBug: 111438757\nTest: Manual playback and capture tests\nChange-Id: Ib467d8fcc34d9a8aa7bcaac0770a741982b847c5\n"
    },
    {
      "commit": "d3934149f5d71f9c795b5b34cd9e2cda8eff2f40",
      "tree": "6db65fc668fc1bec0ce3364080b915aeb3c23d15",
      "parents": [
        "900e05edf84a3401e0bc9d6c824686c6b16b1e9e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 01 19:19:55 2018 +0000"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 01 19:21:41 2018 +0000"
      },
      "message": "Revert \"audioflinger: Temporary disable post-close dumping of input streams\"\n\nThis reverts commit 900e05edf84a3401e0bc9d6c824686c6b16b1e9e.\n\nReason for revert: Updated FdToString with timeout, avoids hang.\nTest: continuous reboot check\nBug: 116211629\nBug: 116873928\nChange-Id: Ifb954a15932e7754a63ff449c907b8664b134573\n"
    },
    {
      "commit": "900e05edf84a3401e0bc9d6c824686c6b16b1e9e",
      "tree": "2524e5b3cc9df9041f6a623106f7bfe27869cdbe",
      "parents": [
        "3237d6b595d577aafb7a41ac07cf053d67a42d5a"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Sep 24 13:02:09 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Sep 24 13:02:09 2018 -0700"
      },
      "message": "audioflinger: Temporary disable post-close dumping of input streams\n\nThere is a suspicion that dumping HAL state for a recently closed\ninput stream can hang forever, blocking audioflinger and stucking\nsystem boot.\n\nIn order to verify, we disable this dumping to see if it would\nhelp with presubmit bots.\n\nBug: 116211629\nTest: see steps in b/116211629#9\nChange-Id: I189461187a2310c213278cc2b3af2469d1896965\n"
    },
    {
      "commit": "9db3bb488875575f1e405ba5bf69206db9d9e403",
      "tree": "b93608086f18e028e7a823ae0cb4f622c0b3878c",
      "parents": [
        "ffc04957ed8f9c42a3fb7481e8dc8cc90a8ed65c"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 19 14:05:11 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 19 14:06:32 2018 -0700"
      },
      "message": "AudioFlinger: Do not dereference null track\n\nTest: compile (original bug occurred during sanity testing)\nBug: 116142034\nChange-Id: I33d77bf1970dfdd96706ace8f858baf5d473a59f\n"
    },
    {
      "commit": "2942a4e2d97edb8b14d7fac16f9cad12f78048bc",
      "tree": "97f3fd66a453766e390a4bba7e9c863834855ce8",
      "parents": [
        "ea055e6dab6bcbf9bf90711d602bcf59395f0d59"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Wed Sep 12 17:41:27 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Tue Sep 18 17:32:33 2018 -0700"
      },
      "message": "Remove --json option from dumpsys media.audio_flinger\n\nThe more recent work that this was supposed to become is reflected in\ndumpsys media.log, so this commit removes some code clutter that is not\nused anymore.\n\nOther Changes:\n- Use std::make_unique for creating unique_ptr objects\n\nTest: build, dumpsys media.audio_flinger\nBug: 68148948\nChange-Id: I4841e118c2cdee4ada4c6cdc0fff1ec2e12b38c4\n"
    },
    {
      "commit": "dc099c2cd3ab1d5a9adf4c39dd33e0b5037544f1",
      "tree": "5b7cc829081ef671cb075e726e8f03baa7405b34",
      "parents": [
        "05fa8856abaa1e050c3c8e6ba97fc8878ed7600a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 18 13:46:39 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 18 14:38:05 2018 -0700"
      },
      "message": "AudioFlinger: Preserve recent MMapThread history for dumpsys\n\nTest: Aaudio tests, check audioflinger dumpsys\nBug: 116026119\nChange-Id: Ib891686480b2579e4d3b2e419c83aec0a79ba812\n"
    },
    {
      "commit": "0264e7d611ed4c8151988ad2622b39729492e34e",
      "tree": "d298dee16f0e35825ce3c7c329b2cd5b75bf93a3",
      "parents": [
        "45146a2c3b3cd3aebab46306cc43d27e952e8060"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Sep 17 19:30:46 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Sep 17 19:30:46 2018 -0700"
      },
      "message": "AudioFlinger: Preserve recent RecordThread history for dumpsys\n\nTest: audioflinger dumpsys after record\nBug: 115946219\nChange-Id: Ic551ae38a35acc3ed21eee5da3b42d6b07454899\n"
    },
    {
      "commit": "6b1c612162ce290c54e0b0a418e1791410f95d47",
      "tree": "51f1213fa8c534e8f403c40a1b6f2f34b7b7fa39",
      "parents": [
        "fb8ede2a020e741cb892ee024fcfba7e689183f2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 12 19:09:07 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Sep 13 17:54:49 2018 -0700"
      },
      "message": "AudioRecord: Add client side track id for logging\n\nTest: Audio sanity test, check logcat\nBug: 115400221\nChange-Id: Ifa9c05c0df66e372e773b5149a0f1ed49a21ef3a\n"
    },
    {
      "commit": "fb8ede2a020e741cb892ee024fcfba7e689183f2",
      "tree": "702e8497e892eaa0d4d8fb7d28ec78fc2762a1f2",
      "parents": [
        "9d84af54244f7ff086afdcc6e477fe4d04874652"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 12 19:03:24 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Sep 13 17:54:36 2018 -0700"
      },
      "message": "AudioTrack: Add client side track id for logging\n\nTest: Audio sanity test, check logcat\nBug: 115400221\nChange-Id: I7c74af8962f7d3b72a7b843df906c54f79f6f009\n"
    },
    {
      "commit": "a8115dc6d814c18d1ec68067425485add3ea1af2",
      "tree": "2bed9bcf27ad65a7495f82d59ac259a0072647ff",
      "parents": [
        "51eb281710acec50c28306e03155224cf5198aad"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Aug 24 15:51:59 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Aug 28 15:46:05 2018 -0700"
      },
      "message": "AudioFlinger: Add Thread history to dumpsys\n\nTest: Bluetooth + audioflinger dumpsys\nBug: 80155745\nChange-Id: Icee723a9fe653395119dd639883be5b7d8f3f158\n"
    },
    {
      "commit": "a0a5d2a9061cfb58b6f7632117502f2061ab74cb",
      "tree": "5d97d831dbb49da3617a6b66630a83fee07c8d72",
      "parents": [
        "5bf00e8858de16b294174c35b338b99b5a3259fb"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Mon Aug 06 15:03:18 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Aug 09 09:38:16 2018 -0700"
      },
      "message": "Add external setParameter to audioflinger dumpsys\n\nApps are not expected to send any setParameter, system should only send\nvery few keys. This log can help verify what is bypassing audioflinger\ncontrol.\n\nOnly the first 1024 characters are logged per SimpleLog limitation\nto avoid high memory retention in the privilege audio service\nin case very big strings are sent.\n\nThus in the worst case around 60*1*3\u003d180kB can be consumed in Audioflinger\nby those logs (aka: no app memory deny of service).\n\nTest: adb shell dumpsys media.audio_flinger\nChange-Id: Ida9c21be9d20528f67a63eddf6ca7a6c962c7cc2\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "442868f036df6e9966f824ec256619b2923a9ed4",
      "tree": "f823452661efd87177897ba4b82d32ef944fd6ec",
      "parents": [
        "4455af941c4d33859215b836ac03571ee7a360cf",
        "1882f16c80d6e1e047a43c1e685a005034b138e4"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Aug 03 23:58:32 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 03 23:58:32 2018 +0000"
      },
      "message": "Merge \"Audioflinger dumpsys: Use libjsoncpp for json dump\""
    },
    {
      "commit": "1882f16c80d6e1e047a43c1e685a005034b138e4",
      "tree": "29fb74695be6d869ca6a0f51e310e6752eb8c36b",
      "parents": [
        "5b13ff8f66e4b376127af9cfb6fa3f075f17eaa2"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Thu Aug 02 18:05:39 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Aug 03 15:44:15 2018 -0700"
      },
      "message": "Audioflinger dumpsys: Use libjsoncpp for json dump\n\nTest: dumpsys media.audio_flinger --json\nBug: 68148948\nChange-Id: Ieebe2c52e3613e48a5ec5cbb2b1f167a32d5a47d\n"
    },
    {
      "commit": "2046ec756ee59acc4cfa1d52eb97aaa84efc9754",
      "tree": "352eca0b14dc5e4a368f0475df975ad431515d9d",
      "parents": [
        "965737edc28bd76f6424f9ff4c1f0315f28a0434"
      ],
      "author": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Tue Apr 24 14:00:55 2018 -0700"
      },
      "committer": {
        "name": "Ari Hausman-Cohen",
        "email": "arihc@google.com",
        "time": "Tue Jul 31 18:01:12 2018 -0700"
      },
      "message": "Update getEffectDescriptors() to include type\n\nAllows getting effect descriptors by type or uuid,\nnot just by uuid.\n\nBug: 78528249\nTest: Builds. Manually tested that an app playing audio with an effect works.\nChange-Id: I9d339a7d6d81161065e1adaf427dd2d3430436c2\n"
    },
    {
      "commit": "97373b0fbabf670bb33bcc433ab04848d9594385",
      "tree": "04bb8e2be1de86ebd932ab138aa31ab5bc993de1",
      "parents": [
        "a2a19382e5870fb133b56dacc7ff3048cdaa407d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 23 13:27:24 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 23 13:27:24 2018 -0700"
      },
      "message": "audioflinger: Use AUDIO_HARDWARE_MODULE_ID_MSD where appropriate\n\nAfter separating the constants for MSD service and module names,\nuse the module name when working with modules.\n\nBug: 63901775\nTest: make\nChange-Id: Icf80d28903e5c36051e33c4be818fd3d7256ce91\n"
    },
    {
      "commit": "a746b36f237e6b05b207afac9a507cc706f5cdc6",
      "tree": "15cbe3725413b1345c5684c5e908620879f85482",
      "parents": [
        "c3fd2a4396d692d9940b09e7a933b53bc808daab",
        "7b651154476414dcb15b822a9ebea2b4bf25cd3d"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Sat Jul 21 00:31:51 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jul 21 00:31:51 2018 +0000"
      },
      "message": "Merge \"dumpsys: add --json option to media.audio_flinger.\""
    },
    {
      "commit": "7b651154476414dcb15b822a9ebea2b4bf25cd3d",
      "tree": "04ebf92f0b3181d4cfbcb3cf460ddd5f9fb2a846",
      "parents": [
        "8180b74a8e2c02eee7938b32fd0ecfeda53c91be"
      ],
      "author": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Jul 13 10:17:19 2018 -0700"
      },
      "committer": {
        "name": "Eric Tan",
        "email": "taneric@google.com",
        "time": "Fri Jul 20 14:56:51 2018 -0700"
      },
      "message": "dumpsys: add --json option to media.audio_flinger.\n\nCurrently only extracting audio performance data.\n\nTest: dumpsys media.audio_flinger --json\nBug: 68148948\nChange-Id: If207e7e20683dcf8d8d5874417cd7466c78a5df0\n"
    },
    {
      "commit": "cb82c8013d8b9be475b8be5b503535c9ca66bf4b",
      "tree": "a8f6d8ee3d7b2572086e755aa36aea0494a2216d",
      "parents": [
        "f4bc76e11fca04c687cf77d7e7a8d23c0582c62f",
        "b261ef51db4891290647ee2fe2365b0ece6a530e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 17 23:00:34 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 17 23:00:34 2018 +0000"
      },
      "message": "Merge \"audioflinger: Forward stream parameters to downstream patches\""
    },
    {
      "commit": "4aa394d12d519b0763b232e0e1d177c6795e0f9e",
      "tree": "27bd138bae4ba7a6d65aceeafc8e6593da53bd92",
      "parents": [
        "7eadbbc367d0df612c515146d5e066559d4b07eb",
        "d7fe086d3b45f088083170006367dfc4246f70b0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 17 21:30:49 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 17 21:30:49 2018 +0000"
      },
      "message": "Merge \"audio policy: refactor audio playback APIs\""
    },
    {
      "commit": "b261ef51db4891290647ee2fe2365b0ece6a530e",
      "tree": "9fe80b6600edce4fd80f7feaedbdf972303b9e8c",
      "parents": [
        "24b617232c7400c9165bde09542bdb41cb113089"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 16 13:34:38 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 17 13:05:34 2018 -0700"
      },
      "message": "audioflinger: Forward stream parameters to downstream patches\n\nWhen passing parameters to immediate output streams also check\nif there are any downstream patch threads that need to receive\nthese parameters.\n\nAdded AudioFlinger::forwardParametersToDownstreamPatches_l\nmethod, similar to existing broacastParametersToRecordThreads_l.\n\nBug: 63901775\nTest: make\nChange-Id: I83229fd6f4890e5e69a40d568d1c3e1eebed6504\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": "adca70f3a1526943d69b506922553b15fa58564c",
      "tree": "41c3b6a045f623aa660a7f289cfedc789b89af27",
      "parents": [
        "66c153a4e59006920865383372f86e829fdd0263"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 09 12:49:25 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 13 09:32:30 2018 -0700"
      },
      "message": "PatchPanel: store \"downstream\" patches for a device\n\nWhen the system inserts an intermediate processing module between\naudio flinger and hardware HAL, and they are connected via a\nsoftware patch, the threads of this patch need to receive\nmetadata passed to the thread serving the \"upstream\" device of\nthe processing module.\n\nPatchPanel stores an association between \"upstream\" streams\nand the software patch. This allows audio flinger to access\nthe patch threads.\n\nFor more info, see the comments in PatchPanel.h\n\nBug: 63901775\nTest: manual\nChange-Id: I60e578c37a1bc7385daf32d379ea143120584a31\n"
    },
    {
      "commit": "7c6ae98049e422454f6e9ea21d9d3fd6a7bfd217",
      "tree": "06f9d2dc1df52505e59968677bc1dc8d042a1e55",
      "parents": [
        "495d8f29c82be95d499f8897311411ccc74ec52b"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jun 14 12:33:38 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jun 14 17:03:06 2018 -0700"
      },
      "message": "audioflinger: Add support for RecordTrack with no conversion\n\nWhen piping encoded audio data via software patch, it needs\nto be created without the buffer converter. In this case the audio\ndata is copied directly from ResamplerBufferProvider.\n\nAdded input flag AUDIO_INPUT_FLAG_DIRECT to indicate to PatchPanel\nthat the PatchRecord track needs to be opened in this mode.\nThis flag can be later added to minor Audio HAL update.\n\nBug: 63901775\nTest: MSD scenario; verified that phone over USB headset still works\n      on marlin / sailfish\n\nChange-Id: If2745778d356769b143fb3c29910275ddef119ac\n"
    },
    {
      "commit": "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": "8946a28aaaadf426ee22b098b4aec7be4d9edc00",
      "tree": "85a9520841616e8c1188d51fd44591543148e874",
      "parents": [
        "acb7d9ddc1955682379ea514082511b9ea44482e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 19 20:04:56 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon May 21 11:37:46 2018 -0700"
      },
      "message": "AudioFlinger: Fix Tee logging\n\n1) Fix bad WAV files for tee sources that aren\u0027t 16 bit PCM.\n2) Allow multiple RecordThread tees instead of one.\n3) Allow dump from non-fast MixerThreads (e.g. deep buffer).\n4) Parallelize tee dumping for improved concurrency;\n   dump outside of AF lock.\n5) Async dumping to allow dump to be issued in time critical code.\n6) Improve file naming to distinguish record vs playback tracks,\n   threads, and dump reason.\n7) Allow Tee insertion anywhere in code with global running\n   Tee management.\n8) Increase resolution of filename time to msec avoid file overwrite.\n9) Dump track data upon removal from active tracks to improve\n   timeliness of dumped data.\n10) Dump tee data on tee destruction.\n11) Refactor Tee code out of AudioFlinger.cpp; minimize footprint.\n\nAudioFlinger enabling code requires Configuration.h define TEE_SINK;\nthis is disabled, hence avoiding regression risk.\n\nTest: Enable tee log, repeatedly call dumpsys, examine files.\nBug: 78369241\nChange-Id: I7b22cfa7dbbc1601828de931522065a509ab4047\n"
    },
    {
      "commit": "31e2127d4b78daeedd36b6daabc4ba7dfe1b7ec7",
      "tree": "94cb659b36b481757c4dce0c8260f1689c3c07df",
      "parents": [
        "808dba40e49855a3537fee311a93ad76e443d1b8",
        "ab7ef300b74904bce6c5c810d9e5679abfa582e6"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 18 17:42:55 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 18 17:42:55 2018 +0000"
      },
      "message": "Merge \"Move ServiceUtilities from audioflinger to libmediautils\""
    },
    {
      "commit": "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": "1bdb09960f96032cdcfe2b747da23e54cd7f4d6a",
      "tree": "a90fd20cc4e0f71d4e0b574cb41d574d97820ed1",
      "parents": [
        "aecfb4f3ec0cdb9015249d29c5a1a1713a000fd1",
        "201369ba583a63b87f40dacbbc2d9c2a13cbb958"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 17 22:50:59 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 17 22:50:59 2018 +0000"
      },
      "message": "Merge \"audioflinger: Dump software patches\""
    },
    {
      "commit": "201369ba583a63b87f40dacbbc2d9c2a13cbb958",
      "tree": "048683ea45de57cd5a62c9cff279e564ef52cecf",
      "parents": [
        "4dbb7193c5fde752707bee899a018511e872f1e5"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 16 16:52:32 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 17 10:45:31 2018 -0700"
      },
      "message": "audioflinger: Dump software patches\n\nExample output:\n\n    Software patches:\n      Patch 44: thread 0xa6d83900 \u003d\u003e thread 0xa7dfe000\n\nThis helps to identify threads used for the patch.\n\nTest: adb shell dumpsys media.audio_flinger\nChange-Id: I6c70945abd8e4abd46cd0311559d35efb6127555\n"
    },
    {
      "commit": "7a1874b98b445c1938d279a2b6a7a2612a342621",
      "tree": "2c6a25373f88a1372c4ed008f1ee005c66ab30f6",
      "parents": [
        "1f2bfd3ac9d61982acb348d2c78f95c7d4b0bf05",
        "52f0c23904b2249fb92ad015d74d9c6969930cdb"
      ],
      "author": {
        "name": "Bubble Fang",
        "email": "bubblefang@google.com",
        "time": "Wed May 16 19:01:01 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 16 19:01:01 2018 -0700"
      },
      "message": "Merge \"audioflinger: clean previously opened input selectedDeviceId if retrying\" into pi-dev am: 88af67ed2a\nam: 52f0c23904\n\nChange-Id: I26d76fdb4269802f8a9bd5e585183596ff9cba61\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": "5fac9c6a6c666775cbc7c63c3b6c44a9384e65f5",
      "tree": "3abae3a532b94a1effe64d53da838830deebae84",
      "parents": [
        "bf2e1e8debbe1e91549b2defe2345d1a1876a8df"
      ],
      "author": {
        "name": "Yung Ti Su",
        "email": "andysu@google.com",
        "time": "Tue May 15 15:07:43 2018 +0800"
      },
      "committer": {
        "name": "Yung Ti Su",
        "email": "andysu@google.com",
        "time": "Tue May 15 18:17:43 2018 +0800"
      },
      "message": "audioflinger: clean previously opened input selectedDeviceId if retrying\n\nselectedDeviceId is not cleaned when retrying open input.\nand will add this selectedDeviceId into input routing.\nWhich will cause getDeviceForInputSource() not doing\nmEngine-\u003egetDeviceForInputSource() but only return\nroute-\u003emDeviceDescriptor-\u003etype() and failed to route to\nthe correct device.\nTest: self-test routing is corrected.\n\nBug:79332409\nTest: routing is corrected.\nChange-Id: Ia85c773f3549befb929178469116dc2d4e4945ad\n"
    },
    {
      "commit": "030f4ae487bc726fa39c06bd883c60fd29e5ff78",
      "tree": "9e3d1213be510cc3f1a20d2676e4358b77b70cab",
      "parents": [
        "a8b38b6d2a82fdbee509fdd6b457878367c2fa4a",
        "a4634c02420479173e9f29f8b96615a9792312d6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 11 08:46:44 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 11 08:46:44 2018 -0700"
      },
      "message": "Merge \"AudioFlinger: Fix tee logging\" into pi-dev am: 2c82a51179\nam: a4634c0242\n\nChange-Id: Ice7ec5ae93e393bed9533b44f2a505177985989d\n"
    },
    {
      "commit": "7ad78187b16c5e2ccd0abb4d09883ef5a1411d11",
      "tree": "9f334855da3fbe449093b0f7ffcf8e996d6c59f9",
      "parents": [
        "b3dee358b18472d6623a9d6342d7f2f7e8e45bec"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 10 20:54:29 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu May 10 20:57:22 2018 -0700"
      },
      "message": "AudioFlinger: Fix tee logging\n\nMissing header file hidden by compile flag.\n\nTest: Compilation is fixed when flag enabled\nBug: 78310170\nChange-Id: Ie938193c5d87de04f22318a8fb4fffb4a4412a53\n"
    },
    {
      "commit": "444ecc3476107a1e80f1573b20ceca5e9949e4ae",
      "tree": "0c431300c26a616e77e1200f3d3b46638f1668e5",
      "parents": [
        "6205a06d20d6b92d52044e8076beaac4c7873a21"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue May 01 17:40:05 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 11:05:38 2018 -0700"
      },
      "message": "PatchPanel: Cleanup and refactoring\n\n  * Unified software patch endpoints management code.\n\n  * Noticed that Patch::clearConnections is only called before\n    getting rid of Patch instance, so there is no need\n    to explicitly clear references to endpoints\u0027 Track and Thread.\n\n  * Fixed out-of-memory handling when creating tracks for\n    a software patch.\n\n  * Factored out finding HAL Device by module handle.\n\nTest: verify transitions to/from BT while playing media and making calls\nChange-Id: If6459c477054d6dff60dfa13f2d99ee2d6e887ad\n"
    },
    {
      "commit": "dea53040273928d1cf4dc028c93afac706445c49",
      "tree": "2f1de9deed88e8dbe142d39dfab92a00afba09a8",
      "parents": [
        "03625f6e43934ebf53864160a6e325eefcc3336e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 26 13:10:21 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 26 16:45:06 2018 -0700"
      },
      "message": "Refactor PatchPanel\n\nMajor changes:\n\n * since PatchPanel is internal to AudioFlinger, and has the same\n   lifetime period, there is no need to use reference counting;\n\n * setAudioPortConfig moved to AudioFlinger;\n\n * store Patches in std::map instead of SortedVector, and\n   directly--not as pointers;\n\n * move {create|clear}PatchConnections into Patch class;\n\n * use __func__ in logging.\n\nTest: test basic audio functionality on taimen\nChange-Id: I813fd8430a0e97cd01cc74e6b3b828b10ff5acd4\n"
    },
    {
      "commit": "ed4f0147db29c87d0404f78eb68dc7b7b81deed8",
      "tree": "3fe6906677700427bacfdcde6c9eb1243f0f54c0",
      "parents": [
        "cdcfb309e26fa636eed7768b49376122961d861a",
        "b1fe6e1080fb691803038ebd5d399e62d6b88108"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 20 21:47:42 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 20 21:47:42 2018 +0000"
      },
      "message": "Merge \"AudioFlinger: Fix Tee compilation\" into pi-dev"
    },
    {
      "commit": "cdcfb309e26fa636eed7768b49376122961d861a",
      "tree": "f332447f7f9a1f1ec161fc7a9f368bfa8574c27c",
      "parents": [
        "150b9846f846165344910b9211739cdb3054ccf4",
        "9e75663c56f13d21799bbe6a67f5587659a320e3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Apr 20 21:17:31 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 20 21:17:31 2018 +0000"
      },
      "message": "Merge \"Don\u0027t create empty .wav files\" into pi-dev"
    },
    {
      "commit": "b1fe6e1080fb691803038ebd5d399e62d6b88108",
      "tree": "36840901ce7e7ac47d11746d644b0cb7cce6e448",
      "parents": [
        "6b6f4313aae039f2d73664816e45834e65f79bf5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 19 19:20:00 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 20 13:04:24 2018 -0700"
      },
      "message": "AudioFlinger: Fix Tee compilation\n\nTest: Enable Tee and check build and output files\nBug: 78310170\nChange-Id: Ic6f1d87a3055ee0f5ce0fe7b57d0fdc74d75d31b\n"
    },
    {
      "commit": "9e75663c56f13d21799bbe6a67f5587659a320e3",
      "tree": "6b89e9981004057393c6bea438f4357e55e67ece",
      "parents": [
        "c4b259a584be3e7dc9aad83e0ead06c913ceb998"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Oct 03 13:01:09 2017 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 19 11:09:57 2018 -0700"
      },
      "message": "Don\u0027t create empty .wav files\n\nBug: 78287983\nTest: follow the tee sink documentation, and then verify there are no empty files\nChange-Id: I0aa98aff5d0d47b86f36dd38a54d0daf3feb1965\n"
    },
    {
      "commit": "018c8a09a35c6da526af2bcb130522ed593e9432",
      "tree": "be6e579d648bb398ae43c9c4a15f4aa01760a41b",
      "parents": [
        "f255369091d48ba7475ee4aae840a8a9c7a15f07",
        "f1047e87767be1acd2c32f4d36028d1d0014f4c0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 17 17:53:28 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 17 17:53:28 2018 +0000"
      },
      "message": "Merge \"audioflinger: filter out reserved keys from setParameters()\" into pi-dev"
    },
    {
      "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": "331679c8a5cd21a0e6a7a1d851e965e4721f7420",
      "tree": "9e3835bb805631ca42a90ded01796b73307a4642",
      "parents": [
        "554e08c6b00b2a57348f4545d450915a9e8c870a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 17:03:16 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 17:08:06 2018 -0700"
      },
      "message": "Revert \"Revert \"audioflinger: implement silenced capture for mmap\"\"\n\nThis reverts commit 611ebb95e76c230214780b7b583b8a3c5277ac7a.\n\nBug: 78118584\nbug: 72134552\nTest: \u0027adb shell write_sine_callback -m3 -pl -s100 -x\u0027 and Plug headphones in and out.\nTest: AAudio CTS tests\nChange-Id: I7558ad7b9c6c2d352ebce105382fe914c26fd35e\n"
    },
    {
      "commit": "611ebb95e76c230214780b7b583b8a3c5277ac7a",
      "tree": "1c8ef30309a0954a51a6b4c872f30ca399f064d2",
      "parents": [
        "a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 19:43:59 2018 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 19:43:59 2018 +0000"
      },
      "message": "Revert \"audioflinger: implement silenced capture for mmap\"\n\nThis reverts commit a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9.\n\nBug: 78118584\nChange-Id: Ie0da3dea445f2474c7a889c5f9919305c1c96d40\n"
    },
    {
      "commit": "a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9",
      "tree": "00e39e41acac99cc35c292c65c7bca60973fdd5a",
      "parents": [
        "9fc25229e0723c93b453ab34957f22a643e2b602"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 10 19:09:40 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 11 19:07:45 2018 -0700"
      },
      "message": "audioflinger: implement silenced capture for mmap\n\nImplement silencing of audio capture for idle UIDs for\nMMAP streams.\n\nUse audio HAL setMicGain() API to silence the mmap buffer for\nexclusive mode and when only one client is active in shared mode.\n\nAdd new MmapStreamCallback method onStreamSilenced() for AAudio\nservice to selectively silence streams from silenced UIDs in\nshared mode.\n\nBug: 72134552\nTest: manual\nChange-Id: I7c92ba0002bc5ba003c1a3c887edddf9ae53b538\n"
    },
    {
      "commit": "1f564acca544826daaf7dca44e39cec6016b82fd",
      "tree": "4adc2f15866c6c7bb47f7eb351aa251a94b1aaa2",
      "parents": [
        "a8975a7e857fd745fc88d226d86b53ae088eafb9"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Mar 29 13:53:10 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Mar 30 13:15:05 2018 -0700"
      },
      "message": "Audio V4: Propagate audio attributes to tracks\n\nThis patch has not functional changes.\n\nBug: 38184704\nBug: 69623109\nTest: play music and a audio\nChange-Id: Ide6ec7de4dbfab4af2653475901c3b3daee36e52\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "9ff780e58ff96ff98acaae4166bb218880bf9e73",
      "tree": "b54bf56b7f6ebc5950064d2908004abfe35d7162",
      "parents": [
        "2ca700737c14edc9141af170ee278853fd99fa87"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Mar 19 18:19:52 2018 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Mar 28 10:17:36 2018 -0700"
      },
      "message": "Support query microphones information.\n\nGet list of all/currently active microphones from hal.\n\nBug: 64038649\nTest: Manual Testing and Cts test\nChange-Id: Id39cae38ba040f9bc91571e713487f87c2eb67b0\n"
    },
    {
      "commit": "5ff7b0da6f51af96b530951c72fe06a711280282",
      "tree": "ce3e9dc8c66cb2a05da1b73c0e3906e0b7d3cbd6",
      "parents": [
        "7dccfdd8f0752db2717d554d0cf1925c34202639"
      ],
      "author": {
        "name": "haobo10173529",
        "email": "hao.bo15@zte.com.cn",
        "time": "Fri Mar 17 17:44:03 2017 +0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 16 17:35:03 2018 -0700"
      },
      "message": "AudioFlinger: Fix deadlock when createEffect_l fails.\n\nThe handle.clear() will cause deadlock if init of EffectHandle\nfailed due to NO_MEMORY in createEffect_l.\n\nTest: Monkey test, Instrumented test.\nBug: 75031792\nChange-Id: Ie0f38d76a66aeafe26903dda6690d1fe7fca4464\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": "b184c494bef0dd67d715732c27e059a46e723161",
      "tree": "b2ab9e45f2c63ab429d0dd1f1f1f54a25a3cb225",
      "parents": [
        "10164d0a52e59794bd5e63b63b6fbc160fdcb646",
        "55bb217cd1fea3e791d0d7cf73e09e27fed8c36e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 01 01:11:35 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 01 01:11:35 2018 +0000"
      },
      "message": "Merge \"Use start/finish app op API for mic use\""
    },
    {
      "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": "54c28999afa7834a8dbc6079a2707598a37db56f",
      "tree": "2677c29642cc1c92056ac37a802f4c53d51787f7",
      "parents": [
        "218f8e3bec0070731bff41513b19f64d481dad24",
        "db959740904eba27582feee48234463f3553b199"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Feb 26 18:34:17 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Feb 26 18:34:17 2018 +0000"
      },
      "message": "Merge \"Don\u0027t use cutils/Atomic.h\" am: 853996e7b2 am: 072aaa2e39\nam: db95974090\n\nChange-Id: I7f930bda6e51c0d4368747f8e4a0eac92e68b2fd\n"
    },
    {
      "commit": "f0c02ce99ccac584f4f4790390702aabc4d92c90",
      "tree": "f5aa741235215cd73df2025b8e42394486a52ae8",
      "parents": [
        "fa87fc3b31e273efe3a2f5090dcd9c283e414aa5"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Feb 23 14:53:55 2018 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Feb 23 15:02:39 2018 -0800"
      },
      "message": "Don\u0027t use cutils/Atomic.h\n\nTest: builds\nChange-Id: I56aea1dff5a2bd98d119eb374e7a28a12a20861c\n"
    },
    {
      "commit": "98e38191c37d3e324b34a6aafeef8e43366003ef",
      "tree": "349602f9c4d9dd7f4720328cc72f891f9515a0ce",
      "parents": [
        "7c9dbd5440e8119ca439e4b9315843bd348b991f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 15 18:31:53 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Feb 21 12:54:41 2018 -0800"
      },
      "message": "audioflinger: remove obsolete stream volume management\n\nRemove the ability to change stream volume globally (on all outputs)\nin audio flinger as this doesn\u0027t make sense when stream volume is\nmanaged per device.\n\nAlso, do not store stream volumes globally in audio flinger and apply\nthem when a new output is opened. The ground truth for stream volume is\nin audio policy so make sure stream volumes are systematically applied\nby audio policy when an output is opened according to the selected device.\n\nBug: 70332110\nTest: audio smoke tests\nChange-Id: I7180a428af53aafdee82aadbcaf284c028ac5554\n"
    },
    {
      "commit": "77881cd0213e2fb5619862cfd5b0aa2b9d4e3081",
      "tree": "0920071fb96e57d396b16eaf4166cbb460deb176",
      "parents": [
        "7dca8a83b7c6922a69e266aa9f2b5693a4d773a9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 09 16:01:31 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 09 16:09:20 2018 -0800"
      },
      "message": "fix audio port ID generation for new AudioTrack and AudioRecord\n\ncommit 0f4b3c544 introduced a problem in audio port ID generation\nby audio policy manager when a new playback or record track\nis created: audio flinger was passing a random port ID to\ngetOutputForAttr and getInputforAttr.\nThis caused audio policy to confuse several record tracks\nand fail to process capture stop properly.\n\nBug: 72628781\nTest: manual camcorder tests\n\nChange-Id: I55e18e2e6ccb9f69c36372d9bf9becf85e7c2614\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": "1de79cfe1031a1ea6b3ba9fd77ed8686c0b6f694",
      "tree": "75289e92ed05721a30dcf9761aaaa9e4a56f1204",
      "parents": [
        "c717e5e41ed866d3f156e15835150f898acba27d"
      ],
      "author": {
        "name": "rago",
        "email": "rago@google.com",
        "time": "Thu Feb 01 15:21:02 2018 -0800"
      },
      "committer": {
        "name": "rago",
        "email": "rago@google.com",
        "time": "Thu Feb 01 15:21:02 2018 -0800"
      },
      "message": "Fixes related to typo in audio.h\n\nBug: 64038649\nTest: Manual Testing and CTS tests.\nChange-Id: Id2650638f789d85116d780d87b19debd2a13a737\n"
    },
    {
      "commit": "8ec3d5d415776cf37398b6cf788a3d4be2335a73",
      "tree": "a09aa5cf817e0f81987df05d71c3f0965c011a05",
      "parents": [
        "ab0486cbc9d0cc730be7e294af83865b1ad47b10",
        "e9ebcdbb0580bd4a75f4530b957b1859e535c028"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 30 00:30:06 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 30 00:30:06 2018 +0000"
      },
      "message": "Merge changes I6bcc87c6,If633e677\n\n* changes:\n  Revert \"audio policy: refactor audio record APIs\"\n  Revert \"audio flinger: move record permission checks to audio policy service\"\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": "46a76fa5ffb88dbde2c67335dbc5cf20b75b10b6",
      "tree": "7215e85bae943107de3bf07537c28c98216f5690",
      "parents": [
        "6e075b43b0ba324a97fc0f89ef65196ed25be671"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jan 05 10:18:21 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Jan 26 17:16:16 2018 -0800"
      },
      "message": "Add support for getting all available microphones characteristics.\n\nAdd MicrophoneInfo class in native side and native logic for supporting\nquery all available microphones.\n\nBug: 64038649\nTest: Run test and check the print log.\nChange-Id: Ic0a9cce55a1265a66ba08fe81b56b56cb88ba42f\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": "03570a65a46bd0d577aa4c860c4f32f4abf79c7c",
      "tree": "80f3fe537f1edeb95bd37a5a66090ce3b4f1cd1e",
      "parents": [
        "70068e8e49f3467488550d88d6130f9e00bb0624",
        "6f248bb57a6a0febe8fc0f253acc86289237ace8"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 24 20:28:46 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 24 20:28:46 2018 +0000"
      },
      "message": "Merge \"AudioFlinger: Allocate client memory based on total device memory\""
    },
    {
      "commit": "6f248bb57a6a0febe8fc0f253acc86289237ace8",
      "tree": "5dcc5fe0729c85f7ef39ac298906acea444b2ae2",
      "parents": [
        "2917aa469abba347a1ab1e6fa766d62721182788"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 23 14:04:37 2018 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 23 22:12:12 2018 -0800"
      },
      "message": "AudioFlinger: Allocate client memory based on total device memory\n\nTest: Debug logging\nBug: 64161002\nChange-Id: I7156748e5678c3232d1f1672439d11aecf3f458b\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": "65a438c6429c7f46cb0ab056c7f672ea0aa9e7f5",
      "tree": "d2b98e3247afd27d7272d23b226dc4e10fb8f5f9",
      "parents": [
        "2917aa469abba347a1ab1e6fa766d62721182788",
        "f4ddfefc8ba59a8486d91826154cc9447821409e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 20 04:09:36 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 20 04:09:36 2018 +0000"
      },
      "message": "Merge \"Don\u0027t record audio if UID is idle - media framework\""
    },
    {
      "commit": "4e1af9fc9c1108d4514e92774f750bcd434dbbcc",
      "tree": "03dc781c49ae6b37c4661c591ece2c5a4eed8cfe",
      "parents": [
        "a11f9357196db29e6f8f05b91334524de4f3207e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jan 03 15:54:35 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jan 18 19:48:46 2018 -0800"
      },
      "message": "aaudio: implement sessionId for effects\n\nIf a sessionID other than AAUDIO_SESSION_ID_NONE is requested\nthen legacy data path will be forced.\n\nSessionID is implemented for MMAP data path but not used.\nIt is easier to implement it now then try to figure\nit out later.\n\nBug: 33268927\nTest: test_session_id.cpp will be moved to CTS when stable\nChange-Id: I3ea67f57c1cbe24a512980f1352b917ab3cb6387\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": "e56fc185471f2d678af96a120cfd899bd6c8a42d",
      "tree": "d89bc3ac6ac55d1f3690adaf640aeafdaabe8792",
      "parents": [
        "48679ec884b9c65d401fda69cfaf005c8b8be533",
        "311b604047ca1c5aea85146502667a202e8a5e21"
      ],
      "author": {
        "name": "Mateusz Kaplon",
        "email": "mateusz.kaplon@sony.com",
        "time": "Thu Jan 11 23:09:59 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jan 11 23:09:59 2018 +0000"
      },
      "message": "Merge \"AudioFlinger: improve purgeStaleEffects_l thread-safety\" am: 46d5355af9 am: 76630b8119\nam: 311b604047\n\nChange-Id: If74df49e6dd7fec4186fc983b2457d416ec480fa\n"
    },
    {
      "commit": "46d5355af96d582b81d6fae0ff1d3ceb745863f5",
      "tree": "cf4bceb75726ea1b5de50563afe30e355e4b351b",
      "parents": [
        "1d01cf654baab4f1d6c3266df822cac6f51a67f3",
        "2a6e1b0211e3337931c65a33e07c344719ca4328"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 11 22:29:47 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 11 22:29:47 2018 +0000"
      },
      "message": "Merge \"AudioFlinger: improve purgeStaleEffects_l thread-safety\""
    },
    {
      "commit": "49f36ba3b4624ddd3d7efa34c95128a73bda6208",
      "tree": "9427c132f2f998021c1ae06078174c3396bc5f54",
      "parents": [
        "b3ded702104331ae35597eef28f670e407a1b519"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 06 13:02:02 2017 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 22 20:05:46 2017 +0000"
      },
      "message": "Logs use either %#x or 0x%x for flags, channel mask, format, device\n\nPreferred is %#x but 0x%x is also permitted because it is widely used.\n\nThe benefit is that it reduces ambiguity and possible confusion,\nwithout needing to read the source code for each log.\n\nTest: builds OK and logs are less ambiguous\nChange-Id: Ie2404e071d22278b8bba1e094ad336887844212c\n"
    },
    {
      "commit": "896c9670846cc66d54ba86a978109817818c3929",
      "tree": "fbc235a850cab5e27e0adffe64a3a63a1a0c7da3",
      "parents": [
        "b1cc36b5d52de7cb3d78426d41dee87f25d7164a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 08 14:08:45 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 14:29:33 2017 -0800"
      },
      "message": "audioflinger: fix recursive mutex locking\n\nCommit 3e1acc0c5 introduced a possible recursive mutex locking when\nan AudioRecord creation request with FAST flag is rejected by\nAudioFlinger after the input was opened by audio policy.\n\nBug: 70388312\nTest: AudioRecord CTS, Audio smoke tests\nChange-Id: Ifc835fddd7e819600a834a8d058a9c98bddbee4e\n"
    },
    {
      "commit": "f14db3c3ebc1ea29b3eb5b7e9b944cabcb5f83ff",
      "tree": "ebe89d037006cc16ed8a9284563a475b6eee3348",
      "parents": [
        "ea5523d88c6dc9662621db5fc62bf50eff0fe4ba"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 08 14:20:36 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 12 14:28:41 2017 -0800"
      },
      "message": "Revert \"Revert \"refactor AudioRecord and AudioFlinger openRecord()\"\"\n\nThis reverts commit 0aa3c6eba07f987fe84b5fa450274a8e730971e3.\n\nBug: 70388312\nTest: AudioRecord CTS, Audio smoke tests\nChange-Id: I45394bccf82b922aa2b68fee3e02afc280f6729c\n"
    },
    {
      "commit": "0aa3c6eba07f987fe84b5fa450274a8e730971e3",
      "tree": "69c1c59218c8ae0e5165f71a392a8666c8b74ad6",
      "parents": [
        "3e1acc0c58b337dec4054d78c28b48b2e77e0784"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 08 18:13:22 2017 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 08 18:18:50 2017 +0000"
      },
      "message": "Revert \"refactor AudioRecord and AudioFlinger openRecord()\"\n\nThis reverts commit 3e1acc0c58b337dec4054d78c28b48b2e77e0784.\n\nbug: 70388312\n\nChange-Id: I6782d6eceeece1bad998b02af26c0119da70a13d\n"
    },
    {
      "commit": "3e1acc0c58b337dec4054d78c28b48b2e77e0784",
      "tree": "effae4bc8d462d03cb0bc1507ac0222ac47c90eb",
      "parents": [
        "eda72c27cab52c41016d8ce138438a2d59973231"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 01 16:07:37 2017 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 05 17:33:35 2017 +0000"
      },
      "message": "refactor AudioRecord and AudioFlinger openRecord()\n\nRefactor the mechanism used by audio record tracks to query and\nattach to an input mixer/stream in audio flinger. This will:\n - reduce the number of binder transactions needed to create a record track\n - move sample rate, framecount and flags validations to audio server side\n - move audio session allocation to audio server side\n - prepare restriction of certain binder transactions to audioserver only\n\nAlso:\n - renamed openRecord() to createRecord() for consistency with AudioTrack\n - make AudioRecord mStatus update consistent when calling default\n contructor + set() or constructor with arguments\n - make AudioClient, CreateTrackXXX and  CreateRecordXXX classes derive\n from Parcelable\n - restore audio session ID validity check in AudioFlinger::createTrack()\n\nTest: CTS tests: AudioRecordTest, AudioRecordingConfigurationTest, AudioPreProcessingTest\nTest: manual test for capture use cases: camcorder, OK Google, VoIP calls\nChange-Id: I72edaa7ddef1da11c77df21e88378e3aa9012d58\n"
    }
  ],
  "next": "21da647792c0b78ab3943be0f32066015d5e8c34"
}
