)]}'
{
  "log": [
    {
      "commit": "2638df9bf8fbe3e82c1908b47df206746080fb70",
      "tree": "95ec34c8139dec38eb7e10104bd376117dfefcc8",
      "parents": [
        "801a252a4203c54ad7165f522f4b36dd1f14fc92",
        "37eca2499bfb3cda510f0a2e2a4e9d629b405a36"
      ],
      "author": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Fri Dec 27 20:28:48 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 27 20:28:48 2019 +0000"
      },
      "message": "Merge \"Functions called by RequestThread::threadLoop must not hold mInterfaceMutex.\""
    },
    {
      "commit": "79673cfb78356afb4bb531d5f6fe115ab41930cc",
      "tree": "82f9a497a3221f4043e4af36f19abd4ee00fbb96",
      "parents": [
        "c1a82b91f050f4b496b2d373046cb4c9fc32c8eb"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Fri Sep 20 21:45:01 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Dec 20 15:58:46 2019 +0000"
      },
      "message": "Implement DrmSessionManager w mediaresourcemanager\n\nBug: 134787536\nTest: DrmSessionManagerTest\nTest: DrmSessionManager_test\nTest: ResourceManagerService_test\nChange-Id: Iab9f4f681c83f46b043cefc8633bb3e513a8e75a\nMerged-In: Iab9f4f681c83f46b043cefc8633bb3e513a8e75a\n"
    },
    {
      "commit": "9ee5dcab545a48d820e81504ac03240eb336684b",
      "tree": "d97f7cce19569f76eeaebc0cc28ca4d18db46ec2",
      "parents": [
        "e93545d3aeeed12c118ecf11e6359b1ec4ccbae5"
      ],
      "author": {
        "name": "Justin Yun",
        "email": "justinyun@google.com",
        "time": "Tue Dec 03 19:35:12 2019 +0900"
      },
      "committer": {
        "name": "Justin Yun",
        "email": "justinyun@google.com",
        "time": "Wed Dec 18 21:00:10 2019 +0900"
      },
      "message": "Make libavservices_minijail vendor_available\n\nAs we described \"libavservices_minijail\" in Andorid.bp, we don\u0027t need\nto keep \"libavservices_minijail_vendor\" as a workaround, but may make\n\"libavservices_minijail\" vendor_available and remove\n\"libavservices_minijail_vendor\".\n\nWe will keep \"libavservices_minijail_vendor\" until we replace\n\"libavservices_minijail_vendor\" to \"libavservices_minijail\" from all\nvendor modules.\n\n\"libavservices_minijail_vendor\" will be removed once the vendor\nmodules are cleaned up.\n\nBug: 146313710\nBug: 145580164\nTest: build and boot\nChange-Id: Iffb16c10ddc93e645d5839ac8aa320353e46d224\n"
    },
    {
      "commit": "b3643899c48dfe9bec2876e40faaf8b913aa4627",
      "tree": "924f685a4c1e434999fa70ae4907982bf16d1ae5",
      "parents": [
        "e17f0c1c1e065d2985113ee6703fe40186b74963"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Wed Dec 18 08:38:37 2019 +1100"
      },
      "committer": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Wed Dec 18 10:39:31 2019 +1100"
      },
      "message": "Use max of play/record frame counts for PassthruPatch track\n\nThis patch avoids pseudo LCM buffer calculation oversized buffer\ncausing posix_memalign error in cases of large play/record frame\ncounts (such as 24596) for PassthruPatchRecord patches.\n\nTest: MSD to Primary audio patch with play/record frame counts\n      of 24596.\nChange-Id: I3a2f3795330e99984388b01033d8e7c1685d01f2\n"
    },
    {
      "commit": "5c536200d631c2ac6b4e74816f864096b777e84a",
      "tree": "6d0f63860f3c33cce232b06ad8dc63a8c27dcf02",
      "parents": [
        "2c76260fb43cd8519d86088278f9b8ee4a8133d4",
        "f7a18b2fe92a2f4b428b32794ef1d3a7d9db6949"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 12 01:12:50 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 12 01:12:50 2019 +0000"
      },
      "message": "Merge \"Remove setting LOCAL_MULTILIB from AUDIOSERVER_MULTILIB\""
    },
    {
      "commit": "37eca2499bfb3cda510f0a2e2a4e9d629b405a36",
      "tree": "fe7f6d9647772349d4c87203b1db141e78c64474",
      "parents": [
        "3066e206366b25b6b64cf0ad29188bd04b56b183"
      ],
      "author": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Mon Nov 18 08:55:56 2019 -0800"
      },
      "committer": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Wed Dec 11 14:10:36 2019 -0800"
      },
      "message": "Functions called by RequestThread::threadLoop must not hold mInterfaceMutex.\n\nFunctions called by RequestThread::threadLoop must not hold\nmInterfaceMutex since the following deadlock scenario may occur:\n\nT1: disconnect() -\u003e holds mInterfaceMutex and waits for RequestThread to\n    exit\n  T2: RequestThread::threadLoop()-\u003ereconfigureCamera (or any other function) that waits on\n      mInterfaceMutex\n\nleading to a deadlock\n\nBug: 143513518\n\nTest: GCA\nTest: CTS\n\nChange-Id: I4bd856e5263934a54cd7087a01d35cfe10936196\nSigned-off-by: Jayant Chowdhary \u003cjchowdhary@google.com\u003e\n"
    },
    {
      "commit": "2deb47896c1a3604468f9b9144c7114f5d678b33",
      "tree": "5e952f128a421748aa32dc22f16e86ecad15a972",
      "parents": [
        "f6cd76eef99409ea943e995e3c8fae92a787fb36"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Nov 01 11:04:15 2019 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Dec 10 14:21:48 2019 -0800"
      },
      "message": "APM: support product strategy routing\n\n  Audio policy engine supports receiving a preferred device to use\nfor a given strategy (Engine superclass). Use of the preferred\ndevice intervenes at the level of the each engine implementation,\nhere in the default engine in getDevicesForProductStrategy() method\nso it is saved in the routing cache, and respects existing routing\npriorities.\n  Refactor the loops for call and output rerouting into a new\nupdateCallAndOutputRouting() method.\n\nBug: 144440677\nTest: atest AudioServiceHostTest#testPreferredDeviceRouting\n\nChange-Id: Ic4c690e1b0d8020c4335979e40e14e6df5887879\nMerged-In: Ic4c690e1b0d8020c4335979e40e14e6df5887879\n"
    },
    {
      "commit": "f7a18b2fe92a2f4b428b32794ef1d3a7d9db6949",
      "tree": "05888d1c6569ae104c0d97b24f7e903ab1f8272d",
      "parents": [
        "f6cd76eef99409ea943e995e3c8fae92a787fb36"
      ],
      "author": {
        "name": "Sasha Smundak",
        "email": "asmundak@google.com",
        "time": "Fri Dec 06 12:39:32 2019 -0800"
      },
      "committer": {
        "name": "Sasha Smundak",
        "email": "asmundak@google.com",
        "time": "Tue Dec 10 10:15:17 2019 -0800"
      },
      "message": "Remove setting LOCAL_MULTILIB from AUDIOSERVER_MULTILIB\n\nBug: 121208203\nTest: treehugger\nChange-Id: Ia8a640c4e59cd33281e88ab379a119e1d120f096\nMerged-In: I263b6b302f7220e4b712924d2df2fd2548af03b1\n"
    },
    {
      "commit": "5a9fe55c35807173df5ba89d821411f8b6fa054f",
      "tree": "17132ef82205541565f4d4c094a8cae82c0ba20b",
      "parents": [
        "b035c081098cfd462922e5e0f6050a47617a656d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 06 16:47:55 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 06 16:47:55 2019 -0800"
      },
      "message": "Fix newline symbols in files added in aosp/1183241\n\nThe added files were using DOS EOL symbols (CRLF) instead\nof UNIX (LF only). Removed CR symbols.\n\nBug: 135749685\nTest: m\nChange-Id: Iba36aaef0ea8d9bcb3bd8e2d476a7b0588bd70ee\n"
    },
    {
      "commit": "b035c081098cfd462922e5e0f6050a47617a656d",
      "tree": "2696e1490fbb869df9910f84ffc154b373633f98",
      "parents": [
        "80a288ad82f21b3254248c2b2df0dfe8a1443929",
        "0845152be4781710082f2453b4600810204fea45"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Dec 07 00:39:13 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Dec 07 00:39:13 2019 +0000"
      },
      "message": "Merge \"Add last connected device concept\""
    },
    {
      "commit": "80a288ad82f21b3254248c2b2df0dfe8a1443929",
      "tree": "c79d326a095f4ce0fb45490893bc41763cfa52d7",
      "parents": [
        "fefdf667a0c093ae069461bd75fa8dfa0289fa68",
        "32dc26e71cb0493f15b4b6480d991ad283405b42"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Dec 06 22:12:05 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 06 22:12:05 2019 +0000"
      },
      "message": "Merge \"Sometimes no audio output after playing some clips using Files.apk\""
    },
    {
      "commit": "0845152be4781710082f2453b4600810204fea45",
      "tree": "ed6d40c43850180c97de49d4cb7f069d766d8db6",
      "parents": [
        "b20ae2f7f7209acffe80bb8514d915f5d8f57c50"
      ],
      "author": {
        "name": "Baekgyeong Kim",
        "email": "baek.kim@samsung.com",
        "time": "Fri Nov 01 20:40:02 2019 +0900"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 06 09:37:19 2019 -0800"
      },
      "message": "Add last connected device concept\n\nWhen connecting multiple audio devices,\nMedia and Sonification sounds comes out of the last connected device,\nnot a high-priority device.\n\nTest: play music\nTest: connect wired earphone // sound : wired earphone\nTest: connect usb earphone // sound : usb earphone, not the wired earphone(high-priority)\nTest: connect bluetooth headset // sound : bluetooth headset\nTest: disconnect bluetooth headset // sound : usb earphone, not the wired earphone(high-priority)\nBug: 135749685\n\nChange-Id: I579a04a04c97cc846b88e54fa83cdf3dad0b5cee\nSigned-off-by: Baekgyeong Kim \u003cbaek.kim@samsung.com\u003e\n"
    },
    {
      "commit": "b680e955f474a2f81ed35383da67209bcbdd7d10",
      "tree": "8fd48d3bca98f5cc5d96415255711817fc209553",
      "parents": [
        "9e1e25dd418773ad5e574441962dcc771d3ec2a3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 27 15:40:33 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Dec 05 13:00:07 2019 -0800"
      },
      "message": "media utils: dump audio HAL service before restarting audioserver\n\nAdd request to create tombstones of audio HAL servers before restarting\naudioserver process when the watchdog triggers.\n\nAdd audio device factory HAL interface API to retrieve HAL process pids when\npossible (on debug builds).\n\nAdd AudioFlinger service API to set audio HAL process pids from\nJAVA AudioService.\n\nBug: 141528385\nTest: Force watchdog and verify tombstone creation\nChange-Id: I68c1e8fb4db23e5952ad0c93d7d0b9d121b8ec18\nMerged-In: I68c1e8fb4db23e5952ad0c93d7d0b9d121b8ec18\n"
    },
    {
      "commit": "74cfcdf8237a455f8b8ec8e1b2a08fe777cf7512",
      "tree": "b2a807ef98f524f4ae78e3a26ce4564862725aaa",
      "parents": [
        "9410d2ed179da5df8087b588cf3b8965f8fe8957",
        "f8726f00877d2e9628537da771b12829afb92229"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 05 20:19:08 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 05 20:19:08 2019 +0000"
      },
      "message": "Merge \"Allow OFFLOAD timestamp correction for MSD/BUS combinations\""
    },
    {
      "commit": "9410d2ed179da5df8087b588cf3b8965f8fe8957",
      "tree": "17b5266dcf8ac843c5ad25ebf5b41c94ac8beb77",
      "parents": [
        "6a9d20eebf14f20d0be5ac636b7a8b1698f27f54",
        "aff2869baaa20b33db5515e70b86450c5fc48e35"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 05 20:17:59 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 05 20:17:59 2019 +0000"
      },
      "message": "Merge changes from topic \"adtConversion\"\n\n* changes:\n  Refactor for audio device type in conversion.\n  Use AudioDeviceTypeAddr when setting device for effects.\n  Add constructor with type and address for DeviceDescriptor.\n"
    },
    {
      "commit": "6a9d20eebf14f20d0be5ac636b7a8b1698f27f54",
      "tree": "f480dbb9fc20076d3b28c575d94b26d1c3c57a5b",
      "parents": [
        "58205951c319c089b1d320f81028262b9a470400",
        "37a6163f3f7e125f617ffed1d02b27dcd85b9b7f"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Dec 05 19:12:53 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 05 19:12:53 2019 +0000"
      },
      "message": "Merge \"oboeservice: hold onto linked binder\""
    },
    {
      "commit": "58205951c319c089b1d320f81028262b9a470400",
      "tree": "2748ca345f579eac2ed61e77a61bdde0634a4a6c",
      "parents": [
        "0287266a3e2543268938e1b91129fb934b92b356",
        "8fe02b24e4cdf93cb1c004b7d77c01671bd44916"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 05 18:34:29 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 05 18:34:29 2019 +0000"
      },
      "message": "Merge \"cameraserver: filter out non-HAL3 devices from HIDL addListener.\""
    },
    {
      "commit": "b8269fd0946976cc820b0abb815f0fb67fc88b76",
      "tree": "1b65e96a5a38d1f9f37675c7e7e16f6f8389cd43",
      "parents": [
        "7946fbe6782ce25599d917d9357389ad1729f2db"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 11 12:16:27 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Dec 05 10:09:03 2019 -0800"
      },
      "message": "Use AudioDeviceTypeAddr when setting device for effects.\n\nSeparate SET_DEVICE and SET_INPUT_DEVICE command in effects as it can\nbe multiple devices for output case, but only single device for input\ncase.\nUse AudioDeviceTypeAddr instead of just audio device type as address\ncan be useful to identify audio device if there are multiple devices\nwith the same device type connected.\n\nBug: 135621476\nTest: atest AudioEffectTest BassBoostTest DynamicsProcessingTest\nTest: atest EqualizerTest VirtualizerTest VisualizerTest\nChange-Id: Ie9df88e3338730392abbc3efae5daadc70398ff7\nMerged-In: Ie9df88e3338730392abbc3efae5daadc70398ff7\n"
    },
    {
      "commit": "7946fbe6782ce25599d917d9357389ad1729f2db",
      "tree": "71fe1b77778282750cf8da53f88a4332508dbd88",
      "parents": [
        "0287266a3e2543268938e1b91129fb934b92b356"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Nov 07 15:47:01 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Dec 05 10:08:34 2019 -0800"
      },
      "message": "Add constructor with type and address for DeviceDescriptor.\n\nType and address are used to distinguish a device, it makes more\nsense to set device type and address when creating a DeviceDescriptor.\n\nBug: 135621476\nTest: make, atest audiopolicy_tests\nChange-Id: I5f9063bd8c756ace77c162e86a8c0dd685da79b4\nMerged-In: I5f9063bd8c756ace77c162e86a8c0dd685da79b4\n"
    },
    {
      "commit": "37a6163f3f7e125f617ffed1d02b27dcd85b9b7f",
      "tree": "7f089e9b6ff73d7ea3fed249b5e70fccaca337e5",
      "parents": [
        "b2872d478fbb66eddd59d8a35d81796850927153"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 04 14:06:50 2019 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 04 23:29:21 2019 +0000"
      },
      "message": "oboeservice: hold onto linked binder\n\nBefore, in Android 10, this would have been a small leak because\nunlinkToDeath is not called, but now, objects are automatically\nunlinked. However, this presents a problem since you must hold onto\na binder in order to linkToDeath. This now holds onto the binder\nand is relying on the automatic-unlinkToDeath behavior.\n\nFixes: 145675653\nTest: atest CtsNativeMediaAAudioTestCases\narm64-v8a CtsNativeMediaAAudioTestCases: Passed: 122, Failed: 0, Ignored: 0, Assumption Failed: 0\nTest: after using app and killing which uses AAudio MMAP stream,\ndumpsys output for media.aaudio is cleaned up:\n\n------------ AAudio Service ------------\nStream Handles:\nAAudioClientTracker:\nAAudioEndpointManager:\nExclusive MMAP Endpoints: 0\n ExclusiveSearchCount:  3\n ExclusiveFoundCount:   0\n ExclusiveOpenCount:    1\n ExclusiveCloseCount:   1\n\nShared Endpoints: 0\n SharedSearchCount:     1\n SharedFoundCount:      0\n SharedOpenCount:       0\n SharedCloseCount:      0\n\nChange-Id: I2ef141320dc3ef0135fb7ef002d85377d06a75c2\n"
    },
    {
      "commit": "f8726f00877d2e9628537da771b12829afb92229",
      "tree": "109f413c13e023c78416d559686740476079b612",
      "parents": [
        "0287266a3e2543268938e1b91129fb934b92b356"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Mon Dec 02 14:12:01 2019 +1100"
      },
      "committer": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Thu Dec 05 06:44:35 2019 +1100"
      },
      "message": "Allow OFFLOAD timestamp correction for MSD/BUS combinations\n\nTest: audioflinger dumpsys for MSD BUS offload threads show\n      timestamp correction enabled\nChange-Id: I044aaa5d1754ea08b3c78de75e7a4f0bc58dd269\n"
    },
    {
      "commit": "10d86fd087218d43254ec781612a9f86c0022e9d",
      "tree": "35246193cf7aaf924548f3cd15d763bd297d44aa",
      "parents": [
        "c010683e081f48eb72e21cbcf0458efc17184e6b"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 31 17:20:42 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:42:23 2019 -0800"
      },
      "message": "Refactor audio device type in audio flinger.\n\nAs audio device type must not be used as a bit mask, there is a\nrequirement to refactor the code in audio flinger. This CL includes:\n1. Use DeviceTypeSet for recording output devices in Threads. The input\nand output device types in Threads will only be updated when creating\nan audio patch.\n2. Use helper functions in audio flinger for checking whether an audio\ndevice type is a certain category.\n3. Use DeviceDescriptorBaseVector as vector of DeviceDescriptorBase.\nDeviceDescriptorBaseVector will be used in RecordThread to record output\ndevices, which will be used in audio effect.\n4. Do not use set parameters when communicating output devices to\nRecordThread. Instead, adding a new event in Thread to update output\ndevices directly.\n\nBug: 135621476\nTest: atest AudioTrackTest AudioRecordTest AudioPlaybackCaptureTest\nTest: atest AudioHostTest AudioServiceHostTest RoutingTest\nTest: atest AudioEffectTest BassBoostTest DynamicsProcessingTest\nTest: atest AAudioTests\nTest: audio smoke test, run OboeTester\nChange-Id: I87f3e59fd01b0b100232d61a9abbc471c61110c4\nMerged-In: I87f3e59fd01b0b100232d61a9abbc471c61110c4\n"
    },
    {
      "commit": "c010683e081f48eb72e21cbcf0458efc17184e6b",
      "tree": "74e8898a4399b0b2fb3693379fcf80b5be1c9199",
      "parents": [
        "8d7522888db87e9533b286431f59c7e0b804a514"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 24 14:58:31 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:42:00 2019 -0800"
      },
      "message": "Refactor opening output interface between AF and AP.\n\nRefactor interface between audio flinger and audio policy. Use device\ndescriptor instead of audio device type and address. DeviceDescriptor\ncan contain more information that may be useful when opening an output\nstream.\nIn audio policy, if multiple audio devices are passed in when opening\nan output stream, one device is extracted using the same strategy as\nwhen selecting a device for volume application. When starting source,\naudio policy manager will call audio flinger to create audio patch. In\nthat case, multiple devices will still be patched to the output stream.\n\nTest: atest AudioTrackTest AudioPlaybackCaptureTest\nTest: atest audiopolicy_tests, audio smoke test\nChange-Id: I46dc2da621614f8716c6c73cf807fe7d2d672cda\nMerged-In: I46dc2da621614f8716c6c73cf807fe7d2d672cda\n"
    },
    {
      "commit": "8d7522888db87e9533b286431f59c7e0b804a514",
      "tree": "ee1a14f6ddd4dea80dac7945c356599cfb5c9628",
      "parents": [
        "020b0dc578cbc5779293e27311c23099996690e0"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Oct 18 15:49:48 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:41:16 2019 -0800"
      },
      "message": "Move libmediahelper into a new folder.\n\nThis change mainly aims at refactoring libmediahelper. Libmediahelper\ndoesn\u0027t need to be stored in media folder. In that case, move\nlibmediahelper related file to a new folder. In the meantime, move\nAudioParameter.h from libaudioclient to libmediahelper. There is no\nneed to keep AudioParameter.h in libaudioclient while AudioParameter.cpp\nis in libmediahelper.\n\nTest: make\nBug: 135621476\nChange-Id: Icce6615b7e3a68be8b7492f2a91922ab04464ca2\nMerged-In: Icce6615b7e3a68be8b7492f2a91922ab04464ca2\n"
    },
    {
      "commit": "020b0dc578cbc5779293e27311c23099996690e0",
      "tree": "96804bc8b4b74591fe3721022335952445f41aaa",
      "parents": [
        "5b78141fb60bb73ee9339497cce5b5111413927e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 05 11:59:53 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:13:50 2019 -0800"
      },
      "message": "Use AudioDeviceTypeAddr in DeviceDescriptorBase.\n\nAudioDeviceTypeAddr is moved to libaudiofoundation. In that case, it can\nbe used in DeviceDescriptorBase.\n\nBug: 135621476\nTest: make, atest audiofoundation_parcelable_test\nTest: play music, record audio\nChange-Id: Ia66dce29c8fb9d25c40598d9bada6eb295313884\nMerged-In: Ia66dce29c8fb9d25c40598d9bada6eb295313884\n"
    },
    {
      "commit": "5b78141fb60bb73ee9339497cce5b5111413927e",
      "tree": "4be7b7f377d843dd25f2ce2beef43c34d9908d49",
      "parents": [
        "ea64c67d2c2ecc6921fea5769d66f52301601857"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Nov 04 14:10:42 2019 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 17:13:50 2019 -0800"
      },
      "message": "Move AudioDeviceTypeAddr to libaudiofoundation.\n\nMove AudioDeviceTypeAddr from AudioPolicy.h to libaudiofoundation.\nAudioDeviceTypeAddr is a class that contains audio device type and\naddress. It can be used not only in audio policy, but also other places.\n\nBug: 135621476\nTest: make, atest AudioHostTest\nChange-Id: Ib257859891c647c07f22771012efdada438a4ff5\nMerged-In: Ib257859891c647c07f22771012efdada438a4ff5\n"
    },
    {
      "commit": "ea64c67d2c2ecc6921fea5769d66f52301601857",
      "tree": "0878f13a6b4577565375fa48092316ed3c1df4c7",
      "parents": [
        "148cbe0814334b0c953f04a49908ac3868564bd0",
        "8ee49b4c5d558e200f2c287c90d195c16bb917df"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 04 00:41:45 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 04 00:41:45 2019 +0000"
      },
      "message": "Merge changes I1d2263f0,Iaa2c8046,Idcf09587,I8bdcd0da,If80513b6, ...\n\n* changes:\n  Add parcelable test for classes in libaudiofoundation.\n  Add export header lib headers to libaudiofoundation_headers.\n  Add equals functions for classes in libaudiofoundation.\n  Make audio stuff parcelable.\n  Clear up bit mask usage in audio policy.\n  Make AudioGain parcelable.\n"
    },
    {
      "commit": "148cbe0814334b0c953f04a49908ac3868564bd0",
      "tree": "c72c99b8b37f529badec286e662f94820bc752af",
      "parents": [
        "cc82581159b8570042e8ab0c4d921c79433d9fd4",
        "af57fae60dfe3eccadd06b29dec4e60b799843b0"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 03 23:15:01 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 03 23:15:01 2019 +0000"
      },
      "message": "Merge \"Merge Android10 QPR1 into AOSP master\""
    },
    {
      "commit": "12dc6b0e9fba8b7a8028d26fe02014fa2efe101e",
      "tree": "b72ebe2d9bd0682eef8613ed8a8cb30359c1a0ff",
      "parents": [
        "4ad3d03f619176464973f04adef235f49255b6ed"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Oct 01 09:38:30 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Dec 03 14:38:42 2019 -0800"
      },
      "message": "Clear up bit mask usage in audio policy.\n\nThis change includes:\n1. Use DeviceTypeSet to represent a combination of audio device types.\n2. Add helper functions for DeviceTypeSet\n3. Stop using audio device type as a bit mask in DeviceVector\n\nTest: atest AudioTrackTest AudioRecordTest AudioPlaybackCaptureTest\nTest: atest AudioHostTest AudioServiceHostTest audiopolicy_tests\nTest: audio smoke test\nChange-Id: If80513b689848bcab6094f70a572f053856afa82\nMerged-In: If80513b689848bcab6094f70a572f053856afa82\n"
    },
    {
      "commit": "38b2c5d794fb142686b200582432c57ebd3c6ba5",
      "tree": "30a901c2add7c902adccd19288ee5c55b0a0886b",
      "parents": [
        "807d3ad2d892b6d75e650e9bdc1d087ada205bd4"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 26 17:56:44 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 14:31:46 2019 -0800"
      },
      "message": "Add audio health tests.\n\nFirst test for audio health check. The test checks if all declared\ndevices found by checking if the audio device types of attached devices\ncan be seen by audio policy.\n\nBug: 141580284\nTest: atest audio_health_tests audiopolicy_tests\nChange-Id: I0374f382eaab7b36ab623b11a59e0634565f2187\nMerged-In: I0374f382eaab7b36ab623b11a59e0634565f2187\n"
    },
    {
      "commit": "807d3ad2d892b6d75e650e9bdc1d087ada205bd4",
      "tree": "cb778c944b11121dd442f64d9a4b0092c92a62b2",
      "parents": [
        "8cb192feee635eb4859eabf3b754427cd6785718"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Sep 23 14:51:40 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 14:30:10 2019 -0800"
      },
      "message": "Move systemaudio_tests to system/media.\n\nBug: 135621476\nTest: atest systemaudio_tests\nChange-Id: I66f6498b0119cd210f7bc159758a105be8bc5d1d\nMerged-In: I66f6498b0119cd210f7bc159758a105be8bc5d1d\n"
    },
    {
      "commit": "8cb192feee635eb4859eabf3b754427cd6785718",
      "tree": "2e034bbeae67c28c0cddf00e20b42997e6185245",
      "parents": [
        "f3d474d651818ecf5d45712d506c39b7e950ef60"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Sep 23 10:34:20 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 14:29:38 2019 -0800"
      },
      "message": "Enable AUDIO_ARRAYS_STATIC_CHECK.\n\nEnable static check for audio arrays so that it can be earlier to catch\nif there is any error within the audio arrays.\n\nBug: 135621476\nTest: make\nChange-Id: I598311e0853ca77dff83fb97974e534adb238567\nMerged-In: I598311e0853ca77dff83fb97974e534adb238567\n"
    },
    {
      "commit": "f3d474d651818ecf5d45712d506c39b7e950ef60",
      "tree": "f9da191b48addf6f25ab71931f2ce850a002158d",
      "parents": [
        "9b307d7e1e381fa693e9ef597067482aa434688c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 19 17:55:16 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 14:28:43 2019 -0800"
      },
      "message": "Add test for device type helper functons.\n\nThe added tests cover:\n1. audio_is_remoute_submix_device\n2. audio_is_digital_in/out_device\n3. audio_idevice_is_digital\n\nTest: atest systemaudio_tests\nBug: 135621476\nChange-Id: Idf8a9db97db6035ecc832a6a9bba6f64f8fc7479\nMerged-In: Idf8a9db97db6035ecc832a6a9bba6f64f8fc7479\n"
    },
    {
      "commit": "9b307d7e1e381fa693e9ef597067482aa434688c",
      "tree": "1e4f282148f598a82ca818aaebd1fc57d3bef344",
      "parents": [
        "d7631f083d26c77e6d027011681d12ca977a7ed2"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Sep 18 15:13:13 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 14:27:43 2019 -0800"
      },
      "message": "Stop using audio device types as bit mask in policy.h\n\nBug: 135621476\nTest: atest AudioHostTest, AudioPlaybackCaptureTest\nTest: atest AudioServiceHostTest, audiopolicy_tests\nTest: listen to music, make phone call with BT device\nTest: test play music via Android Auto emulator\nChange-Id: I154555579b0ebb8b020d00e9c05c8b9f79a08db4\nMerged-In: I154555579b0ebb8b020d00e9c05c8b9f79a08db4\n"
    },
    {
      "commit": "d7631f083d26c77e6d027011681d12ca977a7ed2",
      "tree": "53b8b68e80e4192d0f821036e482d23422d9804e",
      "parents": [
        "f21a5174bc42114b3085f5a76829da505eeaf079"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Sep 16 17:08:21 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 14:19:29 2019 -0800"
      },
      "message": "Add test for audio device type helper functions.\n\nThis CL added test audio device type helper functions, which expect a\nsingle audio device type as a parameter.\n\nBug: 135621476\nTest: atest systemaudio_tests\nChange-Id: I5dac8eab93ab2251eea62b3b8d797f504bf538e4\nMerged-In: I5dac8eab93ab2251eea62b3b8d797f504bf538e4\n"
    },
    {
      "commit": "2350fffd7619fa0587e43dee07e09c40265a432f",
      "tree": "b1d278cf41f8fc55ddfe7a34833b960f7623f2d8",
      "parents": [
        "0a5910188cffc6275f3a0a9eff1626ca711788f4",
        "f21a5174bc42114b3085f5a76829da505eeaf079"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 11:56:25 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Dec 02 11:56:25 2019 -0800"
      },
      "message": "Merge changes I70ebe6bc,I9a6d6401,Icbde26fe,I40299d95,Ifd8eb281, ...\nam: f21a5174bc\n\nChange-Id: I55fc3e1d8020e1e788ac91f1f1f8b700c6fbcb36\n"
    },
    {
      "commit": "0a5910188cffc6275f3a0a9eff1626ca711788f4",
      "tree": "fa00be1dce1d7860390fd8a58ee5801d064156bf",
      "parents": [
        "23cfd8cc5bfd8ed44c153b7713db7478f9a0ce96",
        "a9c48964d4735012212f822f0b8984614d586941"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 11:53:47 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Dec 02 11:53:47 2019 -0800"
      },
      "message": "Merge \"Add test for setDeviceConnectionState.\"\nam: a9c48964d4\n\nChange-Id: I94bb49aee91b1d72af90c211b6b8bc8b42878b58\n"
    },
    {
      "commit": "23cfd8cc5bfd8ed44c153b7713db7478f9a0ce96",
      "tree": "bd23e72cd221c8e78ed5702351ed5b25bc95fe0b",
      "parents": [
        "837798c7e3600ae424a0e8d6badcbae0762f53cd",
        "4cabab17c4a83791061028af33b6e582da4638e4"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Dec 02 11:53:14 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Dec 02 11:53:14 2019 -0800"
      },
      "message": "Merge \"Refactor audiopolicymanager_tests.\"\nam: 4cabab17c4\n\nChange-Id: I198941bcd4bd5df51c946c504ee7b4a1334a5ee1\n"
    },
    {
      "commit": "f21a5174bc42114b3085f5a76829da505eeaf079",
      "tree": "1090d56e69ef68230d89e236fc913436ec1cc423",
      "parents": [
        "a9c48964d4735012212f822f0b8984614d586941",
        "6713a38298ccd91ba1718e559f057c705904f865"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 19:50:51 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Dec 02 19:50:51 2019 +0000"
      },
      "message": "Merge changes I70ebe6bc,I9a6d6401,Icbde26fe,I40299d95,Ifd8eb281, ...\n\n* changes:\n  Create DeviceDescriptorBase.\n  Copy DeviceDescriptor to libaudiofoundation.\n  Rename AudioPort and PolicyAudioPort accordingly.\n  Make audio port in policy not derive from audio port base\n  Rename AudioProfileVector.h as AudioProfileVectorHelper.h\n  Leave AudioProfileVector only in libaudiofoundation.\n"
    },
    {
      "commit": "6713a38298ccd91ba1718e559f057c705904f865",
      "tree": "a85b701316bf17a62e50376b271778dc6f4d8e96",
      "parents": [
        "2177b121ab8fc29c836719353b898456a671e728"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 12 16:29:15 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 27 11:04:33 2019 -0800"
      },
      "message": "Create DeviceDescriptorBase.\n\nDeviceDescriptorBase is a class that derives from AudioPort and\nAudioPortConfig and contains extensions to describe a audio port that is\na hardware device. DeviceDescriptor derives from DeviceDescriptorBase\nand contains policy related stuff.\n\nTest: atest AudioTrackTest AudioRecordTest AudioManagerTest\nTest: atest AudioPlaybackCaptureTest AudioHostTest audiopolicy_tests\nTest: audio smoke test\nBug: 135621476\nChange-Id: I70ebe6bca70a77bbfc8f6855de3fd4c4ffa1c487\nMerged-In: I70ebe6bca70a77bbfc8f6855de3fd4c4ffa1c487\n"
    },
    {
      "commit": "dd81cc2046346b92dc2c7c92d5a7628471bb5218",
      "tree": "24548543a9d9b63e68299105e8c09b41303fe7d0",
      "parents": [
        "dff2a4f7fcf16ea320684f9ca04bc05b8bf1b5b8"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Sep 11 10:15:46 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 27 11:03:39 2019 -0800"
      },
      "message": "Rename AudioPort and PolicyAudioPort accordingly.\n\nMake the file name consistent as the class name.\n\nTest: make\nBug: 135621476\nChange-Id: Icbde26fe1798e344c3746f4678db098688456654\nMerged-In: Icbde26fe1798e344c3746f4678db098688456654\n"
    },
    {
      "commit": "dff2a4f7fcf16ea320684f9ca04bc05b8bf1b5b8",
      "tree": "7a6363492021a517099fc38a67efcacd377768dc",
      "parents": [
        "c02546150da2b87e71ed6d2df8abf48791ad79cb"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 10 14:29:54 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 27 11:02:54 2019 -0800"
      },
      "message": "Make audio port in policy not derive from audio port base\n\nThis patch aims to make the structure for libaudiofoundation and policy\nstuff simpler, including:\n1. Make AudioPortBase as AudioPort in libaudiofoundation. Create\nPolicyAudioPort that contains policy related stuff, which is used by\naudiopolicy.\n2. Make AudioPortConfigBase as AudioPortConfig in libaudiofoundation.\nCreate PolicyAudioPortConfig that contains policy related stuff.\n3. DeviceDescriptor derives from AudioPort, AudioPortConfig, PolicyAudioPort\nand PolicyAudioPortConfig. IOProfile derives from AudioPort,\nPolicyAudioPort. AudioInputDescriptor/AudioOutputDescriptor derives from\nAudioPortConfig, PolicyAudioPortConfig.\n\nTest: atest AudioTrackTest, AudioRecordTest, AudioManagerTest\nTest: atest audiopolicy_tests, AudioHostTest\nTest: audio smoke test\nBug: 135621476\nChange-Id: I40299d95dda3b3fc0ea88b079f2fe38d8f7e5b31\nMerged-In: I40299d95dda3b3fc0ea88b079f2fe38d8f7e5b31\n"
    },
    {
      "commit": "c02546150da2b87e71ed6d2df8abf48791ad79cb",
      "tree": "88ecb87c7a96f1fa100f3c2133788a093c6a4b57",
      "parents": [
        "b9733bc444e79abf65fd18be3c25cb7e9499b7ad"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 10 14:29:14 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 27 10:51:54 2019 -0800"
      },
      "message": "Rename AudioProfileVector.h as AudioProfileVectorHelper.h\n\nThe file only contains helper functions for AudioProfileVector.\n\nTest: make\nBug: 135621476\nChange-Id: Ifd8eb281cbb7d6395fd5d4b4d6f308d58e6ded3d\nMerged-In: Ifd8eb281cbb7d6395fd5d4b4d6f308d58e6ded3d\n"
    },
    {
      "commit": "b9733bc444e79abf65fd18be3c25cb7e9499b7ad",
      "tree": "fc5fa1bbe0ee8f698e81ac59d5e42c8d613b7fb5",
      "parents": [
        "1e415c058a14bf9ba2683685c40deda1dad6cd9c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 10 14:27:34 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 27 10:51:25 2019 -0800"
      },
      "message": "Leave AudioProfileVector only in libaudiofoundation.\n\nMake AudioProfileVector only in libaudiofoundation. In policy part,\ninstead of having policy specific AudioProfileVector deriving from\nAudioProfileVector in libaudiofoundation, make all the functions as\nglobal functions. In that case, AudioPortBase does not need to be a\ntemplate class. That helps make the structure clearer.\n\nTest: audio smoke test\nTest: CTS for AudioTrack, AudioRecord, AudioManager\nTest: audiopolicy_tests, AudioHostTest\nBug: 135621476\nChange-Id: I36b12123cf52c3f82cef09a965403791dff74093\nMerged-In: I36b12123cf52c3f82cef09a965403791dff74093\n"
    },
    {
      "commit": "f9bd900f18a3092a3ec28776e8fdfd260b081f4b",
      "tree": "0f86d5a77d1096a23b295264625844e67449e5a5",
      "parents": [
        "890df85d72d163bec59d1f20312768300bc1d5f9"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 05 14:07:25 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 27 10:39:41 2019 -0800"
      },
      "message": "Add test for setDeviceConnectionState.\n\nThe test uses HDMI and bt hfp to test setting of device connection\nstate. After the device is connected, the test tries to use explicit\nrouting to the new connected device to make sure the connection state is\nset correctly.\n\nBug: 135621476\nTest: atest audiopolicy_tests\nChange-Id: I14759daac6d3522fa133a6e3b27b3863bb4ce3d1\nMerged-In: I14759daac6d3522fa133a6e3b27b3863bb4ce3d1\n"
    },
    {
      "commit": "890df85d72d163bec59d1f20312768300bc1d5f9",
      "tree": "823e2c973a610e52ecfe65b769c24e8e98267223",
      "parents": [
        "1e415c058a14bf9ba2683685c40deda1dad6cd9c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 05 10:26:04 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 27 10:38:16 2019 -0800"
      },
      "message": "Refactor audiopolicymanager_tests.\n\nThe refactor includes:\n1. Allow to set up audio policy manager with configuration file.\n2. Allow explicitly routing.\n\nBug: 135621476\nTest: atest audiopolicy_tests\nChange-Id: Idf6d76bc78a74b56eb55bc7b9458bebba8f367d8\nMerged-In: Idf6d76bc78a74b56eb55bc7b9458bebba8f367d8\n"
    },
    {
      "commit": "7cde662ae30119b45f5530ade23d77ff3c82ad4e",
      "tree": "07b6817d8c255a906df609d98e9491e12e1338e7",
      "parents": [
        "4ace9df58e5a45ac334289a85f668fb641178d6c",
        "1e415c058a14bf9ba2683685c40deda1dad6cd9c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 17:21:56 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Nov 26 17:21:56 2019 -0800"
      },
      "message": "Merge changes I05611b70,I6cd1a53e,Ic2e08efc,I13ac0673,I0d87fd76\nam: 1e415c058a\n\nChange-Id: I44c7cdbc4a57cd681e054b61d602f21d854e48b5\n"
    },
    {
      "commit": "4ace9df58e5a45ac334289a85f668fb641178d6c",
      "tree": "d18971db8ab548383004bd1137051f020394bc33",
      "parents": [
        "3c4f15aee159bc97a1a551f4a7608eff76f2f703",
        "8121bf7c57fbe4b29699c22164768b3e911aeb8f"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 17:18:44 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Nov 26 17:18:44 2019 -0800"
      },
      "message": "Merge \"Add unit test for dynamic policy.\"\nam: 8121bf7c57\n\nChange-Id: Ibb02ec372f31bdca06f1faa968b32de23c33824c\n"
    },
    {
      "commit": "1e415c058a14bf9ba2683685c40deda1dad6cd9c",
      "tree": "994d049704547e2b78f160ecec8f7649bcd83dd8",
      "parents": [
        "8121bf7c57fbe4b29699c22164768b3e911aeb8f",
        "eaf09f089a42f7a7ea39339e93b358b37b58956f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 27 01:15:30 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 27 01:15:30 2019 +0000"
      },
      "message": "Merge changes I05611b70,I6cd1a53e,Ic2e08efc,I13ac0673,I0d87fd76\n\n* changes:\n  Add AudioPortFoundation, AudioPortBase and AudioPortConfigBase.\n  Copy AudioPort.h to libaudiofoundation.\n  Make AudioProfile as a common class and create AudioProfileVectorBase.\n  Preparation for moving AudioProfile to libaudiofoundation.\n  Return DeviceDescriptor or DeviceVector in Engine.\n"
    },
    {
      "commit": "723ed138e8e105ccac62c5f94bf95f05a5d8d2b8",
      "tree": "d3a79a7c11770ee44427aeb2c2e180ab448aea20",
      "parents": [
        "16bcc29edb3dac99f85abfe47ea5e731fd977769"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 28 15:31:47 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 15:52:37 2019 -0800"
      },
      "message": "Add unit test for dynamic policy.\n\nAdd unit test for dyanmic policy. Including:\n    1. Use bp file instead of mk file\n    2. Test (un)registering policy mixes\n    3. Test dynamic policy playback rerouting\n    4. Test dynamic policy mix record injection\nThe idea of 3. and 4. is from pa/1201282.\n\nTest: atest audiopolicy_tests\nBug: 135621476\nChange-Id: Ic95c6f9193c2448168897c5441554cff735f401d\nMerged-In: Ic95c6f9193c2448168897c5441554cff735f401d\n"
    },
    {
      "commit": "eaf09f089a42f7a7ea39339e93b358b37b58956f",
      "tree": "f91620a31611160cc06ce12a1ba69dd15583e04e",
      "parents": [
        "736ffc105e64398dfa789bec3be880c7a1809761"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Aug 19 15:08:30 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 15:26:53 2019 -0800"
      },
      "message": "Add AudioPortFoundation, AudioPortBase and AudioPortConfigBase.\n\nThe purpose of this change is to make a generic AudioPort class that\ncould be used by vendor.\n1. Add AudioPortFoundation and AudioPortBase. AudioPortFoundation\ncontains generic members of an audio port. AudioPortBase is a template\nclass that derives from AudioPortFoundation. It takes audio profile\nvector as a template parameters. That makes it more feasible to use\ncustomized audio profile stuff as needed. In audio policy, AudioPort\nderives from AudioPortBase and contain policy related stuff.\n2. Add AudioPortConfigBase. AudioPortConfigBase contains generic members\nof an audio port config. AudioPortConfig derives from AudioPortConfigBase\nand contains policy related stuff.\n3. Use std::string instead of String8 in AudioPort and AudioPortConfig.\n\nBug: 135621476\nTest: CTS for AudioRecord, AudioTrack, AudioManager, RoutingTest\nTest: audiopolicy_tests, AudioServiceHostTest\naudio smoke test\nTest: dumpsys media.audio_policy\nChange-Id: I05611b7067c18006660de2c678acd56bdd34010a\nMerged-In: I05611b7067c18006660de2c678acd56bdd34010a\n"
    },
    {
      "commit": "b677643c52cec078ae2f25eeabb6350f6b32010a",
      "tree": "0620c5106519ffd18a5361f272e249af9252215a",
      "parents": [
        "59a8759e91d4cd806026fd95e329e9a9d2b14313"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Aug 19 10:10:17 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 15:26:24 2019 -0800"
      },
      "message": "Make AudioProfile as a common class and create AudioProfileVectorBase.\n\nAudioProfile is a class that contains information for an audio profile.\nAudioProfileVectorBase is a base class that contains operations for a\nvector of audio profiles. AudioProfileVector derives from\nAudioProfileVectorBase and contains policy related stuff.\n\nBug: 135621476\nTest: CTS for AudioRecord, AudioTrack, AudioManager\nTest: audio smoke test, audiopolicy_tests\nTest: dumpsys media.audio_policy\nChange-Id: Ic2e08efcc5efa99e499a931811b7042fbd5ddf04\nMerged-In: Ic2e08efcc5efa99e499a931811b7042fbd5ddf04\n"
    },
    {
      "commit": "59a8759e91d4cd806026fd95e329e9a9d2b14313",
      "tree": "5a706d8c78e114fe1785b53f71fc9763fae5c8fe",
      "parents": [
        "147f5c318877c4fa8afa8e97208c109abf58c1cd"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Aug 13 15:17:08 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 15:26:24 2019 -0800"
      },
      "message": "Preparation for moving AudioProfile to libaudiofoundation.\n\nCopy AudioProfile from audio policy to libaudiofoundation. Note that\nAudioProfile in libaudiofoundation has not been added into the make\nfile as it needs some more change to make it work. Doing this just to\nmake a cleaner diff for later change.\nRename AudioProfile in managerdefinitions folder as AudioProfileVector\nsince AudioProfile will be moved to libaudiofoundation.\n\nBug: 135621476\nTest: make\nChange-Id: I13ac067317648bbfd8d3960d16a1ea56ded83011\nMerged-In: I13ac067317648bbfd8d3960d16a1ea56ded83011\n"
    },
    {
      "commit": "147f5c318877c4fa8afa8e97208c109abf58c1cd",
      "tree": "66656efb03caa2e12a7bc97f764d5b3a38837c92",
      "parents": [
        "16bcc29edb3dac99f85abfe47ea5e731fd977769"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 07 14:43:33 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 14:27:02 2019 -0800"
      },
      "message": "Return DeviceDescriptor or DeviceVector in Engine.\n\nTo remove the limit on the number of audio device types, there is a\nneed to remove the return value as a combination of audio_devices_t.\nUsing DeviceDescriptor or DeviceVector in Engine is a starting point.\n\nTest: audiopolicy_tests, smoke test\nTest: CTS for AudioTrack, AudioRecord, AudioManager\nBug: 135621476\nChange-Id: I0d87fd76385629e6e6b74cdd37dbd334ae02c04f\nMerged-In: I0d87fd76385629e6e6b74cdd37dbd334ae02c04f\n"
    },
    {
      "commit": "3c4f15aee159bc97a1a551f4a7608eff76f2f703",
      "tree": "6201871204d5bf094979b67a80cf0d114bce51db",
      "parents": [
        "9350e40427202b21750a9ad9d631e2afb1638ad6",
        "16bcc29edb3dac99f85abfe47ea5e731fd977769"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 13:05:58 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Nov 26 13:05:58 2019 -0800"
      },
      "message": "Merge changes from topics \"AddLibaudiofoundation\", \"stdContainers\"\nam: 16bcc29edb\n\nChange-Id: Idc024b9da351b6931482f51da09c0299aa214f22\n"
    },
    {
      "commit": "4562b3b99b5462bd475325bd19a6047c30ce282a",
      "tree": "2e6200fbf5d873e90bdf6f6ccf45ef0c7a871aa3",
      "parents": [
        "41502b244f6107ed57330eb447d8e29960b9cf4f"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Jul 29 10:13:34 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 11:41:08 2019 -0800"
      },
      "message": "Use standard containers for audio stuff in audio framework\n\n1. Add SampleRateSet, FormatSet, ChannelMaskSet, FormatVector\nusing std::vector and std::set in libaudiofoundation.\n2. Use SampleRateSet, FormatSet, ChannelMaskSet, FormatVector in\naudio framework.\n\nBug: 135621476\nTest: make, CTS for AudioRecord, AudioTrack, AudioManagerTest\nTest: play and record audio\nChange-Id: Ic04e637bcc6ba9df84c5e7561ec3c03f18a7d242\nMerged-In: Ic04e637bcc6ba9df84c5e7561ec3c03f18a7d242\n"
    },
    {
      "commit": "41502b244f6107ed57330eb447d8e29960b9cf4f",
      "tree": "63cf7c0b4e160cfd242bfbb603b6568aa89f0815",
      "parents": [
        "b8ec243b5f142edb13102bb76b887496d3a5cd5e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Jul 31 09:59:09 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 26 11:29:16 2019 -0800"
      },
      "message": "Move AudioGain to libaudiofoundation.\n\n1. Create folder for libaudiofoudation.\n2. Move AudioGain to libaudiofoudation. The goal is to make AudioGain\nbe able to use in binder call and be vendor-available later.\n\nBug: 135621476\nTest: make, CTS for AudioTrack, AudioRecord, AudioManagerTest\nChange-Id: Ibf16ad9cb7f2ac657a02632ccbe4f934b5a12731\nMerged-In: Ibf16ad9cb7f2ac657a02632ccbe4f934b5a12731\n"
    },
    {
      "commit": "4f3ac4d0555229a41273107ff0987018ef6b69e1",
      "tree": "b17a402fe68ef0b1c80d234d14ff6d6b7f45715e",
      "parents": [
        "bde7aa5551cc67c2b47f1f67cb66c56b824c1a65",
        "d6f189b4c790f88d72c2227cebbbb8a59cbe8a4e"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Fri Nov 22 10:56:08 2019 -0800"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Sun Nov 24 05:16:33 2019 +0000"
      },
      "message": "DO NOT MERGE - Merge QQ1A.191205.011 into stage-aosp-master\n\nBug: 144955631\nMerged-In: I242aebe71ffe7d348eca213252f1691fd444703e\nChange-Id: I40ae7732b4435dc9aa9a3edb57275505e4112a4c\n"
    },
    {
      "commit": "a4f8c20bf985d4a6d3a108d6813fe01d5b41cd55",
      "tree": "36c529afa2ebdbbe4a31b8649aaf60cd957ff979",
      "parents": [
        "f1a372c1792ad6b92a7cabd804a5195589daf8e0",
        "aa59be48d4385700852552e3359f5c41a73fcd16"
      ],
      "author": {
        "name": "Emilian Peev",
        "email": "epeev@google.com",
        "time": "Wed Nov 20 08:20:02 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 20 08:20:02 2019 -0800"
      },
      "message": "Merge \"Camera: Check consumer interface before disconnecting\"\nam: aa59be48d4\n\nChange-Id: I2c1b1878b8ca56bcce5a977afec2170a62a738a0\n"
    },
    {
      "commit": "aa59be48d4385700852552e3359f5c41a73fcd16",
      "tree": "e266a87d2b582ced8392bb2063dc81c996392a4b",
      "parents": [
        "a8129f7246dfb580158a002d06492c699183101c",
        "359adca4b7cf734ab9a0d27a005b9f6dfdc0ad8e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 20 16:05:27 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 20 16:05:27 2019 +0000"
      },
      "message": "Merge \"Camera: Check consumer interface before disconnecting\""
    },
    {
      "commit": "32dc26e71cb0493f15b4b6480d991ad283405b42",
      "tree": "670c5f2c708143dc5e0a106eb256b7686b178f09",
      "parents": [
        "429f364cc4eb0f42298461b88cc3b197f46c04f3"
      ],
      "author": {
        "name": "Jindong",
        "email": "jindong.yue@nxp.com",
        "time": "Mon Nov 11 18:10:01 2019 +0800"
      },
      "committer": {
        "name": "fang hui",
        "email": "hui.fang@nxp.com",
        "time": "Wed Nov 20 10:41:15 2019 +0000"
      },
      "message": "Sometimes no audio output after playing some clips using Files.apk\n\nSometimes after switching songs in Files, audio driver\nenters \"PAUSED\" state, and no sound anymore.\n\nIn normal case, \"paused\" track will be removed from active tracks,\nthen audio hal will make this stream enter standby mode.\n\nActually there are two paths to move paused tracks into standby mode:\n1\u003e track underruns twice:\n    if (--(track-\u003emRetryCount) \u003c\u003d 0) {  // mRetryCount is 2\n        tracksToRemove-\u003eadd(track);\n    } else {\n        doHwPause \u003d true;   // pause\n    }\nUnfortunately, this issue happened exactly in the middle state:\ntrack underrun for the first time, it enters to paused state;\nthen before it underrun for second time, it is stopped due to MediaPlayer.\n\n2\u003e track is paused and code goes here:\n    if (mStandby || !last ||\n            track-\u003epresentationComplete(framesWritten, audioHALFrames) ||\n            track-\u003eisPaused() ||\n+           track-\u003eisStopped()) {\n        tracksToRemove-\u003eadd(track);\n    }\nBut when the issue happens, track is in stopped state,\nthere is no logic to standby it anymore, so add one.\n\nChange-Id: I70cac1f3d6b065690400f6a2363712d4642a9763\n"
    },
    {
      "commit": "5ba6aad24b0227ced4973d3b49e17c8e09bf9b3f",
      "tree": "ef788306c45ea97650a6735ba0d5aba84eb08d87",
      "parents": [
        "ddb2d1dc3dd0e05be658c5ebe40d9490323f76c4",
        "db1cb2c7481faee30a07e08759f2d85b9ed3e954"
      ],
      "author": {
        "name": "Nick Desaulniers",
        "email": "ndesaulniers@google.com",
        "time": "Wed Nov 06 07:48:40 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 06 07:48:40 2019 -0800"
      },
      "message": "Merge \"[audiopolicy] fix -Wreorder-init-list\"\nam: db1cb2c748\n\nChange-Id: I5a024daa0fc57238c35b794b29a8b2153beb0ac5\n"
    },
    {
      "commit": "db1cb2c7481faee30a07e08759f2d85b9ed3e954",
      "tree": "f94d16b8e7f62f5a81cc72ffd92a064a07d18bf5",
      "parents": [
        "af5e66cb0163a3b6765e434234b2a4ee291307a5",
        "cb137d0ead90f63e9b67bd9af21425b32ebc150d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 06 15:37:30 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 06 15:37:30 2019 +0000"
      },
      "message": "Merge \"[audiopolicy] fix -Wreorder-init-list\""
    },
    {
      "commit": "ddb2d1dc3dd0e05be658c5ebe40d9490323f76c4",
      "tree": "0524cf0107adc8f810a5db0e7fc19531e0039b2b",
      "parents": [
        "5786209cbb449ecb68e8d359872e77773de7b548",
        "af5e66cb0163a3b6765e434234b2a4ee291307a5"
      ],
      "author": {
        "name": "Tao Wu",
        "email": "lepton@google.com",
        "time": "Tue Nov 05 15:54:52 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Nov 05 15:54:52 2019 -0800"
      },
      "message": "Merge \"AudioFlinger: Initialize frames to zero.\"\nam: af5e66cb01\n\nChange-Id: I1995d5f4e137e10718e067459d837bf30829b7f5\n"
    },
    {
      "commit": "1eb82df62c86dace5f0f56f00e631c7696177a63",
      "tree": "4a3c77f27d887dbcab0defc47472fe33855ee00c",
      "parents": [
        "5c031de66210ecbec85792c6da1c65313b9e22fa"
      ],
      "author": {
        "name": "Tao Wu",
        "email": "lepton@google.com",
        "time": "Tue Nov 05 10:20:18 2019 -0800"
      },
      "committer": {
        "name": "Tao Wu",
        "email": "lepton@google.com",
        "time": "Tue Nov 05 10:24:36 2019 -0800"
      },
      "message": "AudioFlinger: Initialize frames to zero.\n\nOtherwise we could return the uninitialized value when result !\u003d OK.\n\nBug: 143955791\nTest: manual - Run the test in the bug and it doesn\u0027t crash.\nChange-Id: I23b2b0a20202152648a3e40650965bba45127ff3\n"
    },
    {
      "commit": "8fe02b24e4cdf93cb1c004b7d77c01671bd44916",
      "tree": "b98bc23bfd5801683f09420cbeb179b2d24a0992",
      "parents": [
        "3066e206366b25b6b64cf0ad29188bd04b56b183"
      ],
      "author": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Fri Oct 25 11:01:00 2019 -0700"
      },
      "committer": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Fri Nov 01 10:55:38 2019 -0700"
      },
      "message": "cameraserver: filter out non-HAL3 devices from HIDL addListener.\n\nBug: 143192708\n\nTest: Use vendor clients of cameraserver\nTest: GCA (sanity)\n\nMerged-In: Ic31f71887b55f3d838ca35274a5f65802ea50584\nChange-Id: I51ae92d3596a962ca6ca551f8fab9fd0c77b6283\nSigned-off-by: Jayant Chowdhary \u003cjchowdhary@google.com\u003e\n"
    },
    {
      "commit": "6fcb941084faecce31909f1c50ee1ba442244f8b",
      "tree": "d8904b383fd5d7e01c3c966c1c57c44266dbad18",
      "parents": [
        "22cd27bcc50b17ebb5104400cece4c34f1729930",
        "c499a089250910118da5a292794d0dc1c9053171"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Wed Oct 30 14:30:59 2019 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Wed Oct 30 14:30:59 2019 -0700"
      },
      "message": "DO NOT MERGE - qt-qpr1-dev-plus-aosp-without-vendor@5915889 into stage-aosp-master\n\nBug: 142003500\nChange-Id: I0de886061b2d75f9c37e8edbd4e7e08225d0186b\n"
    },
    {
      "commit": "359adca4b7cf734ab9a0d27a005b9f6dfdc0ad8e",
      "tree": "741e8f07f2f56c89d2e42e32233d5c4e9d6c0c37",
      "parents": [
        "2218ec1a22bb644669b7c142cea1a06c00abcf49"
      ],
      "author": {
        "name": "Emilian Peev",
        "email": "epeev@google.com",
        "time": "Wed Oct 30 10:12:46 2019 -0700"
      },
      "committer": {
        "name": "Emilian Peev",
        "email": "epeev@google.com",
        "time": "Wed Oct 30 21:06:40 2019 +0000"
      },
      "message": "Camera: Check consumer interface before disconnecting\n\nThe internal buffer queue and respective \u0027mConsumer\u0027 may\nnever get initialized in case the connection and/or\nconfiguration of client shared output surfaces fails.\nTo avoid possible instabilities check whether the\nconsumer interface is valid before trying to disconnect.\n\nBug: 143506890\nTest: atest\ncts/tests/camera/src/android/hardware/camera2/cts/MultiViewTest.java\n\nChange-Id: Ia533233444fd548ddb52f4fde06212a21bc843bc\n"
    },
    {
      "commit": "ec565c575d029bdef8bcdf9762276b44255e5dfb",
      "tree": "660e5fa119829f2528809ec9c7ecfb4cc27d7082",
      "parents": [
        "001b8646402131b5e55c6633971b9d9a851cd18e",
        "a2bc7eada863d845b04c85195dbb26df37bdef69"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 13:08:26 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Oct 25 13:08:26 2019 -0700"
      },
      "message": "Merge \"Remove more header symlinks\"\nam: a2bc7eada8\n\nChange-Id: I690dd345b0a74078b7cae24bdf3fdb2549d8c62d\n"
    },
    {
      "commit": "a2bc7eada863d845b04c85195dbb26df37bdef69",
      "tree": "b17e23ebf1c9551620b761a4918994cf930ab6e9",
      "parents": [
        "f65c700c2947c2e89b2b8ced10972fab29ae175d",
        "6b2859450f91f1cdd8b3ca2435df4dd37907cd8a"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 19:47:54 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 25 19:47:54 2019 +0000"
      },
      "message": "Merge \"Remove more header symlinks\""
    },
    {
      "commit": "6b2859450f91f1cdd8b3ca2435df4dd37907cd8a",
      "tree": "4accc947ac99fa7246f5f7fc54f35b3c960636b1",
      "parents": [
        "35f148bc5a1cb1efffd9aee0223a06720a303329"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Oct 21 14:52:30 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 24 21:25:53 2019 +0000"
      },
      "message": "Remove more header symlinks\n\nTest: build\nBug: 143245419\nChange-Id: I9bb03d54c7792625b73602f2d3721e29f8f929be\n"
    },
    {
      "commit": "37062b54f37ebd4dc3542acdc50f2550574fd8bd",
      "tree": "4ccc450091a41852bef103979e808ef7b2433e57",
      "parents": [
        "fab4ec8a2e3dbfc1c22100ed4cdce71af40cd7a1",
        "f7902c01f85ba4941cbfa19fe105e9235426d857"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Thu Oct 24 12:42:49 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 24 12:42:49 2019 -0700"
      },
      "message": "Merge \"Fix memory leaks in mediaanalytics\"\nam: f7902c01f8\n\nChange-Id: Ie78dbefaf12fb00fa8c4d1f352de87b43c7263bb\n"
    },
    {
      "commit": "f7902c01f85ba4941cbfa19fe105e9235426d857",
      "tree": "66ec5705360f462f6b7c65bc7c362b8f5e7231ed",
      "parents": [
        "9a5a544b235358543715cbaa54cca7ca0737d1e7",
        "0d81443b766dc1a45b44054e0fee03bcc0854b79"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Thu Oct 24 19:31:52 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 24 19:31:52 2019 +0000"
      },
      "message": "Merge \"Fix memory leaks in mediaanalytics\""
    },
    {
      "commit": "0d81443b766dc1a45b44054e0fee03bcc0854b79",
      "tree": "208e888a2afddd450b2a99b28840152f6a067018",
      "parents": [
        "35f148bc5a1cb1efffd9aee0223a06720a303329"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Oct 23 11:32:26 2019 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Thu Oct 24 18:18:57 2019 +0000"
      },
      "message": "Fix memory leaks in mediaanalytics\n\nThis fixes \u003e a dozen potential leaks flagged by clang\u0027s static\nanalyzer, and fixes the use of other nearby manual memory management.\n\nBug: None\nTest: TreeHugger\nChange-Id: I8af2523804986b278150291fb2dc7ca5af8391ee\n"
    },
    {
      "commit": "460618a6d10680db68cb3c1104227bd99b587fdc",
      "tree": "b7993f47ad5d9079d2913017456bbc47d0f4d630",
      "parents": [
        "b87d0ade25067d3f3e03245fd77e43fd7a238e7e",
        "84a53822a1a24785dfa5da63e364753423ae8257"
      ],
      "author": {
        "name": "Dongwon Kang",
        "email": "dwkang@google.com",
        "time": "Wed Oct 23 09:45:03 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Oct 23 09:45:03 2019 -0700"
      },
      "message": "Merge changes from topic \"libdrmframework\"\nam: 84a53822a1\n\nChange-Id: I035c393c2e27fa83fcbcf1aa3b90b7dda5cc4ea6\n"
    },
    {
      "commit": "84a53822a1a24785dfa5da63e364753423ae8257",
      "tree": "efb0ef18e6a76d6f69dd9c873bc6ec7c9ab5fe18",
      "parents": [
        "80d3d96941be2d110f30e3147c4e4fbbded05730",
        "9c6f790843939700fa18779f14b1df5fa1161024"
      ],
      "author": {
        "name": "Dongwon Kang",
        "email": "dwkang@google.com",
        "time": "Wed Oct 23 16:28:37 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 23 16:28:37 2019 +0000"
      },
      "message": "Merge changes from topic \"libdrmframework\"\n\n* changes:\n  Remove libdrmframework.so dependency from libdatasource.so\n  Make DataSourceFactory singletone\n"
    },
    {
      "commit": "8863a154f82f06b7267348d5d8f6a371d90ba1cb",
      "tree": "6b3baba11f2a280775416eeb6c17bfc23a7c1503",
      "parents": [
        "4520fef512aa02e8557b147104cc343bc2994910",
        "c52243f298aa3e570197831c8c383fdedb8f4ac6"
      ],
      "author": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Mon Oct 21 11:10:06 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Oct 21 11:10:06 2019 -0700"
      },
      "message": "Merge changes from topic \"hiddenCameraDeadlock\"\nam: c52243f298\n\nChange-Id: Iced231eeaf55af13dfff514f21ce3398cdbd6a0c\n"
    },
    {
      "commit": "cb137d0ead90f63e9b67bd9af21425b32ebc150d",
      "tree": "aac38fef56e7fc6051426395922088854f4a03ad",
      "parents": [
        "c52243f298aa3e570197831c8c383fdedb8f4ac6"
      ],
      "author": {
        "name": "Nick Desaulniers",
        "email": "ndesaulniers@google.com",
        "time": "Tue Oct 15 18:30:45 2019 -0700"
      },
      "committer": {
        "name": "Nick Desaulniers",
        "email": "ndesaulniers@google.com",
        "time": "Mon Oct 21 10:55:49 2019 -0700"
      },
      "message": "[audiopolicy] fix -Wreorder-init-list\n\nC++20 will require members in a designated initializer to be in order\nunlike C99.\n\nBug: 139945549\nTest: mm\nChange-Id: I610f4e8a8a9d69eb650c354df4bd1438a1408897\nMerged-In: Ie129344a36893adc82e67181012e3af817bda9f4\nSigned-off-by: Nick Desaulniers \u003cndesaulniers@google.com\u003e\n"
    },
    {
      "commit": "c52243f298aa3e570197831c8c383fdedb8f4ac6",
      "tree": "ef93786ab04ffd918b68adbb25d1c3a43633d791",
      "parents": [
        "4426ce8d95c78ba08d86c6d6c7f329033c1876c8",
        "fd39db81e44e191baa476a579de6cc2618de025a"
      ],
      "author": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Mon Oct 21 17:00:19 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 21 17:00:19 2019 +0000"
      },
      "message": "Merge changes from topic \"hiddenCameraDeadlock\"\n\n* changes:\n  cameraserver: Avoiding deadlocks while calling isPublicallyHiddenSecureCamera().\n  Do not include hidden secure cameras in camera1: getNumberOfCameras\n"
    },
    {
      "commit": "fd39db81e44e191baa476a579de6cc2618de025a",
      "tree": "bbd531650f20bb1a84b0e169b32fc558835313f4",
      "parents": [
        "56c3307952478ba42bf33ad88d8e0e194623224a"
      ],
      "author": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Mon Oct 07 15:26:41 2019 -0700"
      },
      "committer": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Wed Oct 16 14:48:24 2019 -0700"
      },
      "message": "cameraserver: Avoiding deadlocks while calling isPublicallyHiddenSecureCamera().\n\nThe following scenario can occur:\n\n T1 serving Client A\u0027s disconnect() call:\n   T2 : serving Client B\u0027s connect() call\n     T2 : CameraProviderManager::openSession() locks mInterfaceMutex and waits on open() HAL\n          interface call\n       T1: updateStatus() locks mStatusListenerMutex\n         T1: CameraProviderManager::isPublicallyHiddenSecureCamera() waits\n             on mInterfaceMutex\n           T2: while waiting on open(), gets a torchModeStatus() callback from the camera HAL\n              T2: onStatusChanged()\n                T2: broadcastTorchModeStatus() which waits on mStatusListenerMutex\n\nAs a result there\u0027s a possible circular hold and wait between T1 and T2.\n\nWe cache isPublicallyHiddenSecureCamera in CameraState. That doesn\u0027t completely\navoid having to hold mInterfaceLock while calling isPublicallyHiddenSecureCamera() in CameraService\n(cache updates), instead it reduces it. We instead need to hold mCameraStates lock which has a\nsmaller scope.\n\nBug: 141756275\n\nTest: CTS\nTest: GCA (sanity)\n\nMerged-In: I4a697c1eaccc3603007be4a595febea981fbeb64\nChange-Id: Ie5508afb126a874f76fbbfc2dd19ef79ae6255e0\nSigned-off-by: Jayant Chowdhary \u003cjchowdhary@google.com\u003e\n"
    },
    {
      "commit": "56c3307952478ba42bf33ad88d8e0e194623224a",
      "tree": "041c5c18627f7511034af70ab2f6815d1a783620",
      "parents": [
        "9ee56ec1a7ace45b42b65e01fdda98114b5c0833"
      ],
      "author": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Wed Sep 18 20:14:02 2019 -0700"
      },
      "committer": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Wed Oct 16 13:53:39 2019 -0700"
      },
      "message": "Do not include hidden secure cameras in camera1: getNumberOfCameras\n\nApps cannot connect to hidden secure cameras. Do not include them in the\nnumber of cameras reported by camera1 api.\n\nBug: 141247926\n\nTest: Without CL -\u003e mark all cameras as hidden secure cameras;\n      atest FastBasicsTest.java#testCamera1 fails\n      With CL -\u003e mark all cameras as hidden secure cameras;\n      atest FastBasicsTest.java#testCamera1 passes\n\nTest: camera CTS\n\nMerged-In: I9d1721fd5e94fa7f692c3da52aa667ae9247d368\nChange-Id: I229a336bed6b2695e16c1457cb8f74c26b07f7e8\nSigned-off-by: Jayant Chowdhary \u003cjchowdhary@google.com\u003e\n(cherry picked from commit cf935409652e633096729bdb64029cf2383534e3)\n"
    },
    {
      "commit": "79b0c24b58af5fbfec814a2a11506ef0f72541c3",
      "tree": "2551d295da89029c75f6a9219a6bc1a3b2980b98",
      "parents": [
        "1f72838954cb3689fb58eef6276553d9a45ff0a8"
      ],
      "author": {
        "name": "Dongwon Kang",
        "email": "dwkang@google.com",
        "time": "Sun Oct 13 08:17:34 2019 -0700"
      },
      "committer": {
        "name": "Dongwon Kang",
        "email": "dwkang@google.com",
        "time": "Tue Oct 15 11:00:29 2019 -0700"
      },
      "message": "Make DataSourceFactory singletone\n\nThis is preparation for having a subclass of DataSourceFactory which\nis only used in mediaserver process with OMA (forward-lock) use case.\n\nTest: build\nBug: 142567168\nChange-Id: I2a1ab3d1ae89f657a84376d9a95d4e814b545b4f\n"
    },
    {
      "commit": "8b470dc95691b5a5c3442629a348b44a59886792",
      "tree": "fc58976e0cda56aba734b3222bf6f14a8a6a0624",
      "parents": [
        "07bd8e774093b73e225562bbd5095a1732246477",
        "1f72838954cb3689fb58eef6276553d9a45ff0a8"
      ],
      "author": {
        "name": "Dongwon Kang",
        "email": "dwkang@google.com",
        "time": "Tue Oct 15 10:30:20 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Oct 15 10:30:20 2019 -0700"
      },
      "message": "Merge \"libmedia: separate codeclist from libmedia\"\nam: 1f72838954\n\nChange-Id: I7ceb439ed034386635399982392b6b842e08c105\n"
    },
    {
      "commit": "a42a62d8633fa6fcabc8129a2c798da860630821",
      "tree": "77e009a25a0a222aba1cabdc276b5bc9da549d04",
      "parents": [
        "342d7bcf44b3edcce763f0417ad0a13b11bde285"
      ],
      "author": {
        "name": "Dongwon Kang",
        "email": "dwkang@google.com",
        "time": "Mon Sep 23 17:48:14 2019 -0700"
      },
      "committer": {
        "name": "Dongwon Kang",
        "email": "dwkang@google.com",
        "time": "Fri Oct 11 21:40:26 2019 -0700"
      },
      "message": "libmedia: separate codeclist from libmedia\n\nTest: build.\nBug: 139201422\nChange-Id: I150c3bd04cc68a3b96a8762ba193fc1595ee6da3\nMerged-In: I150c3bd04cc68a3b96a8762ba193fc1595ee6da3\n"
    },
    {
      "commit": "342d7bcf44b3edcce763f0417ad0a13b11bde285",
      "tree": "795ca5539a3e878e3eb76676f6d13f3a06874e03",
      "parents": [
        "1ab2344f6dd1b913c9e20c4afaba96105b00074c",
        "d422b5f2ddb23eab790c8e04dc161142c65e01a2"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Oct 11 21:50:40 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 11 21:50:40 2019 +0000"
      },
      "message": "Merge \"audio policy: fix capture policy for accessibility\""
    },
    {
      "commit": "b0de569edd2d27b8dae9e3048f9c131b6ebc2d45",
      "tree": "90e0f48fde7d3f07367b62be0c2f98527fc327d6",
      "parents": [
        "bcb57f62b0f75630a5c1199c78f5af311934b6ce"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Aug 20 15:42:04 2019 -0700"
      },
      "committer": {
        "name": "android-build-team Robot",
        "email": "android-build-team-robot@google.com",
        "time": "Fri Oct 11 02:34:35 2019 +0000"
      },
      "message": "AudioFlinger: enforce OP_RECORD_AUDIO during recording\n\n  Fix issue where RecordTrack silencing didn\u0027t silence the\nfull buffer: the memset to 0 was using the RecordThread frame\nsize, not the RecordTrack frame size.\n  OP_RECORD_AUDIO was only enforced at the start of a recording\nwhich would fail if not granted. This patch silences the recording\n(i.e. silence is recorded instead) when it is lost, and undoes that\nwhen granted again. This requires:\n- propagating the package name of the client to the RecordTrack class\n- registering an appOp callback in RecordTrack (through a new\n  OpRecordAudioMonitor class) to (un)silence the recording\n- update the isSilenced() method to take into account the appOp.\n\nBug: 138968594\nBug: 138636979\nTest: run app that records audio, then \"adb shell appops __pack_name__ 27 2\"\n     and verify recording is silent after that.\n\nChange-Id: Ib33f5b592185a67204997213bab1ac2594d90d37\n(cherry picked from commit ddf87effa4d80f413a80fde861f73877ccd80599)\nMerged-In: Ib33f5b592185a67204997213bab1ac2594d90d37\n(cherry picked from commit 7307293e8befafa12b244b74cd3c8cb84b27997c)\n"
    },
    {
      "commit": "6252c394beff4af6a2007a285a72d3080dcf0646",
      "tree": "ef7c1cf23422c76508b005cd19ac0bcdd9cfc03e",
      "parents": [
        "7f51413ee032a811846c805a9a5c3d9987acfa23",
        "bb3c777e401d10f379835243bfcb2e6b6c678504"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Oct 10 09:09:42 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 10 09:09:42 2019 -0700"
      },
      "message": "Merge \"Fix secondary output under\u0026over run\"\nam: bb3c777e40\n\nChange-Id: I0901b093dacaee5ada430d993792d5ea1ffee042\n"
    },
    {
      "commit": "bb3c777e401d10f379835243bfcb2e6b6c678504",
      "tree": "236eebbbf6ecc1e9025d76fcec178db112696440",
      "parents": [
        "d20b5c7d6fb8ae4f0a011cdc78b0522846419721",
        "20a44f84f1a80ba1464ca35b62417e33ed88ac29"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 10 15:52:37 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 10 15:52:37 2019 +0000"
      },
      "message": "Merge \"Fix secondary output under\u0026over run\""
    },
    {
      "commit": "7f51413ee032a811846c805a9a5c3d9987acfa23",
      "tree": "c7fc0e79ae6cab94157b49c9266e40f458582cb8",
      "parents": [
        "a9122279e023e9b8d287e6fb9eda53a28341fb8d",
        "d20b5c7d6fb8ae4f0a011cdc78b0522846419721"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 10 08:47:16 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 10 08:47:16 2019 -0700"
      },
      "message": "Merge changes from topic \"pfw_python_3\"\nam: d20b5c7d6f\n\nChange-Id: Ib5b660acc0f9492d7b5345ea6f3f5772d6ee7b4d\n"
    },
    {
      "commit": "a9122279e023e9b8d287e6fb9eda53a28341fb8d",
      "tree": "a474a8f0c4e7bb6f3dbed42be2aa74709a76424d",
      "parents": [
        "8bae8ca1374a5e0ac85c520e1542fb975b6cca93",
        "5818b453da8cc675900f810655143ad55a159a11"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Oct 10 08:47:12 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 10 08:47:12 2019 -0700"
      },
      "message": "audiopolicy: engineconfigurable: continue switching to bp\nam: 5818b453da\n\nChange-Id: I724a73886458ea9412bb85fd813e7ffb7331fa0f\n"
    },
    {
      "commit": "8bae8ca1374a5e0ac85c520e1542fb975b6cca93",
      "tree": "3d48574d8dc1e0b42598cf159fbd3af5fbb50fda",
      "parents": [
        "ed29c951f02a3143842754562b380643c333156a",
        "c60c36916666ead0ad9c599b82a86708a91eb767"
      ],
      "author": {
        "name": "Franois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Oct 10 08:47:07 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 10 08:47:07 2019 -0700"
      },
      "message": "audiopolicy: engineconfigurable: fix potential segfault if no default device\nam: c60c369166\n\nChange-Id: I700c3d79241453883d99c203fc627923cbf38f34\n"
    },
    {
      "commit": "ed29c951f02a3143842754562b380643c333156a",
      "tree": "f7cd07df5988ed80bf9dd71207e70938ba2baacc",
      "parents": [
        "645e43105f1684f9ee1043e4dee3d5e294840faf",
        "bc5c7de7048dfe5ca33652533582328775bd4169"
      ],
      "author": {
        "name": "Franois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Oct 10 08:47:01 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 10 08:47:01 2019 -0700"
      },
      "message": "audiopolicy: engineconfigurable: fix PATH issue\nam: bc5c7de704\n\nChange-Id: Icc9d796aaca2040fd8f2cb6a6669e1fac7269a49\n"
    },
    {
      "commit": "645e43105f1684f9ee1043e4dee3d5e294840faf",
      "tree": "6c080b8e2ff7df03a29bc9b2c6e4eb241f0c5135",
      "parents": [
        "448242fe095b3e72ce9779b7c09f6b0eee5721b0",
        "39ef510fecec1b7e66b1257a99c6ae8fa1c8e726"
      ],
      "author": {
        "name": "Franois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Oct 10 08:46:53 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 10 08:46:53 2019 -0700"
      },
      "message": "Update PFW input source structure for Q\nam: 39ef510fec\n\nChange-Id: I86d43d746b69dd0ac616bb9000673ffb98d62ab7\n"
    },
    {
      "commit": "d20b5c7d6fb8ae4f0a011cdc78b0522846419721",
      "tree": "bec236ab3eea46a0c925503af51c01e4cf869898",
      "parents": [
        "229c543d081cc29f1f07df8d0b1657cdb71e0c15",
        "31987fb3dc277d2b0daf32f3d2a044e8a2c88a3b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 10 15:22:13 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 10 15:22:13 2019 +0000"
      },
      "message": "Merge changes from topic \"pfw_python_3\"\n\n* changes:\n  audiopolicy: engineconfigurable: Update tool scripts to python 3\n  audiopolicy: engineconfigurable: continue switching to bp\n  audiopolicy: engineconfigurable: fix potential segfault if no default device\n  audiopolicy: engineconfigurable: fix PATH issue\n  Update PFW input source structure for Q\n"
    },
    {
      "commit": "20a44f84f1a80ba1464ca35b62417e33ed88ac29",
      "tree": "406a9c22867b2928338aa3e7eeae7d1f313b04eb",
      "parents": [
        "229c543d081cc29f1f07df8d0b1657cdb71e0c15"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Sep 18 11:24:52 2019 +0100"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Oct 10 13:34:23 2019 +0100"
      },
      "message": "Fix secondary output under\u0026over run\n\nThere were three issues with the implementation\nof Audio Playback Capture patches on secondary outputs.\n\n1) Patch tracks were always forced to be ready, even if there were not\nenough audio to be played. That led to playing partial buffers if the\nsource output had smaller (time wise) buffer than the secondary output.\n\nThis is fixed by avoiding setting CBLK_FORCEREADY on every buffer push\nfrom the primary output thread.\n\n2) After 1 is fixed, the patch tracks now behave like regular (non fast)\ntracks. This means that the track only starts when it is full.\nThat leads to overrun on startup as the primary and secondary outputs\nusually do not have the same write period.\n\nWhat makes the issue worst is that Remote submix has a fixed buffer in bytes,\nso its write period changes depending on sample rate contrary to the\nprimary HAL which pulls with fixed time periods (usually 20/40ms).\n\nThis patch solution is to introduce a ready threshold. The track will be\nconsidered ready to be active if there are more than frames in its buffer.\n\nTo avoid changing previous latency behaviour except for APC,\nlegacy tracks have this threshold set to their buffer size and\nnon APC patch tracks have it set to 1, similar to setting\nCBLK_FORCEREADY.\n\n3) The patch track buffer size calculation of the patch track did not take\ninto account primary and secondary output could be of different sampling\nrate.\nThis mean that the patch track buffer was usually too small as the\nsecondary output usually had smaller sampling rate (Live caption\nrequests 16kHz) than the track (music usually plays in 48kHz).\nThis made the two problems even worst.\n\nThis was easily fixed by scaling the buffer size with each side sample rate.\n\nBug: 136691300\nTest: play audio\n      adb shell audiorecorder  --target /data/file1.raw\n      # Check that the recorded file has no underrun\nChange-Id: Ib2846b2827afd1b953d4a25acb18c7cadf57cd3e\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "448242fe095b3e72ce9779b7c09f6b0eee5721b0",
      "tree": "709a1d38537ae95b5f0fdfbcdd91d5f607ae0d81",
      "parents": [
        "995d433aa42f3fe64c8fd9e8b892c156fa7c1ad4",
        "229c543d081cc29f1f07df8d0b1657cdb71e0c15"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Oct 09 15:06:25 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Oct 09 15:06:25 2019 -0700"
      },
      "message": "Merge \"Split datasource out of libstagefright\"\nam: 229c543d08\n\nChange-Id: Iebedf39dbdf0cc4627fac7add4047689c63ff329\n"
    },
    {
      "commit": "31987fb3dc277d2b0daf32f3d2a044e8a2c88a3b",
      "tree": "c38226f2997551d7d61cbd7836d5f3a48ab6de85",
      "parents": [
        "5818b453da8cc675900f810655143ad55a159a11"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Sep 03 11:57:33 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 09 15:06:16 2019 -0700"
      },
      "message": "audiopolicy: engineconfigurable: Update tool scripts to python 3\n\nAs python 2 is beeing deprecated, this CL updates all the tool\nscripts to python3.\nIt also fix some issues revealed by pylint.\n\nTest: lunch audio_configurable target \u0026 build\nChange-Id: I69a201190c688be3825cbdaa238046367a5d09c7\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "5818b453da8cc675900f810655143ad55a159a11",
      "tree": "d7285f91c4ce5f85a9176c2f5544eed40b01ab77",
      "parents": [
        "c60c36916666ead0ad9c599b82a86708a91eb767"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Aug 27 16:30:04 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 09 15:06:09 2019 -0700"
      },
      "message": "audiopolicy: engineconfigurable: continue switching to bp\n\nThis CL adds genrule_defaults target to allows getting rid of mk\nfor configuration files generation.\n\nTest: build \u0026 boot\nChange-Id: Ida4ec17ab3e67788b512b95ac8d2c0f4c530014a\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "c60c36916666ead0ad9c599b82a86708a91eb767",
      "tree": "520eb229b4f475fdc7134d594b3fb9b47f72330c",
      "parents": [
        "bc5c7de7048dfe5ca33652533582328775bd4169"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Fri Aug 09 15:41:24 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 09 15:05:58 2019 -0700"
      },
      "message": "audiopolicy: engineconfigurable: fix potential segfault if no default device\n\nIf no default device is available from configuration.xml, and if\nthe engine fallbacks on it anyway, it tries to get its type without checking\nthe pointer validity.\n\nThis CL fix the potential segfault and assert with explicit error message.\n\nTest: build\n\nChange-Id: Icf8d7f5ef998dad6f4033d934b48d408030c7e17\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "bc5c7de7048dfe5ca33652533582328775bd4169",
      "tree": "5789839c6466d34ae8d963e68322520895e22b37",
      "parents": [
        "39ef510fecec1b7e66b1257a99c6ae8fa1c8e726"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Jul 16 13:37:16 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 09 15:05:52 2019 -0700"
      },
      "message": "audiopolicy: engineconfigurable: fix PATH issue\n\nTo avoid bypassing PATH restrictions, this CL fixes the python\nbinary dependancy by retrieving the path from the host binaries.\n\nTest: build\n\nChange-Id: Ib3356ee1a69d1a5e5a9f9d22b46e3e70c28fa991\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    }
  ],
  "next": "39ef510fecec1b7e66b1257a99c6ae8fa1c8e726"
}
