)]}'
{
  "log": [
    {
      "commit": "4a03d784f7c0e3a9685d182eee92ba6580eaf5a1",
      "tree": "a7356ea6c85c6d1b4b45e0288f43b4f9fe9edae4",
      "parents": [
        "74d1927e4122a1748f89ca2ef79406fc06ee94b2"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Mon Sep 28 11:32:23 2015 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Oct 07 11:27:32 2015 -0700"
      },
      "message": "DO NOT MERGE - OMX: allow only secure codec to remotely call allocateBuffer.\n\nBug: 24310423\nChange-Id: Iebcfc58b447f925ec2134898060af2ef227266a3\n(cherry picked from commit 8dde7269a5356503d2b283234b6cb46d0c3f214e)\n"
    },
    {
      "commit": "6272fa1baf361a6a89607243638cc592047947b3",
      "tree": "e3f95e231ec43d93a06ff6bdd09f322bf5b305d4",
      "parents": [
        "f43125ed08a408b02613b99f058564d97ce690cc",
        "636539eb1a0d407d7f82b7c9a6d9833f7715e287"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Thu Sep 17 17:04:25 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 17 17:04:25 2015 +0000"
      },
      "message": "Merge \"DO NOT MERGE Fix vulnerability in mediaserver\" into klp-dev"
    },
    {
      "commit": "f43125ed08a408b02613b99f058564d97ce690cc",
      "tree": "bffa33718f670773303388e5e69461b1a2ff1d09",
      "parents": [
        "ae92251730865e0c4bc59ef2a8fe9dacb6de41b9",
        "9adc7283c84cea1be81d5bd55ce50aefa6328c6e"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Thu Sep 17 17:04:05 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 17 17:04:05 2015 +0000"
      },
      "message": "Merge \"Fix for security vulnerability in media server DO NOT MERGE\" into klp-dev"
    },
    {
      "commit": "636539eb1a0d407d7f82b7c9a6d9833f7715e287",
      "tree": "815c5c0c5281a9de2c860da3cf1c62eea4d46b68",
      "parents": [
        "13ff64c2db84f4e7cac3396700e333b48c42c7ee"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Wed Sep 16 10:23:12 2015 -0700"
      },
      "committer": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Wed Sep 16 10:23:56 2015 -0700"
      },
      "message": "DO NOT MERGE Fix vulnerability in mediaserver\n\nICrypto.cpp: ASLR bypass using DECRYPT IPC\n\nbug: 24074485\nChange-Id: I40dd0e92083c7093030393b16dbab59323306a4e\n"
    },
    {
      "commit": "8336fc433eee213e201c8a65bf2a65b65bc67c44",
      "tree": "f34fdbb0c5fb67bdef14493b565a04cdff95b738",
      "parents": [
        "b21a642067477c72f419956da0ca8dafe0c04eab"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Thu Sep 10 09:47:29 2015 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Sep 16 09:39:44 2015 -0700"
      },
      "message": "DO NOT MERGE - IAudioFlinger: always initialize variables to ensure no info leak when writing them to Parcel.\n\nBug: 23953967\nChange-Id: Ibbe841da149038675e9e8daea76c77558bc8564b\n(cherry picked from commit 983dca391a76fb45df999fc40e8766b9ddb63511)\n"
    },
    {
      "commit": "9adc7283c84cea1be81d5bd55ce50aefa6328c6e",
      "tree": "fa5f35497c755ea43733c1c0f4f156f466eb5566",
      "parents": [
        "13ff64c2db84f4e7cac3396700e333b48c42c7ee"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Mon Sep 14 10:18:56 2015 -0700"
      },
      "committer": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Mon Sep 14 18:58:37 2015 +0000"
      },
      "message": "Fix for security vulnerability in media server DO NOT MERGE\n\nbug: 23540426\nChange-Id: I5d602f99fd82e50d0136d47ce20cfa1ac9fd7ae2\n"
    },
    {
      "commit": "5f2a76f02f6d88825f8c164b4d9f7f310583eee1",
      "tree": "ac667c1fa7c2f9a60bf01fc67154b9fcd874ca74",
      "parents": [
        "69ae6a87342d5260d8d8660accc8aa1b9367dbbe"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Sep 09 09:48:34 2015 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Thu Sep 10 10:03:56 2015 -0700"
      },
      "message": "DO NOT MERGE - IAudioFlinger: clear config before reading it from parcel.\n\nBug: 23905951\nBug: 23912202\nChange-Id: Id13a9d3cae2c09e7381b841e67ddfb188274d74c\n(cherry picked from commit e995e477ad59b79145200c8f1e9e13c16c682d59)\n"
    },
    {
      "commit": "13ff64c2db84f4e7cac3396700e333b48c42c7ee",
      "tree": "626467528e2ff75d1d312d6879988b5ec25eaab9",
      "parents": [
        "ab20313074bb109f29f677c3f09d5da1a48c94e7",
        "892354335d49f0b9fcd10e20e0c13e3cd0f1f1cb"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Thu Sep 03 17:21:20 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 03 17:21:20 2015 +0000"
      },
      "message": "Merge \"Zero out return values in media binder calls\" into klp-dev"
    },
    {
      "commit": "892354335d49f0b9fcd10e20e0c13e3cd0f1f1cb",
      "tree": "fc309fc843d7c9a627b59f0771c02edf4d1375ba",
      "parents": [
        "f394f12167fddbc755855d06b615509517c99f14"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Wed Sep 02 16:46:59 2015 -0700"
      },
      "committer": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Wed Sep 02 17:48:22 2015 -0700"
      },
      "message": "Zero out return values in media binder calls\n\nMore specifically when handling:\n* GET_STREAM_VOLUME in IAudioPolicyService, and\n* GET_CURRENT_POSITION and GET_DURATION in IMediaPlayer\n\nThis prevents leaking uninitialized values across binder in error cases.\n\nBug: 23756261\nChange-Id: I0ffd900ab12b685b0611259ade4a3efb1ec5defe\n"
    },
    {
      "commit": "25a634427dec455b79d73562131985ae85b98c43",
      "tree": "7eb4fe76d2239352ae39bf4ce75d7dc4f5e0d4bc",
      "parents": [
        "f394f12167fddbc755855d06b615509517c99f14"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 01 20:07:56 2015 +0000"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 02 17:52:12 2015 +0000"
      },
      "message": "Make IEffect command more robust (second try)\n\nBug: 23540907\nChange-Id: If30cfa535ad51521053706fc40fc98d893db5bc7\n(cherry picked from commit 10e6660cc5da65b027c90489ba7ac55d1504e012)\n"
    },
    {
      "commit": "f394f12167fddbc755855d06b615509517c99f14",
      "tree": "ba4c05bbdf64aa56ac6fc0c6bf789d23065b8b85",
      "parents": [
        "0981df6e3db106bfb7a56a2b668c012fcc34dd2c",
        "57bed83a539535bb64a33722fb67231119cb0618"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Aug 28 20:49:57 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 28 20:49:57 2015 +0000"
      },
      "message": "Merge \"libmedia: clear reply data for IEffect command\" into klp-dev"
    },
    {
      "commit": "0981df6e3db106bfb7a56a2b668c012fcc34dd2c",
      "tree": "dc6913625ac7d7897ae45adecc82cd9e454ebb6b",
      "parents": [
        "9a2be5d49d57b239bf6345f033eab01ba98f3889"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Aug 20 09:56:39 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Aug 27 21:10:32 2015 +0000"
      },
      "message": "IMediaPlayer.cpp: make sure structures are initialized to 0\n\nCredit https://code.google.com/p/android/issues/detail?id\u003d183310\n\nBug: 23515142\nChange-Id: Idbd66fb148bd0ac1dd78f8651d0164f2a41e2427\n(cherry picked from commit b73b826cc16291b33649402497efbe0f946413bd)\n"
    },
    {
      "commit": "57bed83a539535bb64a33722fb67231119cb0618",
      "tree": "d27a064540c9761fd8c2c5f804232596f07e8bae",
      "parents": [
        "9a2be5d49d57b239bf6345f033eab01ba98f3889"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 26 16:34:33 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 27 00:06:18 2015 +0000"
      },
      "message": "libmedia: clear reply data for IEffect command\n\nBug: 23540907\nChange-Id: Ib89afc6b273b0eb310bbc5a1bd92b1e3d407c249\n"
    },
    {
      "commit": "8de6d690ae5843bd8e005deedea571596f79bbd3",
      "tree": "de83a9d8986206f202dd2c34bd62116be39474d6",
      "parents": [
        "c2153d0dc800d0718788dccd0f2a2d29f4647c03"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Fri Aug 21 09:58:12 2015 -0700"
      },
      "committer": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Fri Aug 21 18:32:29 2015 +0000"
      },
      "message": "Fix build break DO NOT MERGE\n\nrelated-to-bug: 23223325\n\nChange-Id: I7b09712b5f18912abddd50b75f6edaf860e894c1\n"
    },
    {
      "commit": "c2153d0dc800d0718788dccd0f2a2d29f4647c03",
      "tree": "24cd6439538e4bf3fd0007757d86dbcb63a465a9",
      "parents": [
        "5aa887ef44238e9a727564fe9051933f8b42e399"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Mon Aug 17 17:57:47 2015 -0700"
      },
      "committer": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Thu Aug 20 14:55:35 2015 -0700"
      },
      "message": "DO NOT MERGE Part of fix for libmedia OOB write anywhere\n\nClarify that decrypt destination is not a pointer for\nsecure case.\n\nb/23223325\n\nChange-Id: I642dcf790a9eb9e32175f3e0d8f040c82228e3ac\n(cherry picked from commit ed555d70d80964f40563d89a4e6d6a80f83f4b89)\n"
    },
    {
      "commit": "dbe6c320b414d8139c46aaf880d5f154ef4f9af8",
      "tree": "9da4023f106ea43c20ec91d39406c799420f35db",
      "parents": [
        "7acac10aae34da5ae4d628c5a270e7e3e94f7598"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Mon Apr 27 18:38:17 2015 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Thu May 14 21:54:54 2015 +0000"
      },
      "message": "HDCP: buffer over flow check -- DO NOT MERGE\n\nbug: 20222489\nChange-Id: I3a64a5999d68ea243d187f12ec7717b7f26d93a3\n(cherry picked from commit 532cd7b86a5fdc7b9a30a45d8ae2d16ef7660a72)\n"
    },
    {
      "commit": "ae6965ae7664aaea489a8d58358035610075c9af",
      "tree": "fd4406ad0fbd33d98a2cca8407aad354f9baa58b",
      "parents": [
        "42f785c5d5ae596d781171327c98c541f0517feb",
        "3aef35600523eb6b4ccc8086a8913e80701a031a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 10 23:20:25 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Nov 10 23:20:25 2014 +0000"
      },
      "message": "am 3aef3560: am e360f0f6: IAudioPolicyService: bound array size in queryDefaultPreProcessing\n\n* commit \u00273aef35600523eb6b4ccc8086a8913e80701a031a\u0027:\n  IAudioPolicyService: bound array size in queryDefaultPreProcessing\n"
    },
    {
      "commit": "3aef35600523eb6b4ccc8086a8913e80701a031a",
      "tree": "04abfec97e7e0d0b54b1037b06529d2ca26ebbdd",
      "parents": [
        "4fbe49a83d41a64d44e363ccd691e7bfc41bb6af",
        "e360f0f6cad290f69e07fd3a20dcf11a1dbc4160"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 10 23:16:22 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Nov 10 23:16:22 2014 +0000"
      },
      "message": "am e360f0f6: IAudioPolicyService: bound array size in queryDefaultPreProcessing\n\n* commit \u0027e360f0f6cad290f69e07fd3a20dcf11a1dbc4160\u0027:\n  IAudioPolicyService: bound array size in queryDefaultPreProcessing\n"
    },
    {
      "commit": "e360f0f6cad290f69e07fd3a20dcf11a1dbc4160",
      "tree": "6e19a985df2a12cf74d713b689556cfc735f0088",
      "parents": [
        "96016c2d583ccca9fffd6974cb9473f7effd6cf5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 05 12:15:36 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 10 19:43:46 2014 +0000"
      },
      "message": "IAudioPolicyService: bound array size in queryDefaultPreProcessing\n\nBug: 18226810.\nChange-Id: Ib8e2bfe835a8681aac50bf23161db14e50c9a124\n(cherry picked from commit 74adca9ad30b7f8a70d40c5237bade0d16c4ea58)\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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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"
    },
    {
      "commit": "954315a10089fa3684ac94db5be77c6655c08fc0",
      "tree": "5258b8e752cce01d1009990cd549a3297570dbab",
      "parents": [
        "f36dbfe3d517e9311be0a4d0fd6658380690e84c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 09:02:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:21:36 2013 -0700"
      },
      "message": "Recording of non-linear formats is not supported\n\nSuch formats are already rejected in AudioRecord::set()\n\nChange-Id: I5ba1fd9e4cd659e5226c75aa4f63e52f655e0521\n"
    },
    {
      "commit": "f0f33c4acd231fa95deb9eeef2c46b0129e64463",
      "tree": "c20304410af6b34407a72e6ba4859427ccaf67e6",
      "parents": [
        "f36dbfe3d517e9311be0a4d0fd6658380690e84c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 12:24:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:03:44 2013 -0700"
      },
      "message": "AudioRecord has no default sample rate\n\nChange-Id: I72feefdd6f3a623fd3669b80d4b264518fdc0929\n"
    },
    {
      "commit": "82aaf94a5b18939e4d790bbc752031f3070704a3",
      "tree": "4e39e32d0ccde726548afcbd81e253d5e316b295",
      "parents": [
        "b08ab81bab9e8cd2e3a7fff02725a387070fd078"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:05:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 09:15:00 2013 -0700"
      },
      "message": "Report underruns for fast tracks also\n\nThis fixes a regression that was introduced earlier\nby commit 9f80dd223d83d9bb9077fb6baee056cee4eaf7e5\ncalled \"New control block for AudioTrack and AudioRecord\".\nThat commit broke underrun reporting for fast tracks.\n\nAlso remove Track::mUnderrunCount, which counted the number of underrun\nevents, and was only used by dumpsys media.audio_flinger.\n\nNow dumpsys media.audio_flinger reports the number of underrun frames,\n\nIsolated underrun-related control block accesses via the proxy, so that\nthe server is not directly poking around in the control block.\n\nThe new proxy APIs are AudioTrackServerProxy::getUnderrunFrames() and\nAudioTrackServerProxy::tallyUnderrunFrames().  getUnderrunFrames() returns\na rolling counter for streaming tracks, or zero for static buffer tracks\nwhich never underrun, but do a kind of \u0027pause\u0027 at end of buffer.\ntallyUnderrunFrames() increments the counter by a specified number of frames.\n\nChange-Id: Ib31fd73eb17cbb23888ce3af8ff29f471f5bd5a2\n"
    },
    {
      "commit": "d054c32443a493513ab63529b0c8b1aca290278c",
      "tree": "fc68ba259ded1dd4960bee2938a9bcc7c599c9a3",
      "parents": [
        "96f60d8f04432a1ed503b3e24d5736d28c63c9a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 12:59:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:50:48 2013 -0700"
      },
      "message": "Move control block mName to createTrack() output\n\nThis is part of a series of CLs to clean up the shared memory\ncontrol block, by removing any fields that don\u0027t have to be there.\n\nChange-Id: I6e51003a1293b6800258c31b22cff2eba42162e7\n"
    },
    {
      "commit": "96f60d8f04432a1ed503b3e24d5736d28c63c9a2",
      "tree": "083f6224327e0965a925076b3e1aec5636598203",
      "parents": [
        "97252bb0e40a5a9b41f020163393cf6c5da10b7e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 10:21:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:40:17 2013 -0700"
      },
      "message": "Rename control block flags to mFlags\n\nChange-Id: I7b6d31e24531954ab1ecdf3ed56c19433700bd89\n"
    },
    {
      "commit": "97252bb0e40a5a9b41f020163393cf6c5da10b7e",
      "tree": "2730f01323e31639eb85736a20ad0e0cf867876e",
      "parents": [
        "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
        "291bb6d8947c5b0c062f0895d623c529259bfa39"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "message": "Merge \"AudioRecord and HAL input stream must be 16-bit PCM only\""
    },
    {
      "commit": "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
      "tree": "997cd41de1adb829c194f56cf29eb02945666b94",
      "parents": [
        "eced2daaa6c91a3731eef978ce65c6ec319c5e6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 09:45:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:24:03 2013 -0700"
      },
      "message": "Rename control block server to mServer and add comments\n\nChange-Id: Ieabd91acee92d0e84e66fbd358df5282b856306e\n"
    },
    {
      "commit": "eced2daaa6c91a3731eef978ce65c6ec319c5e6a",
      "tree": "635d4e4f9ed3dccd52f53b1e91db4c4402733c3a",
      "parents": [
        "a30e75897934da2ce7b1b03bcb4b58e139d3e81e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:17:28 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 08:44:15 2013 -0700"
      },
      "message": "Use correct type for OutputDescriptor::format\n\nChange-Id: Ide608ef452d57da29b708180d90470361c123d1d\n"
    },
    {
      "commit": "7f249fa9bcb64da324d19f551943fac7686d221c",
      "tree": "76cc14be9525f53fbf910c00884ebe4b5c9988c9",
      "parents": [
        "ae4b5f93444802632d71ec34373842e6f5febbaa",
        "fad226abd12435dbcd232f7de396f1a097b2bd5f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 21:13:08 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 21:13:14 2013 +0000"
      },
      "message": "Merge \"Use standard name and type for channel mask\""
    },
    {
      "commit": "3dcd00dddec86a1c5133083ad7ba2265d49c048c",
      "tree": "0cb9279c20e16d3f059739818b71e9b77c185330",
      "parents": [
        "b283374cbf79dc5a36f1eef0015d7baf8881792e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 10:10:23 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 10:49:59 2013 -0700"
      },
      "message": "Declare methods in binder opcode order\n\nChange-Id: I5f624b7a51ffe1a17a67c056cf984f74e4c56eac\n"
    },
    {
      "commit": "b1a270d1e926fb9a01b4265a7675ed0c2c8f4868",
      "tree": "091d06b02bc126ff1bb2dd1fabc9be829582ae69",
      "parents": [
        "bfb1b832079bbb9426f72f3863199a54aefd02da"
      ],
      "author": {
        "name": "Richard Fitzgerald",
        "email": "rf@opensource.wolfsonmicro.com",
        "time": "Tue May 14 12:12:21 2013 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "libmedia: offloaded playback support\n\n- start() returns a status so that upper layers can\nrecreate a non offloaded track in case of error.\n\n- Added states to handle offloaded tracks specific:\n  - waiting for stream end (drain) notification by\naudio flinger\n  - allow pause while waiting for stream end notification\n\n- getPosition() queries the render position directly from\naudio HAL.\n\n- disable APIs not applicable to offloaded tracks\n\n- Modified track restoring behavior for invalidated\noffloaded tracks: just send the callback and wait for\nupper layers to create a new track.\n\n- Added wait for stream end management in audio track client\nproxy. Similar to obtainBuffer and should be factored in.\n\nChange-Id: I0fc48117946364cb255afd653195498891f622bd\nSigned-off-by: Eric Laurent \u003celaurent@google.com\u003e\n"
    },
    {
      "commit": "bfb1b832079bbb9426f72f3863199a54aefd02da",
      "tree": "5007d22456776dc77d124be84bcfe8bc4152bbb2",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 07 09:53:42 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "AudioFlinger: offload playback, non-blocking write\n\n- Added specialized playback thread class for offload playback,\nderived from directoutput thread.\nThis thread type handles specific state transitions for offloaded\ntracks and offloading commands (pause/resume/drain/flush..) to audio HAL.\nAs opposed to other threads, does not go to standby if the track is paused.\n\n- Added support for asynchronous write and drain operations at audio HAL.\nUse a thread to handle async callback events from HAL: this avoids locking\nplayback thread mutex when executing the callback and cause deadlocks when\ncalling audio HAL functions with the playback thread mutex locked.\n\n- Better accouting for track activity: call start/stop and release Output\nmethods in audio policy manager when tracks are actually added and removed\nfrom the active tracks list.\nAdded a command thread in audio policy service to handle stop/release commands\nasynchronously and avoid deadlocks with playback thread.\n\n- Track terminated status is not a state anymore. This condition is othogonal\nto state to permitted state transitions while terminated.\n\nChange-Id: Id157f4b3277620568d8eace7535d9186602564de\n"
    },
    {
      "commit": "fad226abd12435dbcd232f7de396f1a097b2bd5f",
      "tree": "4e5214f8f5b142239a9583e79032b70330fa7c8e",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:19:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 17:49:04 2013 -0700"
      },
      "message": "Use standard name and type for channel mask\n\nFormer name \u0027channels\u0027 was ambiguous with respect to channel count.\n\nChange-Id: I716f792d95a7e0c787d27514ad6e93dbcef8a415\n"
    },
    {
      "commit": "291bb6d8947c5b0c062f0895d623c529259bfa39",
      "tree": "aa527f282bf3523c3692f086e4e088e8e21aa69c",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:23:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 16:03:05 2013 -0700"
      },
      "message": "AudioRecord and HAL input stream must be 16-bit PCM only\n\nCurrently there are 16-bit PCM assumptions in several places for capture:\n - resampler API\n - mRsmpInBuffer and mRsmpOutBuffer\n - RecordThread::threadLoop upmix, downmix, and resampling\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces 16-bit PCM in both\nclient and server at all places where a format is checked.\n\nChange-Id: I08b0570bff626ad0d341804825a72c14e61b4233\n"
    },
    {
      "commit": "4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61",
      "tree": "c7ed5d9b71f919bf664dd0cb6cbdd1c3de2f9241",
      "parents": [
        "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 14:45:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Use AudioSystem::setLowRamDevice() to configure memory\n\nBug: 9798886\nChange-Id: I9321e3f369f1ed9429ae222e3926ebdeb012b8b0\n"
    },
    {
      "commit": "0b83a15d97f61d575a7cffbf42f9ed6edfa25ccc",
      "tree": "e912aa4e60bf32f870e95c6240c40e08343daee7",
      "parents": [
        "41f9f1ac03c8fd1dee92c33f304663c9ddc2fe5e",
        "e40cda70eec141fa05cbcca1de420fdb22b98be6"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jul 17 22:29:43 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 17 22:29:43 2013 +0000"
      },
      "message": "Merge \"Support \"suspension\" of a video encoder in \"surface-input\" mode.\""
    },
    {
      "commit": "e40cda70eec141fa05cbcca1de420fdb22b98be6",
      "tree": "44ba825722026f73ceb0c27e5e58c47ab9e884fa",
      "parents": [
        "5478f3c44b9d6670261733953a71a8290fa70ae8"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jul 17 13:55:26 2013 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jul 17 15:27:31 2013 -0700"
      },
      "message": "Support \"suspension\" of a video encoder in \"surface-input\" mode.\n\ni.e. feed no more input frames to the encoder while suspended.\n\nChange-Id: I51391e18c1517548e869f8ddece19f4af37e78f9\n"
    }
  ],
  "next": "cff1b2359b8a302f19539c0bc5d25c98a52733fd"
}
