)]}'
{
  "log": [
    {
      "commit": "c1e989e76a461ea69e293839b3c29b634a462bd5",
      "tree": "f2285a73a3ae481533a578215ae6c6cef2c63fe1",
      "parents": [
        "3732a3acafa7eb621bc26cca3eb00150ea12d2e2",
        "13ff64c2db84f4e7cac3396700e333b48c42c7ee"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Thu Sep 03 17:52:44 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 03 17:52:44 2015 +0000"
      },
      "message": "am 13ff64c2: Merge \"Zero out return values in media binder calls\" into klp-dev\n\n* commit \u002713ff64c2db84f4e7cac3396700e333b48c42c7ee\u0027:\n  Zero out return values in media binder calls\n"
    },
    {
      "commit": "3732a3acafa7eb621bc26cca3eb00150ea12d2e2",
      "tree": "867b54747e20ee05ebb5b59d655e952ac2b47247",
      "parents": [
        "16e12007ab1581e1b6aa973f3c83b2a45a816881",
        "ab20313074bb109f29f677c3f09d5da1a48c94e7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Sep 03 17:52:43 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 03 17:52:43 2015 +0000"
      },
      "message": "am ab203130: Merge \"Make IEffect command more robust (second try)\" into klp-dev\n\n* commit \u0027ab20313074bb109f29f677c3f09d5da1a48c94e7\u0027:\n  Make IEffect command more robust (second try)\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": "fba72ab0fcf7298492dcd9e3045913435d30d3a9",
      "tree": "2401cc720a2689ec6325fd8e34b5960c1e7b785b",
      "parents": [
        "d437c77716fcf454d99b8424bb01f37643b970cc",
        "f394f12167fddbc755855d06b615509517c99f14"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Aug 28 21:08:45 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 28 21:08:45 2015 +0000"
      },
      "message": "am f394f121: Merge \"libmedia: clear reply data for IEffect command\" into klp-dev\n\n* commit \u0027f394f12167fddbc755855d06b615509517c99f14\u0027:\n  libmedia: clear reply data for IEffect command\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": "d437c77716fcf454d99b8424bb01f37643b970cc",
      "tree": "48e065894ed784e875e4005a6abfe75d71d99ac7",
      "parents": [
        "f9a51893d739000cd70caf10c83d0e603371f5b1",
        "0981df6e3db106bfb7a56a2b668c012fcc34dd2c"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Aug 27 21:45:45 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 27 21:45:45 2015 +0000"
      },
      "message": "am 0981df6e: IMediaPlayer.cpp: make sure structures are initialized to 0\n\n* commit \u00270981df6e3db106bfb7a56a2b668c012fcc34dd2c\u0027:\n  IMediaPlayer.cpp: make sure structures are initialized to 0\n"
    },
    {
      "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": "ca095ac251ad02ad745d763f37ec3fcc5a8aa2ea",
      "tree": "f5e0756fd218a0e06e61ce391d2b61e6c88c555d",
      "parents": [
        "fd1d6df52f4c33f59d44abdbcdd0ec5b9a20f059",
        "8de6d690ae5843bd8e005deedea571596f79bbd3"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Fri Aug 21 18:51:27 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 21 18:51:27 2015 +0000"
      },
      "message": "am 8de6d690: Fix build break DO NOT MERGE\n\n* commit \u00278de6d690ae5843bd8e005deedea571596f79bbd3\u0027:\n  Fix build break DO NOT MERGE\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": "fd1d6df52f4c33f59d44abdbcdd0ec5b9a20f059",
      "tree": "457d61467a5f2f5797b695565dfd3e46310f8534",
      "parents": [
        "f839b2a33c46f3520684f0a839760cca36a6b4c7",
        "c2153d0dc800d0718788dccd0f2a2d29f4647c03"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Fri Aug 21 15:36:21 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 21 15:36:21 2015 +0000"
      },
      "message": "am c2153d0d: DO NOT MERGE Part of fix for libmedia OOB write anywhere\n\n* commit \u0027c2153d0dc800d0718788dccd0f2a2d29f4647c03\u0027:\n  DO NOT MERGE Part of fix for libmedia OOB write anywhere\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": "96a41a2ba5985aeb9163923f54d84cdaa3d0363d",
      "tree": "f0ef2332a613beac9eb6d78ea168ffea6487ff6a",
      "parents": [
        "a3e8f60f5e409f65f12636df5fad7f20ff736df5",
        "dbe6c320b414d8139c46aaf880d5f154ef4f9af8"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Thu May 14 23:17:08 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 14 23:17:08 2015 +0000"
      },
      "message": "am dbe6c320: HDCP: buffer over flow check -- DO NOT MERGE\n\n* commit \u0027dbe6c320b414d8139c46aaf880d5f154ef4f9af8\u0027:\n  HDCP: buffer over flow check -- DO NOT MERGE\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": "99370d2da54d7537ffda7fef1f6ef36f8b690321",
      "tree": "1ba4953c98fd3eeaa6f9a3fc2ab3e88003da23e4",
      "parents": [
        "ca83dd27f6c662bcbb0cea204c4df7ca77a479fd",
        "ae6965ae7664aaea489a8d58358035610075c9af"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 10 23:28:27 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Nov 10 23:28:27 2014 +0000"
      },
      "message": "am ae6965ae: am 3aef3560: am e360f0f6: IAudioPolicyService: bound array size in queryDefaultPreProcessing\n\n* commit \u0027ae6965ae7664aaea489a8d58358035610075c9af\u0027:\n  IAudioPolicyService: bound array size in queryDefaultPreProcessing\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": "b6dcdbf436ffacb52a41ac8ef9b07f99fd64779f",
      "tree": "56c8eebf0dda1560737408bf8c8e20019d17193b",
      "parents": [
        "620208dc0bbd7a0792702df3ab08800fdad60cec"
      ],
      "author": {
        "name": "Chris Elliott",
        "email": "chriselliott@google.com",
        "time": "Thu Oct 16 02:17:27 2014 +0000"
      },
      "committer": {
        "name": "Chris Elliott",
        "email": "chriselliott@google.com",
        "time": "Thu Oct 16 02:18:57 2014 +0000"
      },
      "message": "Revert \"audio: prevent larger than required sleeps - DO NOT MERGE\"\n\nRevert change if we require a build beyond P\n\nThis reverts commit 620208dc0bbd7a0792702df3ab08800fdad60cec.\n\nChange-Id: I07f65e35dbd9f814725f50f7bb346f7b285f41aa"
    },
    {
      "commit": "620208dc0bbd7a0792702df3ab08800fdad60cec",
      "tree": "c079d953bc10a492f8145a3984a929bb9b936254",
      "parents": [
        "2feb18ddfdbd20941ebcc3314780a582da5608e4"
      ],
      "author": {
        "name": "Chris Elliott",
        "email": "chriselliott@google.com",
        "time": "Wed Oct 15 20:46:15 2014 +0000"
      },
      "committer": {
        "name": "Chris Elliott",
        "email": "chriselliott@google.com",
        "time": "Wed Oct 15 20:49:02 2014 +0000"
      },
      "message": "audio: prevent larger than required sleeps - DO NOT MERGE\n\nThis will be cherry picked into P build after O completes for other devices.\n\nThis reverts the revert from commit 2feb18ddfdbd20941ebcc3314780a582da5608e4.\n\nb/17962037\n\nFrom: Haynes Mathew George \u003chgeorge@codeaurora.org\u003e\nDate: Wed, 26 Mar 2014 16:18:42 -0700\nSubject: [PATCH] AudioTrack: prevent larger than required sleeps\n\nAudioTrackThread can end up waiting for larger than necessary\ntime for free space to be available in the cblk. Fix this by\nwaiting on the cblk futex instead of the (internal) condition variable.\n\nChange-Id: Iba5b266f9b4082b3833f4abd52ebc6601c8e3034"
    },
    {
      "commit": "2feb18ddfdbd20941ebcc3314780a582da5608e4",
      "tree": "56c8eebf0dda1560737408bf8c8e20019d17193b",
      "parents": [
        "8c0417c173d1fd618ae54e2d721b0ec360ea70cc"
      ],
      "author": {
        "name": "Chris Elliott",
        "email": "chriselliott@google.com",
        "time": "Wed Oct 15 00:49:17 2014 +0000"
      },
      "committer": {
        "name": "Chris Elliott",
        "email": "chriselliott@google.com",
        "time": "Wed Oct 15 00:49:17 2014 +0000"
      },
      "message": "Revert \"audio: prevent larger than required sleeps - DO NOT MERGE\"\n\nThis reverts commit 8c0417c173d1fd618ae54e2d721b0ec360ea70cc.\n\nReverting as we only wanted to include this CL the KNX01M build\n\nChange-Id: Ib53292de658078285a38710915168e1746486fea\n"
    },
    {
      "commit": "8c0417c173d1fd618ae54e2d721b0ec360ea70cc",
      "tree": "c079d953bc10a492f8145a3984a929bb9b936254",
      "parents": [
        "e6b5d4c2d58a02184dd97815b5f76980025379bc"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Thu Oct 09 20:06:00 2014 +0800"
      },
      "committer": {
        "name": "Chris Elliott",
        "email": "chriselliott@google.com",
        "time": "Tue Oct 14 17:20:37 2014 +0000"
      },
      "message": "audio: prevent larger than required sleeps - DO NOT MERGE\n\nb/17962037\n\nFrom: Haynes Mathew George \u003chgeorge@codeaurora.org\u003e\nDate: Wed, 26 Mar 2014 16:18:42 -0700\nSubject: [PATCH] AudioTrack: prevent larger than required sleeps\n\nAudioTrackThread can end up waiting for larger than necessary\ntime for free space to be available in the cblk. Fix this by\nwaiting on the cblk futex instead of the (internal) condition variable.\n\nChange-Id: I75bd14cd46f3b75afe0ea8bd9b48d7a2f95f654a"
    },
    {
      "commit": "68d9d71a792deed75d32fe13febc07c9c12c8449",
      "tree": "15ba0a2a541bd0b69fa286d04c9cc40d30b49871",
      "parents": [
        "1000d426bedb1ec38bdfff98fc8f004b64af13cb"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Tue Mar 04 13:21:31 2014 -0800"
      },
      "committer": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Sat Mar 29 08:43:09 2014 -0700"
      },
      "message": "Support CAST V2 Authentication in MediaDrm\n\nJava API version\n\nUpdate frameworks to enable support for CAST\nV2 Authentication in the DRM Plugin.\n\nChange-Id: I9066ada0edf8e0d777c503897d8c7fc7f76f2861\nrelated-to-bug: 12702350\n"
    },
    {
      "commit": "38efe8eb08e08610d535a164768851ac7c13d654",
      "tree": "7853a753cbfac471087604d702ad6b2c546a2269",
      "parents": [
        "4ee774f322ad3292fcfbb3c120cf250643419425",
        "6db20dcb54dad932a3ea2e3a5dca41fce5802eb4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Mar 08 02:00:05 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Mar 08 02:00:05 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": "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": "4ee774f322ad3292fcfbb3c120cf250643419425",
      "tree": "207b8891e48745fc85b2ddecc060acab0e1bb8e6",
      "parents": [
        "4293011df9caa1c5dce0f02d7a6d35e702bdfef4",
        "2f55c2c03b17795e94b325d402ac5b409e3ba0e8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 07 21:14:51 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Mar 07 21:14:51 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": "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": "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": "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"
    }
  ],
  "next": "89a70f71cef61d10437b3901e8efc1f082a857c5"
}
