)]}'
{
  "log": [
    {
      "commit": "e3b59ac285356dfe1bd416d46672fe0b1f10dc6f",
      "tree": "cc260c7b2867101599cdba75b53b4e0578c7345f",
      "parents": [
        "7aacb78d8d049af5e9949de9fc34be4650b5b176"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 01 15:08:13 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Nov 24 22:56:29 2020 +0000"
      },
      "message": "Convert mask types from uint32_t to enum type\n\nThis applies to the following types:\n\n- audio_gain_mode_t;\n- audio_flags_mask_t;\n- audio_channel_representation_t;\n- audio_channel_mask_t;\n- audio_devices_t.\n\nEnum types are distinct thus proper overloading on the type\nis possible in C++. Also, assignments to enum types are\nless prone to errors.\n\nBug: 169889714\nTest: basic audio functionality\n      m stagefright\n      atest audiopolicy_tests\nChange-Id: I42506484b1d0b0482618b7314fad4c8012a06fb4\nMerged-In: I42506484b1d0b0482618b7314fad4c8012a06fb4\n"
    },
    {
      "commit": "456051d0b9f41986e982b07d4b5462e377534bfe",
      "tree": "78cb394b36e0265d54823dff9d826f582951acf6",
      "parents": [
        "04435f6bec3e65c1d4cfd0e356b89a2d025fb696",
        "5f829dead32af6da25656e77203f4ca59e578ba5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 30 16:39:05 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Jun 30 16:39:05 2020 +0000"
      },
      "message": "Merge \"Fix direct/offload thread output devices into MSD\" am: 24c46f1741 am: 5f829dead3\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1340017\n\nChange-Id: Ib15f682b137b827cd6d3cdf4ff75803ed06bf17c\n"
    },
    {
      "commit": "514b431cac26626260df703a7b1504717b948e22",
      "tree": "15050e1e0fd465901076dfc1fa8a65b9179bd7cf",
      "parents": [
        "c1d40b64b1ee652f173153fb2520201bbed56679"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Wed Jun 17 21:45:00 2020 +1000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jun 29 23:13:56 2020 +0000"
      },
      "message": "Fix direct/offload thread output devices into MSD\n\nWithout this change, direct/offload threads show\n\"Output devices:  (Empty device types)\". Empty device\ncauses timestamp correction to always be disabled for\noutput threads requiring timestamp correction.\n\nTest: check direct/offload output into MSD dumpsys output devices\n      atest audiopolicy_tests\nBug: 159948389\nChange-Id: I7006c9da2f0a228dd49ce0297c30035fef983090\n"
    },
    {
      "commit": "a30ec1468fc8c3779673bb91a338956f26b5d807",
      "tree": "6b42f2d3e4da6be2f8b594bfbeee8991847a854e",
      "parents": [
        "bc0f22e33fa5adc5a8873489a5270ba93f94b5a1"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Mar 24 09:32:34 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Mar 25 20:22:26 2020 -0700"
      },
      "message": "APM: Notify the client about new audio ports\n\nAdded missing notification to the APM client\nabout new audio ports. This should make the\nports provided by the newly discovered HAL\nto be available to apps.\n\nProcess the onNewAudioModulesAvailable notification\non the \"APM Output\" command thread to avoid clashing\nwith outgoing commands from APM during module\ninitialization.\n\nBug: 149854039\nTest: atest audiopolicy_tests\nChange-Id: I3fede7f5a04419b15e15476d8b5ac7dc6d63c98d\nMerged-In: I3fede7f5a04419b15e15476d8b5ac7dc6d63c98d\n"
    },
    {
      "commit": "d0e2c74984f7542cc154a899190bda100ef38671",
      "tree": "ee96ed7f289021026ab9bf29b252cad3240c0c3d",
      "parents": [
        "3006a83565b6863f247bf634faa929b84608026e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Mar 25 15:59:59 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Mar 25 17:04:49 2020 -0700"
      },
      "message": "APM: Notify the client about new audio ports\n\nAdded missing notification to the APM client\nabout new audio ports. This should make the\nports provided by the newly discovered HAL\nto be available to apps.\n\nProcess the onNewAudioModulesAvailable notification\non the \"APM Output\" command thread to avoid clashing\nwith outgoing commands from APM during module\ninitialization.\n\nBug: 149854039\nTest: atest audiopolicy_tests\nChange-Id: I3fede7f5a04419b15e15476d8b5ac7dc6d63c98d\n"
    },
    {
      "commit": "21762fa512c3d47bf0a78ffbfe3969ebabed2004",
      "tree": "740678fbbc90985039ec2ec445ab8ec9d93fc8df",
      "parents": [
        "47daf67f562b366a37c11a6b8de12d81840497d0"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Mar 05 16:28:57 2020 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Mar 10 15:36:34 2020 -0700"
      },
      "message": "Allow for late audio module discovery in APM\n\nExtract code that loads hardware modules and fills out\nmAvailable{Input|Output}Devices into a reusable function.\nIt is used both during APM initialization and on\nreceiving a notification that a new HAL service has\nbeen discovered.\n\nBug: 149854039\nTest: atest audiopolicy_tests\nChange-Id: Ifb7f0b61b06a0609802e63dccb26f3472328ef48\nMerged-In: Ifb7f0b61b06a0609802e63dccb26f3472328ef48\n"
    },
    {
      "commit": "c0d04987f6f7bd6e054210b1ca33a827afce650b",
      "tree": "32385a3831d727298a1a766d09183c28a93e2f5d",
      "parents": [
        "c62ad13ad8da6b31168f0d9f3e5f2a770ed0bbee"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 02 21:02:28 2020 +0000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Mar 09 20:19:42 2020 +0000"
      },
      "message": "Allow for late audio module discovery in APM\n\nExtract code that loads hardware modules and fills out\nmAvailable{Input|Output}Devices into a reusable function.\nIt is used both during APM initialization and on\nreceiving a notification that a new HAL service has\nbeen discovered.\n\nBug: 149854039\nTest: atest audiopolicy_tests\nChange-Id: Ifb7f0b61b06a0609802e63dccb26f3472328ef48\n"
    },
    {
      "commit": "3a26bb21bd9c38fe48b203cd018b95b955f2d1de",
      "tree": "e89ce1c4e84b514454f027f9e419ed6b7cf435c9",
      "parents": [
        "0bab538b5c6e17bd06161b8fdbd9b65411c410ec"
      ],
      "author": {
        "name": "Baekgyeong Kim",
        "email": "baek.kim@samsung.com",
        "time": "Wed Oct 30 20:29:41 2019 +0900"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jan 08 11:49:08 2020 -0800"
      },
      "message": "Add audio stream and usage for virtual assistant\n\nNew stream type: AUDIO_STREAM_ASSISTANT\nThis is intended to be used by a virtual assistant like\nGoogle Assistant, Bixby, etc.\n\nThe audio stream has own volume alias and the volume\ndoes not change by volume changes of other streams.\n\nBug: 123745215\nTest: make\nChange-Id: I17ec0480cad4c3507a97454ccb832255adda9897\nMerged-In: I17ec0480cad4c3507a97454ccb832255adda9897\nSigned-off-by: Baekgyeong Kim \u003cbaek.kim@samsung.com\u003e\n"
    },
    {
      "commit": "60f0f304bcd573581e7c6bf1cbd05cad36f97c67",
      "tree": "f5e0ef3960517dfd5922ebba2150886fc33d93ee",
      "parents": [
        "80df98d695e715e2434a7649667bf3eaf6ab9c37",
        "47ea671e71c000a3103ecc15dbc25cac007dd51e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 20 00:08:22 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 20 00:08:22 2019 +0000"
      },
      "message": "Merge \"Add audio stream and usage for virtual assistant\""
    },
    {
      "commit": "47ea671e71c000a3103ecc15dbc25cac007dd51e",
      "tree": "f4bd5460779df1e785244ba663be58b8bce3d379",
      "parents": [
        "231698afc6bec6524029a558e20d8386be0cc0a9"
      ],
      "author": {
        "name": "Baekgyeong Kim",
        "email": "baek.kim@samsung.com",
        "time": "Wed Oct 30 20:29:41 2019 +0900"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Dec 16 10:56:05 2019 -0800"
      },
      "message": "Add audio stream and usage for virtual assistant\n\nNew stream type: AUDIO_STREAM_ASSISTANT\nThis is intended to be used by a virtual assistant like\nGoogle Assistant, Bixby, etc.\n\nThe audio stream has own volume alias and the volume\ndoes not change by volume changes of other streams.\n\nBug: 123745215\nTest: make\nChange-Id: I17ec0480cad4c3507a97454ccb832255adda9897\nSigned-off-by: Baekgyeong Kim \u003cbaek.kim@samsung.com\u003e\n"
    },
    {
      "commit": "74cd6b0f6840c9f39b51700fb84420f2a1dc1f8e",
      "tree": "78e558b5d1b2d8b4950498294ceed86680176753",
      "parents": [
        "a32e60121e1cd626f300fb894f4e1bc5715d3d41"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Fri Oct 25 10:06:40 2019 -0700"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Dec 12 17:08:59 2019 -0800"
      },
      "message": "Migrate to new sound trigger middleware service\n\nThis change:\n- Removes the old ISoundTriggerHw service and removes its code.\n- Connects AudioPolicyManager to the new service via AIDL RPC (using\n  a new utility, BinderProxy).\n\nChange-Id: I00366e2c5f252708e903b2311816d9eceb132a05\nBug: 142070343\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": "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": "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": "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": "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": "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": "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": "8a1095a9f240b4ac69e8aa47954a3ceb1bd38e16",
      "tree": "5e498499c94c3fa171a75e8daa55f949b4ea04ce",
      "parents": [
        "484d6119d3ca9140d415dc1841d4c0c500d76a20"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 08 14:44:16 2019 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 08 17:56:01 2019 -0800"
      },
      "message": "audio policy: fix playback permission checks\n\nAlign playback permission checks implementation in getOutputforAttr() on\ncapture checks in getInputForAttr(): use an \"output type\" returned by\naudio policy manager and check permission accordingly.\n- Do not modify but reject request to play to call uplink when permission\nis denied.\n- Add missing permission check for injection to remote submix.\n- Clarify permission check for record from remote submix by using the\nuid/pid of client explicitly.\n\nBug:\nTest: CTS test for AudioTrack and AudioREcord.\nTest: GTS tests for dynamic policies and playback capture\nChange-Id: Ic0eb3b9921a491e97c58fa8f637583059a54b3a2\n"
    },
    {
      "commit": "4381040f77c2907c9a0ba27ece2e00241daadf0e",
      "tree": "b559f2cf74926949bd9f846c627ede38b734158f",
      "parents": [
        "c6fe9c424669d640d8bbe0fc7e130a34bab0b4bd"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Oct 24 14:58:31 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Oct 28 10:38:13 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "b3f98045000460d6b8d7fd9fb027beac27316651",
      "tree": "dbff7605d05db215b3088571706d7ab10991842d",
      "parents": [
        "8649bbe54a4ad29a55502f54cc367d4fb12f44d7"
      ],
      "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 Sep 30 10:04:49 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "e13c679e4afba66097018516eba9ea15d15bbc7a",
      "tree": "216ecb3fe033354b1d07ce88aa8ccecb15f4c3fa",
      "parents": [
        "3e0b02e336f3b5d59c5162e743d10d86be63c66b"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue May 14 10:32:51 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Sep 25 14:59:42 2019 -0700"
      },
      "message": "audiopolicy: Load the engine library dynamically\n\nAndroid provides 2 audio policy engines:\nlibaudiopolicyenginedefault and\nlibaudiopolicyengineconfigurable. This change makes the engine\nto be loaded dynamically based on the configuration (currently\nthe engine name is hardcoded into AudioPolicyConfig). Dynamic\nloading allows building and installing of both libraries without\nany conflicts.\n\nTechnical changes:\n\n - AudioPolicyManagerInterface renamed to EngineInterface\n   for clarity;\n\n - For the purpose of dynamic loading, APM does not depend\n   anymore on the EngineInstance class. The class got removed\n   from the default AP engine, but left in the configurable engine\n   because it is also used by its plugins;\n\n - Added EngineLibrary class to encapsulate dynamic loading\n   of the AP engine. The class name EngineInstance is repurposed\n   for a smart pointer to EngineInterface;\n\n - services/audiopolicy/managerdefault/Android.mk converted\n   into Android.bp;\n\n - Added engine loading failure test;\n\nBug: 132639720\nTest: sanity tests for audio; audiopolicy_tests\nChange-Id: I0581569a172f810e030aec879225e817bfa7851a\nMerged-In: I0581569a172f810e030aec879225e817bfa7851a\n"
    },
    {
      "commit": "2f5b2cc34f566a592104489ea3a1a057646e524c",
      "tree": "69e2ce7d835b898e8ecb043f667652685f1a21b2",
      "parents": [
        "a392a55f9e58d1a38f470a3931fbab738de6b4b6"
      ],
      "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 Sep 23 14:51:40 2019 -0700"
      },
      "message": "Move systemaudio_tests to system/media.\n\nBug: 135621476\nTest: atest systemaudio_tests\nChange-Id: I66f6498b0119cd210f7bc159758a105be8bc5d1d\n"
    },
    {
      "commit": "6cd360cc73045ed636db6a8a6ab0f452c5e4f3b0",
      "tree": "2761a50e77f3beaf8f458061beead4919a21c9e0",
      "parents": [
        "f5617d2fbae3d45797df7369b068439cb240be7e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 19 17:55:16 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Sep 20 10:22:04 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "f5617d2fbae3d45797df7369b068439cb240be7e",
      "tree": "a42764be15adca0e344928e24113811b366a614d",
      "parents": [
        "fc8407377bd5720e08f193f78a1f93c2f3e57fb9",
        "5dd68d29b9143e5d6ccba5a6d91d0544b8bd5e4a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Sep 19 20:55:07 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 19 20:55:07 2019 +0000"
      },
      "message": "Merge \"Add test for audio device type helper functions.\""
    },
    {
      "commit": "5dd68d29b9143e5d6ccba5a6d91d0544b8bd5e4a",
      "tree": "443c5dcf4c60c1f286f1e02e60ae90e090d8c106",
      "parents": [
        "861df4b5ff6fd4b9c8ac95d8fd080bda78e7ce5c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Sep 16 17:08:21 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 17 13:27:36 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "57ac2cef01ee57dd5edc85b275e40b82724c2a8e",
      "tree": "d9e12d30a65e64ed836a03bc89f5ea926833fa27",
      "parents": [
        "0f6aaed13c22a8f5a428390ae2b89429a8922668"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 11 09:29:41 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 11 09:32:24 2019 -0700"
      },
      "message": "audiopolicy: Match DIRECT and MMAP_NOIRQ flags exactly in IOProfile\n\nPrevent selection of DIRECT and MMAP_NOIRQ output profiles\nif these flags were not requested.\n\nUpdate the test APM configuration to use PCM16 on all outputs,\nso they are all equivalent in terms of format and only differ in flags.\n\nTest: atest audiopolicy_tests\nChange-Id: I6940caed519b6237ea3038e646a84e4403a0c1ed\n"
    },
    {
      "commit": "0756bbff56944eb500ec69e91be690475b383b82",
      "tree": "c92065417c41d1675e29a775660fc010506e215e",
      "parents": [
        "5f5ee1ccd75a23df68fd506142348f1476e1e5b6"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 06 13:53:26 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Sep 09 12:33:21 2019 -0700"
      },
      "message": "Require HW AV sync flag match for compatible output IOProfile\n\nPreviously, Audio HAL implementers need all HW A/V sync profiles\ndeclared after non HW A/V sync profiles in their audio policy\nconfigurations, otherwise a HW A/V sync profile match could be\nfound for a non HW A/V sync (e.g. direct only) request, the\nAudio HAL output stream would be opened with the HW A/V sync\nflag, and Audio HALs typically fail to process the stream as\nthey are setup to parse in-band HW A/V sync headers (even if\nthey don\u0027t receive keyStreamHwAvSync AudioParameter).\n\nTest: atest audiopolicy_tests\n  AudioPolicyManagerTVTest#MatchOutputNoHwAvSync fails w/o IOProfile change,\n  passes with the change.\nBug: 140447125\n\nChange-Id: Icfc806497b5b23013e63621a585c28d1d7a9882a\n"
    },
    {
      "commit": "43848a5918739fcd25d04487552f5eeb5a0e8183",
      "tree": "aca9181f78cb7d897614f790c24a5ebc4d3fe6e4",
      "parents": [
        "7c0205ea95ff1d01245ec8df11ec91d5bcb891a0"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 05 14:07:25 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Sep 06 14:37:27 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "7c0205ea95ff1d01245ec8df11ec91d5bcb891a0",
      "tree": "60f9eb23df9b25b0fb66a5efa42247dd2a5253f2",
      "parents": [
        "d96817e053c44514415f40f464f08949e66c8759"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Sep 05 10:26:04 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Sep 06 14:36:49 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "3ce82b056a93012e90de5c906b60e99cf40bad7e",
      "tree": "8b8d489145e37860ab4ac31513f2e4a3bb45d072",
      "parents": [
        "1e00b66086511f28eb8ad44196a3556f542a1ec1",
        "5740f08a85214ebdb994fdcfd91dab186fc312fc"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 04 21:42:03 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 04 21:42:03 2019 +0000"
      },
      "message": "Merge changes I05611b70,I6cd1a53e,Ic2e08efc,I13ac0673\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"
    },
    {
      "commit": "5740f08a85214ebdb994fdcfd91dab186fc312fc",
      "tree": "0da56c9af676f4c0cfa95bdc14fe3b1463b14710",
      "parents": [
        "ea87a0ce074dd93916f8918efc2eeb9d868a2093"
      ],
      "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 Sep 03 14:44:25 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "f4eb15ad81f153e6fcdc735226a76f561b4450cc",
      "tree": "ddaa67812e35805912657bf7dbab08575f90a6a8",
      "parents": [
        "34bbfc447ad5c3b615acf9e924a97b2a3d678ab7"
      ],
      "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 Sep 03 12:13:46 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "9ccb28b1ccb214b06461f5285e5bce7d3734ea19",
      "tree": "1b9ce993373a1f5450815c401943f787a406b45b",
      "parents": [
        "e6138376f0578d464037d645f7985c87db60565e"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Jul 31 09:59:09 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Jul 31 17:23:06 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "47835553b6e9b019acab78ead590727bc40e44ee",
      "tree": "07d496b011732ae2b8559ba8426289ca248adac0",
      "parents": [
        "b82f9fbdb1903a3bfa136b85dc7d24ab01c9fb21"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue May 14 10:32:51 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 22 16:18:17 2019 -0700"
      },
      "message": "audiopolicy: Load the engine library dynamically\n\nAndroid provides 2 audio policy engines:\nlibaudiopolicyenginedefault and\nlibaudiopolicyengineconfigurable. This change makes the engine\nto be loaded dynamically based on the configuration (currently\nthe engine name is hardcoded into AudioPolicyConfig). Dynamic\nloading allows building and installing of both libraries without\nany conflicts.\n\nTechnical changes:\n\n - AudioPolicyManagerInterface renamed to EngineInterface\n   for clarity;\n\n - For the purpose of dynamic loading, APM does not depend\n   anymore on the EngineInstance class. The class got removed\n   from the default AP engine, but left in the configurable engine\n   because it is also used by its plugins;\n\n - Added EngineLibrary class to encapsulate dynamic loading\n   of the AP engine. The class name EngineInstance is repurposed\n   for a smart pointer to EngineInterface;\n\n - services/audiopolicy/managerdefault/Android.mk converted\n   into Android.bp;\n\n - Added engine loading failure test;\n\nBug: 132639720\nTest: sanity tests for audio; audiopolicy_tests\nChange-Id: I0581569a172f810e030aec879225e817bfa7851a\n"
    },
    {
      "commit": "962ba215fbffcf27b3c69827a9221e0a82108ff0",
      "tree": "e0ef04ba1857443ef150e35e146522c84fcbb41f",
      "parents": [
        "48601f013a60c916187591e6e05dfaf76a87b698"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Apr 03 16:21:39 2019 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 24 09:03:17 2019 -0700"
      },
      "message": "audiopolicy: fix build issue by going on switching to bp\n\nBug: 130284799\nTest: make\n\nChange-Id: I60d41eaa41564fecdeef6d4cb223a8367883db50\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\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": "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": "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": "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": "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": "86f1dd852787f2b240eed2d2bdfa65b9fe114d56",
      "tree": "be74f7639fc8507fffad5e151983f6a2f1596850",
      "parents": [
        "d53525f4fd79a7ecbadd621630c23c0e925c731e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jan 24 13:17:59 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jan 24 16:58:56 2019 -0800"
      },
      "message": "audiopolicy: Specify the suite for presubmit tests\n\nThis is required to actually run them on presubmit.\n\nBug: 122855449\nTest: run a presubmit check on a CL while the tests are broken\nChange-Id: Id95234d6a4198a246051c869d56ab5c62f6972f4\n"
    },
    {
      "commit": "d53525f4fd79a7ecbadd621630c23c0e925c731e",
      "tree": "bc2262cc60fdbc6f071d1286c1e8309c5f8bbd53",
      "parents": [
        "049aa255f9c1746f22cd9c562bd9cb8faaddb3d2"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jan 24 13:15:46 2019 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jan 24 16:58:56 2019 -0800"
      },
      "message": "audiopolicy: Improve patch count checks\n\nMove ASSERT_ into the body of the test function, because assert\nfailure only shows the code line where it has happened.\n\nUpdate names to emphasize that the delta is from the initial\nsnapshot, not from the previous check.\n\nTest: audiopolicy_tests\nChange-Id: I4328d9d74c0632097150732727c123a446c8ee89\n"
    },
    {
      "commit": "df2e359d5c19c142fe400980cd15b0b60bea507b",
      "tree": "5fbb45d0a3f448e60b2c1464eaf0bc5f9bf4c28a",
      "parents": [
        "ff7397bb08bf9953615d7b3416f4839bc0b1d2ff"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 19 14:27:42 2018 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jan 11 21:01:07 2019 -0800"
      },
      "message": "AudioPolicy: Add unit tests for the MSD use cases\n\nTest the following scenarios:\n  - inputs / outputs update due to setForceUse change;\n  - MSD device selection and downstream patch creation\n    when an output for a supported format is opened;\n  - default device selection and downstream patch teardown\n    when an output for an unsupported format is opened;\n  - swiching outputs depending on the format.\n\nBug: 121048134\nTest: audiopolicy_tests\nChange-Id: I3a07c758ea7fd87250f425c27fbf0c38eb5bf8b5\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": "9e29ea8bd0be596c65d93ae196afac8339e00bfa",
      "tree": "42ba005a56b01d721e223bff6b9b894e239d641c",
      "parents": [
        "973db02ac18fa1de9ce6221f47b01af1bdc4bec2"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Nov 08 14:28:10 2018 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 04 13:51:20 2018 -0800"
      },
      "message": "Fix build issue\n\nTest: make\n\nChange-Id: I5563ff049ddc384556976f577a6d0ebc020516c8\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@renault.com\u003e\n"
    },
    {
      "commit": "af036dab1e2075e1277883ef696a48f47d974413",
      "tree": "bc775cb5a2823dbe73354b5f36dd5fd0acaaf518",
      "parents": [
        "bbbfdd69d89ca651f855777c3c66b12793dc85ae"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 21 10:46:21 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 02 18:18:11 2018 -0700"
      },
      "message": "AudioOutputDescriptor: improve refcount logging\n\nImprove refcount to match exact client descriptor\nAbort on invalid client descriptor refcounts\nLog changes to active clients and refcounts\n\nTest: dumpsys of media.audio_policy\nBug: 112067674\nChange-Id: I5fe4d3e7135efbf9bc5bffb258374115d87c24e6\n"
    },
    {
      "commit": "137c7aaab7cc8f41ed49c51b865af41fdac2a84b",
      "tree": "04002ea83574d8d7c3444bed134648ddececa1a5",
      "parents": [
        "cd56a1c2a0adcd21aad3a64c761aa3562d915be1",
        "ac9858be02edea7770ab3bb27d1cc15e4640fb26"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 09 23:31:25 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 09 23:31:25 2018 +0000"
      },
      "message": "Merge \"Use and test patch utilities from system/audio.h\""
    },
    {
      "commit": "ac9858be02edea7770ab3bb27d1cc15e4640fb26",
      "tree": "ff0385983e0302f6f81a902d0e63b680d6c83ff5",
      "parents": [
        "908c7d77355ae2c63a179a4ebfce69b7a6d31e3f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jun 15 13:12:37 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 09 14:01:15 2018 -0700"
      },
      "message": "Use and test patch utilities from system/audio.h\n\nUse `audio_patch_is_valid` function.\n\nAdd basic tests for the following functions:\n  audio_patch_is_valid\n  audio_port_config_has_hw_av_sync\n  audio_patches_are_equal\n\nBug: 63901775\nTest: systemaudio_tests\nChange-Id: I378ab544e4148fda0dd7b9520d6fd57ff01cb34b\n"
    },
    {
      "commit": "dcd4ab18a3cdb8f5d382a635c8602a18288137c1",
      "tree": "c0f4c63eef85a850dc01687bc7f17be4cd24031e",
      "parents": [
        "87a837c62a1bd1be9143aee3660bb171424a08a5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 29 17:45:13 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 18:03:17 2018 -0700"
      },
      "message": "audio policy: remove special notifications handling in call\n\nNot needed anymore as this is handled by NotificationManager.\nExtend caping of alarm and ringtone volume to call volume to all\noutput devices (was only done for earpiece).\n\nTest: make\nChange-Id: I9a1cd8610e42fefd0518f6ccc68e50e5541884ed\n"
    },
    {
      "commit": "21b43364f0eb3916264d046718d74c7fb98efe59",
      "tree": "e7b6c3754aa85e33329225a41a06c02b91490751",
      "parents": [
        "20bd30baf9fcd59e7000e7c626cc8bc1e85637bc"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jun 04 10:37:09 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jun 04 17:04:21 2018 -0700"
      },
      "message": "APM test: Fix default config, add test for \u0027dump\u0027\n\n - Fix AudioPolicyConfig::setDefault so the config is valid again;\n\n - Enhance the default config with dynamic profiles;\n\n - Factor out the code for creating a full dynamic profile;\n\n - Add a method to unit test that verifies calling APM::dump.\n   This is also useful to examine how the default config looks\n   like.\n\nTest: audiopolicy_tests\nChange-Id: I102071e160b835da50ed5806bd2d62102a10d775\n"
    },
    {
      "commit": "dc769682023ba8a8a5da07c3e3a3adfabe4bd612",
      "tree": "6f6a0991e71927cda302c4c489f69bd239023597",
      "parents": [
        "f1040d20210338eb850b000d4344ddc9a04eb493"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 15:34:08 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed May 16 09:43:33 2018 -0700"
      },
      "message": "audio_server: Unify audio_patch creation\n\nProvide PatchBuilder helper class instead of fiddling with\nstruct audio_patch directly.\n\nRename \u0027getAudioPortConfig\u0027 methods of AudioFlinger helper\nclasses into \u0027toAudioPortConfig\u0027 to match classes\nof AudioPolicyManager.\n\nFactor out common code in AudioPolicyManager that was\nadding audio patches. For that, AudioOutputDescriptor now inherits\nfrom AudioSessionInfoProvider, and the latter has been extended\nwith \u0027setPatchHandle\u0027 method.\n\nTest: switch to/from Bluetooth on phone calls and media playback,\n      use camcorder\nChange-Id: Idd99645dc6943ed078c4d94d0197fead7831ab4d\n"
    },
    {
      "commit": "1ed007c1e1d1a400cbfa55c4ea649dd48eab09ef",
      "tree": "6c202c71bb9763fbe0e887d1e71f0c75cffe66f0",
      "parents": [
        "6205a06d20d6b92d52044e8076beaac4c7873a21"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 15:41:10 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri May 04 15:41:10 2018 -0700"
      },
      "message": "Remove obsolete include path from makefiles\n\nframeworks/av/services/audiopolicy/utilities does not exist,\nremove it from audio service components\u0027 makefiles.\n\nTest: build\nChange-Id: I6c29052b449099d4b0942b7fc0a7ae68d0dc1ba7\n"
    },
    {
      "commit": "04a86634014027c47acb4e5833ac87770aeb071f",
      "tree": "df6dbc86c4c532bd3da17a572d93c685c087429d",
      "parents": [
        "c894bf6753a1f04f45bda625984c2d1830956651"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 15 18:01:42 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 21 17:34:58 2017 -0800"
      },
      "message": "audiopolicy: Add patch creation tests\n\nAdd a test that verifies rejection of bad parameters for\n\u0027createAudioPatch\u0027.\n\nAdd a test that creates a patch between mixPort and devicePort.\n\nNo bugs have been found this time.\n\nTest: audiopolicy_tests\nChange-Id: I431e225d9dba0097e3d73796585dbe7f404d1cec\n"
    },
    {
      "commit": "bcbcb1bdda4f1970830fa4924e3a5f24171ae005",
      "tree": "9b1523a2e1e60e1a44582240f040581617fedaf0",
      "parents": [
        "823267338b2bee8c279306c07775feabfc2434a5"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 13 13:03:35 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Sat Dec 16 00:52:18 2017 +0000"
      },
      "message": "audiopolicy: Add more tests, fix issues found\n\nAdded tests that ensure correct initialization of APM.\n\nFixed issues:\n\n  -- UB in VolumeCurvesForStream::volIndexToDb due to not\n     checking that the pointer is non-null;\n\n  -- AudioInputDescriptor::open and SwAudioOutputDescriptor::open\n     were not checking that the returned IO handle is valid,\n     this was causing an infinite loop in\n     AudioPolicyManager::selectOutputForMusicEffects, added an\n     assertion.\n\n  -- Memory leak of VolumeCurves collection in APM.\n\nTest: audiopolicy_tests\nChange-Id: Ia4ecca1dd03b74d7f93720f042da05d5a0c74a6b\n"
    },
    {
      "commit": "2a8dbc7611d3861d696c167ebdced50158bbebe1",
      "tree": "3344d4d0969a5165a4ff962a0026ee77bc05493a",
      "parents": [
        "f053e8c9c858f31888665fa5deb74eacce877ec6"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 15 09:31:34 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 15 09:32:44 2017 -0800"
      },
      "message": "audiopolicy: Add MULTILIB statement into makefile\n\nThis fixes builds that have only 32-bit or 64-bit version\nof audio server libraries.\n\nTest: build\nChange-Id: I4dc3bbe2e266a0b24d25ac00a8a2b54382b76e3d\n"
    },
    {
      "commit": "ad3f8a1082c101f2c218be64e48ae615676952ea",
      "tree": "ec94ad27cebafe5eccc8e04fa9b80ad20932813d",
      "parents": [
        "ceedc87e48c92e248123b9a9476053456e62e006"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Dec 12 13:24:23 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Dec 13 16:20:45 2017 -0800"
      },
      "message": "audiopolicy: Add unit tests build target\n\nThis change adds audiopolicy_tests target for running\nunit tests of AudioPolicyManager class.\n\nAudioPolicyManager class is modified to allow\nfiner control over the configuration loading.\n\nTest: audiopolicy_tests\nChange-Id: Icf0cd7ff5b3b8b827b4f6909ff2c138ac2a2b82e\n"
    }
  ]
}
