)]}'
{
  "log": [
    {
      "commit": "3e277cc0f12477b9e2ac2875cbca029f167a2f57",
      "tree": "e3da1697e39ff53d10eb2389bd36af8eccb6e4b2",
      "parents": [
        "861df4b5ff6fd4b9c8ac95d8fd080bda78e7ce5c"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 10 14:27:34 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Sep 16 12:00:44 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "9bb3a1e0631c56ab5c182b88de921703d2f0ae82",
      "tree": "6acd83877268aa965c19b3a7c563f721b81978d4",
      "parents": [
        "e46870e935e31839c07400743d68fd99defb360a"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Aug 19 10:10:17 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 21 14:21:21 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "e46870e935e31839c07400743d68fd99defb360a",
      "tree": "8056ff7441912399111703c164402db4acfcdbac",
      "parents": [
        "34bbfc447ad5c3b615acf9e924a97b2a3d678ab7"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Aug 13 15:17:08 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 21 14:21:21 2019 -0700"
      },
      "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\n"
    },
    {
      "commit": "06e4bab5451f1594d6843fc3af698bf8b4c1047e",
      "tree": "2eeec151cc1285a8707bfcaf73582fee9ffc69dd",
      "parents": [
        "433e8a2730ce7280beb2ce49f42f41f9401ad6e4"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Jul 29 10:13:34 2019 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 07 14:36:18 2019 -0700"
      },
      "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\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": "6e16157202e8c273d3c84be001e68bf7b13c9ee8",
      "tree": "ec83ddec857579985597cad7ffd8be10c25f187c",
      "parents": [
        "459e59820f8914a10c1d015fb4fa09b723cacaca"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 10 15:53:08 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 10 17:44:09 2019 -0700"
      },
      "message": "audio policy: fix channel match rule for input profiles\n\nModify channel mask match rule for input profiles in order to\nfavor profiles with positional masks and less than 2 channels.\nThis reflects the audio HAL convention to not list index channel\nmasks for less than 2 channels.\n\nBug: 131943885\nTest: repro steps in bug.\nChange-Id: I85e06f3afc2833b6aa7d52675bfd1ffda524fbcf\n"
    },
    {
      "commit": "bb54e20ba9afcf61cc6b41500ff8ab3dfc897203",
      "tree": "99d0c86990fbf905083d4f41c215311ec75c4e09",
      "parents": [
        "d10b735cfd4eea74846bb5f53d37c8c2a3114d58"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Oct 05 11:42:02 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 08 12:59:33 2018 -0700"
      },
      "message": "AudioPolicyManager: Convert dump to use String8 (part 1)\n\nTest: dumpsys of APM, diffs.\nBug: 117333182\nChange-Id: Ic046acb491efa363423b38a389b046c09ae9d5c9\n"
    },
    {
      "commit": "fa69dc61def2931f01a1e14a3b385ffc56a4f2bc",
      "tree": "d2b183d167be035424bb641ae2052000316d0efb",
      "parents": [
        "93adab132cfdd6e71cee2af14eea711b49a4c76d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 27 09:58:58 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Jul 27 16:30:29 2018 -0700"
      },
      "message": "audiopolicy: Add AudioProfileVector::findBestMatchingOutputConfig\n\nAssuming that the call target AudioProfileVector contains\ninput profiles, the method finds the best matching config\nfrom provided AudioProfileVector of output\nprofiles. Matching is performed according to the given\npreferences for audio formats and channel masks.\n\nBug: 63901775\nTest: MSD prototype\nChange-Id: Id005aad9de8bfe8cea5cb6291efc278d6260210c\n"
    },
    {
      "commit": "e50f628034f4b0b5a87f8e9f9eb3c170eef62955",
      "tree": "5b2c96e36150dc75c89a4fadc4747028f59d89dd",
      "parents": [
        "19283e9de83b5ade80a93b43589ea9a799414290"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 16:20:43 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jul 26 16:20:43 2018 -0700"
      },
      "message": "audio policy: Refactor AudioProfile\n\n * Move non-trivial method definitions into .cpp file;\n * Re-organize method definitions by name and by functionality;\n * Update and sort includes.\n\nThe code of the methods left unchanged.\n\nBug: 63901775\nTest: make\nChange-Id: Ic1b1c456983a23f078947dd84a837dc194bd48cc\n"
    },
    {
      "commit": "5a7913b405ac893998591fbad1242d7d9b7b2a62",
      "tree": "ab285ef604cf9c459e3abf56b7d68ecdcadefd01",
      "parents": [
        "fa4fd528583279049b334a75e3782c12e832403b"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 24 12:35:06 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jul 25 11:21:05 2018 -0700"
      },
      "message": "Add utility functions to AudioProfile\n\nAdded AudioProfileVector::getFirstValidProfileFor for retrieving\nfirst valid profile supporting the given format.\n\nAdded ChannelsVector::as{In|Out}Mask for reversing direction on all\ncontained channel masks.\n\nBug: 63901775\nTest: make\nChange-Id: Ib4a816abd9a3904a552f670ee75266e7dd890011\n"
    },
    {
      "commit": "9de8bd18b21642f6f1fb4e3ef75e44a2cc79f3ce",
      "tree": "3be2f968af8f8c7b3b52ae8fa52e7a052fa80fee",
      "parents": [
        "a2a19382e5870fb133b56dacc7ff3048cdaa407d"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jul 23 16:41:31 2018 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Jul 24 08:52:14 2018 -0700"
      },
      "message": "AudioPolicy: Reuse SortedVector comparison from AudioProfile\n\nOperation for comparing sorted vectors was defined twice in APM code:\nonce in AudioProfile.h as operator\u003d\u003d, then in APM as \u0027vectorsEqual\u0027\nmethod. Remove the latter and use the operator instead.\n\nTest: make\nChange-Id: I0697843aabb13539b7b552773d96dbb7fb56daa4\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": "1b2a794a27caab3a1320d22b872b04ef73e96555",
      "tree": "79f53eef61b788a5f49aaf26b5c897d7a6dac49f",
      "parents": [
        "2773dd7219e6cdc56471501c90808a1bafc31d39"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 10:18:09 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Dec 08 12:06:18 2017 -0800"
      },
      "message": "audiopolicy: Remove ; after namespace bracket\n\nSemicolons are not needed after the closing bracket of\na namespace, remove it.\n\nTest: compiles\nChange-Id: Ie82930365f738fd9c95a9163839a68b772e49d95\n"
    },
    {
      "commit": "2478d528186436f693b02c3534f04425086b638c",
      "tree": "d0b3cd0db05607b688da0b4c24f23513dcb47c46",
      "parents": [
        "cf84e596c53d5f85b64665a66ed2ec212ecff618"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 13:02:28 2017 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 07 16:43:38 2017 -0800"
      },
      "message": "audiopolicy: Use range for loops in managerdefinitions classes\n\nUse \"range for\" loops where it improves readability.\n\nChange-Id: I4fc0360956b7aa70b9e282b83f6bb371c05a8522\nTest: compiles\n"
    },
    {
      "commit": "2cc2a03319144bcebac5a9693319776afc471307",
      "tree": "4b9bc13ba29115614640ed9be20045c827217461",
      "parents": [
        "7f688edcace6c7abc9ef566669c4511849ad2493"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 06 16:41:39 2016 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 06 17:03:13 2016 -0700"
      },
      "message": "AudioProfile: reject profile if not exact match\n\nIn AudioProfile.cpp, the checkExact() function was treating dynamic_channels as a wildcard.\nSo 5.1 would match even if there were no channel masks listed as supported.\n\nBug: 25144047\nChange-Id: I3036dca7e0ed92579b1ac7a3cf8504b0e47b7ed5\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "05ddca504ce8e0e61b41e5c1aebea72086eea57b",
      "tree": "71137b6ef4df1f294d93d2cedc421b0f85190374",
      "parents": [
        "db52e5e3dc15f7233ccd9c128fe43f2b2f58b29b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 11 08:17:12 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 02 15:17:35 2016 -0800"
      },
      "message": "AudioPolicy: capture sample rate 0 is route-specific default\n\nBug: 25641253\nBug: 21019153\nChange-Id: I7d193640572c08ab5e5f1ecfc8ad6d31635967dd\n"
    },
    {
      "commit": "e693002b0fb25099540588245892ed98103749ba",
      "tree": "5c6b80929a798987d5ae658d3041cdefd4ba162d",
      "parents": [
        "d25c45526d9598218433b0fa59e1f5accbd5b639"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 11 10:20:40 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Feb 17 15:34:40 2016 -0800"
      },
      "message": "audio policy: select output with best sample format match\n\nAdd rules allowing selection of the output stream with the sample\nformat offering the best match to the client track sample format\nwhen more than one output is compatible with a request.\n\nBug: 27210844\n\nChange-Id: I31981940be5d1c06d713d52187cfb0a7bf355773\n"
    },
    {
      "commit": "112b0af826aeca45855690b9c105b2cdf9938bbe",
      "tree": "3069f5aa08c8a76ecaad33910a5901a8537ef0ac",
      "parents": [
        "599c758b258cc5da0dba9b530425381facc37d77"
      ],
      "author": {
        "name": "François Gaffie",
        "email": "francois.gaffie@intel.com",
        "time": "Thu Nov 19 16:13:25 2015 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 16 11:19:19 2015 -0800"
      },
      "message": "audio policy: introduction of AudioProfile\n\nIn order to be able to declare the possible sample\nspecifications for an Audio Port (a given format, a list of\nsample rates, a list of channels), a new object AudioProfile is\nintroduced.\n\nChange-Id: Ie3ca3400f05984e7b4132fc7ba90020eb4d998c7\nSigned-off-by: François Gaffie \u003cfrancois.gaffie@intel.com\u003e\n"
    }
  ]
}
