)]}'
{
  "log": [
    {
      "commit": "18824a94a8114661456a103465b291fed336ab39",
      "tree": "2a38dd71236c0f41d50e69ebc38d9dbbf0934a74",
      "parents": [
        "9ed54cdf4d8970bdeb88e4488dabb56e1d6c79b7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 21 14:45:41 2019 -0700"
      },
      "committer": {
        "name": "Bryan Ferris",
        "email": "bferris@google.com",
        "time": "Fri Dec 20 11:16:25 2019 -0800"
      },
      "message": "AudioFlinger: Clear effect_uuid_t in case of short read\n\nBug: 139417189\nTest: native test, see bug\nMerged-In: I9ef0e58e2e73089eb9a347d5357e040ac69bbdd1\nChange-Id: I9ef0e58e2e73089eb9a347d5357e040ac69bbdd1\n"
    },
    {
      "commit": "6ede98f9b3e3e1988f401d79b625ead653027ccc",
      "tree": "2306e3b551752f70ec01a6d8ed87824743c2ef81",
      "parents": [
        "e0092766d214720c1fd22b8c08ccc7ceeaf4a700"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:50:30 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:55:25 2019 -0700"
      },
      "message": "audioservice: add RTT mode observer\n\nEnable audio capture by the Assistant when RTT is ON during a call\nsimilarly to when an accessibility service is in the foreground.\n\nAlso remove log when permission checked for hotword\nand audio output capture fail as those checks are now done\nsystematically.\n\nAlso do not check permission to bypass interruption policy if\nbypass flags are not set.\n\nBug: 132976361\nTest: use voice input during a call with RTT enabled.\nChange-Id: Iff45b0816dac889262ec29ea115f74dea4dc6b6d\n"
    },
    {
      "commit": "68f7b18e8edaabf6c6c67b350d3126c11ba590ff",
      "tree": "d4e8c5fe2157ef8843fb31baa6b49744ca294254",
      "parents": [
        "d4e2ab1785d813aa336479a57de634f30fb13a92",
        "429844193f7149f3b642f1f260a7f20398eb3778"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat May 11 02:47:56 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat May 11 02:47:56 2019 +0000"
      },
      "message": "Merge \"audio policy: add permission check for privileged attributes flags\" into qt-dev"
    },
    {
      "commit": "b09f621af65848cb1c9336091d857ba2a8e6fdf8",
      "tree": "d0affd474b5da86022507ff88fbb82f9a748b4da",
      "parents": [
        "b14e4295b2cd6aebb77d67108dc6b639f24d25d2",
        "e2f34be1b70a564a9e7866934f0b626e98be999f"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri May 10 23:20:58 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 10 23:20:58 2019 +0000"
      },
      "message": "Merge \"APM: uid-device affinity: fix for multiple concurrent apps\" into qt-dev"
    },
    {
      "commit": "429844193f7149f3b642f1f260a7f20398eb3778",
      "tree": "96fc240567b6c528242f4a88582b587e7ba09c48",
      "parents": [
        "459e59820f8914a10c1d015fb4fa09b723cacaca"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 09 17:57:03 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 10 15:38:12 2019 -0700"
      },
      "message": "audio policy: add permission check for privileged attributes flags\n\nAdd check for privileged permission if attributes\nflags BYPASS_INTERRUPTION_POLICY or BYPASS_MUTE are set.\n\nBug: 131873101\nTest: Manual smoke tests for audio playback.\nTest: Emergency cell broadcast in\nChange-Id: I073cf669f606f0d081ff5c8d19f39b5e12efe297\n"
    },
    {
      "commit": "e2f34be1b70a564a9e7866934f0b626e98be999f",
      "tree": "e57d0b82ebd689f5734c8bedd84ecbe091d3dd72",
      "parents": [
        "3350096bf8e52b2d96f7b7ba95642d92c05e8f09"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu May 09 12:31:06 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri May 10 09:52:56 2019 -0700"
      },
      "message": "APM: uid-device affinity: fix for multiple concurrent apps\n\nAudio mix rules that contain both a match and exclude for a uid\n  or usage are ignored for routing evaluation. The implementation\n  of the uid-device affinity caused uid matches and exclusions to\n  be added to any mixes, causing previously valid mixes to be\n  discarded in the routing logic.\nThe fix consists in implementing the uid-device affinity by only\n  applying uid exclusions on mixes that:\n  a/ are compatible with the concept (mixes of players that are\n     render only),\n  b/ do not route to the selected devices\n  c/ do not have a uid match rule (such mixes are already exclusive\n     to the uid to match)\n  d/ do not already have a uid exclusion for the uid\nFix removeUidDeviceAffinities() that skipped the wrong mixes.\n\nBug: 124319394\nBug: 131180578\nTest: atest AudioHostTest#testUidDeviceAffinity\nChange-Id: I813c4cfb15956e56599740948775c32562266c21\n"
    },
    {
      "commit": "2a49bc31d02b65c412b2af17b09eda90291606e9",
      "tree": "bccc276429e9b6b0985619e1f259fe5c1254892f",
      "parents": [
        "e6f3293b77b38867f553987e24dc82ee004071af"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 09 08:59:07 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu May 09 09:13:26 2019 -0700"
      },
      "message": "audioclient: Release a recorder when AudioRecord dies\n\nWhen AudioRecord object is destroyed, it must unregister\nwith AudioManager so it removes the tracker from\nthe tracking list.\n\nBug: 123312504\nTest: start and stop audio recording, check \"dumpsys audio\"\nChange-Id: Ida71512cb811d7602da349a58a91c95111078ef4\n"
    },
    {
      "commit": "ed6032042bad063d7907c35d45a062f68eb2aeca",
      "tree": "9f64b445b5289ad813795cb108ffc4da11108685",
      "parents": [
        "12d07c503a8ec317b4d5e7aef49036a1c36600a8",
        "eb6e65034b3ac0979bfe8b5161d57cc279a3b945"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 01 16:47:57 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 01 16:47:57 2019 +0000"
      },
      "message": "Merge \"AudioTrack: Fix callback timing if less than one AF mixer period.\" into qt-dev"
    },
    {
      "commit": "eb6e65034b3ac0979bfe8b5161d57cc279a3b945",
      "tree": "1b0869da92a82e2038f053d29258458e1db79d4c",
      "parents": [
        "2f7a6072bbafd4faba8cbaf170d3cb72e37e3454"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 29 13:47:40 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 30 10:52:12 2019 -0700"
      },
      "message": "AudioTrack: Fix callback timing if less than one AF mixer period.\n\nCallback may wait nearly the entire period when double buffered\nwhich can lead to random glitches.  Limit this to half the mixer period.\n\nTest: aaudio test write_sine_callback -pl -n1 -r44100 -s20\nBug: 129545307\nBug: 131601263\nChange-Id: I6b7478728fe7ead570251662ee48a8f8adad0d5d\n"
    },
    {
      "commit": "09f1ed2cb4479c93859557f5b4d40e1c3732f6f2",
      "tree": "27f2c1c23755b45acdfd0832bb9e493f6b890aaa",
      "parents": [
        "2f7a6072bbafd4faba8cbaf170d3cb72e37e3454"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 24 17:45:17 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 29 09:59:31 2019 -0700"
      },
      "message": "audio: improve audio routing callbacks\n\nDo not force audio device changed callback when the client\n(AudioTrack or AudioRecord) registers to AudioFlinger but only when\nit starts playback or capture. Doing so prevents a spurious callback\nhapping at registration time where a stale device\n(previously selected by AudioFlinger thread) but irrelevant to this\nclient is indicated. This causes a disconnection of AAudio streams\ndespite no real device change.\n\nBug: 128630993\nTest: CTS: android.nativemedia.aaudio.AAudioTests, android.media.cts.RoutingTest\n      CTS Verifier: Audio Input/Output Routing Notifications Test\n\nChange-Id: Ia7f1d11490989b0287c97479466c1c07a223aab3\n"
    },
    {
      "commit": "66ea39290308e4851a5c6fe149e576b7d6249e5f",
      "tree": "f0fe4950c8d77207be8ce281623f9345e448e478",
      "parents": [
        "09940bbc0e7eb687c1b08c1ba0252852752f68ab",
        "2996f67767ff90617cc5f7801c7bd8dc67c9dd66"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 25 18:01:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 25 18:01:03 2019 +0000"
      },
      "message": "Merge \"AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs\" into qt-dev"
    },
    {
      "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": "cf3b71546d5bb04ba45d1d784108f1681f75c827",
      "tree": "1adddca53fd68c81789997a7f6636477209dadac",
      "parents": [
        "8263e3519b6801f019e471efe4a6045b7046e4d3"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 19 18:29:21 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 19 18:39:40 2019 -0700"
      },
      "message": "AudioTrack: Fix timestamp spam\n\nTest: logcat check during Photos playback, seek, etc.\nBug: 130586209\nChange-Id: I71c5e6b83f94485be8f2e9bb164314756a16c87a\n"
    },
    {
      "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": "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": "654438952d760d80986270db81d498f1b6e110b4",
      "tree": "3b3da8dedee329a89f54804513fc39aad0d92061",
      "parents": [
        "e46a14777671ec310b35aa1b0a90510f29bf8085",
        "95e3768e1936673cacf185c721f9b2c117a94a0a"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Tue Apr 16 19:07:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 16 19:07:03 2019 +0000"
      },
      "message": "Merge \"AudioFlinger::Thread ensure proper add / sub\" into qt-dev"
    },
    {
      "commit": "95e3768e1936673cacf185c721f9b2c117a94a0a",
      "tree": "993e603d53a6bf44744b94a394de2c790d81ed2f",
      "parents": [
        "8d14f5ccff2440f39630965486e9601ab6d007b6"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Fri Apr 12 11:13:36 2019 -0700"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Mon Apr 15 14:11:36 2019 -0700"
      },
      "message": "AudioFlinger::Thread ensure proper add / sub\n\nBug: 126772841\nBug: 130371615\nTest: 24 hours recording with 64 bit audioserver\nChange-Id: I71305448ee194d1cc325ab238f1681aee93ab18d\n"
    },
    {
      "commit": "e9a90980ea48c3bb95d6aba755b4bb2095ba3e80",
      "tree": "d7a5ed3f900a75222ff0dec565292a9eada84f46",
      "parents": [
        "fa36d4b242bd0dcd2f1ce2ea6e0f838b7191a042",
        "393f0e05e3fa7351c81a470e5bd841451bcc13ae"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 11 01:47:12 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 11 01:47:12 2019 +0000"
      },
      "message": "Merge \"audiopolicy: fix attributes match helper function\" into qt-dev"
    },
    {
      "commit": "4066749eac05f7b00bbeb2242f3136409c247338",
      "tree": "33c0cec025f755055974bc085520c6477b51b8fe",
      "parents": [
        "04a1833ef4a728ec077ed4680a6624e55dfe754c",
        "3b8c633f3907218cda99f1f65e633b76419640bf"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 10 22:28:48 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 10 22:28:48 2019 +0000"
      },
      "message": "Merge \"AudioTimestamp: advance first timestamp time after start if stale\" into qt-dev"
    },
    {
      "commit": "393f0e05e3fa7351c81a470e5bd841451bcc13ae",
      "tree": "47d865b1e143a717167b2fff0dd6da2e30b3966b",
      "parents": [
        "698d353587d6d0563a6451b2d701358e6cb4496e"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Apr 10 09:09:08 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 10 12:30:39 2019 -0700"
      },
      "message": "audiopolicy: fix attributes match helper function\n\nRegression caught on Attributes referred by their flags only\n(like BT SCO).\nClient may have more flags than the product strategy, checks\nto be done on all the flags of the product strategy are requested\nby the client.\n\nBug: 130284799\nTest: make\n\nChange-Id: Ie8d41a592342bc0a7a0326f9766e7e7503154e62\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "d962630103958576ff270b2994a8e181a0017b42",
      "tree": "bc6140f248e70010614f4cc68bf98bc184ebd0b1",
      "parents": [
        "81526c7e3e632e6e183b9c94ce554f701e4cfc6d",
        "98731a2c2559d9986b0892c6a8c8ffca17cd68fc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 10 02:35:52 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 10 02:35:52 2019 +0000"
      },
      "message": "Merge \"AudioTimestamp: Use current time when data pipeline is empty\" into qt-dev"
    },
    {
      "commit": "3b8c633f3907218cda99f1f65e633b76419640bf",
      "tree": "1b886e30ef072a48d9d99cc3adac29a82d102384",
      "parents": [
        "98731a2c2559d9986b0892c6a8c8ffca17cd68fc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 03 19:29:36 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 09 15:49:14 2019 -0700"
      },
      "message": "AudioTimestamp: advance first timestamp time after start if stale\n\nTest: Photos, File playback, AudioTrackSurroundTest#testPlaySineSweepBytes\nBug: 113294730\nBug: 118506063\nBug: 119895849\nBug: 120631792\nChange-Id: I83ec1e4c0ae2318fb69744a6265663a50682c485\n"
    },
    {
      "commit": "98731a2c2559d9986b0892c6a8c8ffca17cd68fc",
      "tree": "3cd6a839c5eb38b181a19c59ae008ae0c4186bee",
      "parents": [
        "0e5a1b3bb64d9a5d38903770e018379856401efd"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 08 19:19:07 2019 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 09 15:27:46 2019 -0700"
      },
      "message": "AudioTimestamp: Use current time when data pipeline is empty\n\nHandles change in Q, where we do not return an invalid kernel time\nin the extended timestamp when there is a reported error from the HAL.\n\nTest: Photos, File playback, AudioTrackSurroundTest#testPlaySineSweepBytes\nBug: 113294730\nBug: 118506063\nBug: 119895849\nBug: 120631792\nChange-Id: I90f2c7c314baa474c3dd3a24042f1d4b8bc0a12b\n"
    },
    {
      "commit": "06c6b9a0f9c964270d78d62a08e964d9212faa0c",
      "tree": "b10f5e347742cddc2e4fc2c188c7099c5b72982b",
      "parents": [
        "0e5a1b3bb64d9a5d38903770e018379856401efd"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 03 16:46:37 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 04 18:06:37 2019 +0000"
      },
      "message": "fix AudioAttributes matching rule in AudioProductStrategy\n\nThe matching rule on audio attributes flags must be that ALL flags\nset in the reference attributes are present in the compared attributes\nand not just some flags.\n\nBug: 129721367\nTest: change volume in Play Music\nChange-Id: I6b5ada937aa169dbf1b0315d56172ae3b7bb4f47\n(cherry picked from commit c0c6074f55a0775ff127814c58c56a748e1a1b50)\n"
    },
    {
      "commit": "b99cc75f01c8e4d76295f3efcd768ebd9d8942c3",
      "tree": "b7c3e27a797971702af7161fdf1a682fa9a9c2a5",
      "parents": [
        "68646ba64107a19ac0d1af781ddd0b1edd2ed57a"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Mar 21 20:52:24 2019 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Mar 22 17:21:33 2019 -0700"
      },
      "message": "Add application wide capture policy\n\nApps were previously forced to set their allowed capture policy from\neither their manifest which is not flexible or from each track which is\na very fine grain but difficult when using libraries like exoplayer.\n\nThus add an application level policy set with AudioManager.\n\nTest: atest android.media.cts.AudioPlaybackCaptureTest\nBug: 111453086\nChange-Id: Ic890b5b041affea757fbd3f2707ff2ce18771828\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "36b17553b2c3aad4d8f600edd2e82f9a583ee05a",
      "tree": "b07a90eaf6bcba6f06fd56ab3976d1c71c7fd712",
      "parents": [
        "791d3370830b8e22b8bbaf41c3de900de48d2be3"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Mar 07 18:48:07 2019 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Mar 22 17:21:30 2019 -0700"
      },
      "message": "Introduce a system APC with its corresponding opt-out\n\nFor system application with the new permission CAPTURE_MEDIA_OUTPUT, or\nCAPTURE_AUDIO_OUTPUT, allow to capture the audio of playing apps that\nallow it.\n\nTest: adb shell audiorecorder --target /data/file1.raw\nTest: atest android.media.cts.AudioPlaybackCaptureTest\nBug: 111453086\nChange-Id: I5bfca51e48992234508897c595a076d066db26b2\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "1234008771662d2b250d6d4972adb04de963fb0d",
      "tree": "d050c75b3935ed9d20676312df0e7cd1d94cd13c",
      "parents": [
        "60c73a445b632cc2e233b1a275efeee7414a41a4"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Tue Mar 19 09:35:05 2019 -0600"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Thu Mar 21 21:51:49 2019 -0600"
      },
      "message": "API changes in MicrophoneDirection\n\nBug: 128523813\nTest: Build, Testbed app\n\nChange-Id: I7b5ee8ba4eec1090866d8aef891a98d50cd09cc5\n"
    },
    {
      "commit": "28da31bbda1f969924c25f72e244a33debfde779",
      "tree": "3e1fb7d0a1fe0339b54fa02a1a9b0657f395e5c8",
      "parents": [
        "9c971b7f3908eb033a7a7204047b9f64c23ce644",
        "366b643d1e674684d7095cdbe36b6791e842fdbc"
      ],
      "author": {
        "name": "Paul Mclean",
        "email": "pmclean@google.com",
        "time": "Thu Mar 07 23:06:07 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 07 23:06:07 2019 +0000"
      },
      "message": "Merge \"Surface MicrophoneDirection API in MediaRecorder\""
    },
    {
      "commit": "8ebc68057e12e10a1adf644e12f10ff593576a07",
      "tree": "a5c1079714ff1edd89f19b1b2974c6de76a4ca86",
      "parents": [
        "62683a3fad1d6d699d5175a0e3e1ed9743900b5c",
        "ca35367b3d176f234bf955d2df95a45126b02287"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 07 18:45:35 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 07 18:45:35 2019 +0000"
      },
      "message": "Merge \"Clean up AudioTrackThread and AudioRecordThread constructor\""
    },
    {
      "commit": "62683a3fad1d6d699d5175a0e3e1ed9743900b5c",
      "tree": "40814aef4a9abdb5aa03c9ecefbdc04644ff8791",
      "parents": [
        "89eb0c7b6c5bc06cd7e50c3ecb86dce4bd936ea2",
        "d097981afa129353c42660869e284ae1784506c2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 07 17:49:32 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 07 17:49:32 2019 +0000"
      },
      "message": "Merge \"AudioFlinger: Send Thread statistics to mediametrics\""
    },
    {
      "commit": "e229cd12aff153d65a7cdb44ef5f1283c17aa976",
      "tree": "0606395c1d4fc44a690d72cf7ffc0376c1e683c3",
      "parents": [
        "943c94e7fd0ee0246652bf8225d5db8f795dbb43",
        "ea8fa7a5eea3d55c75982787571d70a70fa5280a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 07 03:53:38 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 07 03:53:38 2019 +0000"
      },
      "message": "Merge \"Refactor adjust channels buffer provider.\""
    },
    {
      "commit": "ea8fa7a5eea3d55c75982787571d70a70fa5280a",
      "tree": "8e0a6e45768fee1146cfdac9a06471cb0958ef50",
      "parents": [
        "bb08e4d99b0915f4b25fefeda9c833c96ceb785a"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Feb 22 14:41:50 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Mar 06 16:54:23 2019 -0800"
      },
      "message": "Refactor adjust channels buffer provider.\n\nCombine adjust channels buffer provider and adjust channels non-destructive\nbuffer provider.\nWhen contracting mono + haptic channels to mono, do not use\nadjust_channels to avoid mixing haptic channel into audio channel.\n\nBug: 125915810\nTest: play audio-haptic coupled files\nChange-Id: I39916a3e0628a44ed4a148c265564af7135a2176\n"
    },
    {
      "commit": "d097981afa129353c42660869e284ae1784506c2",
      "tree": "c035d2a90097094a87c153fe97b3b5b5ba766c7a",
      "parents": [
        "f03cb213d22b238cbd0b72ded36048f0549f921f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 21 15:51:44 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 06 14:50:35 2019 -0800"
      },
      "message": "AudioFlinger: Send Thread statistics to mediametrics\n\nUnify with AudioRecord and AudioTrack mediametrics.\n\nTest: mediametrics dumpsys after record, playback\nTest: CTS Audio(Record|Track)Test#testMediaMetrics\nBug: 114112762\nChange-Id: I6eb554cbf6ff760f9dea568abd3cde82366b51a7\n"
    },
    {
      "commit": "366b643d1e674684d7095cdbe36b6791e842fdbc",
      "tree": "1eaa875ba8bb14b2def251f7f0bdd27fce37cca5",
      "parents": [
        "e1e9cad4d0c7c9825b7f29ebc082dfcbdcace25c"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Mon Feb 25 10:35:51 2019 -0700"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Wed Mar 06 14:55:55 2019 -0700"
      },
      "message": "Surface MicrophoneDirection API in MediaRecorder\n\nBug: 126185930\nTest: MicrophoneDirectionTest testbed.\nChange-Id: I6024ede50999aa751d63f272a087f578b8aea93d\n"
    },
    {
      "commit": "ca35367b3d176f234bf955d2df95a45126b02287",
      "tree": "af6bf618e16955aa03ecaf6cb4326affefd3c830",
      "parents": [
        "eb46cf924deae98c5edaad20da3bd123217ab947"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 06 11:54:38 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 06 11:54:38 2019 -0800"
      },
      "message": "Clean up AudioTrackThread and AudioRecordThread constructor\n\nRemove unused argument.\n\nTest: compile\nChange-Id: I1f589941686ddcdff166298f8bfe0564b147c137\n"
    },
    {
      "commit": "eb46cf924deae98c5edaad20da3bd123217ab947",
      "tree": "0e451ec457ded176ce8fc4bf6dcef686832c5a10",
      "parents": [
        "bb08e4d99b0915f4b25fefeda9c833c96ceb785a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 06 10:13:38 2019 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 06 10:15:57 2019 -0800"
      },
      "message": "AudioTrackThread, AudioRecordThread: enable Java calling\n\nWhen an AudioTrack or AudioRecord is created by system server,\nif restoreTrack_l() or restoreRecord_l() is called from AudioTrackThread\nor AudioRecordThread, and that then calls audioserver through binder,\nwhich then calls a Java service, binder recursion may call Java\non the original calling thread.\n\nTest: bluetooth calls don\u0027t crash\nBug: 126948865\nBug: 127619936\nChange-Id: I41fcb666d07c4ab985f5590e40e0c310709e786d\n"
    },
    {
      "commit": "cfe173220a3100c517e688e1bba0ff2da82a7b1b",
      "tree": "872a3d89ef3d021575d2719a02bf19e729c281ec",
      "parents": [
        "a6d44870d8edeffe8b6db3261d04b9e48fb11fd3"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Nov 07 13:41:29 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 26 17:47:46 2019 -0800"
      },
      "message": "audiopolicy: add Volume for attribute and callback native APIs\n\nChange-Id: I259de42452d2802aa8dbd553f56040dea6995a93\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n\nBug: 124767636\nTest: make\n"
    },
    {
      "commit": "4b2018b0c0b65b1f6e20e571bbaf0e8984dccc06",
      "tree": "94339667fc464ad0bca7be4f07cf9148bf720b3f",
      "parents": [
        "63c0f36d2ba1b752a040b47d108f4cc907da227b"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Nov 07 11:18:59 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 26 12:45:57 2019 -0800"
      },
      "message": "audiopolicy: add Volume Group introspection APIs\n\nChange-Id: Ib02900bde69ee24685d9d374c0e5f73d33fa59e7\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n\nTest: make\nBug: 124767636\n"
    },
    {
      "commit": "251c7f0a9dc35dd3024fb4b42d27454abbd89d50",
      "tree": "fb33a7ac50d1fa2e850f75aae4ec78dd375c14ca",
      "parents": [
        "a666d61efbe74594e9d441621d20bef8f9def26e"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Nov 07 10:41:08 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 25 14:47:46 2019 -0800"
      },
      "message": "audiopolicy: engine: Add Volume Groups to common Engine\n\nThis CL adds the concept of Volume Group to the engine.\nIt generalizes the volume management today controled by stream types\nand hard coded into AOSP.\nThe goal is to control the volume per attributes, being able to define\na group of attributes that follow the same volume curves.\n\nIt intends to replace the concept of aliases in AudioService.\n\nBug: 124767636\nTest: build\n\nChange-Id: Icd079374cc1680d074b01836eca0bceb0b0c5247\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "7a466f532a7722f9f02331bdca7602a93420ad7c",
      "tree": "eb8717adf01adcac87e5e9c4f042d83bda03073c",
      "parents": [
        "d3b8fa2965cace7c75389727740551975ca5ad7f",
        "b378d62fbce3536d03be62410e97a5382b60417f"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Wed Feb 20 03:09:17 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 20 03:09:17 2019 +0000"
      },
      "message": "Merge \"Allows start/stopAudioSource from non-system service\""
    },
    {
      "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": "4463ff504dc0c13116f252466bdbba61e0b32a81",
      "tree": "59daf000cec82575573c42de2cba9809cc6f0bf2",
      "parents": [
        "ba2cf0f2e39d8302babbda3a98127daaf2ea7376"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 07 13:56:09 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 07 18:34:25 2019 -0800"
      },
      "message": "AudioSystem: more locking work on audio device callback\n\ncommit 24a9fb0d left some locking issues with management of device\ncallbacks in AudioSystem, AudioTrack and AudioRecord.\n\nThis change makes that the AudioSystem mutex is not held when\ncallbacks are called into AudioTrack and AudioRecord removing cross\ndeadlock risks and allowing AudioRecord and AudioTrack to hold their\nmutexes while installing and handling the callbacks\n\nTest: CTS RoutingTest, AudioTrackTest, AudioRecordTest\nChange-Id: I5d17e77ca26220092deb0bd6e5a33dc32348d460\n"
    },
    {
      "commit": "2ec0674146dc0a9d885a18067a7a5c84786b59ad",
      "tree": "8ec5b4eadfad32fe1b4214acba36c9570300c590",
      "parents": [
        "307b00e15663d205908f3dae4003228facd22b0b",
        "24a9fb0d4a3acd5d0c2ef96147650464a91eb8d9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 07 15:57:21 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 07 15:57:21 2019 +0000"
      },
      "message": "Merge \"libaudioclient: force onAudioDeviceUpdate on registration\""
    },
    {
      "commit": "24a9fb0d4a3acd5d0c2ef96147650464a91eb8d9",
      "tree": "a96ff333beb672fc64379e4e35dc1e67998b6b43",
      "parents": [
        "a6d5e8b33ce1f7e3133d7474ac3bed3550c309a8"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Fri Jan 18 17:51:34 2019 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 07 02:53:09 2019 +0000"
      },
      "message": "libaudioclient: force onAudioDeviceUpdate on registration\n\nThis CL forces the onAudioDeviceUpdate on register event.\nIt also fixes the loss of callback on AudioTrack or AudioRecord\nclient if received before ioHandle is assigned.\n\nTest: audio smoke tests\nTest: CTS for AudioTrack and AudioRouting\n\nChange-Id: I119b5c407da68a5b55162550bea5fa7e724165d1\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "b378d62fbce3536d03be62410e97a5382b60417f",
      "tree": "89e9b2196170c7659ae9ff2b7128896c1a7e15d5",
      "parents": [
        "7b6fe4db7e6c5d4ef189c954e716250dea303054"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Wed Feb 06 16:27:46 2019 -0800"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Wed Feb 06 16:27:46 2019 -0800"
      },
      "message": "Allows start/stopAudioSource from non-system service\n\nA media application takes advantage of HwAudioSource would call\nstart/stopAudioSource directly.\n\nBug: 112161027\nTest: Launch FM Tuner application\nChange-Id: Ic4c23f51010dbb3f2226d9d2200e11feb908867b\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": "1086b05f7d3cb296d55facd88621f16c2737cf33",
      "tree": "58254c1bc6f07d5d9f8645ae32b131239e74ffa8",
      "parents": [
        "0435a4dcb66366da53cf4544c941a40ed2b9c2bd"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Dec 18 17:52:55 2018 -0800"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Tue Feb 05 17:19:46 2019 -0800"
      },
      "message": "Add MIX_ROUTE_FLAG_LOOP_BACK_RENDER\n\nTest: adb shell audiorecorder --target /data/file.raw\nBug: 111453086\nChange-Id: I276a10921aac9f5e709c0a44c661cbbdc94e49db\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "58d4be5a5a5d24f18b7a207148c7caa317fef366",
      "tree": "37e0a5e790187815757bd906c7767cfcea0e1f74",
      "parents": [
        "6054a7765cfd65c34d49a5a435bee1d0cdfb2d32"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Nov 06 15:30:12 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 05 00:18:00 2019 +0000"
      },
      "message": "audio: get rid of hardcoded translation stream \u003c--\u003e attributes\n\nIMPORTANT NOTE:\n    CL depends on another CL in frameworks/base\n    https://partner-android-review.googlesource.com/c/platform/frameworks/base/+/1206275\n\nAudioProductStrategies offers the possibility to dynamically\ntranslate attributes to stream types (and vice versa) within\naudio policy engine.\nLegacy engine has hard coded rules to maintain the translation\nservice.\n\nThis patch removes the hardcoded translation within the helper\nand replaces them by AudioProductStrategy APIs.\n\nTest: AudioPolicyTests: AudioProductStrategiesAllStreamsTest\nIt loops on all stream types supported by strategy and ensures\ndevice selection matches. Hard coded stuff would prevent right device\nselection.\nTest: CTS: AudioTrackTest AudioRecordTest\nTest: audio smoke test on sailfish, walleye blueline\n\n\nChange-Id: I76589df5555136ed49dbacc7aac9b0b5e828bef2\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "c005e569c7bae3f8c49660c9388c3076046069f5",
      "tree": "8612dc3a3d69c018b303bf8e56aa142db5465e8e",
      "parents": [
        "d0ba9ed06c61ab3e66627e027fbc34ba998140ee"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Nov 06 15:04:49 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Feb 02 10:31:32 2019 -0800"
      },
      "message": "audiopolicy: apm: switch to new Engine APIs\n\nTest: make\nChange-Id: Iedc2268852ee0bce32b67cfd324395c48cb33424\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "d0ba9ed06c61ab3e66627e027fbc34ba998140ee",
      "tree": "49948f80335bea4a358c7f455dfd6a5e59a94e30",
      "parents": [
        "7188f1ad365cd9d475723b639d521b491eaca389"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Nov 05 11:50:42 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 01 18:05:54 2019 -0800"
      },
      "message": "audio policy service: Add introspection API to retrieve AudioProductStrategies\n\nThis CL adds required introspection APIs to deal with product strategies:\n\n-getter of the collection of product strategies\n-helper function to return the strategy associated to a given attributes.\nThis API is mandatory to avoid duplicating the logic that compiles the strategy\nfor a given Audio Attributes structure.\n\nTest: make\n\nChange-Id: I0e107570a44227bb52a4f359954c93215d4f8bae\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "dc7553ff1bf7ec88e17a8577b94bb9dd9a1cbb43",
      "tree": "e51119764c576e4e051cef763280f8d35c7a7b27",
      "parents": [
        "612be7ff334b6c2c1051bd6dbb4088922af0336e"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Fri Nov 02 10:39:57 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 01 18:05:21 2019 -0800"
      },
      "message": "audiopolicy: engine: Add ProductStrategy common code\n\n-Adds new Engine APIs for Product Strategy management\n-Adds a common engine code to handle product strategies\n-Adds a parsing configuration library to feed the strategies\n-Prepare both engine for the switch\n\nTest: make\nChange-Id: I00f57ece798893bc6f9aa9ed54a3e5237e8d5cf1\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": "83dc265bde1be0f58161a4606b0a72d053288ff3",
      "tree": "c2ce03740c1639b974f21ce5941e931a2b924ba7",
      "parents": [
        "ffa6f9191ee3e50a5c140b0d3cae27d7f7c87a3f",
        "6a3052232c606bc2f74a849c6758fd44b6c01158"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 31 21:47:33 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 31 21:47:33 2019 +0000"
      },
      "message": "Merge \"use MediaAnalyticsItem::create() instead of new\""
    },
    {
      "commit": "6a3052232c606bc2f74a849c6758fd44b6c01158",
      "tree": "529ee3bb94a17c06e19c8642daf9993f23d531f2",
      "parents": [
        "2637984613a75eb2640a73e186a6dd1f08cebbc0"
      ],
      "author": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Mon Jan 28 20:33:18 2019 -0800"
      },
      "committer": {
        "name": "Ray Essick",
        "email": "essick@google.com",
        "time": "Thu Jan 31 11:19:44 2019 -0800"
      },
      "message": "use MediaAnalyticsItem::create() instead of new\n\nBug: 123543489\nTest: boot/logcat, select CtsMediaTests\nChange-Id: I92f8b9987b78466fae74ce4c0b177f8bb1e7dea8\n"
    },
    {
      "commit": "ab2f2f35111cf1237b8d1a42ebe33a001f28daa8",
      "tree": "a9b1107cf1d7cf8ba26a204e558b240d940b17de",
      "parents": [
        "aaaa003cb570f965908db1a08d53c4bddb588d61",
        "e79290d111a9c72aff5eecf2a5eed63d3168c112"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 31 11:10:10 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jan 31 11:10:10 2019 -0800"
      },
      "message": "Merge \"Set default value to mAttributes in AudioTrack\" am: 1128b3fa1a am: 46c631d921\nam: e79290d111\n\nChange-Id: I239ab1a947eb13195e6acbfa8f096965dd14d5ae\n"
    },
    {
      "commit": "5fa32ed75e09b1f01e6fdea509ef49492f729c7f",
      "tree": "0ff92513f38f3c04deda7e232c505814f8dcc9aa",
      "parents": [
        "caa0b292536bf8f4d455536404fed785e038c51a"
      ],
      "author": {
        "name": "Ippei Murata",
        "email": "ippei.x.murata@sony.com",
        "time": "Mon Oct 01 17:37:50 2018 +0900"
      },
      "committer": {
        "name": "Tomoharu Kasahara",
        "email": "Tomoharu.Kasahara@sony.com",
        "time": "Thu Jan 31 01:08:13 2019 +0000"
      },
      "message": "Set default value to mAttributes in AudioTrack\n\nmAttributes in AudioTrack can not be set in AudioTrack::set()\nwhen pAttributes is NULL.\nAudioTrack::getPosition() sometimes returns wrong value\nsince mAttributes is undefined value.\nThis change sets default values to mAttributes.\n\nBug: 123607740\nTest: manual\nChange-Id: Ie590c17efc466cc89cbd7e9f89fc3ebeed98eace\n"
    },
    {
      "commit": "77270b880570e07a5d80b23371f53638ec30fb5c",
      "tree": "4cdb67f28ef7bb47dad1ac19cadb48febf2be8a7",
      "parents": [
        "4b7f683cf9fbaa2b427f03bd067ee2588906ac44"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 18 15:41:29 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 30 15:18:23 2019 -0800"
      },
      "message": "Apply intensity control for haptic data.\n\nUse the same logic in VibrationEffect.scale to control the intensity of\nhaptic playback in audio framework. Note that as the maximum amplitude\nof vibrator is 255, convert the haptic data to pcm_8_bit before doing\nscaling.\n\nTest: Manually\nChange-Id: I6136d27c9255a215834b6e3092aa8ad696fbae04\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": "69b73291138bf97fcdf09a4320e77f28568cf874",
      "tree": "5f6f2e069accd87b1d0ec04af4a67cd73d9f936b",
      "parents": [
        "0dd741827750e4163fb618e817b51088badb65ad"
      ],
      "author": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Fri Jan 25 05:34:47 2019 +0000"
      },
      "committer": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Fri Jan 25 05:44:51 2019 +0000"
      },
      "message": "DO NOT MERGE: Revert \"Revert \"Add libprocessgroup dependency and fix sched_policy include\"\"\n\nThis reverts commit 7194e6da8a37a0e222b2f81e2d55a8013e657a13.\n\nReason for revert: AOSP is fixed with new vendor image\n\nChange-Id: I15797a30abcc304379db05bec1b25a0bd95b2ff4\nSigned-off-by: Suren Baghdasaryan \u003csurenb@google.com\u003e\n"
    },
    {
      "commit": "7194e6da8a37a0e222b2f81e2d55a8013e657a13",
      "tree": "c0a7b13fc0c2db08e5884f2cf598708aebecde70",
      "parents": [
        "855ae44d9f4acc7ac8720464ef94d159c9063e8b"
      ],
      "author": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Wed Jan 23 20:58:02 2019 -0800"
      },
      "committer": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Wed Jan 23 20:58:22 2019 -0800"
      },
      "message": "DO NOT MERGE: Revert \"Add libprocessgroup dependency and fix sched_policy include\"\n\nThis reverts commit 26992263865c4b30d733b1cdc0efce0d3db7d5c9.\n\nReason for revert: Broke AOSP\n\nChange-Id: Icdd182baad6a81b8fdbfd862b7eb3aada282f42f\nSigned-off-by: Suren Baghdasaryan \u003csurenb@google.com\u003e\n"
    },
    {
      "commit": "26992263865c4b30d733b1cdc0efce0d3db7d5c9",
      "tree": "dcdf65d9af6cd566721cd37282b4c759e818ee42",
      "parents": [
        "4162cd732558f2e4fb1c9bf70da3e87ba23523fc"
      ],
      "author": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Wed Dec 19 17:09:28 2018 -0800"
      },
      "committer": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Sun Jan 20 22:05:52 2019 +0000"
      },
      "message": "Add libprocessgroup dependency and fix sched_policy include\n\nlibaudioclient and libmedia are using get_sched_policy and\nset_sched_policy which are now implemented inside libprocessgroup.\nAdd required dependencies and include required headers.\n\nExempt-From-Owner-Approval: janitorial\n\nBug: 111307099\nTest: builds, boots\n\nMerged-In: I83dd6878839122e3ea71b7be6f6f312376897d56\nChange-Id: I83dd6878839122e3ea71b7be6f6f312376897d56\nSigned-off-by: Suren Baghdasaryan \u003csurenb@google.com\u003e\n"
    },
    {
      "commit": "11029ad02b64c74b8d49eb5e69c4db254e9f3e68",
      "tree": "e67c2ccf2261305299eb5141a3b5e224662c1708",
      "parents": [
        "4e4647077f00c47650d6ecd66cd812073371bd10"
      ],
      "author": {
        "name": "Arun Mirpuri",
        "email": "quic_amirpuri@quicinc.com",
        "time": "Wed Dec 19 20:45:19 2018 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jan 20 21:32:41 2019 +0000"
      },
      "message": "audiopolicy: Implement API for querying A2DP offload formats\n\nAdd support in AudioPolicyManager to return supported encoding\nformats for A2DP on the primary HAL. Current implementation is\nto query prop defined and convert this to a list of audio formats\n\nBug: 111812273\nTest: make\nChange-Id: Ic3ea72e19aa4c0bd4c156f62e45e6225f9ce6b11\n"
    },
    {
      "commit": "4e4647077f00c47650d6ecd66cd812073371bd10",
      "tree": "db114451fc37f571667f8fab24e88b142f49eee2",
      "parents": [
        "fa66483acb53c575fc476f04bebf0d0463752297"
      ],
      "author": {
        "name": "Aniket Kumar Lata",
        "email": "alata@quicinc.com",
        "time": "Thu Jan 10 23:38:46 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jan 20 21:32:16 2019 +0000"
      },
      "message": "audiopolicy: Add support for hybrid mode on A2DP\n\nAdd support in AudioPolicyManager to select a module,\ndevice or output based on device type and codec.\nImplement hybrid mode with A2DP which enables runtime\nswitching between HALs for A2DP based on offload support\nfor specific A2DP codecs.\nOptimize A2DP active device change and device config\nchange in AudioPolicyManager.\n\nBug: 111812273\nTest: make\nChange-Id: I246d71dd08bacbca6ed9b0012e7d7698bd8a0953\n"
    },
    {
      "commit": "7435e7da371e60bed90909be6cc57a3f111fb6b4",
      "tree": "70b40fae27adde22ca7b1b9f57120fd7957cfc22",
      "parents": [
        "aa1523c14af06a2f213e570d12ce01b71422b26a"
      ],
      "author": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Wed Dec 19 17:09:28 2018 -0800"
      },
      "committer": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Fri Jan 18 02:37:14 2019 +0000"
      },
      "message": "Add libprocessgroup dependency and fix sched_policy include\n\nlibaudioclient and libmedia are using get_sched_policy and\nset_sched_policy which are now implemented inside libprocessgroup.\nAdd required dependencies and include required headers.\n\nExempt-From-Owner-Approval: janitorial\n\nBug: 111307099\nTest: builds, boots\n\nChange-Id: I83dd6878839122e3ea71b7be6f6f312376897d56\nSigned-off-by: Suren Baghdasaryan \u003csurenb@google.com\u003e\n"
    },
    {
      "commit": "bf06f7afdbd7019614c9e31ce43301457a3a7d55",
      "tree": "67fd35b19109aa8a9ebb0a5fec14d51486770f79",
      "parents": [
        "1dfd7ba8c05ff5c8a51f69a3042f3870d99463d4",
        "03a6e6a08dbda1c94e0c9ce6fba4a4abd3df6d59"
      ],
      "author": {
        "name": "Paul Mclean",
        "email": "pmclean@google.com",
        "time": "Thu Jan 17 21:34:35 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 17 21:34:35 2019 +0000"
      },
      "message": "Merge \"Adding Audio HAL V5: Direction API\""
    },
    {
      "commit": "17dc17828f0aedb037cf974daeb44645f390cb49",
      "tree": "a269ec1665e47843b76ef33fde2ffcc1c57f5e02",
      "parents": [
        "33d6adcebbac541a803a08013db15a84e4b82bcf"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Jan 10 19:00:05 2019 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Jan 10 19:00:05 2019 -0800"
      },
      "message": "Audio policy: uid device affinity deterministic rule\n\nWhen setting a uid device affinity, make the rules deterministic\n  by applying an \"exclude\" rule on all mixes that don\u0027t reach\n  the devices (existing), but also a \"match\" on the mixes that\n  do (new).\nBug: 111647296\nTest: requires device with routing policy started by CarService\n\nChange-Id: I3bb844156ade75e4b9576c1e18200ca90ce26cf9\n"
    },
    {
      "commit": "bda70da1f0fb32d37abd704ff8618e55661be0a9",
      "tree": "a850374439d404da29938e2b038457926197d826",
      "parents": [
        "abf2929e8d084d2ca99d4d8712abbf31c2cb5178"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Dec 19 07:30:15 2018 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jan 02 12:27:35 2019 -0800"
      },
      "message": "Dynamic audio policies: multi-zone through uid/device affinity\n\nSetting audio device affinity for a given uid augments all\n audio mix criteria that do not route to the given devices\n to exclude the uid.\nAudioPolicyManager: after changing the device affinity,\n check the outputs addressing the devices to re-evaluate\n audio routing\n\nBug: 111647296\nTest: requires device with routing policy started by CarService\nChange-Id: I72de54ae067151fe6ac2ec43b78fe544a9fd9888\n"
    },
    {
      "commit": "03a6e6a08dbda1c94e0c9ce6fba4a4abd3df6d59",
      "tree": "e609e29b32764e6fd970f16c78d3bbee5be401bb",
      "parents": [
        "c2684ac61bdbfd9913cf1361a6436272756bc6d6"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Tue Dec 04 10:54:13 2018 -0700"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Thu Dec 20 17:37:55 2018 -0700"
      },
      "message": "Adding Audio HAL V5: Direction API\n\nBug: 119137468\nTest: Testbed app.\n\nChange-Id: I1b3c81079000958da80d36616fe06930d876aac3\n"
    },
    {
      "commit": "77a428b58b1ab5d5f7212d8b1d4dbac20a985018",
      "tree": "0792e71c0e35ec1f442ae18c8f5cbbbc441b951e",
      "parents": [
        "3c3c97ae534870c90f54e8cffc6d7d82ab8ca3da",
        "a9f86651eaaf2f702b3759ec38dbb64ca8858356"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 20 17:58:36 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 20 17:58:36 2018 +0000"
      },
      "message": "Merge changes from topic \"more_in_recording_config\"\n\n* changes:\n  audo policy: more info in onRecordingConfigurationUpdate\n  audo policy: add effects to record clients\n"
    },
    {
      "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": "f4de6114c20c3b3376806b359d527330f1891826",
      "tree": "6661fb92de4c7f145d0ae7de9d109d8a145601eb",
      "parents": [
        "341dd3bb36c4ceb77c80b8e8db9f0e1d647dc9ce"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Dec 19 12:40:08 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Dec 19 12:40:08 2018 -0800"
      },
      "message": "Do not allow set sample rate when haptic channels exists.\n\nAs haptic playback via audio require sample rate is the same as the HAL\none, sample rate should not be changed after AudioTrack is created.\n\nBug: 121271890\nTest: Manually\nChange-Id: I1549017b3ca8523735190f62f8c9a4fb8b95e000\n"
    },
    {
      "commit": "3c03c8ba1504003f25ee04b49609eb10b20e1bdf",
      "tree": "78956d959c2684a79768a6dffca77bdc7d561dbc",
      "parents": [
        "8dd9d107e9056283bc38c5921cff29c481adc99f",
        "245cdd91559873aeacf21b7c780655ef43c01682"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 12 22:38:27 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 12 22:38:27 2018 +0000"
      },
      "message": "Merge changes Ic5f780de,I3f963307\n\n* changes:\n  Support audio-haptic coupled playback.\n  Add buffer provider that can adjust channels.\n"
    },
    {
      "commit": "245cdd91559873aeacf21b7c780655ef43c01682",
      "tree": "336ec5eaea56659c21e9441c0d2b5a03102b9b32",
      "parents": [
        "dce8f8cc41cb6be63d13ad0099d61807746ff5d7"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Dec 07 17:55:15 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Dec 12 11:33:47 2018 -0800"
      },
      "message": "Support audio-haptic coupled playback.\n\nWhen trying to play with haptic channel mask, use adjust channels\nbuffer provider to make the haptic channel the same as the output one.\nIf haptic playback is supported, use adjust channel non destructive\nbuffer provider to output haptic data to the end of the sink buffer.\nOtherwise, haptic data will be ignored.\n\nTest: Manually\nBug: 111454766\nChange-Id: Ic5f780de48c1e71de6ba5c4774d1ed2e9c8c51a0\n"
    },
    {
      "commit": "dce8f8cc41cb6be63d13ad0099d61807746ff5d7",
      "tree": "f85faa34c35ce81c45bcbd5bfed3fc93073e37f8",
      "parents": [
        "6b6a0f05248fc646d42f09cb891d8b6fda19426e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 10 17:49:31 2018 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Dec 12 11:23:05 2018 -0800"
      },
      "message": "Add buffer provider that can adjust channels.\n\n1. Add adjust channels buffer provider, which will expand or contract\nsample data from one interleaved channel format to another. Expanded\nchannels are filled with zeros and put at the end of each frames.\nContracted channels are omitted from the end of each audio frame.\n\n2. Add adjust channels non destructive buffer provider, which could\nexpand or contract sample data from one interleaved channel format to\nanother while not destructing the buffer. Extra expanded channels are\ninterleaved in from the end of the input buffer. Contracted channels are\ncopied to the end of the output buffer. Contracted channels could be\nwritten to an output buffer with certain audio format.\n\nTest: Manually\nBug: 111454766\nChange-Id: I3f963307e73b3f7aa662d4127f78f0c61ac84510\n"
    },
    {
      "commit": "25194a64e0bb77049d279fdb982c02425095ec01",
      "tree": "f3812f7beecd278352111c85e5b684e3937ca4af",
      "parents": [
        "20d51cca2c61b65be88b5bad43e6f363e29373b8",
        "a2b32728760a75352aadf5383e7615afd5bf435c"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 21:17:01 2018 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Dec 11 21:17:01 2018 -0800"
      },
      "message": "Merge \"Fix cert-dcl16-c clang-tidy warnings in libaudioclient.\" am: 8774dda490 am: e8f69f37be\nam: a2b3272876\n\nChange-Id: Ib7f787d7ca149015badfe75ec2d52f80bde0f952\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": "50fa06cf6196e6235cd24a44e5bf464b28f91a7b",
      "tree": "848bcdc1e9c24817a3e1f05d079ed7f0da0d636e",
      "parents": [
        "14c577fac81b8fdcc75e4bf9243f16bd624ba58b"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 13:51:36 2018 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 13:51:36 2018 -0800"
      },
      "message": "Fix cert-dcl16-c clang-tidy warnings in libaudioclient.\n\nBug: 120614316\nTest: make with WITH_TIDY\u003d1 DEFAULT_GLOBAL_TIDY_CHECKS\u003d-*,cert-dcl16-c\nChange-Id: If3d86617594250e2a9ed79c46bf39852a9a723b2\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": "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": "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": "2a2837d0dcc63d834b9ca313bf322f967a989eec",
      "tree": "3fb865132546838d1182caa5515f3e1f83d2d0ef",
      "parents": [
        "e72cb66313a21ecd218f2b9a01491bc1ebbe2c39",
        "ac917aca235ff5170f00c2ee933f41f07a40232d"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 30 16:36:19 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 30 16:36:19 2018 +0000"
      },
      "message": "Merge \"Add selectPresentation API to IAudioTrack\""
    },
    {
      "commit": "73c3a18dcc23703fa51a550cca9d290f392de1bc",
      "tree": "03fa4f3e45e97b7bb6dfcb8e0031ead5f69a11b3",
      "parents": [
        "f1188418c6220f27ed7ec6491380062c039a7b42",
        "b78763e6098baa33f441abef74d53636f72c6d6e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 28 23:38:13 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 28 23:38:13 2018 +0000"
      },
      "message": "Merge \"audio policy: receive assistant and a11y service UIDs\""
    },
    {
      "commit": "ac917aca235ff5170f00c2ee933f41f07a40232d",
      "tree": "2927cc6419b7fe615ccdc977224f6f3ed656f58e",
      "parents": [
        "e4eb88fa5fe62a9b6b709fbf2ff26f37acf6db20"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Nov 28 14:03:52 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Nov 28 14:44:17 2018 -0800"
      },
      "message": "Add selectPresentation API to IAudioTrack\n\nThe Java AudioTrack interface has a setPresentation API. This\ncalls the setParameters API in IAudioTrack. However, this does\nnot eventuate into a call into the android.hardware.audio@4.0\nIStreamOut selectPresentation API.\n\nAdd selectPresentation API to IAudioTrack and call down to the\nandroid.hardware.audio@4.0 IStreamOut selectPresentation API.\nTranslate into calls to setParameters API for legacy HAL\ninterfaces.\n\nBug: 63901775\nTest: compile\nChange-Id: Id634a107f3f93ab18dc80d2bd0af67bda35e859f\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": "0248a2a3ae176e4f306dbf3d869792bb93312ed5",
      "tree": "e9f5d8a65fca2a0afc53b2b5b3ebe672b4bf4b05",
      "parents": [
        "2a6038e529574bfa183ab1de1fffd01a1504fc3a"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Nov 21 10:05:57 2018 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Nov 21 10:05:57 2018 -0800"
      },
      "message": "Fix double track thread initialization\n\nBug: 119870459\nTest: cts-tradefed run cts -m CtsMediaTestCases -t android.media.cts.AudioTrackOffloadTest\nChange-Id: I15f314ee5696ead90a09991bfe10e1ae3ff013e0\n"
    },
    {
      "commit": "a60e9a209ed7dbeaa563b3145904038064615432",
      "tree": "997b5121a13729113a1cd6aaf85dfe6f58c40cd9",
      "parents": [
        "c40d87ea8409b23e6326ffe2233e02a99ecfac15"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Nov 15 16:13:36 2018 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Nov 16 17:29:51 2018 -0800"
      },
      "message": "AudioTrack offload: fix EVENT_STREAM_END  not called\n\nIf the track thread is paused, EVENT_STREAM_END will not delivered\n for offload. This event is required for PRESENTATION_END to\n be delivered for Java AudioTrack offload.\n\nBug: 86837964\nTest: cts-tradefed run cts -m CtsMediaTestCases -t android.media.cts.AudioTrackOffloadTest\n\nChange-Id: I491cdb0a6faa69e5c37139c0364b5c9079ff1f14\n"
    },
    {
      "commit": "f4158d855b941e5c7ffcc4f119f2bd146986b0c4",
      "tree": "cdd9cc09d90ff6d43ee200233f9fa16e6124f5b6",
      "parents": [
        "0917fc25390c5f362332630e2d980480d1444e0d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Sep 25 12:43:58 2018 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Oct 24 10:46:30 2018 -0700"
      },
      "message": "AudioTrack: new transfer mode for Java offload support\n\nNew transfer mode for java AudioTrack using offload\n  path, where data is provided through the write method,\n  and the callback is used to notify the track owner\n  more data can be written on the track.\n\nBug 86837964\nTest: adb shell clof --source /sdcard/Music/my.mp3\n\nChange-Id: I47c760b7fb8f1431945ca24ff4a26311b63cb761\n"
    },
    {
      "commit": "cab10da0da9d9a991c4b895992b6c0e34d5b8293",
      "tree": "530cf9ac9385f696c31cffd880a4c2c0160966a3",
      "parents": [
        "f577d69b4133139a04dd7b2809c7d77edc5ca898",
        "6ec546dad994d3cc7ffbdf9be42d69811805085a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Oct 20 02:18:26 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Oct 20 02:18:26 2018 +0000"
      },
      "message": "Merge \"audio: fix AudioTrack and AudioRecord restore\""
    },
    {
      "commit": "c8cecbe19ba6bb09f0374af23b636bf3028e6af9",
      "tree": "a7e0cae7a9513d67c80075a6cc59ade117f78a01",
      "parents": [
        "cf68127174cbbf0cf87a0f4876d178b240b1de4e",
        "de9e33dfcbdabc0227ab47e4a13325b5b410ab39"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 11 22:56:26 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 11 22:56:26 2018 +0000"
      },
      "message": "Merge \"Add transaction code to TimeCheck crash\""
    },
    {
      "commit": "6ec546dad994d3cc7ffbdf9be42d69811805085a",
      "tree": "64bb14daa86cb6ae0445bc52564369ca0ced94ae",
      "parents": [
        "66b4c2c74829721f7e12de810b936e5e323a51dd"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 10 16:52:14 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 11 14:16:09 2018 -0700"
      },
      "message": "audio: fix AudioTrack and AudioRecord restore\n\nAllow retry on failure to reconnected to audioserver when restoring an\nAudioTrack or AudioRecord and do not change state to inactive when\nreconnection fails. In case of failure due to temporary race conditions this will\nincrease the chances of success and avoid ending up in an inconsistent\nactive state if a later reconnection succeeds.\n\nBug: 113109529\nTest: AudioTrack CTS tests and manual playback smoke tests.\nTest: AudioRecord CTS tests and manual capture smoke tests.\nChange-Id: I570724eb46f3a0f830267396aba06297bd37df7a\n"
    },
    {
      "commit": "de9e33dfcbdabc0227ab47e4a13325b5b410ab39",
      "tree": "bf5c5eff11ac61c1c61630a30793fc15d9d376c5",
      "parents": [
        "fd53bf2f59071766f6f2ea925a6718919eac2502"
      ],
      "author": {
        "name": "Stanley Tng",
        "email": "stng@google.com",
        "time": "Wed Oct 10 18:48:33 2018 -0700"
      },
      "committer": {
        "name": "Stanley Tng",
        "email": "stng@google.com",
        "time": "Thu Oct 11 18:52:14 2018 +0000"
      },
      "message": "Add transaction code to TimeCheck crash\n\nWhen there is a TimeCheck timeout crash, the transaction code will be\nuseful for debugging.\n\nTest: Manual run\nChange-Id: I8a93ead7ec7379f51b211ca31c68ec6ec2553afc\nMerged-In: I4716852c77d56703ad5f3dfc2500f598a2b80a12\n"
    },
    {
      "commit": "afd5101b9e661fb17b8bacf7bc2293aa97088dcb",
      "tree": "c165351a8151b27e1f273ef5b6a75546a01b906e",
      "parents": [
        "b4e880abdcde87ff89937f4f8de819af0cfe371f",
        "1dd2f5bc443e15538271013052d3ed06912ec58b"
      ],
      "author": {
        "name": "Nobuaki Tanaka",
        "email": "nobuaki.xb.tanaka@sony.com",
        "time": "Thu Oct 04 19:17:45 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 04 19:17:45 2018 -0700"
      },
      "message": "Merge \"Support to play the various tones as per the Indian standard\" am: 3c5b1b7150 am: 9d0e47f953\nam: 1dd2f5bc44\n\nChange-Id: Iab8837922e54ad6c4af8c340e0ff75cd80418013\n"
    },
    {
      "commit": "3c5b1b7150257e33d4ee14166d577d1d644a31b2",
      "tree": "1deaf090b1cd20b4d608b25b30ad730fcf17d2d5",
      "parents": [
        "0a0cfbd2bef78f26231d9fb53546e7682f9bf4bd",
        "f4a4005adb8340b2883d0b6771bcebac5c9c75b5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Oct 05 01:54:04 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 05 01:54:04 2018 +0000"
      },
      "message": "Merge \"Support to play the various tones as per the Indian standard\""
    },
    {
      "commit": "f4a4005adb8340b2883d0b6771bcebac5c9c75b5",
      "tree": "01f9d062e5156a9e8247b535b111c335c09ce611",
      "parents": [
        "db44c5d13b9972a0d0dd177c31259b74bc2e4376"
      ],
      "author": {
        "name": "Nobuaki Tanaka",
        "email": "nobuaki.xb.tanaka@sony.com",
        "time": "Wed Sep 12 16:22:17 2018 +0900"
      },
      "committer": {
        "name": "Tomoharu Kasahara",
        "email": "tomoharu.kasahara@sony.com",
        "time": "Wed Oct 03 12:42:59 2018 +0900"
      },
      "message": "Support to play the various tones as per the Indian standard\n\nTo play the following tones as per Indian standards.\n - Dial tone\n - Busy tone\n - Congestion tone\n - Call waiting tone\n - Ringing tone\n\nBug: 117161543\nTest: Play each tone in indian locale\n\nChange-Id: I6b7a2a5674a79a26fba80f987d2ed6ed555ce4bf\n"
    },
    {
      "commit": "99e9db75039f86a73d1a5052b1e3538ddda20de5",
      "tree": "46f3f12e2748a7f4feae255aedb4a3195d1cd27c",
      "parents": [
        "05fa8856abaa1e050c3c8e6ba97fc8878ed7600a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 14 15:17:36 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 18 15:02:54 2018 -0700"
      },
      "message": "AudioTrackShared: Ensure proper subtraction\n\nOptimizing compilers may skip masking if the result of\nsubtraction is assigned to larger integral type.\n\nTest: long term test with 64 bit audioserver\nBug: 113763960\nChange-Id: Ida405a5a26e819891e7da7f29ebd0b78d2de1fc5\n"
    },
    {
      "commit": "4c94e03cac24f172e8367e351b66adf709b2cee6",
      "tree": "0115b73acebf2f3165e1ce20d7bdb65cab08136b",
      "parents": [
        "61c80f1f4a07886a01abada34beefed9db1bec4b",
        "51e09f9cae7b3195a2799b876eea8949faae912c"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Sep 18 10:26:55 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Sep 18 10:26:55 2018 -0700"
      },
      "message": "Merge \"Suppress implicit-fallthrough warnings in libaudioclient.\" am: 058002e0e3 am: 8a7c2de43f\nam: 51e09f9cae\n\nChange-Id: Ifcae7a82849a698a2406279e18c74be454c596b2\n"
    }
  ],
  "next": "ffe3558cb1024b39ce1e0e1dc2fb20bb3663299a"
}
