)]}'
{
  "log": [
    {
      "commit": "1a7be1ec9c769203e6c8e26378de0ab8e2ad493d",
      "tree": "68773b199cc4adcb96124270863244477570c78e",
      "parents": [
        "f131f87369ec06fc27fc1f14ea72f0ca1a066509",
        "91820d46b5f3065c2fded3cdf65d305715b33bb1"
      ],
      "author": {
        "name": "Bill Yi",
        "email": "byi@google.com",
        "time": "Tue Apr 29 11:34:16 2014 -0700"
      },
      "committer": {
        "name": "Bill Yi",
        "email": "byi@google.com",
        "time": "Tue Apr 29 11:34:16 2014 -0700"
      },
      "message": "Merge commit \u002791820d46b5f3065c2fded3cdf65d305715b33bb1\u0027 into HEAD\n"
    },
    {
      "commit": "d6579cc9f06052f94bf5a2c34261c84de0efce23",
      "tree": "19a65464efb5c70b2e656053f53a1d0db5039ac9",
      "parents": [
        "a133bc87eb8269a6fa61772cb708f10c9c3b7a87"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Apr 10 09:37:52 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Apr 11 11:25:19 2014 -0700"
      },
      "message": "media: memset sizeof argument issues\n\nChange-Id: I37ef154eea0f77fb7f22faf6891f3025f6ff346e\n"
    },
    {
      "commit": "f566406a48ecf878d8a0034b6c600d42454d264c",
      "tree": "a565bcb6139569d15dbc2ec616820e448c74b7ff",
      "parents": [
        "6950d10077d10757e894d8e125ba5111eb02517a",
        "6db20dcb54dad932a3ea2e3a5dca41fce5802eb4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Mar 08 06:23:51 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Mar 08 06:23:51 2014 +0000"
      },
      "message": "am 6db20dcb: Merge \"AudioTrack: When paused, return cached playback position\" into klp-dev\n\n* commit \u00276db20dcb54dad932a3ea2e3a5dca41fce5802eb4\u0027:\n  AudioTrack: When paused, return cached playback position\n"
    },
    {
      "commit": "6950d10077d10757e894d8e125ba5111eb02517a",
      "tree": "fd7db5963ce8fa82b6f2590494efbdf61532f642",
      "parents": [
        "1aeb490d95a32be37a8691827ddc44c99575c411",
        "2f55c2c03b17795e94b325d402ac5b409e3ba0e8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Mar 08 06:22:13 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Mar 08 06:22:13 2014 +0000"
      },
      "message": "am 2f55c2c0: Merge \"Simplify AudioTrack stream end and fix race\" into klp-dev\n\n* commit \u00272f55c2c03b17795e94b325d402ac5b409e3ba0e8\u0027:\n  Simplify AudioTrack stream end and fix race\n"
    },
    {
      "commit": "6db20dcb54dad932a3ea2e3a5dca41fce5802eb4",
      "tree": "295ef5012f98e4b9251f28774cfb3f83710ea197",
      "parents": [
        "2f55c2c03b17795e94b325d402ac5b409e3ba0e8",
        "2048c2292c0466b184fb8f67c91f4d0ab9f5c3f3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Mar 08 00:29:56 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 08 00:29:56 2014 +0000"
      },
      "message": "Merge \"AudioTrack: When paused, return cached playback position\" into klp-dev"
    },
    {
      "commit": "dcec903589ac651b9f558454392d286c13f743fb",
      "tree": "e436514f1a63d4b26dad1c142912411c23e60578",
      "parents": [
        "5bc83fc352e5682ecafe61d77062c26ac8db4229"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 09:28:56 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 07 11:09:51 2014 -0800"
      },
      "message": "Simplify AudioTrack stream end and fix race\n\nBug: 10994052\nChange-Id: Ib2e38e7a600bcffef8cbc68c1722e40fbbc7ea67\n"
    },
    {
      "commit": "b8d0b780c9ae160b830cc7a31b22600293e4978b",
      "tree": "9ea56a5014c7ac2a029cb7668319bd837b837f4c",
      "parents": [
        "328ab3c21c185a7541e7ee087a61e18f6888af1c",
        "af191eb4feac513d17dc0362e0cea5bc9e0ffe9d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 07 02:30:11 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Mar 07 02:30:11 2014 +0000"
      },
      "message": "am af191eb4: Merge \"Replace size_t in shared memory by uint32_t\"\n\n* commit \u0027af191eb4feac513d17dc0362e0cea5bc9e0ffe9d\u0027:\n  Replace size_t in shared memory by uint32_t\n"
    },
    {
      "commit": "e857b65c1d3aa055281cb48f59c9b5eb4a062dd0",
      "tree": "9d0780a2aebbb8839ec74fe16b1b868e6d45e3e9",
      "parents": [
        "ce9be73c7e7f379d68e1a0d0210a6f7b9418269f",
        "3c9130a8a12ce962dc8d22e04243b135b9e98b01"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Mar 07 02:26:36 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Mar 07 02:26:36 2014 +0000"
      },
      "message": "am 3c9130a8: Merge \"Make frameworks/av 64-bit compatible\"\n\n* commit \u00273c9130a8a12ce962dc8d22e04243b135b9e98b01\u0027:\n  Make frameworks/av 64-bit compatible\n"
    },
    {
      "commit": "32fbb48de0248518fc5a14099b32fe4b8e9fc102",
      "tree": "44c01484475c34374a8a7cdcbab31ec84ac03a55",
      "parents": [
        "d224ee56ec8c2bc7963f43ca9d80cf31a3ba4c57",
        "4361749d74113069aafb0620a1189404205c58d0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Fri Mar 07 02:26:05 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Mar 07 02:26:05 2014 +0000"
      },
      "message": "am 4361749d: Merge \"AudioTrack: Never try to use the fast path if resampling is required\"\n\n* commit \u00274361749d74113069aafb0620a1189404205c58d0\u0027:\n  AudioTrack: Never try to use the fast path if resampling is required\n"
    },
    {
      "commit": "2048c2292c0466b184fb8f67c91f4d0ab9f5c3f3",
      "tree": "126fcbfff298dd8e0f8ddb834c93c8850b8654ac",
      "parents": [
        "a11111f9135c98cf4247bbd1a61d7df3053e549e"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Jan 08 13:59:53 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 06 18:00:39 2014 -0800"
      },
      "message": "AudioTrack: When paused, return cached playback position\n\nAn offload output can be re-used between two audio tracks having\nthe same configuration. A timestamp query for a paused track\nwhile the other is running would return an incorrect time.\nTo fix this, cache the playback position on a pause() and return\nthis time when requested until the track is resumed.\n\nBug: 12826612.\nChange-Id: Ia42b8b8fd2ba8993dfcc9abca72da48d71d78d74\n"
    },
    {
      "commit": "25a86930ac0ccf4750ad2fb0c2f5a4a122d24ecf",
      "tree": "ffc379029cf2e53932f46375efc61363fb0f1a6e",
      "parents": [
        "994d9bad4c545cc8861e971f9dbcb4c061ee19ed",
        "88876fb4eb8365343f2a9ca0e8f53148ca38b845"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 05 23:47:20 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Mar 05 23:47:20 2014 +0000"
      },
      "message": "am 88876fb4: AudioTrack: fix obtainBuffer timeout calculation\n\n* commit \u002788876fb4eb8365343f2a9ca0e8f53148ca38b845\u0027:\n  AudioTrack: fix obtainBuffer timeout calculation\n"
    },
    {
      "commit": "d812fc012298470a1b8120e6d60a24b0b1d48047",
      "tree": "bf3c68ea3a908a0792e766714cd9d54f98ebfb46",
      "parents": [
        "88876fb4eb8365343f2a9ca0e8f53148ca38b845"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 03 09:06:43 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 05 14:10:41 2014 -0800"
      },
      "message": "Increase kFastTrackMultiplier from 1 to 2\n\nBug: 11967381\nChange-Id: Iedec06280aa745d9df5d661f4916940cede9c191\n"
    },
    {
      "commit": "88876fb4eb8365343f2a9ca0e8f53148ca38b845",
      "tree": "7891ad7f6e93d856f4fc8b5184bf2d8c95a84ead",
      "parents": [
        "145b727b4cce8b1b8d161612f30d12bbdfc8d134"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 27 18:13:39 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 05 14:07:43 2014 -0800"
      },
      "message": "AudioTrack: fix obtainBuffer timeout calculation\n\nAudioTrack::obtainBuffer() passes a pointer to a timeout\nvariable that has gone out of scope when calling\nClientProxy::obtainBuffer().\n\nSame fix for AudioRecord.\n\nBug: 11968591.\nChange-Id: I5b3d0d86ed2bd8c0412eb2432b1ab519d70efce9\n"
    },
    {
      "commit": "d0115d8c4db2f337030dea706bc0a434c4a03ed6",
      "tree": "239450c60bc4cb8519edeb8985dbc601fe51c652",
      "parents": [
        "7e92abeafb184e8a34213d7149592e95a72601b0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 26 17:16:50 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 05 12:17:54 2014 -0800"
      },
      "message": "update offloaded audio track sampling rate\n\nAudioPlayer must read the sampling rate from offloaded audio sinks\nwhenever a new time position is computed as the decoder can update\nthe sampling rate on the fly.\n\nBug: 12823955.\n\nChange-Id: I997e5248cfd4017aeceb4e11689324ded2a5bc88\n"
    },
    {
      "commit": "751a9c8cbc391a91604dd1052fb95d3e4d278c2f",
      "tree": "2148da61941d0a19ba1b2118158dfb7d98d6a010",
      "parents": [
        "7eacea1156a3896ee7813cd9a06c535e63c95f6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 28 11:03:28 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Feb 13 07:57:20 2014 -0800"
      },
      "message": "Replace size_t in shared memory by uint32_t\n\nEventually we may want to use uint64_t, but will need to confirm atomicity.\n\nBug: 12381724\nChange-Id: Ia2c591d262d22b47b6f7dab4b9d9faa14b86d865\n"
    },
    {
      "commit": "377b2ec9a2885f9b6405b07ba900a9e3f4349c38",
      "tree": "b938e1d75a1beefae86244f287ca22f4a277740d",
      "parents": [
        "cdda7bf4d3ca9cad6979374a18dd5be79ea83d80"
      ],
      "author": {
        "name": "Kévin PETIT",
        "email": "kevin.petit@arm.com",
        "time": "Mon Feb 03 12:35:36 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 11:40:06 2014 +0000"
      },
      "message": "Make frameworks/av 64-bit compatible\n\nContains the necessary changes to make frameworks/av build and work\non a 64-bit machine.\n\nSigned-off-by: Craig Barber \u003ccraig.barber@arm.com\u003e\nSigned-off-by: Kévin PETIT \u003ckevin.petit@arm.com\u003e\nSigned-off-by: Ashok Bhat \u003cashok.bhat@arm.com\u003e\nSigned-off-by: Marcus Oakland \u003cmarcus.oakland@arm.com\u003e\n\nChange-Id: I725feaae50ed8eee25ca2c947cf15aee1f395c43\n"
    },
    {
      "commit": "398f21348e5100289f6e5be30c8b5257fa04aaf9",
      "tree": "26fb40e2808e33bcad41a36d263bc26b02f5c62c",
      "parents": [
        "c4eef29af4e306319d8741e0c3ade1ede9a0a2b5"
      ],
      "author": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Fri Jan 31 13:30:15 2014 +0200"
      },
      "committer": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Fri Jan 31 13:30:15 2014 +0200"
      },
      "message": "AudioTrack: Never try to use the fast path if resampling is required\n\nUnless AudioFlinger was built with FAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE\nenabled, AudioFlinger would deny using the fast path (and internally\nfall back to the normal codepath) when it realized that resampling\nwas required. Since the buffer size calculations within AudioFlinger\ndon\u0027t take resampling into account properly (see the calculation\nbelow \"AUDIO_OUTPUT_FLAG_FAST denied\" in audioflinger/Threads.cpp,\njust below the hunk that this patch changes), make sure AudioTrack\ndoesn\u0027t try to use the fast path if resampling is required.\n\nThis removes the possibility to enable\nFAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE in AudioFlinger since it\nAudioTrack now won\u0027t even try to use the fast path for content\nthat requires resampling, regardless of the AudioFlinger configuration.\n\nChange-Id: Icf0f8ad50bf0fdb84657f518c0120aa0535f23f9\n"
    },
    {
      "commit": "6d39eb9d7da2ca8eb733f2d2eba686c56b24885b",
      "tree": "dc68f714fc4ecb87102ca9d52a29346be7bd60b4",
      "parents": [
        "96a7b5a9c87ec3f8cadad5bffc06a82f9f4d86d8"
      ],
      "author": {
        "name": "Oscar Rydhé",
        "email": "oscar.rydhe@sonymobile.com",
        "time": "Tue Jan 22 11:09:54 2013 +0100"
      },
      "committer": {
        "name": "Takeshi Aimi",
        "email": "takeshi.aimi@sonymobile.com",
        "time": "Thu Jan 23 18:40:31 2014 +0900"
      },
      "message": "Do partial reads in MemoryLeakTrackUtil\n\nDo partial read in MemoryLeakTrackUtil dumpMemoryAddresses\nto avoid using more memory than what is allocated.\n\nChange-Id: I94feb4e00647407f938571167b981c7371f39e3d\n"
    },
    {
      "commit": "dfeed91152cb54772b1411d7e82833ca4a48efcc",
      "tree": "f810edada58774d551fe674bc3b7f9507365fad7",
      "parents": [
        "9060d498be0c54d3caf84e2dbf1ba62516b3e76e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 27 14:29:13 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 17 22:05:05 2013 +0000"
      },
      "message": "AudioTrack: fix position callback after restore\n\nWhen restoring an AudioTrack, the next position callback point\nshould not be modified and set ahead of current buffer head.\nOtherwise, as frames are dropped, the new position is never reached\nand an application relying on position callbacks to reload the buffer\nwould be stalled.\n\nBug: 11868603.\nChange-Id: I93b2a311642a0c89944b78bcc0482d4ceed98ae4\n"
    },
    {
      "commit": "5e49afd05566820517747b9a8071c99ec0918328",
      "tree": "0dd9697822c0bd70f03bb776bc78e2da60f28991",
      "parents": [
        "a67c76538fff102cd44b2f38dd073df5f2a33605"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 26 17:16:50 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 17 13:41:37 2013 -0800"
      },
      "message": "update offloaded audio track sampling rate\n\nAudioPlayer must read the sampling rate from offloaded audio sinks\nwhenever a new time position is computed as the decoder can update\nthe sampling rate on the fly.\n\nChange-Id: I997e5248cfd4017aeceb4e11689324ded2a5bc88\n"
    },
    {
      "commit": "a67c76538fff102cd44b2f38dd073df5f2a33605",
      "tree": "da803da6b3053b23ad6c5ebbd33fd7667e2697b3",
      "parents": [
        "a0e1c3918dd1356445df98e89dab6be2c8a78da3",
        "b5fed68bcdd6f44424c9e4d12bfe9a3ff51bd62e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 17 16:26:41 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 17 16:26:41 2013 +0000"
      },
      "message": "Merge \"Increase kFastTrackMultiplier from 1 to 2\""
    },
    {
      "commit": "b5fed68bcdd6f44424c9e4d12bfe9a3ff51bd62e",
      "tree": "12cac79b78992586c8f8da4f618a020f40d92441",
      "parents": [
        "92630351d265a61faae2dfe006a8bb330283aa7b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 03 09:06:43 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Wed Dec 04 17:12:42 2013 -0800"
      },
      "message": "Increase kFastTrackMultiplier from 1 to 2\n\nChange-Id: I158f147295eebcea96e4047d7618069bc48bdd7d\n"
    },
    {
      "commit": "a4f24ff9b239300b4bb2098c1413c0a60edc2d7e",
      "tree": "1b328f28835885a21e67780129d6764f5b4384a9",
      "parents": [
        "5ea5b020b311a68f513d4a40aca5551abc6a07d8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 27 14:29:13 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 27 14:29:13 2013 -0800"
      },
      "message": "AudioTrack: fix position callback after restore\n\nWhen restoring an AudioTrack, the next position callback point\nshould not be modified and set ahead of current buffer head.\nOtherwise, as frames are dropped, the new position is never reached\nand an application relying on position callbacks to reload the buffer\nwould be stalled.\n\nBug: 11868603.\nChange-Id: I93b2a311642a0c89944b78bcc0482d4ceed98ae4\n"
    },
    {
      "commit": "241be8d5874023761121043b8709a6062baac6f1",
      "tree": "d7b70a75c3b309f40ebfe46b31e1b4a89ffd724e",
      "parents": [
        "de5f7cd61df74027834cd1ed2f1e482238f3ed4b",
        "9cae217050aa1347d4ac5053c305754879e3f97f"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Sat Oct 26 08:32:50 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Oct 26 08:32:50 2013 -0700"
      },
      "message": "am 9cae2170: Assign blame for playback wakelocks.\n\n* commit \u00279cae217050aa1347d4ac5053c305754879e3f97f\u0027:\n  Assign blame for playback wakelocks.\n"
    },
    {
      "commit": "9cae217050aa1347d4ac5053c305754879e3f97f",
      "tree": "dff82f277cba8f34af39eaeeb00adec01bbda26c",
      "parents": [
        "be567be3f92026f5964c1c9ecce00e30bb7df412"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 14 14:12:05 2013 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 14:06:03 2013 -0700"
      },
      "message": "Assign blame for playback wakelocks.\n\nSet a work source for the playback wakelock, so that playback is\ncounted against the requesting app instead of the media server.\n\nCherrypicked from master.\n\nb/9464621\n\nChange-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31\n"
    },
    {
      "commit": "77177fa20773d02b4f9c4147ecb98107f019fa7d",
      "tree": "9d72d4d5d404fda711ae8e7b476052ef5d81a8cf",
      "parents": [
        "6edd8ca5b7e3d169db4314d2b994bc9d48e9e082",
        "95c03858e2ab4fb693a2bfe47b3caa806e43c044"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 18 15:06:37 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 18 15:06:37 2013 -0700"
      },
      "message": "am 95c03858: Merge \"Allow releaseBuffer after flush\" into klp-dev\n\n* commit \u002795c03858e2ab4fb693a2bfe47b3caa806e43c044\u0027:\n  Allow releaseBuffer after flush\n"
    },
    {
      "commit": "2e422c472c91aa7912befd0fc038d1e11f354bc1",
      "tree": "7583e04f353f9cadf5081fafdcb8042450e3c85c",
      "parents": [
        "dedc7b0fa23c21b525dc8abb572bb8161ad66a9b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 18 13:00:29 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 18 13:53:41 2013 -0700"
      },
      "message": "Allow releaseBuffer after flush\n\nAfter AudioTrack start checks for pending flush,\nallow releaseBuffer on any previously obtained buffer.\nFor example, this can happen if the resampler has obtained\na buffer but not released the whole buffer yet.\nNote that the resampler will be reading obsolete data.\n\nBug: 11285590\nChange-Id: I0614fbb62e43604aac3089cce4b7797c87a306b5\n"
    },
    {
      "commit": "b2059ff384eee8ffb70a7ec8fc5570405201c734",
      "tree": "24add894e503e19c39d2f2d395df52e488144e6e",
      "parents": [
        "fc24dc1a2e2ba8d74bfadfadb01d12a542828561",
        "f8f15b05fe051009945c9042a1a9260280e0feb2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 16 18:07:33 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 16 18:07:33 2013 -0700"
      },
      "message": "am f8f15b05: Merge \"Fix race condition in AudioTrack::pause followed by start\" into klp-dev\n\n* commit \u0027f8f15b05fe051009945c9042a1a9260280e0feb2\u0027:\n  Fix race condition in AudioTrack::pause followed by start\n"
    },
    {
      "commit": "f8f15b05fe051009945c9042a1a9260280e0feb2",
      "tree": "28fd5dede6b2aae34a9b3b987049f3331ace5037",
      "parents": [
        "787c0d04ac4f9c938a1311f8e30d9d7ac2b8a6da",
        "598de6c701e989385eeffa7c5dfd61f0459a2631"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 17 00:59:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 17 00:59:33 2013 +0000"
      },
      "message": "Merge \"Fix race condition in AudioTrack::pause followed by start\" into klp-dev"
    },
    {
      "commit": "598de6c701e989385eeffa7c5dfd61f0459a2631",
      "tree": "090b30e255f0aed57a73ca6c9252e19da162fd97",
      "parents": [
        "014e7fa2e90827d911c37bb0ce4d2e10e14d0bb3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 16 17:02:13 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 16 17:20:11 2013 -0700"
      },
      "message": "Fix race condition in AudioTrack::pause followed by start\n\nBug: 11148722\nChange-Id: Iec88f00c8510363d4418e4b8d5b34feb06ecf04d\n"
    },
    {
      "commit": "7f8c397378a7ee5abd395413be71388ad36d3ed2",
      "tree": "3a41029ec403c6fd32aeb91aa699c05720db6f44",
      "parents": [
        "ace8947dbcd18e86c6a089291ffe1ce32fb42508",
        "120a88471a607c85c4d60300d73c3be0a1e8f8c8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 16 15:35:35 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 16 15:35:35 2013 -0700"
      },
      "message": "am 120a8847: Merge \"AudioTrack: fix head position after restore\" into klp-dev\n\n* commit \u0027120a88471a607c85c4d60300d73c3be0a1e8f8c8\u0027:\n  AudioTrack: fix head position after restore\n"
    },
    {
      "commit": "cc21e4f1e41dfa17e7e2bef995fcd22c45f6bcd0",
      "tree": "a446f08a1adaf31ef5dddc491c620209176b67aa",
      "parents": [
        "014e7fa2e90827d911c37bb0ce4d2e10e14d0bb3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 16 15:12:32 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 16 15:12:32 2013 -0700"
      },
      "message": "AudioTrack: fix head position after restore\n\nThe head position transfered to the new track\nby restoreTrack_l() must take into account the frames that\nare dropped from the old track to avoid a non recoverable\noffset in the playback head position returned to applications.\n\nBug: 11230062.\nChange-Id: I51143a08b95e8f264ed709ae2054360315f2b8b1\n"
    },
    {
      "commit": "b930056ed4c6e1f8288d4f2cef828c3c02940482",
      "tree": "336decc434ba33fbcd6c0e3e2208dad2fb3e5a93",
      "parents": [
        "1810a287ecc81c243983051f9b1e32ff92ef1365",
        "b3cb72a17d9a472883e9e2faa18b42eac533fe99"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Oct 13 11:08:06 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Oct 13 11:08:06 2013 -0700"
      },
      "message": "am b3cb72a1: SoundPool: handle new audio track event\n\n* commit \u0027b3cb72a17d9a472883e9e2faa18b42eac533fe99\u0027:\n  SoundPool: handle new audio track event\n"
    },
    {
      "commit": "b3cb72a17d9a472883e9e2faa18b42eac533fe99",
      "tree": "0cd89996f1cd52cdee00325e69e8c287b7a89439",
      "parents": [
        "15ad2470b2f2ac34473eb568b606ad75e8e63ac6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Oct 12 17:05:19 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Oct 12 17:05:19 2013 -0700"
      },
      "message": "SoundPool: handle new audio track event\n\nIf the AudioTrack is torn down, SoundPool will never\nreceive the buffer end event and the track will stay active\nfor ever.\n\nThe fix consists in stopping the AudioTrack when a new audiotrack\nevent is received.\n\nBug: 11193583.\nChange-Id: I9876eb2a8f75c601368f669acd67b0accf6e2736\n"
    },
    {
      "commit": "9a7d11f07dc19327892915f0bfecce758d2f4098",
      "tree": "bede6a7b2736c094f40499614ae8f1ed2d4396a9",
      "parents": [
        "c22a1a495c26b8a36fa15233cc136cb6ce6d6bea",
        "fee4ce338d78eeb58af1f66831ead53322d3859e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 07 09:19:38 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 07 09:19:38 2013 -0700"
      },
      "message": "am fee4ce33: Merge \"Cleanup openRecord error handling\" into klp-dev\n\n* commit \u0027fee4ce338d78eeb58af1f66831ead53322d3859e\u0027:\n  Cleanup openRecord error handling\n"
    },
    {
      "commit": "fee4ce338d78eeb58af1f66831ead53322d3859e",
      "tree": "f90931a7c5c4628b0e8e47976d68a9d586802b53",
      "parents": [
        "ea0fadeb5d81ef3cb7f9db458c9033d628bdb86a",
        "e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 07 16:16:06 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 07 16:16:06 2013 +0000"
      },
      "message": "Merge \"Cleanup openRecord error handling\" into klp-dev"
    },
    {
      "commit": "aa50cc78be8a1067a0694a97b04d5a24b80af475",
      "tree": "4cec59698c59df05efa3dd42635da4827894feec",
      "parents": [
        "31ed2c544736d8ced39ba0ae0489859d4d6a9491",
        "56ce726019f700a95ce5b45beebceadae4836e30"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Thu Oct 03 15:40:02 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 03 15:40:02 2013 -0700"
      },
      "message": "am 56ce7260: IOMX: Add prepareForAdaptivePlayback method\n\n* commit \u002756ce726019f700a95ce5b45beebceadae4836e30\u0027:\n  IOMX: Add prepareForAdaptivePlayback method\n"
    },
    {
      "commit": "56ce726019f700a95ce5b45beebceadae4836e30",
      "tree": "4ad17b9ec996277e80861895fb1b20f2dc408b9d",
      "parents": [
        "a306ee6bc1aef463f8984be26b8a4214490b6c55"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Thu May 02 16:30:48 2013 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Thu Oct 03 16:12:45 2013 +0000"
      },
      "message": "IOMX: Add prepareForAdaptivePlayback method\n\nprepareForAdaptivePlayback is the fallback mechanism to support\nseamless resolution change for devices that do not support dynamic\noutput buffers.  It is up to the codecs to handle this appropriately,\nbut codecs that do not handle dynamic output buffers would\nrequest enough buffers up to the requested size in this method\nto avoid port reconfiguration on resolution changes.\n\nChange-Id: I58d4aa8ef1359ea3472735bbe9140c3132039b3d\nSigned-off-by: Lajos Molnar \u003clajos@google.com\u003e\nBug: 10192531\nRelated-to-bug: 7093648"
    },
    {
      "commit": "3424d6e17637e0743ddf3bf4688af8ee36e69264",
      "tree": "8589c02ab3b2e185cb06e030ae376cb38d730231",
      "parents": [
        "d28076022746e36af16260da899718ab74a2b454",
        "1adf20ce868b80a24f7387daa6549364d5509c6a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Oct 01 05:26:24 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 01 05:26:24 2013 -0700"
      },
      "message": "am 1adf20ce: Merge \"fix volume and effect enable delay on offloaded tracks\" into klp-dev\n\n* commit \u00271adf20ce868b80a24f7387daa6549364d5509c6a\u0027:\n  fix volume and effect enable delay on offloaded tracks\n"
    },
    {
      "commit": "59fe010bcc072597852454a2ec53d7b0a2002a3b",
      "tree": "b6b42e04a89ead77c9ecd9635a328686a8bb9863",
      "parents": [
        "5d6d86a4d102704f49b9235eaf282c428d7100b6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 27 18:48:26 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 30 12:05:38 2013 -0700"
      },
      "message": "fix volume and effect enable delay on offloaded tracks\n\nVolume: add a method to wake up the mediaserver playback\nthread when a volume command is received on an offloaded track.\n\nEffects: call effect chain process on offloaded playback threads\nasynchronously from writes to allow effect state updates while\nwaiting for async write callback.\n\nBug: 10796540.\n\nChange-Id: Id2747ae88783575d1d7ffd6fc86fbd054ab2c739\n"
    },
    {
      "commit": "8ee02943b61e0a7dd78e5596720261b185a223d5",
      "tree": "faa7cc695d14d0c18aaa1e6aac6579337121d3ae",
      "parents": [
        "50ad1d3631efb486b3043c63ebd2774c7e3d337b",
        "1c7f35d1f25eb7160314fdef536463fc34deb1ea"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 24 14:08:21 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 24 14:08:21 2013 -0700"
      },
      "message": "am 1c7f35d1: Merge \"soundpool: allocate shared memory heap by client\" into klp-dev\n\n* commit \u00271c7f35d1f25eb7160314fdef536463fc34deb1ea\u0027:\n  soundpool: allocate shared memory heap by client\n"
    },
    {
      "commit": "e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f",
      "tree": "4de6f04ad4abc14bb0e777bcb02863196c59e34b",
      "parents": [
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 11:52:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 12:12:47 2013 -0700"
      },
      "message": "Cleanup openRecord error handling\n\nBug: 10888816\nChange-Id: I84897dd7d30b370640b54e928f230604b873cb68\n"
    },
    {
      "commit": "3d00aa6de95fb46e36f2bab4e3facdf0b96acf06",
      "tree": "1ad12df4c11ca37280cbe6850eed9bff1e0a2f35",
      "parents": [
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 24 09:53:27 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 24 11:59:59 2013 -0700"
      },
      "message": "soundpool: allocate shared memory heap by client\n\nCurrent SoundPool implementation allocates the shared memory heap\ncontaining decoded PCM samples in mediaserver process.\nWhen mediaserver process crashes, the shared memory heaps allocated by\nAudioCache cannot be mapped anymore in the new instance of mediaserver.\nThis causes a silent failure to end playback of new sounds because\nAudioFlinger believes the new AudioTracks are opened in streaming mode\nand not static mode: it sees a NULL shared memory pointer when the track\nis created.\n\nThe fix consists in allocating the memory heap in the client process. Thus\nthe heap is not lost when mediaserver restarts. The global memory usage is\nthe same as this is shared memory.\n\nAlso added a way to detect that a shared memory is passed when the track is\ncreated but cannot be mapped on mediaserver side.\n\nAlso fix a crash in SoundPool when ALOGV is enabled.\n\nBug: 10894793.\nChange-Id: Ice6c66ec3b2a409d75dc903a508b6c6fbfb2e8a7\n"
    },
    {
      "commit": "c7b2f9dce911026fa13854b49aa2bb5353f68499",
      "tree": "b300375a87d8c7596887d8c58a6b4d9e309b100d",
      "parents": [
        "3f079bb9ca87c3c1834cc5be0dafc6514938b578",
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Sep 23 19:00:19 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 23 19:00:19 2013 -0700"
      },
      "message": "am 402dfba6: Merge \"Add support for level measurements in Visualizer\" into klp-dev\n\n* commit \u0027402dfba6dcd68f5fd8d8921f9751f3e47eb1449d\u0027:\n  Add support for level measurements in Visualizer\n"
    },
    {
      "commit": "3f079bb9ca87c3c1834cc5be0dafc6514938b578",
      "tree": "74007b7c109180c7e56e1fcb248e2f79a319cfa5",
      "parents": [
        "3f1d3b97f723cf39fe6bde9efd0a3fc9e78028a5",
        "1d2536f460d4678770f423f50cbf6a61a13d4d11"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 19:00:13 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 23 19:00:13 2013 -0700"
      },
      "message": "am 1d2536f4: Merge \"AudioTrack: fix music resume\" into klp-dev\n\n* commit \u00271d2536f460d4678770f423f50cbf6a61a13d4d11\u0027:\n  AudioTrack: fix music resume\n"
    },
    {
      "commit": "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d",
      "tree": "169d2d0d7d3936e5f8749a1fd883edc886ceaed0",
      "parents": [
        "1d2536f460d4678770f423f50cbf6a61a13d4d11",
        "09647d29eaf429ce88c9c9709ff63dee62f2147a"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Sep 23 22:58:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 23 22:58:34 2013 +0000"
      },
      "message": "Merge \"Add support for level measurements in Visualizer\" into klp-dev"
    },
    {
      "commit": "09647d29eaf429ce88c9c9709ff63dee62f2147a",
      "tree": "3626eb231080732d92a0b1bdfbd1710b52e36aa6",
      "parents": [
        "4b701cc041d635e5ec56e382043a4c5d01aedd80"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 20 11:58:40 2013 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Sep 23 15:53:53 2013 -0700"
      },
      "message": "Add support for level measurements in Visualizer\n\nNew commands to set a measurement mode and perform peak + RMS\n measurements.\n\nBug 8413913\n\nChange-Id: Ib25254065c79d365ebb34f9dc9caa0490e2d300d\n"
    },
    {
      "commit": "9d2c78c4798ffd8c276c1bf0eaa0b34bc255a2da",
      "tree": "f81f585ba1aae36086bb9790b83de5673fdce14a",
      "parents": [
        "4b701cc041d635e5ec56e382043a4c5d01aedd80"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 12:29:42 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 12:32:34 2013 -0700"
      },
      "message": "AudioTrack: fix music resume\n\nFix regression introduced by commit 5a6cd22 in AudioTrack resume:\nthe callback thread was not signaled if paused internaly.\n\nBug: 10895013.\nChange-Id: Ic356b115132d6fccbcee2d9bb855e92671dc20c5\n"
    },
    {
      "commit": "e97d1ba9471a71c6b18cee23c98535d553303dac",
      "tree": "3b42c97508a1d5ffece6a3cbb79ee01a0ca551fb",
      "parents": [
        "f2c643c89e405b57c7ce42067b876fb80031e5fa",
        "4b701cc041d635e5ec56e382043a4c5d01aedd80"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 15:08:27 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 20 15:08:27 2013 -0700"
      },
      "message": "am 4b701cc0: Merge \"Revert \"Workaround slow AudioTrack destruction\"\" into klp-dev\n\n* commit \u00274b701cc041d635e5ec56e382043a4c5d01aedd80\u0027:\n  Revert \"Workaround slow AudioTrack destruction\"\n"
    },
    {
      "commit": "4b701cc041d635e5ec56e382043a4c5d01aedd80",
      "tree": "d4ac7bc04d6de49d02fa90eed1049120a7b3ac51",
      "parents": [
        "3b3cfcfa272c8e3e16c89765b8817f5a8de0c505",
        "e2773bb17bc5d01e05a77b8913539575ebd04500"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 22:05:38 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 20 22:05:39 2013 +0000"
      },
      "message": "Merge \"Revert \"Workaround slow AudioTrack destruction\"\" into klp-dev"
    },
    {
      "commit": "f2c643c89e405b57c7ce42067b876fb80031e5fa",
      "tree": "35cf4d8ef4cd438ff8e21e14dcfa79dc5b654291",
      "parents": [
        "af724697148f5f5ed0026e2ac8ca7f886a96deb7",
        "3b3cfcfa272c8e3e16c89765b8817f5a8de0c505"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 14:04:05 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 20 14:04:05 2013 -0700"
      },
      "message": "am 3b3cfcfa: Merge \"Fix slow AudioTrack and AudioRecord destruction\" into klp-dev\n\n* commit \u00273b3cfcfa272c8e3e16c89765b8817f5a8de0c505\u0027:\n  Fix slow AudioTrack and AudioRecord destruction\n"
    },
    {
      "commit": "5a6cd224d07c05b496b6aca050ce5ecf96f125af",
      "tree": "c5d2fe55f0080c9660d283d040616d9a9fb6decc",
      "parents": [
        "a3b97ad288e6808c54c6275eaac1bd53108d8f11"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 09:20:45 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 12:22:29 2013 -0700"
      },
      "message": "Fix slow AudioTrack and AudioRecord destruction\n\nThere were two causes for the slowness:\n\nWhen thread was paused, it used nanosleep and sleep.  These usually\nrun to completion (except for POSIX signal, which we avoid because it\nis low-level).  Instead, replace the nanosleep and sleep by condition\ntimed wait, as that can be made to return early by a condition signal.\nAnother advantage of condition timed wait is that a condition wait was\nalready being used at top of thread loop, so it is a simpler change.\n\nThe AudioRecord destructor was missing a proxy interrupt that was correct\nin AudioTrack.  This proxy interrupt is needed in case another thread\nis blocked in proxy obtainBuffer.\n\nDoes not address the 1 second polling for NS_WHENEVER.\n\nBug: 10822765\nChange-Id: Id665994551e87e4d7da9c7b015f424fd7a0b5560\n"
    },
    {
      "commit": "e2773bb17bc5d01e05a77b8913539575ebd04500",
      "tree": "9c6752456812c4a927574a71e1d2ec2495ff6ce3",
      "parents": [
        "8bbbd7da02fac3de40139af19f7cf7a7cc3cc824"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 18:12:06 2013 +0000"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 18:12:06 2013 +0000"
      },
      "message": "Revert \"Workaround slow AudioTrack destruction\"\n\nThis reverts commit 8bbbd7da02fac3de40139af19f7cf7a7cc3cc824.\n\nChange-Id: I269a6c445cbce33451b6a9e74223e36e6abbdbe0\n"
    },
    {
      "commit": "88e0f302bf700a7b4d2b6e6a83838c1793508809",
      "tree": "1ffa6271f6599813bdebdc7074c8bb06ee82cbf4",
      "parents": [
        "87fb4f30077e7bcf78e65cf25fe95bd58238bad1",
        "feb6d27bf61cd266cf753215e9cae16b9bc9dbbd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Sep 19 09:30:09 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 19 09:30:09 2013 -0700"
      },
      "message": "am feb6d27b: Merge \"Workaround slow AudioTrack destruction\" into klp-dev\n\n* commit \u0027feb6d27bf61cd266cf753215e9cae16b9bc9dbbd\u0027:\n  Workaround slow AudioTrack destruction\n"
    },
    {
      "commit": "8bbbd7da02fac3de40139af19f7cf7a7cc3cc824",
      "tree": "855de6f669a3485740a7d38104725bad42848cbb",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 18 14:15:42 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 18 14:55:30 2013 -0700"
      },
      "message": "Workaround slow AudioTrack destruction\n\nBug: 10809586\nChange-Id: I5f30d4deb1233e8ade8967568e40684ef680c395\n"
    },
    {
      "commit": "684e0ae8ac8cfb7c7a9709a7b4fc6caf485dfb8a",
      "tree": "f8b805ac0f5af6f31d67fadcee69d8f55ea959f7",
      "parents": [
        "ec467110f23ad98630d4fd504d647ac70d78f279",
        "9a98b6de791aeb130192df10744f5b35f8b6ef1a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 18 10:59:17 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 18 10:59:17 2013 -0700"
      },
      "message": "am 9a98b6de: Merge \"Partial fix for SoundPool not terminating\" into klp-dev\n\n* commit \u00279a98b6de791aeb130192df10744f5b35f8b6ef1a\u0027:\n  Partial fix for SoundPool not terminating\n"
    },
    {
      "commit": "8d0fda9660aee7059f802f400875247b01226084",
      "tree": "57b68d45cbd4e4cafee6b19ae283e315341be3a1",
      "parents": [
        "6cc3a9948b51193dfdcb0c3527d7f3d1ca38aa3c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 18 10:33:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 18 10:36:19 2013 -0700"
      },
      "message": "Partial fix for SoundPool not terminating\n\nSoundPool was waiting for EVENT_UNDERRUN only to indicate end of clip.  In\nJ, AudioTrack delivered both EVENT_UNDERRUN followed by EVENT_BUFFER_END.\nHowever, as of K, AudioTrack is only delivering EVENT_BUFFER_END (this\nlack of EVENT_UNDERRUN is another bug which still needs to be fixed).\nThe workaround is to also respond to EVENT_BUFFER_END in SoundPool.\n\nBug: 10787103\nChange-Id: Id68a23bddd6dd9df6c49c55138197260d71ca468\n"
    },
    {
      "commit": "11454092e4a94d3c8b4576c981595339abdfac0d",
      "tree": "9e6ded6dbe394ea944cf51cd77b80acdbd49c5d9",
      "parents": [
        "440b5a496ac4f10f1221ecb110f67bcd253ef70a",
        "18f861404efc054da0a2ea6c582e293940f63bc8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 17 15:04:42 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 17 15:04:42 2013 -0700"
      },
      "message": "am 18f86140: Merge \"Fix underruns when fast track denied due to SRC\" into klp-dev\n\n* commit \u002718f861404efc054da0a2ea6c582e293940f63bc8\u0027:\n  Fix underruns when fast track denied due to SRC\n"
    },
    {
      "commit": "440b5a496ac4f10f1221ecb110f67bcd253ef70a",
      "tree": "a2fc23395c423620e90dd3e0ae3fe3ae1c2689ea",
      "parents": [
        "83774965fefc5d0315ec41641bdd99cf0a657462",
        "fc270954192ef7e15ac2c88daadd8890d22096e3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Tue Sep 17 14:50:42 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 17 14:50:42 2013 -0700"
      },
      "message": "am fc270954: am e56f3c96: Merge \"strtok stores its values in thread local storage. So it can not guarantee works well when multithread environment. AudioFlinger has multithread. so strtok_r is more safe.\"\n\n* commit \u0027fc270954192ef7e15ac2c88daadd8890d22096e3\u0027:\n  strtok stores its values in thread local storage. So it can not guarantee works well when multithread environment. AudioFlinger has multithread. so strtok_r is more safe.\n"
    },
    {
      "commit": "fc270954192ef7e15ac2c88daadd8890d22096e3",
      "tree": "faba888ded992d6b43bd46eb3f258b546add0434",
      "parents": [
        "3c9396002f51da24f9ba8b8dc96ae06bf667ba2c",
        "e56f3c96fa6e7550b67e8b049f999aaa2ada1192"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Tue Sep 17 14:47:57 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 17 14:47:57 2013 -0700"
      },
      "message": "am e56f3c96: Merge \"strtok stores its values in thread local storage. So it can not guarantee works well when multithread environment. AudioFlinger has multithread. so strtok_r is more safe.\"\n\n* commit \u0027e56f3c96fa6e7550b67e8b049f999aaa2ada1192\u0027:\n  strtok stores its values in thread local storage. So it can not guarantee works well when multithread environment. AudioFlinger has multithread. so strtok_r is more safe.\n"
    },
    {
      "commit": "ce8828a016b082f730152af2204b8ea3610dc1ec",
      "tree": "aad0c32a17516519b22bcea0d4f2fa7c81c61d28",
      "parents": [
        "d176ec1e371a686c58385692a28da677e398c302"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 16 18:07:38 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 17 11:24:02 2013 -0700"
      },
      "message": "Fix underruns when fast track denied due to SRC\n\nOpenSL ES requests a fast track.  If sample rate conversion is needed,\nthe request is denied by server, and a larger client buffer is used\nto handle the higher latency of a normal track.  However the client\nnotification period was calculated based on buffer being divided into\n2 sub-buffers.  That resulted in the notification period being too long.\nThe server pulls chunks that are smaller than half the total buffer.\nSo now the client uses 3 sub-buffers when there is SRC.\n\nAlso removed the \u0027defer wake\u0027 optimization because it was incorrect.\nThis optimization attempted to reduce the number of wakeups of client,\nwhen server releaseBuffer knows that another releaseBuffer will be\nfollowing.  But there is no way for the first releaseBuffer to predict\nhow soon the second releaseBuffer will occur.  In some cases it was\na long time, and the client underran.  So now the client is woken up\nimmediately if the total number of available frames to client is \u003e\u003d\nthe minimum number the client wants to see (the notification period).\n\nAlso fix bug where minimum frame count was not being used in the\ncalculation of notification period.\n\nBug: 10342804\nChange-Id: I3c246f4e7bc3684a344f2cf08268dc082e338e2a\n"
    },
    {
      "commit": "ff7455c0c1df0c316a306fb81ee660840d08b6d0",
      "tree": "296e1aaf8779e9a6f178a2e166fe32730ce730db",
      "parents": [
        "fb949d5dc8a764e31fbd65bee87f59fcfeb6d848"
      ],
      "author": {
        "name": "seunghak.han",
        "email": "seunghak.han@lge.com",
        "time": "Sat Sep 07 14:59:43 2013 +0900"
      },
      "committer": {
        "name": "seunghak.han",
        "email": "seunghak.han@lge.com",
        "time": "Tue Sep 17 10:50:05 2013 +0900"
      },
      "message": "strtok stores its values in thread local storage.\nSo it can not guarantee works well when multithread environment.\nAudioFlinger has multithread.\nso strtok_r is more safe.\n\nChange-Id: I6d77ef9cc49a4478dd856dcdca14e4920ce955c6\n"
    },
    {
      "commit": "8973c0439984f85870dffa7a100580271933c964",
      "tree": "e664169db8c5c6a24e723e58b30b3feebafbf7d0",
      "parents": [
        "c728c580fc512b50604f33f1c4581c500062b245"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 11 14:35:16 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 11 14:36:52 2013 -0700"
      },
      "message": "Fix SoundPool.play() looping\n\nThis is done by configuring SoundPool for shared memory and fast track.\nPreviously SoundPool used a streaming track, and looping in streaming\nmode relied on the ability to loop the most recently enqueued data.\nThat \u0027feature\u0027 was lost in the new implementation of streaming, so we\u0027re\nnow switching from streaming mode to shared memory mode.  Shared memory\nmode had always been desired, but was blocked by bug 2801375 which is fixed now.\n\nBug: 10171337\nChange-Id: I2a938e3ffafa2a74d5210b4198b50db20ad5da0e\n"
    },
    {
      "commit": "a19912554f3779fac0c341ac702227bf4b5fe399",
      "tree": "eae1ed9c538fb796181f512770d0cb0796915e7d",
      "parents": [
        "7a4c2711d7a85ce962b9d18fee41975f9c574c0b",
        "ec3acca4a75fc4adc076b56751124f507b419622"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Wed Sep 04 22:08:00 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 04 22:08:00 2013 +0000"
      },
      "message": "Merge \"wifi-display: do not use HDCP\u0027s encryptNative method if its unsupported\" into klp-dev"
    },
    {
      "commit": "ec3acca4a75fc4adc076b56751124f507b419622",
      "tree": "d8e15b4acf4de74c3edcdad49f3528ca668fc2a1",
      "parents": [
        "4585e8f0ff47580fdb81ed8652bde32db1770050"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Tue Sep 03 14:35:37 2013 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Tue Sep 03 16:02:35 2013 -0700"
      },
      "message": "wifi-display: do not use HDCP\u0027s encryptNative method if its unsupported\n\nBug: 10609422\nChange-Id: I005f1d04a4191b1503b5f3e895a98b8d6560c402\n"
    },
    {
      "commit": "fe346c707f59d763ded93bc3d27b51f0c0408258",
      "tree": "3e6f12ac7b37bc8ef10845c4c7ccdcfef4b51cd5",
      "parents": [
        "4d0815d694e5a2edb3ce48427de50f55d0f84c0b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 30 13:28:22 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 15:19:03 2013 -0700"
      },
      "message": "Fix miscellanous AudioTrack::getTimestamp() bugs\n\nCheck that get_presentation_position is non-NULL before calling.\n\nAudioTrack::getTimestamp not implemented for fast tracks.\n\nFix typo in Track::getTimestamp().\n\nFix bugs in AudioTrack::getTimestamp after stop:\n - getTimestamp while stopped is not allowed.\n - stop, start, getTimestamp now returns the correct value.\n\nChange-Id: Ie8d9dc1f28d8927634e04175a68b147ffc2ea8eb\n"
    },
    {
      "commit": "a07a1c2c91dc7ee6ded319262499f20cd01edcf7",
      "tree": "2d7b01150635952af8d8d9e4f1a0d0d48ccfa874",
      "parents": [
        "943ba3cca8df0da24db38e97e43aaacb5b788a21"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 10:54:35 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 15:11:39 2013 -0700"
      },
      "message": "Instantiate SingleStateQueue\u003cAudioTimestamp\u003e\n\nas typedef AudioTimestampSingleStateQueue and use it in MonoPipe.\n\nChange-Id: Idaebb362bd9d0a81a7ed83792ab9369dc37c0e74\n"
    },
    {
      "commit": "56b592240073b1ab116c6e23a9c4c34ef5ad80d8",
      "tree": "99d167994fa92857f39b459da1b52e0695d13a68",
      "parents": [
        "865f6f248bf10189272020ebfdbf4827433caf0f",
        "53cec22821072719ee02c856e9ac2dda2496c570"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 30 00:04:37 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 30 00:04:37 2013 +0000"
      },
      "message": "Merge \"Add IAudioTrack::getTimestamp()\" into klp-dev"
    },
    {
      "commit": "865f6f248bf10189272020ebfdbf4827433caf0f",
      "tree": "02c8e8e58c3b3e549c718bda3bd344f332682ce9",
      "parents": [
        "e3b8b6e3e3a78ec6f9978f56c4573e193866ef53",
        "ce70374bf105f8a6160bf5dd70affea012b2a464"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 23:47:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 29 23:47:34 2013 +0000"
      },
      "message": "Merge \"New AudioTrack C++ API for audio timestamps\" into klp-dev"
    },
    {
      "commit": "42a6f422c09ca6a960673e0e805ddf71a9b51bef",
      "tree": "7c38dd1f569bd9546f5cef3c5f58ff6ca35cbeff",
      "parents": [
        "bdd467edb8550ab006c89a59b556759386e99898"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 29 14:35:05 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 29 14:35:05 2013 -0700"
      },
      "message": "AudioTrack: fix write retries for compressed audio\n\nWhen the amount of frames that can be written to the buffer\nis less than requested, AudioTrack::processAudioBuffer() estimates\nthe time needed to free the missing amount of frames and asks the\ncallback thread to sleep.\nThis behavior is not possible for compressed audio and should not\nbe enabled for offloaded tracks.\n\nChange-Id: I5b657283cfba06254c9ac0ea9b447467cce7eb61\n"
    },
    {
      "commit": "53cec22821072719ee02c856e9ac2dda2496c570",
      "tree": "1ac72eaf3ba6059680f8c3d7e39ae58a9e03adc8",
      "parents": [
        "ce70374bf105f8a6160bf5dd70affea012b2a464"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:01:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:19:07 2013 -0700"
      },
      "message": "Add IAudioTrack::getTimestamp()\n\nwith dummy implementation in AudioFlinger::TrackHandle, and\nimplement AudioTrack::getTimestamp() using IAudioTrack.\n\nAlso document invariant that mAudioTrack and control block are always\nnon-0 after successful initialization.\n\nChange-Id: I9861d1454cff7decf795d5d5898ac7999a9f3b7e\n"
    },
    {
      "commit": "ce70374bf105f8a6160bf5dd70affea012b2a464",
      "tree": "60d2673b83bff3622e7e299974104e572656b5a6",
      "parents": [
        "e07f53720bcf543bcfe90c228a49c2a85a3fdb4c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 16:33:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 28 17:24:58 2013 -0700"
      },
      "message": "New AudioTrack C++ API for audio timestamps\n\nThis new API is intended to replace latency(), especially for A/V sync.\nThe application will receive periodic timestamp notifications.  The period\nis unspecified, but will likely be more frequent after a pause or stop,\nset position, underrun, display on/off change, route change, or when audio\nframework notices drift.  It will be up to the higher level application\n(e.g.  Stagefright) to reconstruct a clock that updates more frequently.\n\nThe current latency() method doesn\u0027t indicate when latency changes\ndue to screen on/off state, route changes, etc.\n\nIncludes squahsed change-Id: I2082f8752040be0c234b1a6f1be2e269abf2ce7c\n Dummy implementation of AudioTrack:getTimestamp()\n Rename AudioTrack::Timestamp to AudioTimestamp.\n Renaming and pulling up to a higher level allows more modules to use it.\n\nChange-Id: Ibf7f6a207c3f8d8697f25ede2cd5200697fadb86\n(cherry picked from commit dd69eb893867634fd169c03204a6ad7c74b351e7)\n"
    },
    {
      "commit": "ec9a032c2e104ab1e3b5bf73e69dab1408ced0ad",
      "tree": "de4b71e9f43dc9a3a46aec43bc08f910ad5b8127",
      "parents": [
        "3bd3690fb0a423f9d0ba635e8db1c148ac9e93fc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 28 10:23:01 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 28 10:30:08 2013 -0700"
      },
      "message": "AudioTrack: fix unwanted underrun when restarting\n\nWhen restarting an AudioTrack from stopped state, it is necessary\nto force refresh of mRemainingFrames by processAudioBuffer() as\nthe last write before stop() could be partial. No doing so will lead\ninto unnecessary sleep before filling the non contiguous part\nof the buffer returned by obtainBuffer() when processAudioBuffer()\nis executed for the first time after start().\n\nChange-Id: Id703f8dc092a6f07c905eee194054b4a978f979d\n"
    },
    {
      "commit": "33142e1e318c0c766a385d88d2434f62f9e2dfe7",
      "tree": "7834e6bcc639ce13eafd275f7ceb6770fec9b865",
      "parents": [
        "2484040e0f413989e4edbe26ba3bf71122382af6",
        "87ecf19404586672008e98babc225e094292ceb5"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Fri Aug 23 23:18:18 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 23 23:18:18 2013 +0000"
      },
      "message": "Merge \"wifi-display: pass session info to wifi display settings\" into klp-dev"
    },
    {
      "commit": "2484040e0f413989e4edbe26ba3bf71122382af6",
      "tree": "0a17a226282f38322b9761650a9536088096c657",
      "parents": [
        "62c1a46eec047eb5fbc4b90432ec1ce65b76fb75",
        "dcb89b3b505522efde173c105a851c412f947178"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Fri Aug 23 19:13:28 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 23 19:13:28 2013 +0000"
      },
      "message": "Merge \"MediaPlayer: add listener for raw track data\" into klp-dev"
    },
    {
      "commit": "62c1a46eec047eb5fbc4b90432ec1ce65b76fb75",
      "tree": "dce59b6f085880d667534b7190df11d1c52b6343",
      "parents": [
        "4b820b0e1fa069714b123fc35784541d0f94d267",
        "9cf69e0fc110f17c28e988ed0f9bf91abfaf710d"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Thu Aug 22 23:08:10 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 22 23:08:10 2013 +0000"
      },
      "message": "Merge \"Add ability to test supported content types to MediaDrm\" into klp-dev"
    },
    {
      "commit": "9cf69e0fc110f17c28e988ed0f9bf91abfaf710d",
      "tree": "c5cb3fb67b26c852f8c7bea7e4eeb87952830842",
      "parents": [
        "75c16dde986e16ac5fd4d34b06b0cc6a90679866"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Wed Aug 21 11:59:23 2013 -0700"
      },
      "committer": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Thu Aug 22 09:27:35 2013 -0700"
      },
      "message": "Add ability to test supported content types to MediaDrm\n\nbug: 10244066\nChange-Id: I317f05b146db962c271893f6208890a5a6c396f1\n"
    },
    {
      "commit": "87ecf19404586672008e98babc225e094292ceb5",
      "tree": "6351a002b70f93befda9a8b27317138d4cff4b87",
      "parents": [
        "99ad37a47628b1ea1f8981bf974de38a49c653a0"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Thu Jun 06 12:42:59 2013 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Wed Aug 21 11:03:28 2013 -0700"
      },
      "message": "wifi-display: pass session info to wifi display settings\n\nBug: 9371882\n\nChange-Id: I9e4b8c2154b03ce8ff3e14c465a5224bb6e8db9a\n"
    },
    {
      "commit": "46291616486979986cba3ab83e894728ef53063f",
      "tree": "6e725226e68719d0c3c445dc5530bf0392204095",
      "parents": [
        "cf2a123e7ad39700c6e5318006f9acccf69511fa"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 18 14:38:44 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 19 17:45:42 2013 -0700"
      },
      "message": "AudioSystem: new audioflinger restart detection\n\nAdd a specific method to AudioSystem for AudioService to poll\nfor AudioFlinger service restart instead of relying on current\ncallback mechanism which is flaky.\n\nBug: 9693068.\nChange-Id: Ie88bc9d25033503bc5cd2fa9d8c754d0f8045b8f\n"
    },
    {
      "commit": "dcb89b3b505522efde173c105a851c412f947178",
      "tree": "eb89386fb07021a6527b35ea3d8ecf80584c73b7",
      "parents": [
        "1cb4e1661e4144cb188c2c79b89804fcb902fd19"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Tue Aug 06 09:44:47 2013 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Mon Aug 19 10:53:52 2013 -0700"
      },
      "message": "MediaPlayer: add listener for raw track data\n\nBug: 10326117\n\nChange-Id: I2c0bdf8adc67b11f8dc633423bee66897548f181\n"
    },
    {
      "commit": "ac0bbe16f3eba46b3d8057b66c2aff9101fc6f7d",
      "tree": "14008bb60b6b0ac3eb77b8e39504400d2b446e43",
      "parents": [
        "1b832c3d8f2b1b24f9bc7025afd2b4a8b4e6c6f9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 09 18:32:30 2013 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 09 19:57:53 2013 -0700"
      },
      "message": "Fix potential leak of audio input handle.\n\nThe audio input handle is ultimately owned by the audio recorder\nobject but it could be dropped on the floor if an error occurred\nbefore that object was fully initialized.\n\nRearranged some of the argument validation and merged getInput_l\nwith openRecord_l to simplify the code and prevent such a leak\nfrom occurring.\n\nBug: 10265163\nChange-Id: I124dce344b1d11c2dd66ca5e2c9aec0c52c230e2\n"
    },
    {
      "commit": "a0d77cd6bf5f4ee3ee9d67ad26e7f9981991d4e7",
      "tree": "0fcfaa98191e91c3f464a93937ef51daf331d9a9",
      "parents": [
        "d0f5664abb5a8d94ae13f63a5f3491b47383ee2f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 09 14:32:40 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Fri Aug 09 16:01:03 2013 -0700"
      },
      "message": "Fix SoundPool.play() looping regression in 4.3 DO NOT MERGE\n\nThe change I7370d6e59a7ef26dfb284a8b058d5ab2e0a42ccf caused a regression\nin SoundPool looping when using SoundPool\u0027s streaming implementation.\nThis reverts a portion of that change.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d58113\nBug: 10171337\nChange-Id: I8af0dc8683a7c7f225c80f0eb4d39770667b52e5\n"
    },
    {
      "commit": "4a0efb77198c69df711ab369ac482a42dbdfab07",
      "tree": "fd5d862458cc562d12feb525c8b94a81bcfbdb85",
      "parents": [
        "f31abb4ee82050030b3e5a0793bb2b8e30f40d31"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 08 15:20:53 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 08 16:15:09 2013 -0700"
      },
      "message": "Fix regression for AudioRecord streaming callback mode\n\nThe notification period (frequency of client wakeups) was broken in\nstreaming callback mode.  Fast tracks were OK, but non-fast tracks with\nnormal latency weren\u0027t getting woken up at all.\n\nBug: 10222943\nChange-Id: Ife9a2f57fa73c6eb921f1c5ba62de0bfcc20557b\n"
    },
    {
      "commit": "89a70f71cef61d10437b3901e8efc1f082a857c5",
      "tree": "a973a3c580ab5de75ffc390a7eb52293028fb9c6",
      "parents": [
        "e1e476669a5ee25f2a3c2fe30170e0f9a89f30a4",
        "d0715867861c216e88a4a7523b6da8a3cb128724"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Tue Aug 06 23:55:31 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 06 23:55:31 2013 +0000"
      },
      "message": "Merge \"IOMX: add updateGraphicBufferInMeta method for metadata mode\""
    },
    {
      "commit": "d0715867861c216e88a4a7523b6da8a3cb128724",
      "tree": "9b474094654a2dccb440fd9ca4a87f8afbdb9278",
      "parents": [
        "b08ab81bab9e8cd2e3a7fff02725a387070fd078"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Mon Jul 22 12:57:43 2013 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Tue Aug 06 13:19:26 2013 -0700"
      },
      "message": "IOMX: add updateGraphicBufferInMeta method for metadata mode\n\nThis is used to set the handle in the metadata buffer that is\nvalid in the mediaserver process, as well as to keep a reference\nfor the graphic buffers in BufferMeta.\n\nChange-Id: I46bb68d8bed894f357eeeb25368360d11b276634\nSigned-off-by: Lajos Molnar \u003clajos@google.com\u003e\n"
    },
    {
      "commit": "230c5bde2779c618b26edc73443280b2d9371c70",
      "tree": "313a1848799a279e3a56859f0d474a459a981d5a",
      "parents": [
        "33f3177c08d238285b296d137e527ec99e34228f",
        "7cd9cf70e36ad4b8eb12e24f9adbbe6fd69edebd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 17:32:40 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 06 17:32:41 2013 +0000"
      },
      "message": "Merge \"AudioRecord notification frames\""
    },
    {
      "commit": "33f3177c08d238285b296d137e527ec99e34228f",
      "tree": "92377e0ceaa8690090254769fe12db61db35d249",
      "parents": [
        "b85187332e740be337ce2e3e0d8d21c5c8651bf8",
        "3151427b6b0adf99929433715bab6f1e505100c1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 16:49:16 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 06 16:49:16 2013 +0000"
      },
      "message": "Merge \"AudioRecord::openRecord_l use flags\""
    },
    {
      "commit": "b85187332e740be337ce2e3e0d8d21c5c8651bf8",
      "tree": "ede35fbf668c6e0ffc68881a69efd23d8dabd921",
      "parents": [
        "743649fa70392b668377fb507d251b346c7b2769",
        "b13820ffafcb6bcdd33b6272676535afb4dff479"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Aug 06 16:15:35 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 06 16:15:35 2013 +0000"
      },
      "message": "Merge \"Reject unprepared MediaPlayers\""
    },
    {
      "commit": "743649fa70392b668377fb507d251b346c7b2769",
      "tree": "3d23d5355c7ea676aaeee2465447dc72f093c346",
      "parents": [
        "5279e3e1187e4da0fed4349d29ea548f52e95f95",
        "73493688f4190f790ee15d9ca54831cd64f4e195"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 16:14:01 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 06 16:14:01 2013 +0000"
      },
      "message": "Merge \"AudioRecord::openRecord_l now take flags\""
    },
    {
      "commit": "3aa03e40668dd90390d9f1702f8c576e15b366c3",
      "tree": "01037957009952351730da4b588c3e2bcc42cda9",
      "parents": [
        "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1",
        "eeca32671896739e84050da5992d5f151a1629de"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 22:59:42 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 05 22:59:43 2013 +0000"
      },
      "message": "Merge \"IAudioFlinger::openRecord track_flags_t flags is in/out\""
    },
    {
      "commit": "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1",
      "tree": "8a8f4aa15e520fddf80ed076f54b14ed6085dc50",
      "parents": [
        "9b26847ed122a601ba857e0ef22ee2c818641120",
        "27f7b2a8fe899565487d8a326676a5f7d0a05a37"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 21:56:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 05 21:56:17 2013 +0000"
      },
      "message": "Merge \"AudioRecord::set and constructor now take flags\""
    },
    {
      "commit": "f86b18b1ce3cf20a39aea1fcaf90ec66f9d6d63e",
      "tree": "ffcd083e96e9edaa7e8a597165584bfd5d3eb43f",
      "parents": [
        "13c34e09fdfe0bcd2053368df4dd26028004d18f",
        "28f1351369682801e1bb40a835bdae3c97b73c1c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 19:47:51 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 05 19:47:51 2013 +0000"
      },
      "message": "Merge \"AudioRecord callback thread waits for priority boost\""
    },
    {
      "commit": "b13820ffafcb6bcdd33b6272676535afb4dff479",
      "tree": "92e42e1eee0dc499bfdf65b63db4b1b1aaf04da8",
      "parents": [
        "f36dbfe3d517e9311be0a4d0fd6658380690e84c"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Aug 05 12:22:43 2013 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Aug 05 12:22:43 2013 -0700"
      },
      "message": "Reject unprepared MediaPlayers\n\nDon\u0027t allow a MediaPlayer that has been reset() or release()d to be\nused as the argument to setNextMediaPlayer.\n\nChange-Id: I47da1460ec3742f5b2bd7b79e7998b290032d5a1\n"
    },
    {
      "commit": "6c104a4a245ea72b7bdf8c7c016121189045d4bc",
      "tree": "9b7ae3d8df29debf778259609b9c349959cd82f1",
      "parents": [
        "fd87902a26f1a954643a5d0b414bd31a3cf61e0a",
        "f0f33c4acd231fa95deb9eeef2c46b0129e64463"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 14:41:30 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 05 14:41:31 2013 +0000"
      },
      "message": "Merge \"AudioRecord has no default sample rate\""
    },
    {
      "commit": "7cd9cf70e36ad4b8eb12e24f9adbbe6fd69edebd",
      "tree": "71596e7e98be91b19b5fe16a74a12926a0232177",
      "parents": [
        "3151427b6b0adf99929433715bab6f1e505100c1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 01 07:22:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "AudioRecord notification frames\n\nChange-Id: I76ec536d1504eb9a558178b62bf225aace4b40d1\n"
    },
    {
      "commit": "3151427b6b0adf99929433715bab6f1e505100c1",
      "tree": "09d18bfd32a448d153d1529487f52a3bc7761eed",
      "parents": [
        "73493688f4190f790ee15d9ca54831cd64f4e195"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 01 07:24:34 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "AudioRecord::openRecord_l use flags\n\nUse the flags to determine input parameters for IAudioFlinger::openRecord.\n\nChange-Id: I98d2726503af75c8830ce80ceaf3b94a755b342f\n"
    },
    {
      "commit": "73493688f4190f790ee15d9ca54831cd64f4e195",
      "tree": "e1655201bfb7d8339e48afd78597c5cd3bcb1b33",
      "parents": [
        "90e58b1fefc8caf70b34301a92bc86179580b6fc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:10:53 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "AudioRecord::openRecord_l now take flags\n\nThe new parameter \u0027flags\u0027 of type audio_input_flags_t will be used for\nrequesting a fast track, but is currently ignored.\n\nChange-Id: If68dfda8b2d4eaaca42927d721b4630c47f71f3b\n"
    },
    {
      "commit": "eeca32671896739e84050da5992d5f151a1629de",
      "tree": "d611c0a426354e80345956c945e9381e6137209b",
      "parents": [
        "27f7b2a8fe899565487d8a326676a5f7d0a05a37"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:12:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "IAudioFlinger::openRecord track_flags_t flags is in/out\n\nThis will allow AudioFlinger to tell client it is denying a request.\n\nChange-Id: Iff2be3ad6636371bbda9c9899a283c94620c1f06\n"
    },
    {
      "commit": "27f7b2a8fe899565487d8a326676a5f7d0a05a37",
      "tree": "fa0b6b4ee7cfb1e6b0e7cd0f6d6114498bb176bf",
      "parents": [
        "28f1351369682801e1bb40a835bdae3c97b73c1c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:10:22 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "AudioRecord::set and constructor now take flags\n\nThe new optional parameter \u0027flags\u0027 of type audio_input_flags_t will be\nused for requesting a fast track.\n\nChange-Id: Ia7e070cb57c833e608352da354fb30dc26df6918\n"
    },
    {
      "commit": "28f1351369682801e1bb40a835bdae3c97b73c1c",
      "tree": "eb6e8fad009764ef115c894f017be5b110689b65",
      "parents": [
        "f36dbfe3d517e9311be0a4d0fd6658380690e84c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 12:27:26 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:41 2013 -0700"
      },
      "message": "AudioRecord callback thread waits for priority boost\n\nChange-Id: Iae38fa4ac20a45751566169213a08a15deb0a2f6\n"
    }
  ],
  "next": "954315a10089fa3684ac94db5be77c6655c08fc0"
}
