)]}'
{
  "log": [
    {
      "commit": "69b0154d59293511b3a4071342d9c3b769b4abfa",
      "tree": "28edc997df9767e37f531c9bf9a4594b76c66879",
      "parents": [
        "7c70a5482c7b1f9f9a501562aaecb30df4929495",
        "c343fd2846e78579f0a86d806a3cef01c71992b1"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 19 17:18:42 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jun 19 17:18:42 2017 +0000"
      },
      "message": "Merge \"Track: Check buffer size of static tracks\" into lmp-dev am: 782a30d2ab am: a3416fc6b4 am: 42f2fab126 am: 483cf88382 am: f89b2427ad am: 7779f826d4\nam: c343fd2846\n\nChange-Id: I72c4c8d74ffaa8b8bc03a265ae3ff06796bbeb5b\n"
    },
    {
      "commit": "f89b2427ad2d17b83354e3b03603f99af000b1bd",
      "tree": "07a38258ac05de3d10a5c935ac68256e254570ab",
      "parents": [
        "040485c1bcd8f22ca6f7c45d934a2e90ec48a231",
        "483cf88382bd6c8b9523d9d57eafd693cd06aaec"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 19 17:02:11 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jun 19 17:02:11 2017 +0000"
      },
      "message": "Merge \"Track: Check buffer size of static tracks\" into lmp-dev am: 782a30d2ab am: a3416fc6b4 am: 42f2fab126\nam: 483cf88382\n\nChange-Id: I745c19ce57ca9055b5cb11a9ac5072b0b8954cd6\n"
    },
    {
      "commit": "483cf88382bd6c8b9523d9d57eafd693cd06aaec",
      "tree": "31319a05d978ede365da4746f9e3881a8d45ecd5",
      "parents": [
        "6ce4126a09190954a69dfc97f1f340fe9e139431",
        "42f2fab126561094ec38aac25b9db200dcfb28b6"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 19 16:56:42 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jun 19 16:56:42 2017 +0000"
      },
      "message": "Merge \"Track: Check buffer size of static tracks\" into lmp-dev am: 782a30d2ab am: a3416fc6b4\nam: 42f2fab126\n\nChange-Id: Ifb95a65ef32c643b94554c3904b84678d5459625\n"
    },
    {
      "commit": "a3416fc6b4fc40e65f36dc83038a40a2d778ddfa",
      "tree": "dc0563876c8a5581516d643bd48acf806611e196",
      "parents": [
        "2ace148c06da2e79234cab43db9a6d3dc9220b7c",
        "782a30d2abbf20bf617c19983829fe78cdc235f1"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 19 16:45:42 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jun 19 16:45:42 2017 +0000"
      },
      "message": "Merge \"Track: Check buffer size of static tracks\" into lmp-dev\nam: 782a30d2ab\n\nChange-Id: Ie27330ced83beccaed5a5a3d69ec6833be7e36e1\n"
    },
    {
      "commit": "782a30d2abbf20bf617c19983829fe78cdc235f1",
      "tree": "824f3768fd99df018be0164572a7ed7aa82b56f8",
      "parents": [
        "d971d188737cb179dba19a27e513e07c78252bf5",
        "f4aeab2bd69bead05ed75ae3254f53a6ab2316b5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 19 16:35:00 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 19 16:35:01 2017 +0000"
      },
      "message": "Merge \"Track: Check buffer size of static tracks\" into lmp-dev"
    },
    {
      "commit": "a92d05fc1ec048541d888c4ef72ee63617ee18f1",
      "tree": "7493a758e3dd8958540ed42438fa059fb89a8083",
      "parents": [
        "eae3ad0585d17bab12bbd831b58407c122732a1c",
        "109247df7a1d7328f2c6f8f39d0987d7f6395ab2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Jun 17 00:13:12 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Jun 17 00:13:12 2017 +0000"
      },
      "message": "AudioFlinger: Fix memory allocation for client-less tracks am: 1159ffd5e3 am: f242b890c4 am: 24ef54ecb8 am: a35816475b am: 1ce123cf91 am: d06e47540d am: 103b751e55 am: 0851e2f4c6 am: aff0808bcf\nam: 109247df7a\n\nChange-Id: I4f55d2cdd5ef430742e3b6e3680603d2a9618593\n"
    },
    {
      "commit": "0851e2f4c6abe3340259b0e02b61857215762281",
      "tree": "52b5e52e475a006d93a98cbbb380d0efb3a04b33",
      "parents": [
        "bc7ecc89b6c1274f8b472a91c50c942924bfd8ec",
        "103b751e5511c2cf4b250455e07ec1e1fc4befe2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Jun 17 00:04:11 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Jun 17 00:04:11 2017 +0000"
      },
      "message": "AudioFlinger: Fix memory allocation for client-less tracks am: 1159ffd5e3 am: f242b890c4 am: 24ef54ecb8 am: a35816475b am: 1ce123cf91 am: d06e47540d\nam: 103b751e55\n\nChange-Id: I3d03741eca351ad131d5bae700a5024fda36e1be\n"
    },
    {
      "commit": "103b751e5511c2cf4b250455e07ec1e1fc4befe2",
      "tree": "1f3ed539aba84c2a89d3279ceb2fd4904856530b",
      "parents": [
        "7c86ed20b2de9eb0334ffe2d7b4502c9bb719790",
        "d06e47540d0817bab04a017e8242a25c17cebd76"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Jun 17 00:02:09 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Jun 17 00:02:09 2017 +0000"
      },
      "message": "AudioFlinger: Fix memory allocation for client-less tracks am: 1159ffd5e3 am: f242b890c4 am: 24ef54ecb8 am: a35816475b am: 1ce123cf91\nam: d06e47540d\n\nChange-Id: I22405b81c7351961f8aca57289a15cc99e67525a\n"
    },
    {
      "commit": "1ce123cf912a00547830fc742b927cf72007ff86",
      "tree": "fa752d996ffc18dbc8b27548dc8a980248c28b31",
      "parents": [
        "b91cfc3589922da3d038a01fe628353ce589f253",
        "a35816475b907f3cead491f1c39ea72967f49fe5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 16 23:58:10 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jun 16 23:58:10 2017 +0000"
      },
      "message": "AudioFlinger: Fix memory allocation for client-less tracks am: 1159ffd5e3 am: f242b890c4 am: 24ef54ecb8\nam: a35816475b\n\nChange-Id: I77aa056b71679b0d0d6703a59f46c788e77d5351\n"
    },
    {
      "commit": "a35816475b907f3cead491f1c39ea72967f49fe5",
      "tree": "4b1bfcaa3885a8d64b625e44313021237bde2601",
      "parents": [
        "8818bf1fbb9ea6b65cd61543ed7db986c3d65d13",
        "24ef54ecb8e825f51b2750dbb8b2ea2139cebd8c"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 16 23:54:39 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jun 16 23:54:39 2017 +0000"
      },
      "message": "AudioFlinger: Fix memory allocation for client-less tracks am: 1159ffd5e3 am: f242b890c4\nam: 24ef54ecb8\n\nChange-Id: I0b413afa5c0e41fadcd0320f7481172cc2398018\n"
    },
    {
      "commit": "f4aeab2bd69bead05ed75ae3254f53a6ab2316b5",
      "tree": "683ef1ac8035e7bc783d68e7ebd8a7e20dc84893",
      "parents": [
        "ea83248dfb1822e0c0d507f38b13d90a9641261e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 12 17:22:46 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jun 15 18:08:47 2017 -0700"
      },
      "message": "Track: Check buffer size of static tracks\n\nMerged-In: Ia7edd9a802905214a27961dbcec6352f6ef98f73\nTest: Native POC\nBug: 38340117\nChange-Id: I633caf563d3607dbe4b9be10be1687efce33469c\n"
    },
    {
      "commit": "1159ffd5e3f832206982d45a7b030b943cc4775e",
      "tree": "aef16a6e9d49e0d1b59bef3b487f21244e1ab8ee",
      "parents": [
        "ef3a4aead0eb4d6b0615159489d4a187ce90de2c"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Feb 13 18:50:48 2017 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 12 17:52:06 2017 -0700"
      },
      "message": "AudioFlinger: Fix memory allocation for client-less tracks\n\nTest: Ringtone with BT\nBug: 35350587\nBug: 38340117\nChange-Id: If247d319d58f8f4d18b49f58ec950491871ebb2d\n(cherry picked from commit afb31487f3156a7284d2f0d06646c7bc00d99537)\n"
    },
    {
      "commit": "12b5b3b00803eac0ab5b6c7ff09b8aad3d78c2e1",
      "tree": "163be6a31a0ee086d52b40564d5576c523665208",
      "parents": [
        "437d60bffb4217f997298a281d08c0d8fce7f562",
        "9262496af91c790d865e31a1f550410f088ba642"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 10 22:53:00 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 10 22:53:00 2017 +0000"
      },
      "message": "Merge \"AudioFlinger: Check framecount overflow when creating track\" into lmp-dev am: 51a3483ec9 am: 5dc0e88cc1 am: 6d4b5fc334 am: 5562d70451 am: 3fb4149ed2 am: 78ec332732\nam: 9262496af9\n\nChange-Id: I8df7a4c1308afb39a1f1a37a588e70e049a868fa\n"
    },
    {
      "commit": "3fb4149ed2983be6f0f9a32fff2646f37eca6759",
      "tree": "daab4eee4244294df72d4605c605fc740a811bd8",
      "parents": [
        "1dfa5905430f351843272dd53740d9deca957c7b",
        "5562d704519b5662d2165d688c50f85ff3d7aedd"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 10 22:42:59 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 10 22:42:59 2017 +0000"
      },
      "message": "Merge \"AudioFlinger: Check framecount overflow when creating track\" into lmp-dev am: 51a3483ec9 am: 5dc0e88cc1 am: 6d4b5fc334\nam: 5562d70451\n\nChange-Id: Ia73c4a1d2911cf930700bf796fc7ee18d94500fe\n"
    },
    {
      "commit": "5562d704519b5662d2165d688c50f85ff3d7aedd",
      "tree": "41c43929eef9526fecbd100c893b1655165512c7",
      "parents": [
        "292dc7e025e983b4dfdf50961601c713ee9a2ec1",
        "6d4b5fc3344cff6f0c1feed36e558144b2c7355c"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 10 22:39:59 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 10 22:39:59 2017 +0000"
      },
      "message": "Merge \"AudioFlinger: Check framecount overflow when creating track\" into lmp-dev am: 51a3483ec9 am: 5dc0e88cc1\nam: 6d4b5fc334\n\nChange-Id: Ie47307f09c5fcb49f81a2d034c42d69b8417c9a6\n"
    },
    {
      "commit": "5dc0e88cc14128d54bae2297c0ee1bac2042b6a1",
      "tree": "5a146d2eab3e3afc789d151ea6e5f6d80e7bd4fe",
      "parents": [
        "1760d73fbc270e64b3804fedacaf73029140d612",
        "51a3483ec97434c29113ef3c6a04480e0cdafaf7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 10 22:32:59 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 10 22:32:59 2017 +0000"
      },
      "message": "Merge \"AudioFlinger: Check framecount overflow when creating track\" into lmp-dev\nam: 51a3483ec9\n\nChange-Id: I6fe5fb0a7142218b16c84bc1966a84ac920fd70a\n"
    },
    {
      "commit": "64e843f1c312382e3e1a6f6e17f8d895e9c6efe8",
      "tree": "ef414eb6b5d745aba49a9bb3823470ace97265e6",
      "parents": [
        "b6aa3901ceb4b51ca1e51799e8cc95f630d49c33"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Feb 13 18:48:39 2017 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 14 16:39:50 2017 -0800"
      },
      "message": "DO NOT MERGE AudioFlinger: Check framecount overflow when creating track\n\nTest: Native POC\nBug: 34749571\nChange-Id: I7529658e52ac7e64d162eb5338f10fb25eaa8fe7\n"
    },
    {
      "commit": "eaa3969f757291f151efedde17ec529b8659024d",
      "tree": "da8f3a44d66a2c8f16114aab652a58079487cce9",
      "parents": [
        "e5a54485e08400a976092cd5b1c6d909d0e1a4ab"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Feb 13 18:48:39 2017 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 15 00:38:02 2017 +0000"
      },
      "message": "AudioFlinger: Check framecount overflow when creating track\n\nTest: Native POC\nBug: 34749571\nChange-Id: I7529658e52ac7e64d162eb5338f10fb25eaa8fe7\n(cherry picked from commit 1883f69de5f2c4e71df58d5b71d7c39f9779b50c)\n"
    },
    {
      "commit": "e93cc03da360a1a0d2ad937c745ce8c8e8be81c2",
      "tree": "9deae98570f41fdec272a863a2e84c7828af1a64",
      "parents": [
        "038ccfd6ff5a32d6f559e5b479d6f8e55d0b5133"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 05 10:15:10 2016 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 11 11:38:01 2016 -0700"
      },
      "message": "audioflinger: various offload playback fixes\n\nRevert underrun sleep time optimization added for\noffload by commit 51716185 which can cause music to pause for a few\nseconds in some corner cases.\n\nAllow underruns in STOPPING_1 state to avoid dropping last buffer\nreceived by the AudioTrack callback after stop() is called by the\nclient.\n\nAllow interruption of thread loop sleep if a command is pending to\nspeed up track start sequence.\n\nDo not wait for a full AudioTrack buffer before writing to audio HAL\nwhen resuming playback or transitioning to next track.\n\nAlso moved log level for underruns in AudioSink from I to D to reduce\nspam on user builds.\n\nBug: 28545177\nBug: 27682362\nBug: 28347796\n\nChange-Id: I05b651b7878a2d2eedcac43cd669e32add171d40\n"
    },
    {
      "commit": "6d7b119a416c9f10288051e562f294365e5d954c",
      "tree": "734bff32a20de4a97c24271b745795db3871cd0f",
      "parents": [
        "0b667e2f6f9e871e2fdc89100b8ef4cc623adec2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat May 07 22:59:48 2016 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon May 09 11:42:57 2016 -0700"
      },
      "message": "Improve timestamp jitter fix\n\nUse last valid kernel timestamp on server side, not client side.\n\nBug: 28465713\nChange-Id: I33590d6922980f288355f947bc56279245058429\n"
    },
    {
      "commit": "dc2c50bad491d2c0c8a2efc0e24491076701c63c",
      "tree": "b1b2eead0896ffa4b095bee9fb0a00c8cc8d5944",
      "parents": [
        "ecd0a41d9a2cc9efbc4ad6d4c91d417461772933"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 21 08:13:14 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 28 15:17:09 2016 -0700"
      },
      "message": "Make max fast tracks configurable using a property\n\nro.audio.max_fast_tracks\n\nRename the currently configured maximum number of fast tracks\nfrom FastMixerState::kMaxFastTracks to FastMixerState::sMaxFastTracks.\n\nThere is no guarantee that the CPU will be able to handle\nthe configured number of fast tracks.\n\nBug: 27564141\nChange-Id: If9af226d839b226503488c3cb20a4bb8950b429d\n"
    },
    {
      "commit": "e1e9846a786a0d77a13b44f8e798e03b4cba9d77",
      "tree": "57580c6e48c242f5338e6ed4e99f03cb2511824f",
      "parents": [
        "8a049c2f127f95715375d5ede39b2363b3a68329"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 12 10:18:51 2016 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 12 14:57:36 2016 -0700"
      },
      "message": "AudioTrack: Reset position on flush for extended timestamps.\n\nBug: 27940058\nChange-Id: If91320669e2e84803e601137b1ce66b361b129f1\n"
    },
    {
      "commit": "ea2b9c07b34079f0dbd8610a511e006e69a15adc",
      "tree": "95898426bb80bdc743a0746bc8149f1ba313dfde",
      "parents": [
        "1b9e52cd6553e60f02663c02e7b75f05ec2ef351"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 17:06:53 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 31 14:45:36 2016 -0700"
      },
      "message": "Implement client playback timestamps with 64 bit accuracy\n\nProvide server timestamps if the HAL doesn\u0027t provide it.\nProvide monotonic - boottime translation.\n\nBug: 17472992\nBug: 26682703\nBug: 27749434\nChange-Id: I6c9b213d9f9284092e34d57f52870e02c72df62a\n"
    },
    {
      "commit": "c42e9b462661673dff480ee71757a58b0f806370",
      "tree": "c9d53e761500f2466b7b8c4cfeb78b072d424e29",
      "parents": [
        "02c4f1c02b832868bbae2bf2c62039e54dc0b6d4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 21 11:35:03 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 21 12:05:28 2016 -0700"
      },
      "message": "Fix build warnings\n\nChange-Id: Idfdaff3a7a8f60cd8817bd306bfba28020a391c8\n"
    },
    {
      "commit": "fc1337d079ba7e6ffd7ce07706cfeeeb355c0200",
      "tree": "1a70a9e62e19bc4c0dbc2160c13a051039d10106",
      "parents": [
        "7c9ea89cbe3e42e0d94b1790ae1d424a9c16ce08",
        "e8972b0a27fac327c997fceb20d9abae1dc1d899"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 18 03:37:20 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 18 03:37:21 2016 +0000"
      },
      "message": "Merge \"AudioTrack: fix stall if setBufferSizeInFrames() called before play()\" into nyc-dev"
    },
    {
      "commit": "e8972b0a27fac327c997fceb20d9abae1dc1d899",
      "tree": "ff3812507f2eb266870eac29c56921f4a548dacf",
      "parents": [
        "f56a02a5e7d1bfaeabf8b918e56bf49ea509bd42"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 04 11:29:57 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 17 16:09:38 2016 -0700"
      },
      "message": "AudioTrack: fix stall if setBufferSizeInFrames() called before play()\n\nThe server was waiting for a full buffer.\nBut the buffer was only getting partly filled.\nSo the stream was not starting.\n\nThe fix involves having the server look at the adjustable threshold.\n\nBug: 27505889\nChange-Id: I5dbf686413e670dacbbecc9e0f838744e465f44f\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "d848eb48c121c119e8ba7583efc75415fe102570",
      "tree": "06733e396ad546bf39be0a6699193d041883edad",
      "parents": [
        "38246e482ea3bd1e0f88f7133934ec4537b48bbd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 08 13:42:11 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 16 14:04:22 2016 -0700"
      },
      "message": "Use audio_session_t consistently\n\nBug: 27562099\nChange-Id: I328d8226191386b163f2ace41233607294c50dcd\n"
    },
    {
      "commit": "4d231dc0ee34380956c71cbe18a750e487a69601",
      "tree": "cee9e9b9ff4d3aa17bca9269622e9f40d470ff09",
      "parents": [
        "f56a02a5e7d1bfaeabf8b918e56bf49ea509bd42"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 11 18:38:23 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 14 15:50:19 2016 -0700"
      },
      "message": "audio: Fix race condition in AudioTrack underrun.\n\nWhen audio flinger mixer removes an AudioTrack from the\nactive list in case of underrun, it is possible that the\nclient has written a full buffer just after the underrun detection and\nis blocked waiting for more space to write. In this case, the client\nwill never detect the DISABLED flag and the track never be restarted.\n\nAlso implement missing DISABLE flag detection in server side audio tracks\n(OutputTrack and PatchTrack).\n\nbug: 27567768\nChange-Id: I8d0753429d4113498258b1f61bd8ac5939a612f0\n"
    },
    {
      "commit": "517161856d74f5fe39cce131f29b977bc1745991",
      "tree": "c12acaeb7597dd99c1a5f0c96d5af7f8a4b7b52a",
      "parents": [
        "db52e5e3dc15f7233ccd9c128fe43f2b2f58b29b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 29 18:00:56 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 02 17:40:18 2016 -0800"
      },
      "message": "audio flinger: fix offload track underrun\n\nFix offload track underrun detection causing early disabling\nof offloaded audio tracks.\n\nOptimize sleep time in case of underrun to avoid spinning while\nwaiting for new data.\n\nRe-enable offload when streaming\n\nBug: 26668110\n\nChange-Id: I874728c69647ac05e1effb84c48700a6d0ac7435\n"
    },
    {
      "commit": "c54b1ffc92b8ad27608a8af21033d7cab33cb3a0",
      "tree": "f0669f28e645f742f06193afb8c6eb30b84a9478",
      "parents": [
        "af9c466b91eb43ffa4590b559fa8bb1003191ab5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 23 14:07:07 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 23 17:26:37 2016 -0800"
      },
      "message": "Fix AudioTrack presentationComplete regression\n\nBug: 27310929\nChange-Id: Id52299660d90b07220a4fd9996da53fe755a41f1\n"
    },
    {
      "commit": "818e7a32ce3633980138aff2c2bfcc5158b3cfcc",
      "tree": "61104149c08955e55a10b9353f80ed140ad3df26",
      "parents": [
        "6ae5843c281301a9ffd1059d185620a9337e15a2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 16 18:08:07 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 19 13:15:16 2016 -0800"
      },
      "message": "Implement server side playback timestamps with 64 bit accuracy\n\nProvide server timestamps if the HAL doesn\u0027t provide it.\nProvide monotonic - boottime translation.\nIntegrate record timestamps and playback timestamps together.\n\nBug: 17472992\nBug: 22871200\nBug: 26400089\nBug: 26682703\nChange-Id: If1974f94232fcce7ba0bbcdf63d9e54ed51918ff\n"
    },
    {
      "commit": "6ae5843c281301a9ffd1059d185620a9337e15a2",
      "tree": "5c97c15b705c079bf8b2dc9ebb0a1ba17df8ca07",
      "parents": [
        "d25c45526d9598218433b0fa59e1f5accbd5b639"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 16 18:32:24 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 18 16:04:55 2016 -0800"
      },
      "message": "Enable FastTrack timestamps\n\nBug: 26413951\nChange-Id: Id54c32cb0f0be83d443f6cf1007181ebc461c586\n"
    },
    {
      "commit": "8ce8e264d0bf09ec131e4a7701fe1ebc3a678f8b",
      "tree": "0938951613cb0d2725a01f84840571c4c50a0998",
      "parents": [
        "bc57b12030cbd4885d9231e721bbfed1b6522212"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 16 11:59:23 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 16 11:59:23 2016 -0800"
      },
      "message": "Revert \"Enable FastTrack timestamps\"\n\nThis reverts commit b3a486fecddc9e9264fe63d356eca0812493db27.\n\nReverting while investigating the root cause.\n\nBug: 27186414\n"
    },
    {
      "commit": "b0a144d705a021994628d136a170a6d2bd4282e7",
      "tree": "f6144a26c0e19fa9a7ba75e136c80afeb9ecf14a",
      "parents": [
        "7f308c3e0556a5e704bcb3b341842ed50ba80b0a",
        "fdb3c07db5d44535eb8c3ec46dc78ad8446c01eb"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Feb 12 22:24:53 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 12 22:24:55 2016 +0000"
      },
      "message": "Merge \"AudioTrack: support ENCODING_IEC61937\" into nyc-dev"
    },
    {
      "commit": "fdb3c07db5d44535eb8c3ec46dc78ad8446c01eb",
      "tree": "b8c3d97da524e8aefcb37e736619da6b8e087a82",
      "parents": [
        "3ea4f828a6906e9931f96ebdcae9c63e14b86cbd"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Feb 09 10:47:02 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Feb 12 06:30:43 2016 +0000"
      },
      "message": "AudioTrack: support ENCODING_IEC61937\n\nSet DIRECT flag.\nUse audio_has_proportional_frames() instead of audio_is_linear_pcm()\nwhere appropriate.\n\nBug: 24541671\nBug: 20891646\nBug: 26373761\nChange-Id: Ia32036b18683b084d6c9887593df87397ea0afd9\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "e99556b85081778027653bd3e716a529ab518b35",
      "tree": "b7895d2eead6577be1f77ed8c28d205ebd6e5b3d",
      "parents": [
        "dea9cbc6badae6a03a16fa49a02215f18e3ed93a",
        "e10393e72454bfd8298017dc193faf424f4e9a8f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 04:06:53 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 12 04:06:54 2016 +0000"
      },
      "message": "Merge \"Fix audio timestamp computation for pause, stop, and dynamic speed changes\" into nyc-dev"
    },
    {
      "commit": "b3a486fecddc9e9264fe63d356eca0812493db27",
      "tree": "cd2ff28eac5233cdb2037b437cb68abe9b9dff3c",
      "parents": [
        "e8c8ed47ca15aa6be83c6feef89e27a832e763e9"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Aug 04 15:17:58 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 00:34:47 2016 +0000"
      },
      "message": "Enable FastTrack timestamps\n\nBug: 26413951\nChange-Id: I99a69241a0bcd69f6bfebf785cac6d9ee1e2cd5f\n"
    },
    {
      "commit": "e10393e72454bfd8298017dc193faf424f4e9a8f",
      "tree": "e7d3946c0e12b8f50e351a401eaa35986e2d0f2d",
      "parents": [
        "e8c8ed47ca15aa6be83c6feef89e27a832e763e9"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 12 13:59:33 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 00:17:13 2016 +0000"
      },
      "message": "Fix audio timestamp computation for pause, stop, and dynamic speed changes\n\nTimestamp on pause and underrun (stop) do not reflect actual position.\nTimestamps do not account for dynamic changes to track speed / sample rate.\n\nBug: 11085154\nBug: 17552775\nChange-Id: I0e5e40ab3eaee82f0c91b9f399089698a0b1947e\n"
    },
    {
      "commit": "3f0c902beb53a245c9db35e871607dba05b8d391",
      "tree": "93b456b76dd9504e53de955f75c5c6a4f3d2be7c",
      "parents": [
        "00803f7e94052144ecf476268bc717191ee29865"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jan 15 17:49:46 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 10 15:57:51 2016 +0000"
      },
      "message": "Add AudioRecord timestamps\n\nBug: 13569372\nBug: 22886739\nChange-Id: Ibc81afefb733d23676a632a0f2da31163fdbe05f\n"
    },
    {
      "commit": "d79072e9dff59f767cce2cda1caab80ce5a0815b",
      "tree": "cab9cab36ddf4bb61675c4508d923b283fd3edd6",
      "parents": [
        "a7b723715bab4ddf6db364c825135a9bc003c7c0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 06 08:41:20 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 25 15:34:04 2016 -0800"
      },
      "message": "Remove TimedAudioTrack and associated code\n\nBug: 8278435\nChange-Id: I095c1a4888e645e14d93b0b15fbef4524a831ca1\n"
    },
    {
      "commit": "2812d9ea3a3a33142dd8e23c9d949c498d6f7a12",
      "tree": "5079c758817d0c42b3f7ade661366fdae25fe5d1",
      "parents": [
        "e0db30868d9734f95a02df516dd0dc6a7226474b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jan 04 10:34:30 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 16 11:21:38 2016 -0800"
      },
      "message": "AudioTrack: Add getUnderrunCount()\n\nThis allows an app to detect application-level output glitches.\nUnderrun counts survive track recreation.\n\nChange-Id: I8eb14e92f6fc1007718a29b0666ab51ace30cdb8\nBug: 25641253\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "dcb346b7dc5b88c3e85db8a70bbd6a2fee8192b9",
      "tree": "e0038e85e097843f469a6befe9fae1014435f4f5",
      "parents": [
        "ebdddf82b07fa2c4134c3c00dbbbaa1ad3286726"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Sep 09 10:47:29 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Dec 08 11:29:11 2015 -0800"
      },
      "message": "Run audio services in audioserver instead of mediaserver\n\naudioflinger, audiopolicy, (fm) radio, soundtrigger moved to audioserver.\nmedialog is removed from mediaserver.\naudioserver has same permissions and rights as mediaserver.\n\nmediaserver is allowed to specify client uid to audioserver.\n\nSubsequent CL will add medialog to audioserver.\n\nTBD: Pare down permissions.\n\nBug: 24511453\nChange-Id: Iccaa08b874a502710d142e72f8abbb3d97c44cfa\n"
    },
    {
      "commit": "954ca45ac30539a49f179580b667b0ab1056d113",
      "tree": "33adc92ecf3ea0bbafa97882e61381e3a8bf1204",
      "parents": [
        "e5200ea76c5d180b53087ae7825326ec61cc4687"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 09 14:39:02 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Oct 13 15:48:31 2015 -0700"
      },
      "message": "For static obtainBuffer(), do not set mUnreleased if acknowledging flush.\n\nstatic audio tracks use obtainBuffer() to update position in start().\n\nBug: 22938515\nChange-Id: I8ae32f6cce4d122386d2cf8982e158049b04ba9a\n"
    },
    {
      "commit": "e6fb82a207f5256933e2d83e77262331af50a27f",
      "tree": "c1dda7d2e1d4c3439f804e0c4039eeb8d89f27cd",
      "parents": [
        "6dc5a7bce1fdb89aae91967fc984da521e6ca2b2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 09 14:39:02 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 16 21:18:09 2015 +0000"
      },
      "message": "For static obtainBuffer(), do not set mUnreleased if acknowledging flush.\n\nstatic audio tracks use obtainBuffer() to update position in start().\n\nBug: 22938515\nChange-Id: I8ae32f6cce4d122386d2cf8982e158049b04ba9a\n"
    },
    {
      "commit": "a542782d0045588e55e075a763cedcd2d504ad22",
      "tree": "972b585a13ec997abea11db48f4c438c6a93bf05",
      "parents": [
        "0f05031545e43c8fe49a9dda0cfd9dce202d1ef3"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 11 16:15:35 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 11 16:18:12 2015 -0700"
      },
      "message": "Workaround static fast track start-after-stop issue\n\nBug: 23291988\nBug: 23614327\nBug: 23924081\nChange-Id: Id1a519ed4bb2a6f4cb197da8450f7069b55c0d48\n"
    },
    {
      "commit": "564d144fc28917d42e3a67718ac51d61bfc36315",
      "tree": "6db8c93d002f5594bf80ee709706609a4df92fb4",
      "parents": [
        "27e0350ae57184d5e300f96c8338379f5d3d0fbc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 09 12:26:52 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 09 12:41:10 2015 -0700"
      },
      "message": "Revert \"Do not acknowledge flush() on start() for static tracks\"\n\nThis reverts commit cafe86a9cb6625bb1ec6383e16e28e4c9e455f87.\n\nBug: 23924093.\nChange-Id: I186d1013b06a286eca93c30bb9b3545dc36695ff\n"
    },
    {
      "commit": "cafe86a9cb6625bb1ec6383e16e28e4c9e455f87",
      "tree": "14b334794322ae63ad0e1478bf9ccdc38335a55d",
      "parents": [
        "b3b34074477b9f8713924e18f7a0120965112720"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Aug 14 09:34:50 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 24 19:07:39 2015 +0000"
      },
      "message": "Do not acknowledge flush() on start() for static tracks\n\nBug: 22938515\nChange-Id: I1de653de169a3fbbaa693da6057897ea57772447\n"
    },
    {
      "commit": "4c6afaf1053ecbfda6d95098e0f49772ecbcf2e1",
      "tree": "0b22dbafb75fc4c064b25f3b3f923cf39664ece2",
      "parents": [
        "ca097142ba4664858bc29bb538bcfcf5ea03ebe7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 12 18:23:35 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 12 18:23:35 2015 -0700"
      },
      "message": "Fix AudioRecord cleanup if construction fails\n\nBug: 11671194\nChange-Id: Id48350264f8b5ce53bf7ce2b308bf4ba21e59241\n"
    },
    {
      "commit": "1b42097f38e72574ed853a35f4e8a66e4739c421",
      "tree": "e708293755e42bca48d47380b8b8568cfc3d2f1f",
      "parents": [
        "5f88cdae61079be7920aee166eaac4941f65fb9f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 22 10:52:21 2015 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 29 23:36:01 2015 +0000"
      },
      "message": "AudioTrack: fix spurious retrograde messages\n\nThe retrograde motion was confused by some positions coming from\nthe DSP on offloaded tracks. So the retrograde check was moved up\ninto AudioTrack.cpp. This allows us to take advantage of the checks\nfor invalid positions based on timing.\n\nBug: 2047891\nChange-Id: Ifcad2349201443a7f1711347c203297100449536\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "5a8a95de6dad1a3bcf3da5a37b35766e89086e13",
      "tree": "64b82016eaef26f51b75470714172c06287c9c56",
      "parents": [
        "ea44f41bb142555e747cc11382296e94af99d312"
      ],
      "author": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Sat Apr 18 14:47:04 2015 -0700"
      },
      "committer": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Wed Apr 22 10:57:24 2015 -0700"
      },
      "message": "Use AudioPlaybackRate to hold TimestretchBufferProvider parameters\n\nUse this struct to handle the parameters for TimestretchBufferProvider all\nacross the system.\nAdd stretch mode and fallback mode to TimestretchBuffer Provider.\n\nChange-Id: I19099924a7003c62e48bb6ead56c785cb129fba2\n"
    },
    {
      "commit": "8edb8dc44b8a2f81bdb5db645b6b708548771a31",
      "tree": "663bda0f8a3d43894fa6d3d3f4283ed0df427f03",
      "parents": [
        "c5656cc900aeb4a705e27508dd82c70030a97709"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 26 19:13:55 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 09 18:49:15 2015 -0700"
      },
      "message": "Add playback rate to AudioTrack\n\nBug: 19196501\nChange-Id: I6411e1d3ce652b711a71a6d9df020cb5f60d4714\n"
    },
    {
      "commit": "86f79e3f3bc1de7b4e4dd045de8962b8a62ab5d5",
      "tree": "222616b4bb2cb2cbfcc0d7c14581e182143e87cd",
      "parents": [
        "77a44e8d1f902a100500ea69a450e22889dcff31",
        "73c02e4277b399c2ec1555d32b6ad5df23bb83dc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 23:30:58 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 08 23:30:58 2015 +0000"
      },
      "message": "Merge \"Improve ResamplerBufferProvider\""
    },
    {
      "commit": "73c02e4277b399c2ec1555d32b6ad5df23bb83dc",
      "tree": "c42d75e42eda5b09915c0962107083f1c55dc74a",
      "parents": [
        "97a893eb34f8687485c88eaf15917974a203f20b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sun Mar 29 01:13:58 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 15:55:46 2015 -0700"
      },
      "message": "Improve ResamplerBufferProvider\n\nChange-Id: I3cc3af221ad5797ff219d75227350733afa180db\n"
    },
    {
      "commit": "77a44e8d1f902a100500ea69a450e22889dcff31",
      "tree": "0e1ca5b8a21f3d99141542b0d866e382db140591",
      "parents": [
        "0c0acdadc9ca961acd1f3b4b85c2befef2dc7161",
        "97a893eb34f8687485c88eaf15917974a203f20b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 22:54:38 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 08 22:54:39 2015 +0000"
      },
      "message": "Merge \"Add RecordBufferConverter for RecordThread data processing\""
    },
    {
      "commit": "97a893eb34f8687485c88eaf15917974a203f20b",
      "tree": "6a103ab6f76dcabb0416677055dab4a8454f9fd7",
      "parents": [
        "6b3b7e304e0f8f167241b2c75f1eb04a9ef192ec"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sun Mar 29 01:03:07 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 15:23:30 2015 -0700"
      },
      "message": "Add RecordBufferConverter for RecordThread data processing\n\nChange-Id: Ia3aab8590cd41e8a7cba0a7345d70d2866d92045\n"
    },
    {
      "commit": "3bcf8597189c592713675ec58326ecbef0ac4ae9",
      "tree": "5656987c2e9d6fe9c99bb632865318489432fe36",
      "parents": [
        "322b4d25387a04c9afebe998326d005bbdf17ede"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 03 12:13:24 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 08 12:38:08 2015 -0700"
      },
      "message": "audio flinger: improve device to device audio patches\n\nAllow creation of audio patches between input and output\ndevices managed by the same audio HW module.\n\nChange-Id: I4b83268a4d5c41f3d5905d7581202cf5193efd32\n"
    },
    {
      "commit": "b369cafd67beb63dd0278dba543f519956208a7f",
      "tree": "c50687a52df6b28cb071b36a5377cae9054bbefa",
      "parents": [
        "253930b927d375413a42f170fa1ef8d98b8f7cb4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 30 20:51:47 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 01 00:03:48 2015 +0000"
      },
      "message": "audio flinger: fix standby on output with HW A/V sync\n\nFix a bug in audio HAL pause logic on output threads with\nHW A/V sync preventing the HAL to enter standby when\nthe audio track is stopped and detroyed.\n\nBug: 19980184.\n\nChange-Id: Ia497dad23159038b447fcbc18a67bb61b70b79cc\n"
    },
    {
      "commit": "6140c79c31f5dc237fba69554de5be641cedf113",
      "tree": "47bd7b5544c7e76f49956629f91168e3b493add7",
      "parents": [
        "377165c24968b044faccaf366a2377fa32143e2f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 19 14:30:21 2015 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Mar 23 12:49:00 2015 -0700"
      },
      "message": "AudioFlinger: prevent retrograde timestamps for direct mode\n\nPrevent retrograde motion in the HAL or drivers from making it\nup through the AudioFlinger to the app.\n\nBug: 19604395\nChange-Id: I11d6c0f7cab69e75fd4b4a2a90f64960b4bb6d5a\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "240934ba80d6c6165749db7681d243c6857a092f",
      "tree": "ed11373a97a1e0815e6949dc4f7d08d449a6fecc",
      "parents": [
        "1a86a8adbf4ab43a6aed2c3c8aa0830c001adb77"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Mar 11 18:25:50 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 16 10:47:09 2015 -0700"
      },
      "message": "audioflinger: refresh fast track underrun state upon start\n\nFalse underrun is detected when starting recycled fast tracks, which\nleads to continuous fatal assertion failures and even AP reboot.\n\nTrack\u0027s last mObservedUnderruns isn\u0027t updated one at previous stop()\ncall. Hence, when we start the same track again, we should synchronize\nit to the latest state instead of relying on stale one.\n\nauthored-by: Weiyin Jiang\u003cwjiang@codeaurora.org\u003e\nCRs-Fixed: 803389\nBug: 19635137\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\nChange-Id: Ia003a49c6896dba965798c062c98b8c367ef8369\n"
    },
    {
      "commit": "63238efb0d674758902918e3cdaac322126484b7",
      "tree": "07fdf37a2bc73a886d8ea41f69e722ed914754af",
      "parents": [
        "d7e1d08c2ac21cdd2f3b7f83fec7094f6a98fc08"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 02 15:50:29 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 03 08:50:40 2015 -0800"
      },
      "message": "Remove redundant semicolon from namespace closing\n\nChange-Id: I163f9d3d216c283ae1160ce4802e5247cf44fba7\n"
    },
    {
      "commit": "7841f704fee0e5acd45fa6e47a336120c3cad42c",
      "tree": "c75096dc548d0bdb9eec94663e08dc59fe287fc5",
      "parents": [
        "364b2600670e178931f0e88dbffb4f1f3dccc4ea",
        "5bedff60b2facaa1ec5b9433647ebf1504f065ca"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 26 23:39:12 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 26 23:39:14 2015 +0000"
      },
      "message": "Merge \"Do not pre-fill OutputTrack buffer for duplicating thread\""
    },
    {
      "commit": "ad8510a339ffab330c2c46e5c247dd1cf9e15c22",
      "tree": "f8643e6711ce756876c02cbb2c0ed4ed459c6187",
      "parents": [
        "04333cdc8d6a3c8e4a11835371e8ad13adf3f7f0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 17 16:24:07 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 19 09:47:41 2015 -0800"
      },
      "message": "Include what you use\n\nChange-Id: I1967861f383bb5ed6743fb69e3bd439907ed7033\n"
    },
    {
      "commit": "5bedff60b2facaa1ec5b9433647ebf1504f065ca",
      "tree": "d9d22703626906b38ee1f5c571f21f49ce447199",
      "parents": [
        "7790a33241f773d8a99c6f27d3bde36da08d6238"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jan 16 11:05:32 2015 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jan 22 13:48:03 2015 -0800"
      },
      "message": "Do not pre-fill OutputTrack buffer for duplicating thread\n\nIt is not necessary to start the downstream MixerThread early,\nrather allow stop() to flush the remaining frames.\n\nChange-Id: Ibcf8e7f5eda09d0f915d50697ff0c24c32fd11c4\n"
    },
    {
      "commit": "c25b84abdd7ff229d0af663fbf3a37bd9512939d",
      "tree": "f6b95e15432dfac6410a1c61bd34e1f8aacdbb3e",
      "parents": [
        "abdb990953ffe94a9dc544aea0bed17ef7d5f484"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 14 19:04:10 2015 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jan 15 16:57:42 2015 -0800"
      },
      "message": "Allow duplicating thread to use native mixing audio format\n\nUpdate OutputTrack to take variable formats.\nPreviously conversion to AUDIO_FORMAT_PCM_16_BIT was required.\n\nChange-Id: I4a96a60ddd8d8dfe651405a0bcd4f98c89bc1ade\n"
    },
    {
      "commit": "23c8dc13787186dc98731055858b2fba3aedc105",
      "tree": "08ed5ebd4244095641a3d7494e9dab6b6d471eb5",
      "parents": [
        "c30943f7485fa84a32e7d070234b3def692d9d16",
        "85aca658ac7d20584b0647427256df50a5f243ef"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 17 18:08:04 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Dec 17 18:08:04 2014 +0000"
      },
      "message": "am 85aca658: am d33712d7: am 145cf5d8: Merge \"audioflinger: implement pause/resume for direct outputs\" into lmp-mr1-dev\n\n* commit \u002785aca658ac7d20584b0647427256df50a5f243ef\u0027:\n  audioflinger: implement pause/resume for direct outputs\n"
    },
    {
      "commit": "d1f69b0b17acbd96987ecb2f3378abd394d05903",
      "tree": "e3061c609dfaa2c217bb79a8d85e4571e8bd0d3d",
      "parents": [
        "8ddb02230d02968d471aa41b22433957c38827c0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 15 14:33:13 2014 -0800"
      },
      "committer": {
        "name": "Rachad Alao",
        "email": "rachad@google.com",
        "time": "Tue Dec 16 01:38:34 2014 +0000"
      },
      "message": "audioflinger: implement pause/resume for direct outputs\n\nExtend pause/resume support to direct output threads\n(was only for offload threads).\n\nIf the HAL implements pause/resume, track pause/resume is forwarded to\nthe HAL.\n\nPause, flush, resume sequence is respected by executing the HAL\ncalls in the playback thread (same as offload).\n\nMake sure the track flags on client side are consistent with the\nflags on server side.\n\nBug: 17883772.\nChange-Id: I89b360d69818f7a9204bd36e3ec63a79e106ecf1\n"
    },
    {
      "commit": "3458bb2356e711419487056fe1dd474e100466a3",
      "tree": "1373847b3427ae0d27b5a178e4bcf3ad43e5970e",
      "parents": [
        "127d79425e668077baf1edbbfe80b344f522b7a6",
        "121143d5242a790d0bd01fe1b9cec5d28a1ba1d7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 26 19:57:31 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 26 19:57:31 2014 +0000"
      },
      "message": "am 121143d5: am bf14c62e: am 72bf901c: Merge \"audio policy: new getOutputForAttr() prototype.\" into lmp-mr1-dev\n\n* commit \u0027121143d5242a790d0bd01fe1b9cec5d28a1ba1d7\u0027:\n  audio policy: new getOutputForAttr() prototype.\n"
    },
    {
      "commit": "3a3e87005fdfbfe4564605220a044b8023d0f539",
      "tree": "657e4b6b3ca4d8d7030333975203c91a895b30dd",
      "parents": [
        "5ecbdf58b0674ac4a8b9d56b49ebeb1033e5bd27",
        "72215491c60fbcdb9a2f0be782e24e39cca249c5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 26 12:10:00 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 26 12:10:00 2014 +0000"
      },
      "message": "am 72215491: am 1a475921: am 223fd5c9: audio: new routing strategies and stream types\n\n* commit \u002772215491c60fbcdb9a2f0be782e24e39cca249c5\u0027:\n  audio: new routing strategies and stream types\n"
    },
    {
      "commit": "e83b55dc29ca16092ba02f36f55fa6e0e37fd78c",
      "tree": "f8232611b6372b74579e3ed03dfbeb167011d257",
      "parents": [
        "0f78eabb733e1413d7febd00c0bad0f0add02314"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 14 10:06:21 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 25 12:48:19 2014 -0800"
      },
      "message": "audio policy: new getOutputForAttr() prototype.\n\nUpdate getOutputForAttr() prototype and group all logic\ndealing with audio attributes to stream type conversion in\naudio policy manager.\n\ngetOutputForAttr():\n- specifies the audio session (for future use)\n- returns a status code\n- receives either stream type (for legacy) or audio attributes\n- returns an updated streamtype\n\nRemove logic dealing with legacy stream types to attributes conversion\nfrom AudioTrack.\n\nUse correct type for audio sessions in other APIs (startOutput() ...).\n\nreleaseOutput() specifies the audio session (for future use).\n\nBug: 18067208.\n\nChange-Id: I1bfbe9626c04c7955d77f8a70aecfad2cb204817\n"
    },
    {
      "commit": "223fd5c9738e9665e495904d37d4632414b68c1e",
      "tree": "33e0afab9a7479cdc4c688a742a8977c8ead21e4",
      "parents": [
        "bc0f452b9a76dd8c8244e775bc9c5aa85cae3ddf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 11 13:43:36 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 21 10:41:13 2014 -0800"
      },
      "message": "audio: new routing strategies and stream types\n\nAdded new routing strategies and stream type for internal use\nby audio policy manager and audio flinger:\n- One for accessibility to allow different routing than media\n- One for re-routing (remote submix) in preparation of dynamic\npolicies\n- Added stream type for \"internal\" audio flinger tracks used\nfor audio patches and duplication.\n\nBug: 18067208.\nChange-Id: I88f884b552e51e4a49c29125e5a1204cf58ff434\n"
    },
    {
      "commit": "847cbecbfda35e27a73a767c93fd0150ba001882",
      "tree": "f75e3789ae442087d9378016901525322bfd269e",
      "parents": [
        "44ce5407e8b582a37431464322d92c6bc3cc732a",
        "a248703b0799a9a27481f0ec13df90214a661eb5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Nov 18 20:19:13 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 18 20:19:13 2014 +0000"
      },
      "message": "am a248703b: am a3e2c146: am 4d0a5985: Merge \"Prevent stopped audio tracks from mixing data\" into lmp-mr1-dev\n\n* commit \u0027a248703b0799a9a27481f0ec13df90214a661eb5\u0027:\n  Prevent stopped audio tracks from mixing data\n"
    },
    {
      "commit": "27876c02c21cd3ab7ef01bdd1fc5400c5143584a",
      "tree": "3c096ec71dfdb81fcafe4a68165006f1371fdf5d",
      "parents": [
        "97e6ca1a0be83e420ab238d9a1c31d3112126646"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 09 18:07:55 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Nov 17 18:06:10 2014 -0800"
      },
      "message": "Prevent stopped audio tracks from mixing data\n\nStatic tracks should have zero framesReady when stopping or stopped,\nto prevent mixer from running potentially indefinitely with loop mode.\n\nBug: 16070883\n\nChange-Id: Iab9968044d1a6f8543bbcbfb246f49f27d68cace\n"
    },
    {
      "commit": "e979d5bb0060ad4fb4fb9aa5aefc6f9b722a1bab",
      "tree": "f9a0f2e051e07658db8cbb22453b3362dba06e36",
      "parents": [
        "504f701d475bdefbd6a27f00933975bc501e072d",
        "12d0cd1bf756ec96755fae2e573659898bfba6d6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 03 18:28:47 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 03 18:28:47 2014 +0000"
      },
      "message": "am 12d0cd1b: am 3a8bad2e: am be9ebd46: Merge \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\" into lmp-dev\n\n* commit \u002712d0cd1bf756ec96755fae2e573659898bfba6d6\u0027:\n  Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\n"
    },
    {
      "commit": "4c053ea158b29fa2cdd4c6f39d3c8da4ee5a7a02",
      "tree": "129617d405d098b749beafbcd87c58321bf2b055",
      "parents": [
        "8b76b592be5bc162fb5a6d7e8c47812544b6b345"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Sep 28 14:41:07 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 02 16:50:26 2014 -0700"
      },
      "message": "Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\n\nThe per-thread timestamp latch was not synchronized with the per-track\nreleased frames.  Now the value of each track\u0027s released frames is\nlatched along with the timestamp.\n\nBug: 17531839\nBug: 17669342\nChange-Id: I9d50c8c6a5de55a3f4561ac40e20d497376c1257\n"
    },
    {
      "commit": "4113fe9dcbcda53d09f9b9c91f59d9a54e6c2408",
      "tree": "1f343dd021b0195b8894661a2bc79e16db424c44",
      "parents": [
        "e7c6790095545fa4e2bd6d534ae8d8a6fb486f37",
        "0e42a8807edec5541ecac4a050459fbb72c477dc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 02 13:48:16 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 02 13:48:16 2014 +0000"
      },
      "message": "am 0e42a880: am e5095be1: am a49c94ea: Merge \"Revert \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\"\" into lmp-dev\n\n* commit \u00270e42a8807edec5541ecac4a050459fbb72c477dc\u0027:\n  Revert \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\"\n"
    },
    {
      "commit": "a49c94ea49c8329a1bdefe980e1f7d335c0d1ec5",
      "tree": "c095d3a59114c8a893e3657ad5efc6fdb40f2c9b",
      "parents": [
        "d0b9efe7d8300e48f7a99c1dd746d60060206b3c",
        "6954127b7ace022677ac407ff943c2793f8a11be"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 01 23:09:52 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Oct 01 23:09:53 2014 +0000"
      },
      "message": "Merge \"Revert \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\"\" into lmp-dev"
    },
    {
      "commit": "6954127b7ace022677ac407ff943c2793f8a11be",
      "tree": "3e038561671d256e03d63fb88a32e529e198701a",
      "parents": [
        "54464ba861aaafd11ee5645f5d1ecd1171c6e9fe"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 01 22:38:43 2014 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 01 22:45:18 2014 +0000"
      },
      "message": "Revert \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\"\n\nThis reverts commit 54464ba861aaafd11ee5645f5d1ecd1171c6e9fe.\n\nBug: 17733142.\n\nChange-Id: I9886d40032b2f7d96bee03e600e14f78943d8052\n"
    },
    {
      "commit": "ac2a2239dfc86c70f7382bebdb85c8cc1a9f6119",
      "tree": "24de5fcceec00e55053623a9f9e79427b0a6ebde",
      "parents": [
        "1e3aedd7d613708fb13f05cc343a229ed22ea266",
        "785da8f542120e49d29289947e69aba180c1724b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 01 02:26:48 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 01 02:26:48 2014 +0000"
      },
      "message": "am 785da8f5: am 955e24d3: Merge \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\" into lmp-dev\n\n* commit \u0027785da8f542120e49d29289947e69aba180c1724b\u0027:\n  Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\n"
    },
    {
      "commit": "a2dda4fcb3ab34a58c5218bb3a8a156cf04651b2",
      "tree": "15e55894c0fd8ce2b70486b82275a1da4244a7fb",
      "parents": [
        "0643f8d84c2bdbf6c29136a5c484c8f31ce2f83d",
        "e0270e79066825bb232ef5f271ac9ef84ce91b0f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 01 02:26:46 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 01 02:26:46 2014 +0000"
      },
      "message": "am e0270e79: am f71224ce: Merge \"audioflinger: forward flush to direct output streams\" into lmp-dev\n\n* commit \u0027e0270e79066825bb232ef5f271ac9ef84ce91b0f\u0027:\n  audioflinger: forward flush to direct output streams\n"
    },
    {
      "commit": "955e24d3a8e218d4711cabc6558781e095011132",
      "tree": "1b27aa45a2224cbdc9e247935c811e8ab62af40a",
      "parents": [
        "6c7ae72f0eccf456744474785afd25f9e205881c",
        "54464ba861aaafd11ee5645f5d1ecd1171c6e9fe"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 30 01:44:18 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 30 01:44:18 2014 +0000"
      },
      "message": "Merge \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\" into lmp-dev"
    },
    {
      "commit": "54464ba861aaafd11ee5645f5d1ecd1171c6e9fe",
      "tree": "c04a12c44ee589fec8baebafe200fe95529fa76a",
      "parents": [
        "a67ced9746e6f0d4e03ff8007682091afea71f6c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Sep 28 14:41:07 2014 -0700"
      },
      "committer": {
        "name": "Rachad Alao",
        "email": "rachad@google.com",
        "time": "Tue Sep 30 01:10:58 2014 +0000"
      },
      "message": "Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\n\nThe per-thread timestamp latch was not synchronized with the per-track\nreleased frames.  Now the value of each track\u0027s released frames is\nlatched along with the timestamp.\n\nBug: 17531839\nBug: 17669342\nChange-Id: I96252782911bd42a2534cc4030521b7eeb99a7b9\n"
    },
    {
      "commit": "e659ef420dae0caae84ab78f9df8952acb9ad3a0",
      "tree": "9b21158041ed871365f939fc37034858328ef115",
      "parents": [
        "dc2e6ddc933e40632e79a866d9ece870db1a975e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 29 13:06:46 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 29 17:39:39 2014 -0700"
      },
      "message": "audioflinger: forward flush to direct output streams\n\nTrack flush should be forwarded to the audio HAL when playing\non a direct output stream.\n\nBug: 17704953.\nChange-Id: Iafc94327fe9aebf1d4eaa97b76c6767b7ac5babe\n"
    },
    {
      "commit": "e716ae7a76941932535cd47ae454423dee598c1e",
      "tree": "abb20cd4e79bac3e49a8071bd7fd643550969ca3",
      "parents": [
        "20ac005f3747d2301959f92cd53eb1815e331fa8",
        "f5e9870228db68d9cb927ff49f2e46dabfb7bbec"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 16 08:47:54 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 16 08:47:54 2014 +0000"
      },
      "message": "am f5e98702: am cf7863ea: Merge \"audioflinger: fix pre processing effect leak\" into lmp-dev\n\n* commit \u0027f5e9870228db68d9cb927ff49f2e46dabfb7bbec\u0027:\n  audioflinger: fix pre processing effect leak\n"
    },
    {
      "commit": "aaa44478a373232d8416657035a9020f9c7aa7c3",
      "tree": "95a4724c0d7ebbe065551f0aeaf5d65283ab3e04",
      "parents": [
        "f0b31e6333839972afb2e374f6d8824180d29fc2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 12 17:41:50 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 15 09:31:31 2014 -0700"
      },
      "message": "audioflinger: fix pre processing effect leak\n\nWhen a capture thread was closed, the effects attached to this thread\nwere left dangling and the associated effect chain destroyed.\nWhen their last client was disconnected, the effects were not released\nproperly from the effect library because the destruction process could\nnot be completed without the effect being attached to a thread.\n\nA similar problem prevented a RecordTrack to be properly released if\nits client was destroyed after the capture thread.\n\nThe fix consists in allowing the effect or record track to be properly\nreleased even if its parent thread cannot be promoted.\n\nAlso save any effect chain still present on a closed capture thread\nin case a new client wants to reuse the effects on the same session later.\n\nBug: 17110064.\nChange-Id: I5cd644daa357afd1f3548f9bcb28e6152d95fdb8\n"
    },
    {
      "commit": "648c1ecee3f79ff9d754dd982be59484de08d752",
      "tree": "790ebb44db33c2218fab8aa2ee740a746d4cccc0",
      "parents": [
        "c08f60b17967cf99bb03105081fb9064b5f34545",
        "955d8f906e920fe8da66e7943a7f2bfa98422e19"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 03 17:55:48 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 03 17:55:48 2014 +0000"
      },
      "message": "am 955d8f90: am 23c8cf95: Merge \"Restore the ability to build tee sink for debugging\" into lmp-dev\n\n* commit \u0027955d8f906e920fe8da66e7943a7f2bfa98422e19\u0027:\n  Restore the ability to build tee sink for debugging\n"
    },
    {
      "commit": "329f6511ee4e03a4605c70bbda8d3a96d2544884",
      "tree": "7c80c71e7eb84ba39106205214c9e58b5f6aed1e",
      "parents": [
        "9dd4a2ddd7caf8cbe50d8a76e0ec3e0274d2bce6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 28 16:23:16 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 02 13:54:21 2014 -0700"
      },
      "message": "Restore the ability to build tee sink for debugging\n\nThis changelist does not enable tee sink, but makes it possible to do so.\nTee sink had suffered some bit rot since it is not built by default.\n\nAlso fixes a crash for \u003e 2 byte per sample or \u003e 2 channels.\nStill does not write correct header for floating-point;\nthat will be best solved by moving to libsndfile.\n\nBug: 16990102\nChange-Id: I8e92c588ccc513d7802d696fcfb324e815772df6\n"
    },
    {
      "commit": "efaa7ab620b2ee936efa4fb74dc4c670ed757a46",
      "tree": "d6af179bd5e333f3d392baf525b2a18dd4edd238",
      "parents": [
        "16681c8f4afa5f18649ed934c9d84198516a1054"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 20 08:48:54 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 26 11:45:42 2014 -0700"
      },
      "message": "Clear the timestamp latch valid flag if no new timestamp available\n\nBug: 11815245\nChange-Id: I94885a1b4c2c7c055b8eacc7f7d0fcd064094b6d\n"
    },
    {
      "commit": "c2730ba7c5e9559b7499ef5e0d7742deb18c5110",
      "tree": "efa845ec9fd1cb5cc2a2cf20b62538b74668b173",
      "parents": [
        "92ce4715315bddd158c7d4028556632f0547e3b9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 20 15:47:07 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 06 11:42:07 2014 -0700"
      },
      "message": "audio policy: add support for USB devices for voice call\n\nAdd possibility to use sink and source devices not on\nthe primary HW module for voice calls (e.g. USB headsets).\n\nBug: 15520724.\n\nChange-Id: Ib27db4ba759b6d91ea1104dc2e35c87733517b30\n"
    },
    {
      "commit": "4dc680607181e6a76f4e91a39366c4f5dfb7b03e",
      "tree": "5212b6ff474b8ef68a68cb1cf144f54e5348de77",
      "parents": [
        "d530d415e60373caf875a37d2d747a51470ee45c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 28 17:26:49 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 28 18:10:29 2014 -0700"
      },
      "message": "audio policy: pass session ID to capture activity methods\n\nIndicate the audio session ID when calling getInput(),\nstartInput(), stopInput(), releaseInput().\n\nBug: 12378680.\nChange-Id: I763793752f93e2f4e1445a5ab217c895af011038\n"
    },
    {
      "commit": "83b8808faad1e91690c64d7007348be8d9ebde73",
      "tree": "b541b1172f804e04bd19b29f7878a1becf6205d7",
      "parents": [
        "c15c265676da2226a18a5373812608b19d4719d7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 20 18:31:16 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 24 02:56:47 2014 +0000"
      },
      "message": "audio flinger: add patch connection between hw modules\n\nAdd support for audio device connections between different audio\nhw modules.\nThe patch is performed by creating a bridge between the playback\nthread connected to the sink device and the record thread connected\nto the source device using a pair of specialized PlaybackTrack and\nRecordTrack.\n- Added PatchTrack and PatchRecord classes.\n- Added TrackBase type to indicate more clearly the track behavior.\n- A TrackBase can allocate the buffer or reuse an existing one.\n- Factored some code in openOutput() and openInput() for internal use\nby PatchPanel.\n\nBug: 14815883.\n\nChange-Id: Ib9515fcda864610458a4bc81fa8f59096ff4d7db\n"
    },
    {
      "commit": "529c61b7e4468a3e21f302f2a92a660249daa722",
      "tree": "26133aeea97d8ea2d564a6ff0193e471c575914f",
      "parents": [
        "ada688878122d6504cccebb9121f9d4f8f701e38"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 18 15:31:02 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 18 15:32:41 2014 -0700"
      },
      "message": "Fix copy/paste bug\n\nintroduced by Change-Id: I4e9b7fa99858b488ac98a441fa70e31dbba1b865\n\nChange-Id: I9a0c8800f5cf3767cc259776f95c96cad972e392\n"
    },
    {
      "commit": "6e6704c06d61bc356e30c164081e5bcffb37920c",
      "tree": "825e014f01a7eb5a2f3282965d2a5ba9a21b4071",
      "parents": [
        "7b24ee381e806dcb53308c1cafc8a45f4e2d8300"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 03 10:20:00 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 17 12:13:05 2014 -0700"
      },
      "message": "Improve dumpsys for capture threads\n\nShow per-track sample rate, and whether there is a fast capture thread\n\nChange-Id: If6a08a40d1eeba0690aa8da3c541f845ec101b7f\n"
    },
    {
      "commit": "5e58b0abe5b6c8f5bd96a8f78bbeeeb4d3892020",
      "tree": "975ed02efce4eaefcf5b0ceb5f33d212542a33a6",
      "parents": [
        "72d039f007722c92ee5ea7ffd03ece19d2781103"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 23 19:07:29 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jul 08 21:09:13 2014 -0700"
      },
      "message": "Add floating point volume handling to AudioMixer\n\nUse floating point volume in AudioMixer mixing when floating\npoint input is used with the new mixer engine.\nAudioResampler is updated to take floating point volume to match.\nBoth legacy integer and floating point mixer engines work.\n\nFor now, integer volume is used when the new mixer engine\nruns in integer input mode, for backward compatibility with\nthe legacy mixer.  The new mixer engine will generally run in\nfloating point input mode. When the legacy path is removed,\nthe integer volumes will be removed.\n\nChange-Id: I79e80c292ae7c8b8bdd0aa371a1b2c3a1b618290\n"
    },
    {
      "commit": "3348e36c51e91e78020bcc6578eda83d97c31bec",
      "tree": "ee3df8ed9f79863fc34589813710896a7e08af86",
      "parents": [
        "075abae2a954bf3edf18ad1705c2c0f188454ae0"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jul 07 10:21:44 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jul 07 10:29:36 2014 -0700"
      },
      "message": "Replace int bitDepth with audio_format_t in Resampler\n\nRemove mBitDepth from class (not used).\nReplace with audio_format_t in factory method to distinguish\nbetween float and pcm 16-bit.\n\nChange-Id: I166860796c68285077ef4458d8758d19b82523f9\n"
    },
    {
      "commit": "ab5cdbaf65ca509681d2726aacdf3ac8bfb6b3fa",
      "tree": "0d406acdfea2d44cd430ef16ee2a25b7722e4b1d",
      "parents": [
        "29a8b2fe294a34ac7f004203426961a599e725ea"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 09 17:22:27 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 19 10:05:57 2014 -0700"
      },
      "message": "AudioTrack: add support for compressed audio\n\nAdd support for compressed audio playback by use\nof an AudioTrack attached to a direct output thread.\n\nBug: 9428304.\n\nChange-Id: I4a61be9cf0e31003ca85935d6e0ee38ca8192e03\n"
    },
    {
      "commit": "3bcffa136909c1fb6e88ee4efd12ccac18360a85",
      "tree": "6aedd2a1ead0fa545a93229fa2965477ec627de7",
      "parents": [
        "0ac53364b79dc72ee0c09f0efc46a22ab4374dbf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 12 18:38:45 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 13 08:56:56 2014 -0700"
      },
      "message": "force command flush after releasing a reference to shared memory\n\nAfter releasing a reference to a shared memory interface,\nIPCThreadState::self()-\u003eflushCommands() must be called to ensure\nthat the corresponding reference is also cleared immediately in the\nremote process. Otherwise the binder implementaiton will not\npush the clear systematically causing the memory region not to be freed.\n\nSee issues 10711502 and 2801375.\n\nBug: 14057166.\nChange-Id: If55f36f00d452d6cf00cf83bd2fba1c8f3abcb57\n"
    },
    {
      "commit": "0ac53364b79dc72ee0c09f0efc46a22ab4374dbf",
      "tree": "d2ae61d98423e9ea9ed865b7637a897f610344a1",
      "parents": [
        "421c34ef58f89f4cc39737118bb58b762e84e1c9",
        "ced6e74215937182fe2f9f6b0867f7c28ccd02c1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 11 17:10:46 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 10 22:06:31 2014 +0000"
      },
      "message": "Merge \"Fix non-monotonic AudioTrack::getTimestamp after pause\" into lmp-preview-dev"
    },
    {
      "commit": "ced6e74215937182fe2f9f6b0867f7c28ccd02c1",
      "tree": "576dcfc6d7631c817a3ecd65387e3ae64b41230a",
      "parents": [
        "0d843fdc91c98d447c3c3e357020d07b783c7bc0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 09 17:12:32 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jun 10 15:51:52 2014 -0700"
      },
      "message": "Fix non-monotonic AudioTrack::getTimestamp after pause\n\nBug: 15523502\nChange-Id: Ifd4aa7fca197bc041c1620fc3f7d953a8902551a\n"
    },
    {
      "commit": "c263ca0ad8b6bdf5b0693996bc5f2f5916e0cd49",
      "tree": "d513a586c518ed6f061cf446a5f2e3e18017b4f2",
      "parents": [
        "cc839bd4727be02d9352f46d043a7e9cc9c7d642"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 04 20:31:46 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 05 03:36:20 2014 +0000"
      },
      "message": "Squashed commit of the following:\n\ncommit 9128d6ffec43731d723f9b394f243d940f4c7e41\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Tue May 13 10:38:42 2014 -0700\n\n    Use of fast capture by normal capture\n\n    Will only configure fast capture path if the input buffer size is less than\n    10 ms and the input sample rate is same as the primary output sample rate.\n\n    Change-Id: I4a7cdc6069d750845412c626d27e83f72a1ab397\n\ncommit 2e5e0806a5abe7499848358ef5fde5c26405000d\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Mon Jun 2 08:29:22 2014 -0700\n\n    Add mPrimaryOutputSampleRate\n\n    Change-Id: I46b527fc3f2b5a5720a74b4f0b9a8f2e0d570b09\n\ncommit baf1d73467923996d1b1f2a9237260cc5697e050\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 30 10:42:03 2014 -0700\n\n    Change parameter type for volume to float in AudioMixer\n\n    Change-Id: I4da1505ce852505f86f8e5b87f60e8edceeb30e0\n\ncommit 40fe20fa9760cd03c69778c2021cf7a490d75ece\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 30 10:35:47 2014 -0700\n\n    Rename UNITY_GAIN to UNITY_GAIN_INT in AudioMixer\n\n    Change-Id: Ic040311305026f0b4c4280a5b3bef7a447ac1da3\n\ncommit 37c9a2b49f876abc5ff537a9ec036d7f0a423775\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Thu May 29 21:33:13 2014 -0700\n\n    Refactor setVolumeRampVariables in AudioMixer\n\n    Change-Id: I8fcf3101bcea292de7c65433fa578f1c9cdd0974\n\ncommit 397070eca31f121d5d3993de1bfea99aaea5d4f3\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Thu May 29 18:52:38 2014 -0700\n\n    Fix floating point output from mixer\n\n    A buffer pointer was being erroneously reset to buffer start,\n    potentially causing an audio glitch. The floating point\n    output mode is not enabled at this time, but will be in\n    the future.\n\n    Change-Id: If8b6414d232f064f3a2e2c5a6da889a91b27fb24\n\ncommit 2e61aa5b33b2247bbc5d4eaa0b519df9accd4bbc\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 23 21:22:17 2014 -0700\n\n    Add multiple format capability to FastMixer\n\n    Floating point data from MixerThread into FastMixer.\n    Multiple output format capability from FastMixer to Sink.\n\n    Change-Id: I0da17810ee71381a39a006c46faec71108d22c26\n\ncommit b9ea653c702a785bbd23a66c5e588d40b4192c4e\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Thu May 29 15:53:09 2014 -0700\n\n    Avoid resetting BufferProviders in mixer unnecessarily\n\n    Change-Id: Iad85c4dfd21be1dbf89dc11906106b34219376f8\n\ncommit 7f1a6d6da21c616f80cf9ba21bea11b419ec561b\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Tue May 27 12:32:17 2014 -0700\n\n    Update dynamic resampler buffer fetching\n\n    Make the criteria tight for fetching to avoid storing\n    excessive frame data internal to the resampler.\n    This should reduce jitter in frame delivery computation.\n\n    Bug: 14962343\n    Change-Id: I7adaf714d11c272696ccdbf218bda994c7217477\n\ncommit b5e4aac07b9a02f0c803c090058602b03ac09ebb\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Tue May 27 12:30:54 2014 -0700\n\n    Allow kFastTrackMultiplier to be specified per device\n\n    Change-Id: I4eaaaf038df720cec4f5d9221d1b632970f9e3dd\n\ncommit b93cd97a52af31122df2da2cc0415cda888c8c73\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 23 21:13:31 2014 -0700\n\n    Rename mixBuffer to mMixerBuffer in FastMixer\n\n    Likewise mixBufferState becomes mMixerBufferState.\n    This harmonizes with the naming in AF::MixerThread.\n\n    Change-Id: I1255d7c07cc2c6ee925d7430925236d2bd163122\n\ncommit 8340758622b9711365a8801806cbdf934803c63f\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Mon May 12 16:51:41 2014 -0700\n\n    Add multiple format capability to AudioMixer\n\n    Change-Id: I04ac1cafd90b6ed652f8d51888ad07576678f0bc\n    Signed-off-by: Andy Hung \u003chunga@google.com\u003e\n\ncommit 6b695b9d094820c232a897a3fabbe83d2b7193fe\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Thu Mar 13 14:59:31 2014 -0700\n\n    Start adding FastCapture based on FastThread WIP\n\n    This version supports at most one fast capture client.\n\n    Change-Id: Idf609bfc80ae22433433d66a5232c043c65506df\n\ncommit e951ad05a2c388471d7e2806d91e7d51325a150a\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Mon May 12 11:06:26 2014 -0700\n\n    Move validation of frameCount from set to openRecord_l\n\n    This move is needed because frameCount is validated on server side for\n    fast tracks (as should be done for normal tracks too).\n\n    Change-Id: I6d99e80869fd90fab373cf60ef348c01f075fbca\n\ncommit 73e76992dbba794894837c38e5472312ea829cf3\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Tue May 13 10:41:52 2014 -0700\n\n    Allow track buffer \"allocation\" to be from pipe\n\n    Change-Id: Ib9ac170f8e8b7746b3588157a56cbee3b753a1cb\n\ncommit 60de1d7ded05c6304037d4858b401094b1d2b4d3\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 9 15:02:21 2014 -0700\n\n    Add format parameter to getTrackName() and track_t\n\n    Change-Id: Ia152a839014e235fbfb656104c15d7c1b456d02e\n    Signed-off-by: Andy Hung \u003chunga@google.com\u003e\n\nChange-Id: Ied0ade8b25d23e89bb03319a7e3135c238f735b9\n"
    },
    {
      "commit": "e348c5b72ad889389c7c1c900c121f0fbee221b5",
      "tree": "9c77581ad7520309c0bb90f11bba766a6cd61b28",
      "parents": [
        "9382378b6b271949bdce527ea3da748c13c4c692",
        "c0bf836f8a4e34d66c10a2bb8b8cee0db04790cc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:47:50 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:47:50 2014 -0700"
      },
      "message": "resolved conflicts for merge of c0bf836f to master\n\nChange-Id: I5cf238fa56d6fff443b212870cf9dd7f1110e7da\n"
    }
  ],
  "next": "ad71caf25e31ecfc4ecf2c925e38fd87905fbc8e"
}
