)]}'
{
  "log": [
    {
      "commit": "993fa0603707e94ce259e95e56838a85b5ccbdc5",
      "tree": "df2318b3af52103e1cfaa577857759560b1df802",
      "parents": [
        "b53fc4ef8da47df8d5f580e8ee6135866ffebc33"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 02 11:14:34 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 02 11:17:21 2014 -0700"
      },
      "message": "Use audio_is_linear_pcm()\n\nChange-Id: I17b30fdb6dbb6454ad0a20dd703fd603a37a8397\n"
    },
    {
      "commit": "c125f38cd0ae35409a01b98a99e483550daa1313",
      "tree": "efee74222317630cd7e90c2d3c25867906030639",
      "parents": [
        "27a17103f99d23157ac80ef7d75e25a3aae788bd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Apr 11 18:37:33 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 14 09:54:46 2014 -0700"
      },
      "message": "audioflinger: forward device change to effects in direct thread\n\nDevice change during offload playback is not informed to effect chain\nwhich causes effects still work on unexpected output devices. Add device\nchange notification in direct output thread.\n\nOriginal author wjiang \u003cwjiang@codeaurora.org\u003e\n\nCRs-Fixed: 630408\nBug: 14053172\nSigned-off-by: Glenn Kasten \u003cgkasten@google.com\u003e\nChange-Id: I094a99bdf540479cee2fca6614ec35c2fa7d6046\n"
    },
    {
      "commit": "84a0c6e87c48f58a0d3be71961432c086a4d24cc",
      "tree": "a9bea7e95223dc4d1f3219d4e60dd385881ec6d8",
      "parents": [
        "99021c47f45ee8bf3317cff7d08226e76c8d8227"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 02 11:24:53 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 02 14:33:26 2014 -0700"
      },
      "message": "Change references of Q19.12 to Q4.27 for clarity\n\nChange-Id: I5beb7daf6ff9bc123ff3582f7c294edcaf8652f6\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "3a6c90aa0617666d9abc94c02b752d9eb3d64772",
      "tree": "150424841e6732f1d3a1c6df6139f8f307db0d2f",
      "parents": [
        "5e184b0d12f1ec436246a391da8d9355cc21ee08"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:07:51 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 31 12:22:09 2014 -0700"
      },
      "message": "Add FIXMEs to createRecord for fast capture\n\nChange-Id: I759be200fae32969212c52a409f46f2e704081e3\n"
    },
    {
      "commit": "5c4fa907328c8ee586367272c7525cb87742f14d",
      "tree": "072ee3fe93cbcc8505118b51bc371265214036f3",
      "parents": [
        "2301acc6a9c7a3af4ad01f3d1d0f76f13eca7350",
        "adad3d7d935da176ff24941b4ae9edf7340e9b96"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 22:22:23 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 26 22:22:24 2014 +0000"
      },
      "message": "Merge \"Use LOG_ALWAYS_FATAL instead of LOG_FATAL\""
    },
    {
      "commit": "adad3d7d935da176ff24941b4ae9edf7340e9b96",
      "tree": "7a8a2f8e31c7dd690805c1cfd9982d218c66296b",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 21 14:51:43 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 14:46:28 2014 -0700"
      },
      "message": "Use LOG_ALWAYS_FATAL instead of LOG_FATAL\n\nLOG_FATAL is compiled out in most builds, so the\nassertion checks were not being performed.\n\nChange-Id: I774f0985ab9c5ccecd8989a0f1c940386b73fc35\n"
    },
    {
      "commit": "66e4635cb09fadcaccf912f37c387396c428378a",
      "tree": "7982a54dbc04375babd42e59c03ef930454a9687",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 17:44:23 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 16:22:54 2014 -0700"
      },
      "message": "Use symbolic constants from \u003csystem/audio.h\u003e\n\nAUDIO_INTERLEAVE_*\nAUDIO_STREAM_MIN\nAUDIO_SESSION_ALLOCATE\n\nChange-Id: I31dd6f327204685e50716079ce21c4ba206dff11\n"
    },
    {
      "commit": "2d3ca68363f723fbe269d3ce52dab4985dfc7154",
      "tree": "c1f8c7bbae0e128158ce90a9985d0219dd719182",
      "parents": [
        "164985121796cf214c7a83d32005d9b01125b558"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Fri Mar 07 13:43:49 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 17 18:32:07 2014 -0700"
      },
      "message": "audioflinger: OffloadThread fix for resume underrun\n\nAudioFlinger can miss resuming h/w on a pause-\u003eresume transition\nif sufficient data isn\u0027t available\n\nBug: 11358524.\nChange-Id: Ic3c75256290d3515fd4a96dfcc900909fbe5bc15\n"
    },
    {
      "commit": "8d6c292a0bed3d63b5b7297d09a604af6327c663",
      "tree": "344c2297ed00e1e10998490bc4e2f00358536133",
      "parents": [
        "9ff25ced1404c896df9e6ed3a6ad289305559361"
      ],
      "author": {
        "name": "Krishnankutty Kolathappilly",
        "email": "kkolat@codeaurora.org",
        "time": "Tue Feb 04 16:23:42 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 17 18:30:13 2014 -0700"
      },
      "message": "audioflinger: Handle pause /resume in stopping state\n\n-Pre-requisite:\n Perform seek on the clip. After seek the data remaining till EOS\n is little more than the driver and common block buffering.\n-Framework state:\n Offload thread is waiting for signal from the HAL for a free\n buffer. Audio Player calls sink stop on reaching EOS. Audio\n track is waiting on obtain buffer for a free space in common\n block to send the last buffer. The track is moved to stopping\n state as input EOS is reached.\n-Issue:\n Perform pause/ resume in this state(STOPPING), Audio playback\n does not resume.\n-Fix\n Ensure resume is called in stopping state if frames ready is\n greater than zero.\n\nBug: 12870871\n\nChange-Id: Ib1378c4ee5ce4bea655691e93de0775f7b1d2804\nSigned-off-by: Glenn Kasten \u003cgkasten@google.com\u003e\n"
    },
    {
      "commit": "15e5798908ccac14e10c84834eaf08c42931bd06",
      "tree": "a5f72fd4a8d0a73477d88cef7161a97d3754665c",
      "parents": [
        "570f633e0b02d1bc25f3312b92e72cc29a40ca38"
      ],
      "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": "Fri Mar 14 14:49:37 2014 -0700"
      },
      "message": "Make error handling for audio driver initCheck more similar\n\nChange-Id: I8222f00f7ac89d52235af0f64f3fee7a8c471e1e\n"
    },
    {
      "commit": "c3df838434b37d8400eea2438083cc01a4c1cc71",
      "tree": "ecd066c03170c4dd2afae2d7247b6aafd4957fe2",
      "parents": [
        "05997e21af6c4517f375def6563af4b9ebe95f39"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:05:25 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:36 2014 -0700"
      },
      "message": "Replace if/else by switch\n\nChange-Id: Ibe96c8fb1f0ba7f850c0561f60769ce63aceba5d\n"
    },
    {
      "commit": "05997e21af6c4517f375def6563af4b9ebe95f39",
      "tree": "6a0892e14e34751cd10e11f6f73e92401f540505",
      "parents": [
        "0e0e846f3d86906ff990025981e514d6bcf44d8e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:08:33 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:36 2014 -0700"
      },
      "message": "Whitespace and comments\n\nChange-Id: I99752cca74a459c4746ea4718acb0115439e50bd\n"
    },
    {
      "commit": "5b10a2037a835e790994b9ebec3c2e55052f1f3b",
      "tree": "f886a67e0d6ae5f9d6d192b76fab7e4bfaa2209a",
      "parents": [
        "010a1a1a552cdaad362cea8a0333b8906402dbcb"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 13 13:59:29 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 13 15:39:43 2014 -0700"
      },
      "message": "Fix Offload playback in AudioFlinger\n\nThis fixes Offload playback regression introduced by adding\nflexible format to mSinkBuffer.  Test case is AAC file playback.\n\nBug: 13450717\nChange-Id: I0fa11978295ed4793be90c565e5b8abedf156914\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "010a1a1a552cdaad362cea8a0333b8906402dbcb",
      "tree": "d2f450bd5cecda7ce63e89d9f36b5877933115ad",
      "parents": [
        "e2a9c29f35e0c09782558542fc4cf9823779590e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 13 13:57:33 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 13 13:57:33 2014 -0700"
      },
      "message": "Revert \"Revert \"Convert AudioFlinger mSinkBuffer to flexible format\"\"\n\nThis reverts commit e2a9c29f35e0c09782558542fc4cf9823779590e.\n"
    },
    {
      "commit": "e2a9c29f35e0c09782558542fc4cf9823779590e",
      "tree": "31a860f1236fa1060cd66e375bbab8e9718ed365",
      "parents": [
        "fca092d953e04c7169242200f0ddb914a9f54ea4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 13 10:44:14 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 13 10:46:49 2014 -0700"
      },
      "message": "Revert \"Convert AudioFlinger mSinkBuffer to flexible format\"\n\nThis reverts commit e7e676fd2866fa4898712c4effa9e624e969c182.\n\nBug: 13450717.\nChange-Id: Ib80b0d14428fecce33c62003a1fcf83f71cee03b\n"
    },
    {
      "commit": "e7e676fd2866fa4898712c4effa9e624e969c182",
      "tree": "e34f072392608660e29684f42d43bad6a179ea37",
      "parents": [
        "98ef978df4e928f486d244c4d7f7ad9f13111e98"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 04 16:01:44 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 10 14:20:55 2014 -0700"
      },
      "message": "Convert AudioFlinger mSinkBuffer to flexible format\n\nChange-Id: I618d9c99a5f6f8c8d6a9f4b2d19e82c9ddc3b06e\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "98ef978df4e928f486d244c4d7f7ad9f13111e98",
      "tree": "3ea9f5800c87d0b52ae07fdb6be2b231d827558a",
      "parents": [
        "07c34a59fee02ab0732e84a2e2ff3b928de50ebc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 04 14:46:50 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 10 11:48:49 2014 -0700"
      },
      "message": "Add mEffectBuffer to AudioFlinger\n\nChange-Id: Icf97c50040bc127723d56eb4d2fb6e790a7253d9\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "f69f9869514730aebe5724c461768507084dfff7",
      "tree": "0f14d23d8b7a26669317bb29055301a473821f2e",
      "parents": [
        "8eec77066635c30b8ddce79cf9433357cf3afa1a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 07 08:37:57 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 07 08:39:09 2014 -0800"
      },
      "message": "NBAIO::Format_from_SR_C requires audio_format_t parameter\n\nChange-Id: I4b65f6ed2f6ca3608b3a5f88f52a93af0b9b1f4a\n"
    },
    {
      "commit": "55fbfbbbf00722dac3f789be69138445b771a1e1",
      "tree": "8b93cb3b1acbfdf93e6b17290248a47c72a5932b",
      "parents": [
        "950de3100455b389fc53cc2030571162b9872424",
        "e842614837e5401adf77e90485300c288b9a7876"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 06 19:17:01 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 06 19:17:02 2014 +0000"
      },
      "message": "Merge \"Use larger capture pipe since we support resampling by 6:1\""
    },
    {
      "commit": "788207057ed4b8df4719ed8089f376ef52de9ca1",
      "tree": "63659b6151de243ea608add08c3f5d2963c1bd3e",
      "parents": [
        "7ed1873acbf43280c5afe51833c3d628fe34e258"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 28 16:23:02 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Mar 01 04:20:18 2014 +0000"
      },
      "message": "Rename mSinkFormat to mMixerFormat for AudioMixer::track_t\n\nAudioMixer::SINK_FORMAT also changes to AudioMixer::MIXER_FORMAT\n\nChange-Id: Ic3f8be77d2c75c082c4fd140bc907e30c304d285\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "e842614837e5401adf77e90485300c288b9a7876",
      "tree": "55f16374f804e52c4b2c07b248118f7fbf00fee5",
      "parents": [
        "b442921146664fba77b91f221e9b1997ffb8170e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 28 16:45:03 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 28 16:45:45 2014 -0800"
      },
      "message": "Use larger capture pipe since we support resampling by 6:1\n\nThis avoids overruns on the client AudioRecord side,\nwithout requiring client to use a large buffer.\nIt should not increase input latency, since a newly started AudioRecord\nalways joins the stream starting at the latest data.\n\nChange-Id: Ib2b8de75cc40a6a3d493a1f8b46b41220f69264f\n"
    },
    {
      "commit": "69aed5f0f4a3be3996d1e78a0473e1a72c1547da",
      "tree": "fd8fcfcc236538dd9ef08f515e628b263933ee66",
      "parents": [
        "25c2dac12114699e90deb1c579cadebce7b91a97"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 25 17:24:40 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 18:45:57 2014 -0800"
      },
      "message": "Add MixerBuffer for accumulation of float audio\n\nPath into and out of MixerBuffer is set up, but not\ncurrently enabled.\n\nChange-Id: I9d50752607d22dd2a3d9cc7e053babf8dfb22958\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "25c2dac12114699e90deb1c579cadebce7b91a97",
      "tree": "bf71e59bf7a5286a0d28fb6ca111decafcf6fc57",
      "parents": [
        "09a5007b17acb49d25cfa386a2e2534d942e8854"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:56:00 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:57:59 2014 -0800"
      },
      "message": "Rename mixBufferSize to mSinkBufferSize in AudioFlinger\n\nChange-Id: I4d1d18d716fa3ad8c0e7cc87f5a2823422f504eb\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "09a5007b17acb49d25cfa386a2e2534d942e8854",
      "tree": "f2b15d896dc0f0a55aac0ee20c5c635391d4f567",
      "parents": [
        "2098f2744cedf2dc3fa36f608aa965a34602e7c0"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:30:47 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:30:47 2014 -0800"
      },
      "message": "Rename constants for MixBufferSize to SinkBufferSize\n\nUpdated variable names are\nkMinNormalSinkBufferSizeMs\nkMaxNormalSinkBufferSizeMs\n\nChange-Id: I91969eae3f8c10275db8778634cbf05fdec0712b\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "2098f2744cedf2dc3fa36f608aa965a34602e7c0",
      "tree": "901ba9039b8baa3b33c82871e32430decceaac38",
      "parents": [
        "4d3c5bde85c5404d7927a770da90a5c9d09fb6a7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:00:06 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:22:08 2014 -0800"
      },
      "message": "Rename mMixBuffer to mSinkBuffer in AudioFlinger\n\nChange-Id: I1f55630425b8ce36e9df2aaf64e06a8960b69a47\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "323da1015a758243c2c43017b026a01c6cf0c6f2",
      "tree": "232f6e026dc93462d88d3d92512c47d78b2c5e37",
      "parents": [
        "d0e0cfa58a35508c14818b88804845194b5d80e1",
        "607fa3e928de696eba49f198af72d68e4591ca1b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Feb 22 00:45:23 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Feb 22 00:45:24 2014 +0000"
      },
      "message": "Merge \"Account for unreleased frames when predicting resampler needs\""
    },
    {
      "commit": "607fa3e928de696eba49f198af72d68e4591ca1b",
      "tree": "b2f149fb51148485b509f134d2badb71e9a3c6e4",
      "parents": [
        "56df9ff31d583ad3eae4f279a3df550273c58e1e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 21 14:24:58 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 21 15:04:19 2014 -0800"
      },
      "message": "Account for unreleased frames when predicting resampler needs\n\nOther changes related to resampling:\n - improve logs\n - use correct form of assert\n - don\u0027t round up max usable circular buffer sizes to power of 2;\n   this gives more predictable results\n - add some FIXMEs\n\nBug: 13133176\nChange-Id: I8d3c90eed4eb0c0c1fbac3c864e179a2806c2301\n"
    },
    {
      "commit": "8ea16e4b0a7d398d26887c18675b3899de5d779d",
      "tree": "7bb7efa2106401a375cfe8874b6f4bb03dfdfb28",
      "parents": [
        "56df9ff31d583ad3eae4f279a3df550273c58e1e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 20 16:26:11 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 20 16:26:11 2014 -0800"
      },
      "message": "audioflinger: fix race condition in SyncEvent callback\n\nNow that the SyncEvent callback is implemented by the\nRecordTrack instead of the RecordThread, there is a possibility\nthat the callback is called after the track deletion.\n\nSyncEvent callback now uses a weak pointer instead of\na raw pointer as cookie. This allows the callback implementer to\nacquire a strong reference on the object pointed to by the cookie.\n\nBug: 13114128.\nChange-Id: Id61b8f06044ed1e52c6f7e7c666cdede68340de2\n"
    },
    {
      "commit": "4cc0a6a835c806d200ef83ef31fe5bef327c355c",
      "tree": "2ad9fe27444e838f08acbae31d54cf4d1739b4a5",
      "parents": [
        "25f4aa83efaa9179e65a20583a6d441de2c3ff3f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 17 14:31:46 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:57:27 2014 -0800"
      },
      "message": "Multi-client recording continued\n\nRemove mReqChannelCount and mReqSampleRate.\nIncrease number of input frames needed for sample rate converter.\nAdd TODO comments to investigate later.\nFix bugs in sample rate conversion.\n\nChange-Id: I3aa54b862843d518b6e4ece9a7f52fd27d741629\n"
    },
    {
      "commit": "25f4aa83efaa9179e65a20583a6d441de2c3ff3f",
      "tree": "996653f52a07bb6dc99d058943f852f3182ea637",
      "parents": [
        "deca2ae0a7cf8bc54ff3f30b7dc39bbc78b94c0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 10:50:43 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:56:13 2014 -0800"
      },
      "message": "Move handleSyncStartEvent and clearSyncStartEvent to RecordTrack\n\nChange-Id: I611a63e63acf3eb17e2072c1a77b91fe9e62e36a\n"
    },
    {
      "commit": "deca2ae0a7cf8bc54ff3f30b7dc39bbc78b94c0d",
      "tree": "6c49429a735e24799b735c6f5488d67d3321afc2",
      "parents": [
        "6dd62fb91d82dedcfa3ab38c02eb0940b4ba932a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 10:25:56 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:56:13 2014 -0800"
      },
      "message": "Add _l suffix to readInputParameters/OutputParameters\n\nThey are always called while thread mutex is locked,\nor in the thread constructor.\n\nChange-Id: I56df71563a52a5cd6cea6fc0914df993519e1b74\n"
    },
    {
      "commit": "6dd62fb91d82dedcfa3ab38c02eb0940b4ba932a",
      "tree": "5c463a944686864894c2be528a52df9d275dd221",
      "parents": [
        "f3b785ae6ea135115b54ac58cedc12b444483902"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 05 16:35:58 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:52:35 2014 -0800"
      },
      "message": "Multi-client recording\n\nSupports multiple clients both at native sample rate and with resampling.\n\nChange-Id: Icea55b4fd30751761b7debaa3ce016c79e712d8d\n"
    },
    {
      "commit": "1d6fa7af1288b550faabe4ec2cf98684236723db",
      "tree": "a8801ca9a0925ba1faccf17acea4aa78d71a9d29",
      "parents": [
        "b82a9f105f89d6b3684c9f626918042bd8977912",
        "566be7c33fc56ae4c34168ecbee5316374f7e3c5"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 13:47:53 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 13:53:20 2014 +0000"
      },
      "message": "resolved conflicts for merge of 566be7c3 to master\n\nChange-Id: I7b1cc71057b2bd4f771e7bcf508a8c3abd6017ce\n"
    },
    {
      "commit": "377b2ec9a2885f9b6405b07ba900a9e3f4349c38",
      "tree": "b938e1d75a1beefae86244f287ca22f4a277740d",
      "parents": [
        "cdda7bf4d3ca9cad6979374a18dd5be79ea83d80"
      ],
      "author": {
        "name": "Kévin PETIT",
        "email": "kevin.petit@arm.com",
        "time": "Mon Feb 03 12:35:36 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 11:40:06 2014 +0000"
      },
      "message": "Make frameworks/av 64-bit compatible\n\nContains the necessary changes to make frameworks/av build and work\non a 64-bit machine.\n\nSigned-off-by: Craig Barber \u003ccraig.barber@arm.com\u003e\nSigned-off-by: Kévin PETIT \u003ckevin.petit@arm.com\u003e\nSigned-off-by: Ashok Bhat \u003cashok.bhat@arm.com\u003e\nSigned-off-by: Marcus Oakland \u003cmarcus.oakland@arm.com\u003e\n\nChange-Id: I725feaae50ed8eee25ca2c947cf15aee1f395c43\n"
    },
    {
      "commit": "4b76d27d6c4751b31a1cb8ac5e6da1d4b7724a7b",
      "tree": "6267e0bfdad4d8d5c0e8b768629d13f963a7872a",
      "parents": [
        "3523e8c40bc60af0c95d1aa71a51a13d69ec80a2",
        "5a458ede3b7d303723fde4b856532bdc3b94971b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Mon Feb 10 18:17:03 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 10 18:17:03 2014 +0000"
      },
      "message": "am 5a458ede: am 5930e8eb: Merge \"AudioFlinger: Remove code for supporting resampling in fast tracks\"\n\n* commit \u00275a458ede3b7d303723fde4b856532bdc3b94971b\u0027:\n  AudioFlinger: Remove code for supporting resampling in fast tracks\n"
    },
    {
      "commit": "3523e8c40bc60af0c95d1aa71a51a13d69ec80a2",
      "tree": "92a10a14b54f22f8b4af00dd493d6514b585473f",
      "parents": [
        "2ca060c742a47034cea0ad2fb4aa10f0d6b59a09",
        "4e12dadeec10993d2f77cce96600e73ca0dd86e2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Mon Feb 10 18:17:02 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 10 18:17:02 2014 +0000"
      },
      "message": "am 4e12dade: am 4361749d: Merge \"AudioTrack: Never try to use the fast path if resampling is required\"\n\n* commit \u00274e12dadeec10993d2f77cce96600e73ca0dd86e2\u0027:\n  AudioTrack: Never try to use the fast path if resampling is required\n"
    },
    {
      "commit": "9601c6efcb2552960d6f125d073525b581c1b7ec",
      "tree": "3f01719f2e687abdb58e0405413766ce25f6f362",
      "parents": [
        "e175d77bb610675ba2f70f24449189995ddeaf5b",
        "b220884bf3129253cc5bc8d030bc475411ea4911"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Feb 10 17:14:09 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 10 17:14:09 2014 +0000"
      },
      "message": "Merge \"Pretty up audioflinger dumpsys\""
    },
    {
      "commit": "ec95f0e82a680931e9c7c9011dbbd68d5ab484c8",
      "tree": "f3d3a5d02b466a58454a53a034375a02e0ffe1c3",
      "parents": [
        "8497416c40bae877bc67b0ef30bb41a73af54711",
        "cac3daa6332bf6d1f7d26adc4a9915f3d7992dd9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 10 16:07:14 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 10 16:07:15 2014 +0000"
      },
      "message": "Merge \"Use printf format %#x for audio_format_t in logs\""
    },
    {
      "commit": "b220884bf3129253cc5bc8d030bc475411ea4911",
      "tree": "def105f8d0928679900588536f8b1911c3d179fa",
      "parents": [
        "bbbb1e80f461616cd9814de125f95f5b89cf5870"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Feb 07 14:00:50 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Feb 10 08:01:14 2014 -0800"
      },
      "message": "Pretty up audioflinger dumpsys\n\nChange-Id: I57e44b4c36b99f7149542bbcf9645521c6152dfa\n"
    },
    {
      "commit": "4944acb7355b3aa25748fd25945a363a69d65444",
      "tree": "009b66c5edcb85e6974ee9462919fd72fba381c5",
      "parents": [
        "f74f213c0cd0612101e00a73704429dac1a92fe3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 08:39:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 11:22:31 2014 -0800"
      },
      "message": "Fix whitespace\n\nChange-Id: I9add0872030a26933f6b6dad1be299154611cc56\n"
    },
    {
      "commit": "cac3daa6332bf6d1f7d26adc4a9915f3d7992dd9",
      "tree": "806b4634036e26630acbed0f0dac907bec5ca7b5",
      "parents": [
        "010c4c8ec50eb04ece15f792c508a3b869749310"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 09:47:14 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 09:52:20 2014 -0800"
      },
      "message": "Use printf format %#x for audio_format_t in logs\n\nChange-Id: I1c611d1037685d52ccc84efe0fccd6413ec938e9\n"
    },
    {
      "commit": "4c6a433d74d5ae8b9bc0557207e3ced43bf34a25",
      "tree": "d0447045cdae870c774e1b1f617916f059eeaf0f",
      "parents": [
        "7844f679be8d94c5cdf017f53754cb68ee2f00da"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Jan 15 12:31:39 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 06 11:49:51 2014 -0800"
      },
      "message": "AudioFlinger: Offload track transition fix\n\nTrigger state changes in OffloadThread on adding a new offload track.\n\nBug: 12530661\nChange-Id: I95b62764c7ac041d470702e86b951f812eb0e70f\n"
    },
    {
      "commit": "7844f679be8d94c5cdf017f53754cb68ee2f00da",
      "tree": "60b91c8d8d95f49d98b1c35110b6f4fe5498cb62",
      "parents": [
        "0f02f265123b7ef2fd6ac09ff70cde26eb5559ad"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Jan 15 12:32:55 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 06 11:48:22 2014 -0800"
      },
      "message": "AudioFlinger: Modify flush handling for offload path\n\nDo not allow an offload track to directly control the offload thread\nbehavior. OffloadThread can check for any pending flush reporting\nby its active tracks and decide to flush the HW or not.\n\nBug: 12530661\nChange-Id: Ib33f023c942f6c091b618004136b153c38a6eef6\n"
    },
    {
      "commit": "0f02f265123b7ef2fd6ac09ff70cde26eb5559ad",
      "tree": "0f342f9de0606439ead920a5372cc4f9604b86da",
      "parents": [
        "7ca6e73bed1d2e1a928104feb6e9ae92953bfff5"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Sat Jan 11 13:03:57 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 06 11:47:57 2014 -0800"
      },
      "message": "audioflinger: OffloadThread state fix\n\nWhen switching from one offload session to another that\nreuses the same offload output, audio HAL is paused \u0026 flushed in\npreparation for the new track\n\nOffloadThread must reset mHwPaused to allow proper state transitions\nfor the second track. In addition, Offload thread need not\nexplicitly call resume on HAL while handling a flush.\n\nBug: 12530661\nChange-Id: I8173845e1782b5a8b372a82c7d337299a61e0efe\n"
    },
    {
      "commit": "3ce28aa3cb5262775180a8b423cfb4a5670ebc59",
      "tree": "c033ef7bb7e98903661266d30f22259d12f5bc43",
      "parents": [
        "398f21348e5100289f6e5be30c8b5257fa04aaf9"
      ],
      "author": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Wed Feb 05 19:49:05 2014 +0200"
      },
      "committer": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Wed Feb 05 19:56:50 2014 +0200"
      },
      "message": "AudioFlinger: Remove code for supporting resampling in fast tracks\n\nThis isn\u0027t used at the moment.\n\nChange-Id: I4e0fb2af5f7d959dbafd5ddb7defa1c6b8e8636a\n"
    },
    {
      "commit": "7332c37c459f5f382a9e4105d522d1c5a7f6f0b5",
      "tree": "93b9c7de8edcbc21462b25fb8a443cbc366ede93",
      "parents": [
        "2a16afb8dc056877f34124ba5befe75171de930f",
        "03e9e83c47ab4a518da0a1f36b8f702f59221c95"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 05 00:05:44 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 05 00:05:44 2014 +0000"
      },
      "message": "Merge \"audioflinger: Fix for a deadlock in track creation\""
    },
    {
      "commit": "0f11b51a57bc9062c4fe8af73747319cedabc5d6",
      "tree": "3a9156d700b18a53f856ac8ae51a44604af36fe1",
      "parents": [
        "0520e05f9083cf13fa7062629bc6606f4b39f08a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 31 16:18:54 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 03 07:48:43 2014 -0800"
      },
      "message": "Fix unused parameter warnings in audio\n\nChange-Id: I665ba3358dd9502f0adec70d486e7bf8a2e1b0fe\n"
    },
    {
      "commit": "398f21348e5100289f6e5be30c8b5257fa04aaf9",
      "tree": "26fb40e2808e33bcad41a36d263bc26b02f5c62c",
      "parents": [
        "c4eef29af4e306319d8741e0c3ade1ede9a0a2b5"
      ],
      "author": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Fri Jan 31 13:30:15 2014 +0200"
      },
      "committer": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Fri Jan 31 13:30:15 2014 +0200"
      },
      "message": "AudioTrack: Never try to use the fast path if resampling is required\n\nUnless AudioFlinger was built with FAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE\nenabled, AudioFlinger would deny using the fast path (and internally\nfall back to the normal codepath) when it realized that resampling\nwas required. Since the buffer size calculations within AudioFlinger\ndon\u0027t take resampling into account properly (see the calculation\nbelow \"AUDIO_OUTPUT_FLAG_FAST denied\" in audioflinger/Threads.cpp,\njust below the hunk that this patch changes), make sure AudioTrack\ndoesn\u0027t try to use the fast path if resampling is required.\n\nThis removes the possibility to enable\nFAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE in AudioFlinger since it\nAudioTrack now won\u0027t even try to use the fast path for content\nthat requires resampling, regardless of the AudioFlinger configuration.\n\nChange-Id: Icf0f8ad50bf0fdb84657f518c0120aa0535f23f9\n"
    },
    {
      "commit": "745e9a8283b56c7772ee7d72383a3f2e012e1ef9",
      "tree": "281cab68618b85ac31ccb6c3a436229d9d81a1ce",
      "parents": [
        "1bf0eecd2ec6a3b3e29ad2c91bcefda76abef2fe"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 20 17:36:01 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 30 19:37:52 2014 +0000"
      },
      "message": "audioflinger: fix static track end detection\n\nIf a static track is not a fast track,\nprepareTracks_l() must rely on framesReady() to\ndetect end of buffer and remove the track from the active\ntrack list.\nFailing to do so results in the track staying active but\nnot processed by the mixer because in underrun. This leaves the\nmix buffer content uninitialized and causes the effect process\nfunction to accumulate its output onto undefined data.\n\nBug: 12013676.\nChange-Id: Iad72c921fa18d34811abf7d1073890c093a27725\n"
    },
    {
      "commit": "03e9e83c47ab4a518da0a1f36b8f702f59221c95",
      "tree": "6a30fab83e374a28995a02112856be02defbeb7a",
      "parents": [
        "9be49c915852b592a881be3905658e4fc698749d"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Fri Dec 13 15:40:13 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 30 09:21:12 2014 -0800"
      },
      "message": "audioflinger: Fix for a deadlock in track creation\n\nAudioFlinger enters a deadlock (with itself) on trying to free a\nRecordTrack or Track object that failed initialization. Clear this\nbad object from the caller instead.\n\nBug: 12423233\nChange-Id: I926f2beb922a70f6924e593e2bbf1a5b5df85b16\n"
    },
    {
      "commit": "000a4193dd82549192277fd4b9bb571d8a4c262f",
      "tree": "62bb97def825703a634d8a4260431ce5afd68b53",
      "parents": [
        "0eed5ac1a14067d0fd51282e97b43b4fd9121842"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 29 15:17:32 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 29 15:25:32 2014 -0800"
      },
      "message": "audioflinger: fix record thread exit pending check\n\nRecordThread loop must not release the mutex after checking for\nexitPending and before waiting for a new wake up condition.\nThis can happen under the hood when methods like processConfigEvents_l()\nor checkForNewParameters_l() are called. So exitPending() must\nbe checked after calling these functions.\n\nBug: 12787961.\nChange-Id: Ia18c518bd5344fbb2401067303fcfe76a86879c4\n"
    },
    {
      "commit": "f0002d142e6d24c5438600b2c259679de710f8ac",
      "tree": "20e5013fa14f2d5339868c1b08396f7b852a2123",
      "parents": [
        "c69b91ceae6255e41c5413796fb0ed4f7af45b15",
        "74935e44734c1ec235c2b6677db3e0dbefa5ddb8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 24 16:13:50 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 24 16:13:51 2014 +0000"
      },
      "message": "Merge \"Replace control block frameCount_ by explicit in/out parameter\""
    },
    {
      "commit": "0ce5ca5e113d58cbcb7cb48615d6dbbf3fbe7c66",
      "tree": "b5f59ae15e5f5ea59a171f7677e2a8403361f80a",
      "parents": [
        "d0b33f63a9364364a827e77da26b112edf3c4d6e",
        "0cde076ddb283c84c3801a2df4cc3df99bd1577f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 19:15:57 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 17 19:15:57 2014 +0000"
      },
      "message": "Merge \"Cleanup createTrack error handling\""
    },
    {
      "commit": "0cde076ddb283c84c3801a2df4cc3df99bd1577f",
      "tree": "9f1d49f9fc52a5cedea8e0bd14555a70ab5772b0",
      "parents": [
        "a238b9b43a2b8dac60e0fd8700daa6cd4f644547"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 15:06:36 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 17:01:04 2014 -0800"
      },
      "message": "Cleanup createTrack error handling\n\nSimilar to cleanup done earlier for openRecord in this CL:\n    \u003e Change-Id: I84897dd7d30b370640b54e928f230604b873cb68\n\nBug: 10888816\nChange-Id: I804a47f898e0319a60a9bd58906bbb037e45cc25\n"
    },
    {
      "commit": "5f972c031d4061f4f037c9fda1ea4bd9b6a756cd",
      "tree": "f70d82aa480a0cbe854395362aba76fbb58315dc",
      "parents": [
        "5b27ccd67c845aa20a12a1fb58339e7e81e3d536"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 09:59:31 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 14 18:12:46 2014 -0800"
      },
      "message": "AudioRecord::getInputFramesLost() cleanup\n\nFixed bug that if the binder call failed (for example if the\nIAudioFlinger binder is dead), then getInputFramesLost was returning\ngarbage.  Now it correctly returns zero, which is the error value for\nthis method.\n\nThe type declarations for getInputFramesLost were inconsistent:\na mixture of unsigned int, size_t, and uint32_t.  Now it returns uint32_t\neverywhere, which is what the underlying HAL API returns.\n\nAdded a FIXME about the side effect behavior.  This will need review\nfor multi-client.\n\nChange-Id: Ifa2e117a87dbd0c1f2c892a31d1c3dd919bf1a0a\n"
    },
    {
      "commit": "13e4c960ea3db03a43e084fbd85d52aa77f7b871",
      "tree": "e65e5e2050066bcb0dfd97c4d9c1097cab369d1c",
      "parents": [
        "a9fa836ddfcb0cc91d1ff9edeeba4c8b8047bd8a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 20 17:36:01 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 20 17:36:01 2013 -0800"
      },
      "message": "audioflinger: fix static track end detection\n\nIf a static track is not a fast track,\nprepareTracks_l() must rely on framesReady() to\ndetect end of buffer and remove the track from the active\ntrack list.\nFailing to do so results in the track staying active but\nnot processed by the mixer because in underrun. This leaves the\nmix buffer content uninitialized and causes the effect process\nfunction to accumulate its output onto undefined data.\n\nBug: 12013676.\nChange-Id: Iad72c921fa18d34811abf7d1073890c093a27725\n"
    },
    {
      "commit": "74935e44734c1ec235c2b6677db3e0dbefa5ddb8",
      "tree": "dc7bc2c9f496097e95ff36440fcd79886517ba53",
      "parents": [
        "bd72d22097f78f5bd668b223bc8c94e351311e31"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 19 08:56:45 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 20 08:40:55 2013 -0800"
      },
      "message": "Replace control block frameCount_ by explicit in/out parameter\n\nin IAudioFlinger::createTrack and IAudioFlinger::openRecord\n\nChange-Id: I09c644c80e92c8e744b1b99055988a2588b2a83d\n"
    },
    {
      "commit": "c95616357a911e5c1c55873492b05ebfa3cf1894",
      "tree": "fa56f9fbc01da9bfca3814af80c63e7857bfa2fd",
      "parents": [
        "645e43977d3aabc5addab022d772accc32fd5bdc"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Tue Dec 03 21:26:02 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 17 22:05:51 2013 +0000"
      },
      "message": "audioflinger: check for condition before waiting\n\nAsyncCallbackThread must check for any condition that\nhas already been satisfied before waiting.\n\nBug: 11824817\nChange-Id: Ic8c2090d521ecd6a30b76ee75635258d35eb1eff\n"
    },
    {
      "commit": "688ca6330a5e7d072f67a1791e464fa7dec08b72",
      "tree": "876abb6ec32d531ae0f2dd62b5d4d04ed725f9f9",
      "parents": [
        "e175e5ec1636fc638465187f3d5c6166d92388ed",
        "5c474238bc579224ec8f7267d05651b0aa934100"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 17 16:35:48 2013 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Dec 17 16:35:48 2013 +0000"
      },
      "message": "am 5c474238: am 5893736d: am a67c7653: Merge \"Increase kFastTrackMultiplier from 1 to 2\"\n\n* commit \u00275c474238bc579224ec8f7267d05651b0aa934100\u0027:\n  Increase kFastTrackMultiplier from 1 to 2\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": "24a325d6f8c4bbf9330e6ce0c769d46e04266ffc",
      "tree": "55f9c3d43824090cf34a5bf2b1d37ea561b68286",
      "parents": [
        "aef04853de0ce27222cf6250b2ba4fa9fc6a72a8"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Tue Dec 03 21:26:02 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 06 10:49:57 2013 -0800"
      },
      "message": "audioflinger: check for condition before waiting\n\nAsyncCallbackThread must check for any condition that\nwas already been satisfied before waiting.\n\nBug: 11824817\nChange-Id: Ic8c2090d521ecd6a30b76ee75635258d35eb1eff\n"
    },
    {
      "commit": "70aca464f7e39a3b208341f442b6fc2316e17147",
      "tree": "46b6a182d174deace26c5bc5f66ffb4a8b46fd44",
      "parents": [
        "0312b69e65e4c8bf6a0c0757d9100dee3651c16e",
        "481fb67a595f23c5b7f5be84b06db9b84a41a42f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 05 22:49:46 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 05 22:49:46 2013 +0000"
      },
      "message": "Merge \"Add RecordThread media.log and deferred deallocation\""
    },
    {
      "commit": "0312b69e65e4c8bf6a0c0757d9100dee3651c16e",
      "tree": "b318c691cd56a73b151d5c1f1a2f50ae5d50b41a",
      "parents": [
        "a2354479716db40d865c597dc572ea83573caac2",
        "2b806406ac1ec680b6fe3aaa84c54bdc4e43ad8d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 05 22:16:25 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 05 22:16:25 2013 +0000"
      },
      "message": "Merge \"Change mActiveTrack to mActiveTracks vector\""
    },
    {
      "commit": "481fb67a595f23c5b7f5be84b06db9b84a41a42f",
      "tree": "095712959d22a6fdfaa101c262ccad183576cb6d",
      "parents": [
        "84acd489b93e04bea7aab06d8abb024eef2576fd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 30 14:39:28 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 05 13:47:07 2013 -0800"
      },
      "message": "Add RecordThread media.log and deferred deallocation\n\nThis change allows a media.log buffer for RecordThread.\n\nUnlike playback threads which stick around forever, the RecordThread comes\nand goes for every capture session.  This means that the media.log buffer\nfor a RecordThread would disappear too, and so was useless.  Now when a\nthread exits, it\u0027s associated media.log buffer is just marked for deferred\ndeallocation.  It is only actually freed when the memory is needed.\n\nOther changes:\n - Fix bug in unregistering comparison, it was comparing the wrong pointers\n - Increased size of log area so we can log for RecordThread also\n\nChange-Id: If45d4c03a793b86390a0112ec3acc5d41b2e3635\n"
    },
    {
      "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": "866d90595a177f6027e97161781948baebf2aa68",
      "tree": "54df145364f194115ca0e20aef3278c413dc4b85",
      "parents": [
        "b31788687736666e58b852e744a93f772d3f7148",
        "f10ffec18f930d92e1abe9200d60e746831841a7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 02 18:37:46 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Dec 02 18:37:46 2013 +0000"
      },
      "message": "Merge \"Code simplification and movement to prepare for mActiveTracks\""
    },
    {
      "commit": "480acec40aa2d96119530c7d451282af8cf07327",
      "tree": "0160412c560d234672958be9f46a09e422bd10a9",
      "parents": [
        "639512ce33fb19c876b1be68555d83ccda6e7ad7",
        "e75da4004b2c814987aa2adf8a76190f92d99c65"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 22 23:38:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 22 23:38:17 2013 +0000"
      },
      "message": "Merge \"Fix bug in creation of EffectHandle when out of memory\""
    },
    {
      "commit": "04733dbdede313fc5e291070014c1a0641fe6166",
      "tree": "f215383a4f483175e8d2d34939b337ae4558c1f4",
      "parents": [
        "fc2e519dee2ae0a6a309183f936d43beecce6007"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 09:29:56 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 10:15:42 2013 -0800"
      },
      "message": "audioflinger: fix offload write buffer offset\n\nFix current audio HAL write buffer offset calculation\nwhich assumes that the frame size is a multiple of 2.\n\nChange-Id: I0195ed5cfef225a6f114e7dd405a02680bb7254e\n"
    },
    {
      "commit": "2b806406ac1ec680b6fe3aaa84c54bdc4e43ad8d",
      "tree": "b442aec39d3318a85e4eda692ced7fbc877df128",
      "parents": [
        "f10ffec18f930d92e1abe9200d60e746831841a7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 16:37:38 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 17:52:28 2013 -0800"
      },
      "message": "Change mActiveTrack to mActiveTracks vector\n\nThe size of mActiveTracks is still limited to 1 for now.\n\nChange-Id: Ia6b06b25d8c4709f087110ae29c589999407a2a2\n"
    },
    {
      "commit": "f10ffec18f930d92e1abe9200d60e746831841a7",
      "tree": "b4d4bb444323e32eff524a9858ac7147bd1b22eb",
      "parents": [
        "7ae751960d8b31e6e301c18122d1146da8fe5983"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 16:40:08 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 17:52:16 2013 -0800"
      },
      "message": "Code simplification and movement to prepare for mActiveTracks\n\nShare code to acquire wake lock at entry to loop\n\nChange-Id: I01fb645de9417055c0adfc6a4c4011bf22ea4f94\n"
    },
    {
      "commit": "e75da4004b2c814987aa2adf8a76190f92d99c65",
      "tree": "35c6bc8914384e610eba3633a08e2f5e78b062b5",
      "parents": [
        "663c2247b71086e30bfd3192979d1dd7f15c539e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 13:54:52 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 14:51:07 2013 -0800"
      },
      "message": "Fix bug in creation of EffectHandle when out of memory\n\nIf there is insufficient client memory to create the EffectHandle,\nit was returning a handle which would be useless.  Now it correctly\nreports the out-of-memory error back to client.\n\nChange-Id: I894e65d5d17df39383032c1527be6ccd35f578bb\n"
    },
    {
      "commit": "731076cc7857fe322eed018569a2a67f6eac0e54",
      "tree": "1aa3b6cdcd6fde4ac68d632eb0d94b2f3e3a4307",
      "parents": [
        "b4213a1252c23115f3fac77101adb33a9c6b9423",
        "06d6254823b8f7a46690369e57b5f149c94c9f65"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 13:13:41 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 15 13:13:41 2013 -0800"
      },
      "message": "am 06d62548: am d7e59228: audioflinger: do not use raw pointer for tracks\n\n* commit \u002706d6254823b8f7a46690369e57b5f149c94c9f65\u0027:\n  audioflinger: do not use raw pointer for tracks\n"
    },
    {
      "commit": "d7e59228caad3867794d847f6bf163c6495e9506",
      "tree": "f09784ce425a6928c56a932101752b63b21d8f44",
      "parents": [
        "7dae71d606ded1dbc2aa9733c3d98ffac57988f2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 12:02:28 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 12:11:39 2013 -0800"
      },
      "message": "audioflinger: do not use raw pointer for tracks\n\nCommit 9da3d95 surfaced a problem caused by the use of a raw\npointer to a track in offload thread implementation.\n\nPointers to tracks should always be weak or strong pointers.\n\nBug: 11708529.\nChange-Id: Ic48632532d186c9be8261f73cefdf824b9fbbd2b\n"
    },
    {
      "commit": "561879df42b65f44b83c391d78d351e9ad4cb162",
      "tree": "919a28cf4f5c38963f82f8c1ac8c901cdcdc57e5",
      "parents": [
        "b04b25321dd323142eec7c5136c81dea3629cf14",
        "307aa87038017dff8ae1dd0262c0ff87723894d7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 14 08:49:40 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 14 08:49:40 2013 -0800"
      },
      "message": "am 307aa870: am 4215e616: Merge \"audioflinger: fix offload track transition\" into klp-dev\n\n* commit \u0027307aa87038017dff8ae1dd0262c0ff87723894d7\u0027:\n  audioflinger: fix offload track transition\n"
    },
    {
      "commit": "b04b25321dd323142eec7c5136c81dea3629cf14",
      "tree": "99596e465d2fd7d2083613360762c3baac1b25e5",
      "parents": [
        "4f3f5e01208a547e8ea6ff6442a5a33e10748162",
        "b50fa77b2cc7dadae1b8ebb591d42976879ac43c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 14 08:49:39 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 14 08:49:39 2013 -0800"
      },
      "message": "am b50fa77b: am 9f357f31: Merge \"audioflinger: fix offload resume after drain\" into klp-dev\n\n* commit \u0027b50fa77b2cc7dadae1b8ebb591d42976879ac43c\u0027:\n  audioflinger: fix offload resume after drain\n"
    },
    {
      "commit": "9da3d9573a18ffe08365557c706cf52f09118d1c",
      "tree": "c30511f753f1b49d5519ba5249316b12f33bb29a",
      "parents": [
        "1b9f9b134e732a48198e51f16424f330cbf03143"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 19:25:43 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 19:32:36 2013 -0800"
      },
      "message": "audioflinger: fix offload track transition\n\nMake sure that when transitioning from one active\noffloaded track to the next we flush DSP content\nif both tracks are not on the same audio session.\nThis happens when switching between two applications\nplaying the same type of content (e.g MP3, stereo, 44.1).\nIn this case, we reuse the same output thread because the track\nformats are compatible.\n\nBug: 11247103.\nChange-Id: I2b9031591149adeb70766da5e0d21ff2933a37e8\n"
    },
    {
      "commit": "1b9f9b134e732a48198e51f16424f330cbf03143",
      "tree": "b51c0fd76cd949c420404ce221eae0ce9fad597e",
      "parents": [
        "22990fe1ee3531e84dbadb7ff9ffd68d5bbe9060"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 19:10:17 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 19:10:17 2013 -0800"
      },
      "message": "audioflinger: fix offload resume after drain\n\nWhen pausing and resuming during the drain,\nthe drain sequence number shuold not be modified\notherwise the drain callback will be ignored.\nThis causes failure to notify end of stream to audio\nplayer and transition to next song.\n\nBug: 11247103.\nChange-Id: I2a35c5cc3fd6aa667cdd257f9e9cc8715cef5159\n"
    },
    {
      "commit": "579dd27d96497022e534e859c6ebbec675ee07aa",
      "tree": "eaf88af8813d48a52e6ff7094990a04010da228c",
      "parents": [
        "80e4b050774695b63ca82d009c7262c936fcc28f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 08 14:26:14 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 08 14:26:14 2013 -0800"
      },
      "message": "Fix build\n\nChange-Id: I1ecccada22047d9c828152a53ad68b5599ff8827\n"
    },
    {
      "commit": "8594843c15b4722ced39436fe9e64f3e57e7ace4",
      "tree": "9d8e4dcf8cf31ee119abe0872223a416e6418ec0",
      "parents": [
        "d8a1de6204829b0379bbd13042f1450bdb203f2b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 12:09:05 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 08 11:55:36 2013 -0800"
      },
      "message": "Pull HAL reads out of RecordThread resample\n\nPreviously, the resample was indirectly calling HAL read\nfrom within the BufferProvider\u0027s getNextBuffer.  Now the HAL\nread is done ahead of time into a circular buffer,\nand the getNextBuffer just reads out of that memory.\n\nThis change will permit some future planned features.\n\nAlso removed the mono to mono resampling optimization,\nas that optimization will no longer be valid in the future.\n\nChange-Id: I59f5016a2df91078d697c37a7dec2d9d9f44542e\n"
    },
    {
      "commit": "d8a1de6204829b0379bbd13042f1450bdb203f2b",
      "tree": "b7b513a563f76060ec82a73aa9ee9543a391b8db",
      "parents": [
        "2e70b42e2af66f4abb22a95c5d642175c007e256",
        "f551e9961a6f66d63bb57f288c4be01b00725289"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 08 19:19:00 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 08 19:19:00 2013 +0000"
      },
      "message": "Merge \"Channel counts are uint32_t\""
    },
    {
      "commit": "f551e9961a6f66d63bb57f288c4be01b00725289",
      "tree": "1253e7bc4034a35606881fe75e6c22b3a8c602cc",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 18:45:42 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 06 15:49:00 2013 -0800"
      },
      "message": "Channel counts are uint32_t\n\nChange-Id: I5676b6a291b72d7db6326f7eaf6d17588de51b05\n"
    },
    {
      "commit": "09faf14b434bec0d184fecec947e3d750bcc64ff",
      "tree": "a598a00077e6ed9ca33ff3bb71f3b4faae8fa315",
      "parents": [
        "d6fadf0479b489b09b764070974d8a59855ede64",
        "93e471f620454f7de73d190521568b1e25879767"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 06 23:34:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 06 23:34:09 2013 +0000"
      },
      "message": "Merge \"Rename standby methods\""
    },
    {
      "commit": "0699ed950b307663e0f7e01aecdfb505e62df7d6",
      "tree": "2d6ac287cdd321afe7f2fdd8d4fc9f8c55101f12",
      "parents": [
        "44f412a81dcca8f7149d483eeeee9057ad0101cf",
        "b91aa63779ad1ce1846fbc604f9ec935e0c67852"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 06 17:51:46 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 06 17:51:46 2013 +0000"
      },
      "message": "Merge \"Move local declarations to point of first use\""
    },
    {
      "commit": "44f412a81dcca8f7149d483eeeee9057ad0101cf",
      "tree": "029f381c2185dc354032859e9f3b03cdcda57a9f",
      "parents": [
        "7bb88779cdc1a1fe1445d6d1691fb7daac932e74",
        "44dc91554521eaab478674a7f812cb8a4fa4f809"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 06 09:46:53 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 06 09:46:53 2013 -0800"
      },
      "message": "am 44dc9155: am 48b6cd98: Merge \"audioflinger: fix direct output underrun\" into klp-dev\n\n* commit \u002744dc91554521eaab478674a7f812cb8a4fa4f809\u0027:\n  audioflinger: fix direct output underrun\n"
    },
    {
      "commit": "7bb88779cdc1a1fe1445d6d1691fb7daac932e74",
      "tree": "310ce2ff066a39fcb1d0ac72d480d8b48aef3275",
      "parents": [
        "1b3ec0f33cbdcac5e148c23abc5bc4f68d780ed4",
        "e6f35b13567d920af19f0b8dc35f9120b7cf1dc9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 06 17:38:02 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 06 17:38:02 2013 +0000"
      },
      "message": "Merge \"Rename TrackPaused to trackPaused\""
    },
    {
      "commit": "1b3ec0f33cbdcac5e148c23abc5bc4f68d780ed4",
      "tree": "de7124828b0dbd622cf58756508b0d2eb8163316",
      "parents": [
        "65f498e9f5de65135ae1954eca53de81817c8d6c",
        "b2737d0b33c17e408d96d6f9eeaa3381479c94c7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 06 17:13:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 06 17:13:16 2013 +0000"
      },
      "message": "Merge \"Use const more places\""
    },
    {
      "commit": "a23f17ac334ff20a11ee63dd177cb1080e44c483",
      "tree": "e15dc095de74afc97fc509aa855cedf010df6c1e",
      "parents": [
        "5c7ffaed6f04b844c2e4e2024bfb0203ac2233dd"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 05 18:22:08 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 05 18:22:08 2013 -0800"
      },
      "message": "audioflinger: fix direct output underrun\n\nUnderruns on tracks handled by a direct or offloaded\nthreads were not properly reported to the applications\ncausing a failure to automatically recover.\n\nBug: 11535001.\nChange-Id: I7a8696b4d646f78b16710addfe7c108d0dd0038d\n"
    },
    {
      "commit": "93e471f620454f7de73d190521568b1e25879767",
      "tree": "42b6c50f27f85233ba0967619ce8a6eeebe11f3f",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 08:40:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 04 15:48:55 2013 -0800"
      },
      "message": "Rename standby methods\n\nThreadBase::standby() returns the value of mStandby.\n\nRecordThread::standby() \"overrode\" ThreadBase::standby(), but with a\ndifferent meaning and no return value.  This meant you couldn\u0027t\naccess the parent\u0027s class definition within RecordThread.\n\nThis could be confusing, so this CL renames RecordThread::standby()\nto standbyIfNotAlreadyInStandby().\n\nChange-Id: I9196ee12701dd2dccdfaed922af2d7b8e8774676\n"
    },
    {
      "commit": "b91aa63779ad1ce1846fbc604f9ec935e0c67852",
      "tree": "fbb8b1e0094a2399446ce36b686ff4531595bb06",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 08:40:21 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 04 15:34:23 2013 -0800"
      },
      "message": "Move local declarations to point of first use\n\nChange-Id: I8a078386e371caab5174fc07b47f48fb9f21609a\n"
    },
    {
      "commit": "e6f35b13567d920af19f0b8dc35f9120b7cf1dc9",
      "tree": "f70cbfa9c6334248416bae35886cb2cd7fdc2671",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 09:58:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 04 15:33:10 2013 -0800"
      },
      "message": "Rename TrackPaused to trackPaused\n\nChange-Id: I3b38e0c9a6bbb6e18cb5b1f72670139a3071cb8f\n"
    },
    {
      "commit": "b2737d0b33c17e408d96d6f9eeaa3381479c94c7",
      "tree": "212bbe5b52e7c83fad26315c5451e32c0043eecb",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 12:03:11 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 04 15:27:12 2013 -0800"
      },
      "message": "Use const more places\n\nChange-Id: Ibc068d319d6fff26f2d11248e17481d8f7f027e0\n"
    },
    {
      "commit": "1c7258b3c34b5656de92d845f6366a0f3ac1e0c6",
      "tree": "901ca137c788d55098e9bed21772ad4f225e0636",
      "parents": [
        "774eb18c40c3a7da0bc1636a9779f02315ddbad8",
        "4cf799fbbb74de102d34ccb014ba7fbd9bfa5e14"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 31 15:39:14 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 31 15:39:14 2013 -0700"
      },
      "message": "am 4cf799fb: am 5c7ffaed: Merge \"AudioFlinger: fix duplicating thread standby.\" into klp-dev\n\n* commit \u00274cf799fbbb74de102d34ccb014ba7fbd9bfa5e14\u0027:\n  AudioFlinger: fix duplicating thread standby.\n"
    },
    {
      "commit": "2c3740f01acca69c3e0bcc5e01bb0edc51b6777f",
      "tree": "fafcc00b076ae05c67b4cd0d3cd7de406b418c09",
      "parents": [
        "fd4779740ec3e9e865d5514464df26d015354388"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 30 16:57:06 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 30 16:57:06 2013 -0700"
      },
      "message": "AudioFlinger: fix duplicating thread standby.\n\nCommit fd47797 fixing issue 11247103 introduced a regression\nwhere the duplicating thread does not exit standby state as\nexpected. This in turn prevents the tracks sending audio to\nother threads to complete their activity cycle normally.\n\nThe fix conists in clearing mStandby state also in the specialized\nthreadLoop_write() method of DuplicatingThread subclass.\n\nBug: 11451415.\nChange-Id: Ie8a92c819a56a2834ea25fa70a8b7b2125721775\n"
    },
    {
      "commit": "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d",
      "tree": "cc3ae62392a01c054b61af9ef606245854090394",
      "parents": [
        "1dfca7775f0b8352a0fd6cfed1e70075e5fa4e75",
        "7f8f758506a95d6fe5c0e52aa7b5ef82fb18861a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Oct 28 17:18:53 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 28 17:18:53 2013 -0700"
      },
      "message": "am 7f8f7585: am fd477974: AudioFlinger: more fixes for offload audio lost\n\n* commit \u00277f8f758506a95d6fe5c0e52aa7b5ef82fb18861a\u0027:\n  AudioFlinger: more fixes for offload audio lost\n"
    },
    {
      "commit": "fd4779740ec3e9e865d5514464df26d015354388",
      "tree": "11e6523dd9d2d04b6e0d3ea742968c6988646e2c",
      "parents": [
        "9cae217050aa1347d4ac5053c305754879e3f97f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 25 18:10:40 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Oct 28 14:17:22 2013 -0700"
      },
      "message": "AudioFlinger: more fixes for offload audio lost\n\nmStandby being false was not a reliable indication that\nsomething had been written to audio HAL.\n\nConsidering the last track in mActiveTracks vector as the\nlatest activated track was wrong as this is a SortedVector.\n\nBug: 11247103.\nChange-Id: I397d011c5afcdd779def3fe25aaae7669a472cfc\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": "462fd2fa9eef642b0574aa7409de0bde3fec8d43",
      "tree": "65446a138d197f062bf199480b96cca4df560fcf",
      "parents": [
        "f7d89bd79d170be3b299717ac11aff62909314c5"
      ],
      "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 11:13:17 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\nChange-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31\n"
    },
    {
      "commit": "6a7327f110b86613e6e8c7de105c49803acacc1d",
      "tree": "d1d175d63235d698e88ab4b3e24881b5654b70cf",
      "parents": [
        "9138d32050411c04cc45c25094352cf8b6e01df9",
        "6edd8ca5b7e3d169db4314d2b994bc9d48e9e082"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 18 13:03:34 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 18 13:03:34 2013 -0700"
      },
      "message": "am 6edd8ca5: am 6a51d7ed: audioflinger: fix track terminated before playing\n\n* commit \u00276edd8ca5b7e3d169db4314d2b994bc9d48e9e082\u0027:\n  audioflinger: fix track terminated before playing\n"
    },
    {
      "commit": "6a51d7ed7062536ccc892c8850a34ed55cbc8d5c",
      "tree": "95746546a67c27a04a0e5bd82f9760d80ad5f0d9",
      "parents": [
        "dedc7b0fa23c21b525dc8abb572bb8161ad66a9b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 17 18:59:26 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 17 18:59:26 2013 -0700"
      },
      "message": "audioflinger: fix track terminated before playing\n\nWhen a track is terminated before any audio was written,\nwe should not send a drain request to the HAL. The drain\nwill be ignored and we will wait the async callback for ever.\n\nAlso fix a potential deadlock by not deleting a track with the\nthread mutex held: mPreviousTrack changed from a sp to a raw pointer.\n\nBug: 11247103.\nChange-Id: I0a4b47b099204c7c326d45d700234ab8f72d8eae\n"
    },
    {
      "commit": "3278eed31fcf82045ac00dcd549dda5270c88971",
      "tree": "b5a5423ca7a4464afb8f4182dc22b72dcb7c1917",
      "parents": [
        "d5ce2091c7e11c4d869f11f22d8a38a1aedcf3ad",
        "8580679e1780617d978d28a43e932314b86608ce"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Oct 15 05:05:01 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 15 05:05:01 2013 -0700"
      },
      "message": "am 8580679e: am 014e7fa2: Make Audio wakelock names less unique.\n\n* commit \u00278580679e1780617d978d28a43e932314b86608ce\u0027:\n  Make Audio wakelock names less unique.\n"
    }
  ],
  "next": "014e7fa2e90827d911c37bb0ce4d2e10e14d0bb3"
}
