)]}'
{
  "log": [
    {
      "commit": "90e58b1fefc8caf70b34301a92bc86179580b6fc",
      "tree": "c3413197c464b11a3ea8ca846443cc7b15326582",
      "parents": [
        "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:16:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordThread::createRecordTrack_l use flags for fast tracks\n\nLook at client\u0027s request for a fast track in the flags parameter,\nand check whether the request can be satisfied.\n\nChange-Id: I65ddaeb1b85670fe9066076f638bfed0cda01c0d\n"
    },
    {
      "commit": "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2",
      "tree": "a467af6f181bff45e8c1e47284ebbc4d6d3ccead",
      "parents": [
        "eeca32671896739e84050da5992d5f151a1629de"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:14:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordTrack::createRecordTrack_l flags are in/out\n\nThe flags are currently unused, but will be used for requesting a fast\ntrack.  Making flags in/out will allow reporting back up to client that\nthe request is denied.\n\nChange-Id: Ifbee57da3632ce130551065a426577fb97b1a68d\n"
    },
    {
      "commit": "eeca32671896739e84050da5992d5f151a1629de",
      "tree": "d611c0a426354e80345956c945e9381e6137209b",
      "parents": [
        "27f7b2a8fe899565487d8a326676a5f7d0a05a37"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:12:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "IAudioFlinger::openRecord track_flags_t flags is in/out\n\nThis will allow AudioFlinger to tell client it is denying a request.\n\nChange-Id: Iff2be3ad6636371bbda9c9899a283c94620c1f06\n"
    },
    {
      "commit": "f36dbfe3d517e9311be0a4d0fd6658380690e84c",
      "tree": "65768073d7fd288eac6c28f1283589d65fe0cbad",
      "parents": [
        "1a3739169becc850999c3c06db402541119a428c",
        "82aaf94a5b18939e4d790bbc752031f3070704a3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:14:01 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 02 16:14:01 2013 +0000"
      },
      "message": "Merge \"Report underruns for fast tracks also\""
    },
    {
      "commit": "1a3739169becc850999c3c06db402541119a428c",
      "tree": "84762cba8a976b67dca741e8cad5adb2486f0c71",
      "parents": [
        "c5f8c3e5502f3c220fdbb54573608f3b3bd47517",
        "6d4d879037a495f9a4276a6996d1845594ce9090"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Aug 01 12:47:14 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 01 12:47:14 2013 -0700"
      },
      "message": "am 6d4d8790: am b687ff9f: Merge \"Fix mismatched delete/new couple\"\n\n* commit \u00276d4d879037a495f9a4276a6996d1845594ce9090\u0027:\n  Fix mismatched delete/new couple\n"
    },
    {
      "commit": "82aaf94a5b18939e4d790bbc752031f3070704a3",
      "tree": "4e39e32d0ccde726548afcbd81e253d5e316b295",
      "parents": [
        "b08ab81bab9e8cd2e3a7fff02725a387070fd078"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:05:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 09:15:00 2013 -0700"
      },
      "message": "Report underruns for fast tracks also\n\nThis fixes a regression that was introduced earlier\nby commit 9f80dd223d83d9bb9077fb6baee056cee4eaf7e5\ncalled \"New control block for AudioTrack and AudioRecord\".\nThat commit broke underrun reporting for fast tracks.\n\nAlso remove Track::mUnderrunCount, which counted the number of underrun\nevents, and was only used by dumpsys media.audio_flinger.\n\nNow dumpsys media.audio_flinger reports the number of underrun frames,\n\nIsolated underrun-related control block accesses via the proxy, so that\nthe server is not directly poking around in the control block.\n\nThe new proxy APIs are AudioTrackServerProxy::getUnderrunFrames() and\nAudioTrackServerProxy::tallyUnderrunFrames().  getUnderrunFrames() returns\na rolling counter for streaming tracks, or zero for static buffer tracks\nwhich never underrun, but do a kind of \u0027pause\u0027 at end of buffer.\ntallyUnderrunFrames() increments the counter by a specified number of frames.\n\nChange-Id: Ib31fd73eb17cbb23888ce3af8ff29f471f5bd5a2\n"
    },
    {
      "commit": "b08ab81bab9e8cd2e3a7fff02725a387070fd078",
      "tree": "ca39f5da6fd5d654a71472143ee4718855f576d6",
      "parents": [
        "4d74828fc0f6c13d49a36147a4250bcfa8ad0a47",
        "34af02647b387a252fb02bab8e2cb9f7bd9c8abb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 22:40:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 22:40:16 2013 +0000"
      },
      "message": "Merge \"Add resampler comments and fix a typo\""
    },
    {
      "commit": "34af02647b387a252fb02bab8e2cb9f7bd9c8abb",
      "tree": "2e2e6f24d984884746c91704fb054e00e38e5ff0",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 11:52:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 12:01:03 2013 -0700"
      },
      "message": "Add resampler comments and fix a typo\n\nChange-Id: Ie071673875f663de4212eed4a4dff89d51a5a915\n"
    },
    {
      "commit": "d054c32443a493513ab63529b0c8b1aca290278c",
      "tree": "fc68ba259ded1dd4960bee2938a9bcc7c599c9a3",
      "parents": [
        "96f60d8f04432a1ed503b3e24d5736d28c63c9a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 12:59:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:50:48 2013 -0700"
      },
      "message": "Move control block mName to createTrack() output\n\nThis is part of a series of CLs to clean up the shared memory\ncontrol block, by removing any fields that don\u0027t have to be there.\n\nChange-Id: I6e51003a1293b6800258c31b22cff2eba42162e7\n"
    },
    {
      "commit": "96f60d8f04432a1ed503b3e24d5736d28c63c9a2",
      "tree": "083f6224327e0965a925076b3e1aec5636598203",
      "parents": [
        "97252bb0e40a5a9b41f020163393cf6c5da10b7e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 10:21:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:40:17 2013 -0700"
      },
      "message": "Rename control block flags to mFlags\n\nChange-Id: I7b6d31e24531954ab1ecdf3ed56c19433700bd89\n"
    },
    {
      "commit": "97252bb0e40a5a9b41f020163393cf6c5da10b7e",
      "tree": "2730f01323e31639eb85736a20ad0e0cf867876e",
      "parents": [
        "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
        "291bb6d8947c5b0c062f0895d623c529259bfa39"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "message": "Merge \"AudioRecord and HAL input stream must be 16-bit PCM only\""
    },
    {
      "commit": "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
      "tree": "997cd41de1adb829c194f56cf29eb02945666b94",
      "parents": [
        "eced2daaa6c91a3731eef978ce65c6ec319c5e6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 09:45:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:24:03 2013 -0700"
      },
      "message": "Rename control block server to mServer and add comments\n\nChange-Id: Ieabd91acee92d0e84e66fbd358df5282b856306e\n"
    },
    {
      "commit": "a30e75897934da2ce7b1b03bcb4b58e139d3e81e",
      "tree": "78a398fee8ff72494debd7284ce0b43115412ad0",
      "parents": [
        "fa319e6d918b84f93fb5457af5d1cca6421ac517",
        "9fdcb0a9497ca290bcf364b10868587b6bde3a34"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 14:36:19 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 14:36:20 2013 +0000"
      },
      "message": "Merge \"Fix theoretical race using TrackBase::sampleRate()\""
    },
    {
      "commit": "eb144bbbd0b18427562b0d7db5b38e11f9484739",
      "tree": "c9ca9b64b648eef884e088f55c3693c0ddbc9c40",
      "parents": [
        "1bb59258458350af518170558120783bc2f9e61d"
      ],
      "author": {
        "name": "Andrei V. FOMITCHEV",
        "email": "andreix.fomitchev@intel.com",
        "time": "Tue Oct 09 11:33:25 2012 +0200"
      },
      "committer": {
        "name": "David Wagner",
        "email": "david.wagner@intel.com",
        "time": "Tue Jul 30 14:42:08 2013 +0200"
      },
      "message": "Fix mismatched delete/new couple\n\nIn RecordThread::readInputParameters(), mRsmpInBuffer is allocated\nwith new[] and should be freed with delete[] instead of delete.\n\nThis error has been found by valgrind.\n\nChange-Id: I2f947abb658a21a7d1e61eebb99270cb37d2d147\nSigned-off-by: Andrei V. FOMITCHEV \u003candreix.fomitchev@intel.com\u003e\nSigned-off-by: David Wagner \u003cdavid.wagner@intel.com\u003e\nSigned-off-by: Jack Ren \u003cjack.ren@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n"
    },
    {
      "commit": "fa319e6d918b84f93fb5457af5d1cca6421ac517",
      "tree": "2ccff564a324d72c8bd5d872a220f56b26431203",
      "parents": [
        "548efc94813c1dec6e8cf6c085ae41ccb04827f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:17:38 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:20:47 2013 -0700"
      },
      "message": "Remove CC_LIKELY and CC_UNLIKELY where not needed\n\nOnly keep them in performance-sensitive code\n\nChange-Id: Ib257ddd7bc39ce9896997ffae008c524ac743d01\n"
    },
    {
      "commit": "548efc94813c1dec6e8cf6c085ae41ccb04827f1",
      "tree": "620319f408aa2fc988373767cd382572bf32f3a3",
      "parents": [
        "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 29 08:48:51 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Rename RecordThread::mInputBytes to the more generic mBufferSize\n\nThis prepares for using it in PlaybackThreads later\n\nChange-Id: Id90a92aa6372e4b69914b0008cef07296ca5d6a3\n"
    },
    {
      "commit": "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128",
      "tree": "064801660f69f98c8ed48db753902ac141d6bc32",
      "parents": [
        "2314e90eb8de63a7058297817125b94c1eac8019"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:37:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Move members from ThreadBase to PlaybackThread\n\nMove mNormalFrameCount and frameCountHAL(), since they\u0027re not used by\nrecord threads.  Also comment which fields are updated by readParameters().\n\nChange-Id: I5fc0a8a89cc637976f22d49271a5a3e136dab4e1\n"
    },
    {
      "commit": "7f249fa9bcb64da324d19f551943fac7686d221c",
      "tree": "76cc14be9525f53fbf910c00884ebe4b5c9988c9",
      "parents": [
        "ae4b5f93444802632d71ec34373842e6f5febbaa",
        "fad226abd12435dbcd232f7de396f1a097b2bd5f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 21:13:08 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 21:13:14 2013 +0000"
      },
      "message": "Merge \"Use standard name and type for channel mask\""
    },
    {
      "commit": "175f8338e67aae6d0ca420b8f45a5f7cab4394d5",
      "tree": "cea9a9e0eb01e11f87ceb30dbdfdff293ac26513",
      "parents": [
        "5be847c22e7cec35a8b342338541fe1472bfd1a0",
        "d8ea699dc8e7dac58bb32e9cdb31b0758da25817"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 20:24:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 20:24:16 2013 +0000"
      },
      "message": "Merge \"Simplify getParameters()\""
    },
    {
      "commit": "f6ed423af92a56ef54bba23eba883b1f21448b54",
      "tree": "bad2f734e3191cbfa3c72bdeadcd88f5015e6ba8",
      "parents": [
        "2eeca1f8e18106d118f7268cb9d8597539685c5c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:16:27 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 12:43:12 2013 -0700"
      },
      "message": "Treat mChannelCount as uint32_t consistently\n\nmChannelCount was 8-, 16-, or 32-bits\n\nChange-Id: I2cc2fedf3e33144e5c8bbd9894763282d9217f63\n"
    },
    {
      "commit": "2eeca1f8e18106d118f7268cb9d8597539685c5c",
      "tree": "28b2c665c838d4e78265c74c284694f85a77a579",
      "parents": [
        "b59c1ad726b8bdf441f373d0bdc612539769334a",
        "34542acfa25c6413c87a94b6f7cc315a0c496277"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "message": "Merge \"Move local variable declarations to point of first use\""
    },
    {
      "commit": "b59c1ad726b8bdf441f373d0bdc612539769334a",
      "tree": "9f870ae2f9f64f4a01f3c91e95d310db4d9895b7",
      "parents": [
        "3af48e6b28983da8c11d3d7d7fdd2088d881b462",
        "3dcd00dddec86a1c5133083ad7ba2265d49c048c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:59:04 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:59:09 2013 +0000"
      },
      "message": "Merge \"Declare methods in binder opcode order\""
    },
    {
      "commit": "3dcd00dddec86a1c5133083ad7ba2265d49c048c",
      "tree": "0cb9279c20e16d3f059739818b71e9b77c185330",
      "parents": [
        "b283374cbf79dc5a36f1eef0015d7baf8881792e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 10:10:23 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 10:49:59 2013 -0700"
      },
      "message": "Declare methods in binder opcode order\n\nChange-Id: I5f624b7a51ffe1a17a67c056cf984f74e4c56eac\n"
    },
    {
      "commit": "3af48e6b28983da8c11d3d7d7fdd2088d881b462",
      "tree": "9cc0c78c849d44737bf6ccc3cb218f0829b6880a",
      "parents": [
        "b283374cbf79dc5a36f1eef0015d7baf8881792e",
        "35cc4f3127322ad3e3dd1e15e8ae29ff4b4a3af6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:37:58 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:37:58 2013 +0000"
      },
      "message": "Merge \"Remove obsolete mBufferEnd\""
    },
    {
      "commit": "b283374cbf79dc5a36f1eef0015d7baf8881792e",
      "tree": "b2f1680b6c3c3094a50176e234f8f8ca424f0058",
      "parents": [
        "bd4c4fbb3b073e48963185d11a15da1fa18d2e54",
        "9e8fcbcd8efa51d70d1207ff57bfbfe31324287a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:06:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:06:18 2013 +0000"
      },
      "message": "Merge \"Move delete AudioMixer closer to point of re-allocation\""
    },
    {
      "commit": "35cc4f3127322ad3e3dd1e15e8ae29ff4b4a3af6",
      "tree": "ad534d537cd19cdb33fb5068059f3bd726e1f805",
      "parents": [
        "bd4c4fbb3b073e48963185d11a15da1fa18d2e54"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:21:35 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 09:40:24 2013 -0700"
      },
      "message": "Remove obsolete mBufferEnd\n\nChange-Id: I507c6109d66000bb30933ca23b912a1316f55e5e\n"
    },
    {
      "commit": "bd4c4fbb3b073e48963185d11a15da1fa18d2e54",
      "tree": "00ebf9a7c78cd47ca27ca22b072142e3b21e7c04",
      "parents": [
        "afbbc6c5f6bc470d504dcf24ceb3ac21d57fb78d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:21:14 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 09:40:19 2013 -0700"
      },
      "message": "Remove obsolete TrackBase::step(), mStepCount, mStepServerFailed\n\nChange-Id: I6347096f066b8b19451c6472db7b0671f0cf7702\n"
    },
    {
      "commit": "afbbc6c5f6bc470d504dcf24ceb3ac21d57fb78d",
      "tree": "6fc44421938fc9a08c232580f581b89f95259ed3",
      "parents": [
        "420ea49539d23ab305a7b33c0854a7a475493dd4",
        "a8356f663014e7d4c27869629af83d8bb3441e19"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 14:27:55 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 14:27:56 2013 +0000"
      },
      "message": "Merge \"Simplify RecordTrack::stop()\""
    },
    {
      "commit": "420ea49539d23ab305a7b33c0854a7a475493dd4",
      "tree": "d67162f23f49a00a39f701548f6a52a11376d537",
      "parents": [
        "65d30dd9ee498f7b3bfc033735458a6ff399c207",
        "fc38a2e0268b5e531db2975c3a81462a3593c861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Jul 27 00:00:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jul 27 00:00:34 2013 +0000"
      },
      "message": "Merge \"CBLK_OVERRUN, not CBLK_UNDERRUN, is for record threads\""
    },
    {
      "commit": "65d30dd9ee498f7b3bfc033735458a6ff399c207",
      "tree": "e5fa59313d1c9ed9e61622217b92383fccac93eb",
      "parents": [
        "422801c5e9b795105f28e639c4bed5ee3f4e56f3",
        "0fea74cdbc09c1259e08215e2ea90e7988d62df8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 26 23:24:50 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 26 23:24:50 2013 +0000"
      },
      "message": "Merge \"Remove obsolete TrackBase::reset()\""
    },
    {
      "commit": "422801c5e9b795105f28e639c4bed5ee3f4e56f3",
      "tree": "b01bec728cec33edab05f66d8fa2a88fc5533f16",
      "parents": [
        "94ea60f975c3eb7ce6d2a4430538a42a5fc3babd",
        "7fc97ba08e2850f3f16db704b78ce78e3dbe1ff0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 26 21:33:40 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 26 21:33:41 2013 +0000"
      },
      "message": "Merge \"HAL stream format for mixer output threads must be stereo 16-bit PCM\""
    },
    {
      "commit": "a8356f663014e7d4c27869629af83d8bb3441e19",
      "tree": "af015d8d690aaf239b940d0ca65576bd795719c9",
      "parents": [
        "fc38a2e0268b5e531db2975c3a81462a3593c861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:37:52 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:44:51 2013 -0700"
      },
      "message": "Simplify RecordTrack::stop()\n\nChange-Id: Ib959c1e9dc9544d12277ce11bea445118b2e0521\n"
    },
    {
      "commit": "fc38a2e0268b5e531db2975c3a81462a3593c861",
      "tree": "bc9f29a75795ea00e5ab0785ae2b11647acdc1c1",
      "parents": [
        "0fea74cdbc09c1259e08215e2ea90e7988d62df8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:41:19 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:42:26 2013 -0700"
      },
      "message": "CBLK_OVERRUN, not CBLK_UNDERRUN, is for record threads\n\nChange-Id: I8948f76ef4717a423c37cd6ea7db4381636af612\n"
    },
    {
      "commit": "0fea74cdbc09c1259e08215e2ea90e7988d62df8",
      "tree": "45421baddb2bab78c036dba12063e7d70b5b2082",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:34:57 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:39:31 2013 -0700"
      },
      "message": "Remove obsolete TrackBase::reset()\n\nChange-Id: I38100b7e28a12d7af8cb40ae3f4d9cb4a0ebe701\n"
    },
    {
      "commit": "bfb1b832079bbb9426f72f3863199a54aefd02da",
      "tree": "5007d22456776dc77d124be84bcfe8bc4152bbb2",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 07 09:53:42 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "AudioFlinger: offload playback, non-blocking write\n\n- Added specialized playback thread class for offload playback,\nderived from directoutput thread.\nThis thread type handles specific state transitions for offloaded\ntracks and offloading commands (pause/resume/drain/flush..) to audio HAL.\nAs opposed to other threads, does not go to standby if the track is paused.\n\n- Added support for asynchronous write and drain operations at audio HAL.\nUse a thread to handle async callback events from HAL: this avoids locking\nplayback thread mutex when executing the callback and cause deadlocks when\ncalling audio HAL functions with the playback thread mutex locked.\n\n- Better accouting for track activity: call start/stop and release Output\nmethods in audio policy manager when tracks are actually added and removed\nfrom the active tracks list.\nAdded a command thread in audio policy service to handle stop/release commands\nasynchronously and avoid deadlocks with playback thread.\n\n- Track terminated status is not a state anymore. This condition is othogonal\nto state to permitted state transitions while terminated.\n\nChange-Id: Id157f4b3277620568d8eace7535d9186602564de\n"
    },
    {
      "commit": "9e8fcbcd8efa51d70d1207ff57bfbfe31324287a",
      "tree": "43dae12b292fcfe0ab9ed12c57f26a170b16b807",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 10:09:11 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 12:50:26 2013 -0700"
      },
      "message": "Move delete AudioMixer closer to point of re-allocation\n\nNo need to delete AudioMixer before readOutputParameters\n\nChange-Id: Icafa785c9021bbe8d985e4f9527f8fc8c5e62622\n"
    },
    {
      "commit": "7fc97ba08e2850f3f16db704b78ce78e3dbe1ff0",
      "tree": "ada9fda1321150cc75295eece5f7f82e35f0c9f3",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:18:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 12:22:18 2013 -0700"
      },
      "message": "HAL stream format for mixer output threads must be stereo 16-bit PCM\n\nDirect and tunnel output threads can support various HAL stream formats,\nincluded encoded.  But currently there are stereo 16-bit PCM assumptions\nin several places for mixer and duplicating output threads:\n - mMixBuffer and mixBuffer()\n - AudioMixer including resampler\n - FastMixer\u0027s mixBuffer\n - effects\n - NBAIO_Format\n - anywhere FCC_2 is used\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces stereo 16-bit\nPCM in mixer and duplicating threads at the place where the HAL format\nis read.  It was already being checked in checkForNewParameters_l(),\nbut not in readOutputParameters().\n\nChange-Id: Ibe344cc922743da234299097aa1bb1f54795cc9b\n"
    },
    {
      "commit": "d8ea699dc8e7dac58bb32e9cdb31b0758da25817",
      "tree": "6610e00d5fe1cc23c316ed0b0663ec06dede82db",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 14:17:15 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:31:38 2013 -0700"
      },
      "message": "Simplify getParameters()\n\nChange-Id: Iedfeca3cd477d023c350d6d4e6eed874ee467a32\n"
    },
    {
      "commit": "34542acfa25c6413c87a94b6f7cc315a0c496277",
      "tree": "8fdb43eabdcceca8291966fe88d9c37a3864beee",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 11:29:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:21:55 2013 -0700"
      },
      "message": "Move local variable declarations to point of first use\n\nChange-Id: Ideb83dea2c3002651c34fa646753cba598e29e93\n"
    },
    {
      "commit": "fad226abd12435dbcd232f7de396f1a097b2bd5f",
      "tree": "4e5214f8f5b142239a9583e79032b70330fa7c8e",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:19:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 17:49:04 2013 -0700"
      },
      "message": "Use standard name and type for channel mask\n\nFormer name \u0027channels\u0027 was ambiguous with respect to channel count.\n\nChange-Id: I716f792d95a7e0c787d27514ad6e93dbcef8a415\n"
    },
    {
      "commit": "291bb6d8947c5b0c062f0895d623c529259bfa39",
      "tree": "aa527f282bf3523c3692f086e4e088e8e21aa69c",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:23:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 16:03:05 2013 -0700"
      },
      "message": "AudioRecord and HAL input stream must be 16-bit PCM only\n\nCurrently there are 16-bit PCM assumptions in several places for capture:\n - resampler API\n - mRsmpInBuffer and mRsmpOutBuffer\n - RecordThread::threadLoop upmix, downmix, and resampling\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces 16-bit PCM in both\nclient and server at all places where a format is checked.\n\nChange-Id: I08b0570bff626ad0d341804825a72c14e61b4233\n"
    },
    {
      "commit": "01061c1d57700b37fa879217763494cdf94d5c98",
      "tree": "c75bede54ece9d23cb7a04cdfb6cc89066b4fe82",
      "parents": [
        "cb155c8f4bf556b0d37c3596c4dc265ab491152b",
        "4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 22 15:02:08 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 15:02:08 2013 +0000"
      },
      "message": "Merge \"Use AudioSystem::setLowRamDevice() to configure memory\""
    },
    {
      "commit": "cb155c8f4bf556b0d37c3596c4dc265ab491152b",
      "tree": "5b9f53d2c33435c511b010801de6233106497783",
      "parents": [
        "18cf609ca3f20a9da2c7e140088d7557e7479f49",
        "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 22 14:43:59 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 14:43:59 2013 +0000"
      },
      "message": "Merge \"Revert \"Fix Audioflinger crash when TeeSink is enabled\"\""
    },
    {
      "commit": "18cf609ca3f20a9da2c7e140088d7557e7479f49",
      "tree": "0782d67b426a8e4a03721abab2f85878e1f2d0d8",
      "parents": [
        "288abb6fe160dff109dedbf89b227fc2b10a2ee8",
        "1b8ae3d9f3605fab7d14c323f2118ba3c769a42a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 22 14:43:19 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 14:43:20 2013 +0000"
      },
      "message": "Merge \"Fix compile warning\""
    },
    {
      "commit": "1b8ae3d9f3605fab7d14c323f2118ba3c769a42a",
      "tree": "6ef5c082dd187c13cd961261227688e66597028c",
      "parents": [
        "20f4754b7e687d3718a0a0a585f2c9ac22e2567d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 10:32:41 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 10:32:41 2013 -0700"
      },
      "message": "Fix compile warning\n\nChange-Id: I80de4a013dc65eb7c532561438fd10e005354c03\n"
    },
    {
      "commit": "4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61",
      "tree": "c7ed5d9b71f919bf664dd0cb6cbdd1c3de2f9241",
      "parents": [
        "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 14:45:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Use AudioSystem::setLowRamDevice() to configure memory\n\nBug: 9798886\nChange-Id: I9321e3f369f1ed9429ae222e3926ebdeb012b8b0\n"
    },
    {
      "commit": "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5",
      "tree": "0ae0e6c9cce87e880523a92218e549a4e5c81a63",
      "parents": [
        "153b9fe667e6e78e0218ff0159353097428c7657"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 16:09:26 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Revert \"Fix Audioflinger crash when TeeSink is enabled\"\n\nThis reverts commit 84e391686d7eced293913d1d7993721224ee0ba1.\n\nBug: 8834855\nChange-Id: I8211ef5ea5d87d97ada115723df31c8057f38ca8\n"
    },
    {
      "commit": "153b9fe667e6e78e0218ff0159353097428c7657",
      "tree": "360a76911071e362a94af32ccf67ce9619629708",
      "parents": [
        "20f4754b7e687d3718a0a0a585f2c9ac22e2567d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 11:23:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Make AudioFlinger::instantiate() more resilient when called from separate module\n\nBug: 8834855\nChange-Id: I4cd842cdfb09d2aaaaab9df9ac3bec6179709bd3\n"
    },
    {
      "commit": "c6ae3c8a261794fd4445e4e152d1ada074a3f92f",
      "tree": "c8f6493eb0a0f6af812ea5909096cf91818fce05",
      "parents": [
        "ee5e8d3e8dc61f8fb1fa725278d63802074c10c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 09:08:51 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:38:58 2013 -0700"
      },
      "message": "Fix theoretical memory leak in mConfigEvents\n\nChange-Id: I137f70676c8919661e716c33e0dd9c25c2b6285c\n"
    },
    {
      "commit": "ee5e8d3e8dc61f8fb1fa725278d63802074c10c5",
      "tree": "3632e0647c90e1f2e47c7c0e57250240eb49757e",
      "parents": [
        "cff1b2359b8a302f19539c0bc5d25c98a52733fd",
        "3d1982595cb9cb0856841f1f57fbdb4581189e99"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 15:14:16 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 17 15:14:16 2013 +0000"
      },
      "message": "Merge \"Fix indentation\""
    },
    {
      "commit": "3d1982595cb9cb0856841f1f57fbdb4581189e99",
      "tree": "411fe41a4645e65de97c1073fccc6c6ec0e87bbe",
      "parents": [
        "551ababe67ce31778000d52958e53e1c56e1a294"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:20:54 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:20:54 2013 -0700"
      },
      "message": "Fix indentation\n\nChange-Id: Ia28720a7d0fad8cf110c2448b967d5648d42e017\n"
    },
    {
      "commit": "fb1fdc9d6603aa228362e7349451f6455c9849c2",
      "tree": "1caac6c881db81bcfedb596b292ce62ecbaf6a2c",
      "parents": [
        "551ababe67ce31778000d52958e53e1c56e1a294"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:03:19 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:08:15 2013 -0700"
      },
      "message": "Add comments\n\nChange-Id: Ifbf3a46a4183c8abc0feee1c588953ab10303cc1\n"
    },
    {
      "commit": "20ed5f444c149c49d0e599da09e5cec1e5cc6051",
      "tree": "f1c9c66d5572a1daebc9c218aff7399a2a0cac47",
      "parents": [
        "1ab85ec401801ef9a9184650d0f5a1639b45eeb9",
        "ace2378c934b61fbd865b5ade9ff7d0df81dabe3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 03 08:40:51 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 03 08:40:51 2013 -0700"
      },
      "message": "am ace2378c: am f59a4b39: fix scheduling policy service death detection\n\n* commit \u0027ace2378c934b61fbd865b5ade9ff7d0df81dabe3\u0027:\n  fix scheduling policy service death detection\n"
    },
    {
      "commit": "ace2378c934b61fbd865b5ade9ff7d0df81dabe3",
      "tree": "b3146af4726c4a98a245e58ad1941fb7844c6418",
      "parents": [
        "f64bd473e4c500dc54923baac7261e6d2d72daa6",
        "f59a4b393f4844c5bbc8d6212364bdddea33d232"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 03 08:16:46 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 03 08:16:46 2013 -0700"
      },
      "message": "am f59a4b39: fix scheduling policy service death detection\n\n* commit \u0027f59a4b393f4844c5bbc8d6212364bdddea33d232\u0027:\n  fix scheduling policy service death detection\n"
    },
    {
      "commit": "1ab85ec401801ef9a9184650d0f5a1639b45eeb9",
      "tree": "c3a39f141461642c3ac3c7f1370ca679d08d80e6",
      "parents": [
        "8f13428cb29a9b610a9e9a0f5fea437cd2d3f032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 31 09:18:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 02 13:43:24 2013 -0700"
      },
      "message": "Include what is needed\n\nRemove old includes.\nHeader files only include other header files that they directly need themselves.\n\nChange-Id: Ic471386808d9f42ea19ccbd59cb50a5f83a89dd0\n"
    },
    {
      "commit": "f59a4b393f4844c5bbc8d6212364bdddea33d232",
      "tree": "50a7dc8e5ac254ca4f6a40d84980713a8ac30599",
      "parents": [
        "a691ff3c03e38e148bbefed35ebb15e552a12613"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 02 11:15:41 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 02 12:15:10 2013 -0700"
      },
      "message": "fix scheduling policy service death detection\n\nCheck status of transactions to scheduling policy service\nand re-acquire a binder interface in case of DEAD_OBJECT.\n\nBug: 8875559.\nChange-Id: I1e00bd44e2d4723b3ec95d5c31d9652ba08e238a\n"
    },
    {
      "commit": "ad3af3305f024bcbbd55c894a4995e449498e1ba",
      "tree": "2e242d4c49cce9faefc28665c6ee63a2a5da170c",
      "parents": [
        "7919fa2c33b1fa7f5e49b2188d671bfe519c231e"
      ],
      "author": {
        "name": "Richard Fitzgerald",
        "email": "rf@opensource.wolfsonmicro.com",
        "time": "Mon Mar 25 16:54:37 2013 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 27 17:16:24 2013 -0700"
      },
      "message": "Public API changes for audio offload support.\n\nNOTE: this does _not_ include all private member variables added\nto classes as part of offload support. Only public/protected functions\nand stubs functions/variables needed to make the changes buildable.\n\n- isOffloadSupported() added to audio policy service\n    A stub implementation is required to build, this always returns false\n- setParameters() added to IAudioTrack\n    A stub implementation is required to build, this always returns\n    INVALID_OPERATION\n\n- CBlk flag for stream end\n\n- Change AudioSystem::getRenderPosition() to take an audio_output_t\n    so caller can specify which output to query\n\n- Add AudioSystem::isOffloadSupported()\n    This is fully implemented down to the AudioFlinger function\n    AudioPolicyServer::isOffloadSupported() which is just a stub\n    that always returns false.\n\n- Add EVENT_STREAM_END to AudioTrack interface.\n    STREAM_END is used to signal when the hardware has actually finished\n    playing all the data it was sent.\n\n- Add event type enumeration to media player interface AudioSink callbacks\n    so that the same callback can be used to handle multiple types of\n    event. For offloaded tracks we also have to handle STREAM_END and\n    TEAR_DOWN events\n\n- Pass audio_offload_info_t to various functions used for opening outputs,\n    tracks and audio players. This passes additional information about the\n    compressed stream down to the HAL when using offload.\n    For publicly-available APIs this is an optional parameter (for some of\n    the internal and low-level APIs around the HAL interface it is mandatory)\n\n- Add getParameters() and setParameters() API to AudioTrack\n    Currently dummy implementations.\n\n- Change AudioPlayer contructor so that it takes a set of bitflags defining what\n    options are required. This replaces the original bool which only specified\n    whether to use deep buffering.\n\n- Changes to StageFright class definition related to handling tearing-down of\n    an offloaded track when we need to switch back to software decode\n\n- Define new StageFright utility functions used for offloaded tracks\n    Currently dummy implementations.\n\n- AudioFlinger changes to use extended audio_config_t.\n    Fills in audio_offload_info_t member if this info is passed in when\n    opening an output.\n\n- libvideoeditor changes required to add the new event type parameter\n    to AudioSink callback functions\n\n- libmediaplayerservice changes required to add the new event type parameter\n    to AudioSink callback functions\n\nChange-Id: I3ab41138aa1083d81fe83b886a9b1021ec7320f1\nSigned-off-by: Richard Fitzgerald \u003crf@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Eric Laurent \u003celaurent@google.com\u003e\n"
    },
    {
      "commit": "9fdcb0a9497ca290bcf364b10868587b6bde3a34",
      "tree": "95292e5a21adb17ca3d40b0eec8590aab93bb557",
      "parents": [
        "7919fa2c33b1fa7f5e49b2188d671bfe519c231e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 16:11:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 16:11:36 2013 -0700"
      },
      "message": "Fix theoretical race using TrackBase::sampleRate()\n\nIn two places we assumed that TrackBase::sampleRate() would return the\nsame value when it is called twice in the same function.  This is not\nguaranteed; sampleRate() reads from the control block so the return\nvalue could change.  To fix this, only call sampleRate() once and cache\nthe return value to get a consistent value.\n\nThis was only a theoretical race.  In MixerThread::prepareTracks_l()\nit would have no bad effect.  In TimedTrack::getNextBuffer() it could\ncause a real problem, but we don\u0027t currently support dynamic sample rate\nratios for timed tracks.\n\nChange-Id: I8e5c33f0121fc058d1e70c2ab5e9135397d3e0b7\n"
    },
    {
      "commit": "30755ddfd36849a0be87fee5da849f161a45a8a6",
      "tree": "528633c6e06177376f76292888319ed7253328b8",
      "parents": [
        "b3570568b3f37b3f7018257ece53cbc009b91407",
        "d3ac2fc0c5429003f69d161e42bba7e94434ec09"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Jun 20 15:18:16 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 20 15:18:16 2013 -0700"
      },
      "message": "am d3ac2fc0: am f3e21c30: am 60f3f102: Merge \"Prevent AudioCommands being freed before read\"\n\n* commit \u0027d3ac2fc0c5429003f69d161e42bba7e94434ec09\u0027:\n  Prevent AudioCommands being freed before read\n"
    },
    {
      "commit": "d3ac2fc0c5429003f69d161e42bba7e94434ec09",
      "tree": "bdc0b4715050e2f6806d40a6b13774fb75310899",
      "parents": [
        "9c8714daaf6a402abd85557e9b652c86f0df86e4",
        "f3e21c301b8fef49eecf9c716373fcbfbaa47670"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Jun 20 15:16:00 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 20 15:16:00 2013 -0700"
      },
      "message": "am f3e21c30: am 60f3f102: Merge \"Prevent AudioCommands being freed before read\"\n\n* commit \u0027f3e21c301b8fef49eecf9c716373fcbfbaa47670\u0027:\n  Prevent AudioCommands being freed before read\n"
    },
    {
      "commit": "f3e21c301b8fef49eecf9c716373fcbfbaa47670",
      "tree": "105922023f2126487d20b9647188e23a441e8513",
      "parents": [
        "82fc2ca6905978b4f49f2c6bf948a6872575f2cc",
        "60f3f102ba2973cc31e5c7ea00d95bbf19968e8b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Jun 20 15:13:19 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 20 15:13:19 2013 -0700"
      },
      "message": "am 60f3f102: Merge \"Prevent AudioCommands being freed before read\"\n\n* commit \u002760f3f102ba2973cc31e5c7ea00d95bbf19968e8b\u0027:\n  Prevent AudioCommands being freed before read\n"
    },
    {
      "commit": "5fa8c4bf81275d5e1f5ef71bc66fc22e3152eeb0",
      "tree": "e3ca90035d580a1cfe7d786b45a9d31a49da1f76",
      "parents": [
        "132bc5bd1c68aa807a20e1655f009f74433be588"
      ],
      "author": {
        "name": "Christer Fletcher",
        "email": "christer.fletcher@sonymobile.com",
        "time": "Fri Jan 18 15:27:03 2013 +0100"
      },
      "committer": {
        "name": "Henrik Baard",
        "email": "henrik.baard@sonymobile.com",
        "time": "Thu Jun 20 13:36:58 2013 +0200"
      },
      "message": "Prevent AudioCommands being freed before read\n\nWhen AudioCommandThread::threadLoop process AudioCommands it was\npossible for it to delete a command where the posting thread still\nhadn\u0027t read that status from it.\n\nIf a second command signaled the thread loop to continue after it\nhad inserted a new command while the thread loop was actually waiting\nfor the first command to report that it had read the status the\nthread loop would continue and delete the first command.\n\nChanged the wait condition when waiting for the calling thread to\nread status to use command-\u003emCond instead of mWaitWorkCV. This way\nit\u0027s guaranteed that the signal to continue comes from the correct\nthread.\n\nChange-Id: Ia69b48cb4fdfaf8b4c83b56a197fb9f2058a92d1\n"
    },
    {
      "commit": "9f80dd223d83d9bb9077fb6baee056cee4eaf7e5",
      "tree": "79f19f80ebb7978e9bab16e1d9b835849c735592",
      "parents": [
        "9fef8d453b15a91a2b748faac2bfaff713bcf1e1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 18 15:57:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 12 14:33:10 2013 -0700"
      },
      "message": "New control block for AudioTrack and AudioRecord\n\nMain differences between old and new control block:\n - removes the mutex, which was a potential source of priority inversion\n - circular indices into shared buffer, which is now always a power-of-2 size\n\nChange-Id: I4e9b7fa99858b488ac98a441fa70e31dbba1b865\n"
    },
    {
      "commit": "fe9a901a445633e70073b1b91fca3af34d8e8132",
      "tree": "41236b49070c051fb562c5919b827440cc53f610",
      "parents": [
        "d8af57f8c2715dd06f49f6003afa2f41437fefa3",
        "bb35be24239f05f59715960a93cd491a4cd3b4d6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 12 08:47:34 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 12 08:47:34 2013 -0700"
      },
      "message": "am bb35be24: am 7be48189: Merge \"audioflinger: fix effects on direct output threads\" into jb-mr2-dev\n\n* commit \u0027bb35be24239f05f59715960a93cd491a4cd3b4d6\u0027:\n  audioflinger: fix effects on direct output threads\n"
    },
    {
      "commit": "bb35be24239f05f59715960a93cd491a4cd3b4d6",
      "tree": "6ec3a7b0ac19c076d9f201dca1b404b4c1621a7b",
      "parents": [
        "765f99f30fdc18396ce4edc9facbe6632c9b858e",
        "7be48189c0aefb82825a7689d9e1005175570779"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 12 08:46:03 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 12 08:46:03 2013 -0700"
      },
      "message": "am 7be48189: Merge \"audioflinger: fix effects on direct output threads\" into jb-mr2-dev\n\n* commit \u00277be48189c0aefb82825a7689d9e1005175570779\u0027:\n  audioflinger: fix effects on direct output threads\n"
    },
    {
      "commit": "d0107bcd44fe608b0c00a8843d19fb6356c4cb69",
      "tree": "ed820c80ced11b73b1ed88899c182b83b186429f",
      "parents": [
        "ba696bbff88d5627beaa0be95be78ba30138983d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:38:48 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:57:08 2013 -0700"
      },
      "message": "audioflinger: fix effects on direct output threads\n\nPlaybackThread::addTrack_l() uses the assumption that\neffects are attached to a track only if the track accumulation\nbuffer is different from the mixer thread output buffer.\nThis is not true for direct output threads where only one track is active\nan only one buffer is needed.\nThis assumption is an optimization to avoid checking for effect chains with\nthe same session ID each time a track is processed. The optimization\nis not key if only one track is attached to the thread which is the case for\ndirect outputs.\n\nCurrent code fails to increment the active track count in the effect chain\non direct output threads when a track is started thus making the effect\nframework clear the mix buffer and produce silence each time the mixer runs.\n\nThe fix consists in removing the optimization described above.\n\nBug: 9324989.\n\nChange-Id: Id7a6337450ed90d326299c2ce9fc02f4b9e2fa6f\n"
    },
    {
      "commit": "04b035e3ccbf2919e4447c66e6483c11f2889f01",
      "tree": "14d7677a26472c1a8900065caf25654492e78045",
      "parents": [
        "5aefa7b60e4567d789de22068a09f339e88d37d6",
        "d3a5b48a1bc4f5d6ff4472f54f909abaadd5fa39"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 07 08:59:12 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 07 08:59:12 2013 -0700"
      },
      "message": "am d3a5b48a: am 18b46679: Merge \"AudioFlinger: do not cache audio device when 0.\" into jb-mr2-dev\n\n* commit \u0027d3a5b48a1bc4f5d6ff4472f54f909abaadd5fa39\u0027:\n  AudioFlinger: do not cache audio device when 0.\n"
    },
    {
      "commit": "d3a5b48a1bc4f5d6ff4472f54f909abaadd5fa39",
      "tree": "af138bfbb6e96a8d391fde23b596ca432ab3bb5e",
      "parents": [
        "1c540f7d1b04cfd74847587f127b7539c3c15864",
        "18b466790aa0a55ff4282ed8b5e550e58e0444b2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 07 08:57:00 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 07 08:57:00 2013 -0700"
      },
      "message": "am 18b46679: Merge \"AudioFlinger: do not cache audio device when 0.\" into jb-mr2-dev\n\n* commit \u002718b466790aa0a55ff4282ed8b5e550e58e0444b2\u0027:\n  AudioFlinger: do not cache audio device when 0.\n"
    },
    {
      "commit": "7e1139c0377b6806942fb2a043737b3b9cf0ae91",
      "tree": "4058659d99edb14cb95a7b7265db54eb8c6ef867",
      "parents": [
        "62a8f67f33faf19d0ff815672dd19bb71dd0d650"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 06 18:29:01 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 06 18:33:08 2013 -0700"
      },
      "message": "AudioFlinger: do not cache audio device when 0.\n\nAudioFlinger should not cache the audio device\npassed to the audio HAL when it is AUDIO_DEVICE_NONE\nbut keep previous valid selection instead.\n\nBug: 9323399.\nChange-Id: I6f9480e55a21be4115453e6a5eebc5cf2536c476\n"
    },
    {
      "commit": "7c027248e1a4ccd5b22bc4deafb03e2d87ac8f38",
      "tree": "ed6b92a79faa533f7c1156836f00b9dcaec8834d",
      "parents": [
        "8bae43ae86b9942892980c3c01bff5c812b1db7f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 26 14:43:16 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 30 13:40:56 2013 -0700"
      },
      "message": "Consistent whitespace\n\nChange-Id: I118cce68d3b777f9ec9b6bfb70367496422a40f2\n"
    },
    {
      "commit": "61d404efeaaf3ea1b615c160b843ac9f274d0018",
      "tree": "d22a48bed9c849d4b256655aba484a6dd6b542c9",
      "parents": [
        "2a00d1fa9948603d5283fed3152291dab1adcb59"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 20 11:22:20 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 20 16:50:22 2013 -0700"
      },
      "message": "Update to supply correct name for new power manager app ops.\n\nChange-Id: Ia686319509d98a4f467479ea494e8a54f2c1e238\n"
    },
    {
      "commit": "e974c7df1c4a87ced27a773430690a20d208d40e",
      "tree": "e54dacfb7d8a9ce76746c119bc43a50c9675cdf5",
      "parents": [
        "76d1490ad74fc8a682d9534a2e03f3e864cb1702",
        "d60867b24a8f8906aeb751de22b8f2df044b132b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 14 15:02:33 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 14 15:02:33 2013 -0700"
      },
      "message": "am effc08ed: Merge \"Replace obsolete CLOCK_MONOTONIC_HR by CLOCK_MONOTONIC\"\n\n* commit \u0027effc08ed1eb1d55ca13997ec96f72e40a0866394\u0027:\n  Replace obsolete CLOCK_MONOTONIC_HR by CLOCK_MONOTONIC\n"
    },
    {
      "commit": "8df7184c17a6f7f7fa6612b6de30af655f5eb0a7",
      "tree": "6756c75fb3167c07451c1ad975e05f4c267f2eff",
      "parents": [
        "0dbff625c3128962b48f3476ceacb3ac80a3f421"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 10 09:29:51 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 14 14:38:51 2013 -0700"
      },
      "message": "Replace obsolete CLOCK_MONOTONIC_HR by CLOCK_MONOTONIC\n\n(cherry-pick of da1a325bc0a1421f4233e62704da4fab8b0acf7b.)\n\nBug: 8895727\nChange-Id: I29d5dcf8519600fdd2910345449c66a5c1284646\n"
    },
    {
      "commit": "4a434ce11e328ab97b02ca3cc44e920bc82c198b",
      "tree": "b5962d37a5948d6b5b50becd5c4428d8cb41b8ef",
      "parents": [
        "189660fdc736b495fee20d4a83a7d8a3573e4309"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 10 09:29:51 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 14 14:38:51 2013 -0700"
      },
      "message": "Replace obsolete CLOCK_MONOTONIC_HR by CLOCK_MONOTONIC\n\n(cherry-pick of da1a325bc0a1421f4233e62704da4fab8b0acf7b.)\n\nBug: 8895727\nChange-Id: I29d5dcf8519600fdd2910345449c66a5c1284646\n"
    },
    {
      "commit": "b8ef4856ba7c0cd74ce77e0bc855f8b391f46fa7",
      "tree": "6716a8c2851ee36edd8fe6b2cbf12bf96730aecc",
      "parents": [
        "e762be91c3280d837b1d48455cba90459ced7511",
        "da1a325bc0a1421f4233e62704da4fab8b0acf7b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 10 19:08:50 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 10 19:08:50 2013 +0000"
      },
      "message": "Merge \"Replace obsolete CLOCK_MONOTONIC_HR by CLOCK_MONOTONIC\""
    },
    {
      "commit": "da1a325bc0a1421f4233e62704da4fab8b0acf7b",
      "tree": "acf3bfebbaea304675e8666062a8a6d8e598beb4",
      "parents": [
        "1f7d356fa094b975ad2ebf9217be6abba2c70825"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 10 09:29:51 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 10 09:29:51 2013 -0700"
      },
      "message": "Replace obsolete CLOCK_MONOTONIC_HR by CLOCK_MONOTONIC\n\nBug: 8895727\nChange-Id: I0abf6da941965e9e29e232943184dbc72b95d03c\n"
    },
    {
      "commit": "e762be91c3280d837b1d48455cba90459ced7511",
      "tree": "38e44c614bea2a8f819a935527d4442a100741f8",
      "parents": [
        "dfb6ca555f3b77baa3f18c4dbbc20c644778e60f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 09 16:26:45 2013 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 09 16:52:19 2013 -0700"
      },
      "message": "make libaudioflinger symbols visibility hidden\n\nwe export only symbols needed by clients of this library.\nthis saves about 130KB (1/3rd of the lib size)\n\nChange-Id: Id81f3ecb299ee3abc0811915cf6efe87180bf15c\n"
    },
    {
      "commit": "84e391686d7eced293913d1d7993721224ee0ba1",
      "tree": "8771dff60a0c7b6520c820366dfa597810ff1ad4",
      "parents": [
        "8a62761fd7dcc59284ff78f59593172bf80b1c4f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 06 16:06:24 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 06 16:27:25 2013 -0700"
      },
      "message": "Fix Audioflinger crash when TeeSink is enabled\n\nBug: 8834855\nChange-Id: I54665f16d79901970348a8247d9a354da2990f42\n"
    },
    {
      "commit": "831a0055665c3d15ff9c99ad23e5ab2b7346f2ac",
      "tree": "8771dff60a0c7b6520c820366dfa597810ff1ad4",
      "parents": [
        "1a95a7275f8263a4ee7775af57543f80c4d700a0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 06 16:06:24 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 06 16:27:25 2013 -0700"
      },
      "message": "Fix Audioflinger crash when TeeSink is enabled\n\nBug: 8834855\nChange-Id: I54665f16d79901970348a8247d9a354da2990f42\n"
    },
    {
      "commit": "a6560120f96685d7929d535319198485d1d5ccdf",
      "tree": "0253af44cdc42fc828e84953531f36807ebc4f91",
      "parents": [
        "98e099aca2089decdf3486ae216c89766cc252f2",
        "f8197a6a9d9363cb52bb8a2c15c0e5a52064355e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 03 15:39:52 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 03 15:39:53 2013 +0000"
      },
      "message": "Merge \"Remove timing jitter during startup of audio\" into jb-mr2-dev"
    },
    {
      "commit": "4170f515cd6148b952a07fcbe23364f5c76a2d9c",
      "tree": "0253af44cdc42fc828e84953531f36807ebc4f91",
      "parents": [
        "2628bc9d1261c2942f3506baca348ccd71ea9c86",
        "a07f17ca46db04c9d5d9e7d6b2878db59ca2b9ea"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 03 15:39:52 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 03 15:39:53 2013 +0000"
      },
      "message": "Merge \"Remove timing jitter during startup of audio\" into jb-mr2-dev"
    },
    {
      "commit": "c114c6509b7f552e76e55a3502e926436ccfb2d8",
      "tree": "98de74d897c69756c049926296908a694b2acb19",
      "parents": [
        "159ef7310215bdf86f7d64a797cce3ff61951a2c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 25 12:56:18 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 25 12:56:18 2013 -0700"
      },
      "message": "audioflinger: fix duplicating track sampling rate\n\nAdd missing initialization of client proxy sampling rate\nand volumes in OutputTrack constructor.\n\nBug: 8687522\nChange-Id: I813e700315bb97083a63dd32279f1998ac775483\n"
    },
    {
      "commit": "8d2d4932b96632e9eb3af4a3d4000192ef603960",
      "tree": "98de74d897c69756c049926296908a694b2acb19",
      "parents": [
        "7f86d98317843838c4a5248c733bf95f9574fcab"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 25 12:56:18 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 25 12:56:18 2013 -0700"
      },
      "message": "audioflinger: fix duplicating track sampling rate\n\nAdd missing initialization of client proxy sampling rate\nand volumes in OutputTrack constructor.\n\nBug: 8687522\nChange-Id: I813e700315bb97083a63dd32279f1998ac775483\n"
    },
    {
      "commit": "f8197a6a9d9363cb52bb8a2c15c0e5a52064355e",
      "tree": "efad34614c9d7e77ed830768279005004376bbb2",
      "parents": [
        "1e25b79b28e578c43607faf100dcaf4cf068f05a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 12:39:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 14:18:18 2013 -0700"
      },
      "message": "Remove timing jitter during startup of audio\n\nThis fixes a regression introduced recently, that increased timing jitter\nduring the startup of the FastMixer and AudioTrack callback threads.\n\nThe regression was to make requestPriority() asynchronous as a way to\navoid an apparent priority inversion in system_server.  This means that\nthe target thread could run briefly with the initial priority, before\nthe new priority takes effect.\n\nThis change removes the startup jitter for FastMixer, by making the\nrequestPriority() synchronous again for that case.  It doesn\u0027t matter\nthat this restores the priority inversion involving normal mixer thread,\nbecause it happens during startup of both threads.\n\nThe change also removes the startup jitter for the AudioTrack callback\nthread, by having the target thread check whether the requestPriority()\nhas completed yet.  If not, the target thread blocks with a timeout\nuntil the priority boost finishes.\n\nFinally, we now log an error message if the expected priority boost\ndoesn\u0027t happen.\n\nBug: 8698989\nChange-Id: Id590e9a274b70ec1ba85b44a585ee37a22e41cbc\n"
    },
    {
      "commit": "a07f17ca46db04c9d5d9e7d6b2878db59ca2b9ea",
      "tree": "5f35039b1b7ed7518280e9a436536600a5aac5c9",
      "parents": [
        "5e43772296d7c5b8faf4b0ce4efe68778729bc74"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 12:39:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 14:18:18 2013 -0700"
      },
      "message": "Remove timing jitter during startup of audio\n\nThis fixes a regression introduced recently, that increased timing jitter\nduring the startup of the FastMixer and AudioTrack callback threads.\n\nThe regression was to make requestPriority() asynchronous as a way to\navoid an apparent priority inversion in system_server.  This means that\nthe target thread could run briefly with the initial priority, before\nthe new priority takes effect.\n\nThis change removes the startup jitter for FastMixer, by making the\nrequestPriority() synchronous again for that case.  It doesn\u0027t matter\nthat this restores the priority inversion involving normal mixer thread,\nbecause it happens during startup of both threads.\n\nThe change also removes the startup jitter for the AudioTrack callback\nthread, by having the target thread check whether the requestPriority()\nhas completed yet.  If not, the target thread blocks with a timeout\nuntil the priority boost finishes.\n\nFinally, we now log an error message if the expected priority boost\ndoesn\u0027t happen.\n\nBug: 8698989\nChange-Id: Id590e9a274b70ec1ba85b44a585ee37a22e41cbc\n"
    },
    {
      "commit": "727cc2d1b378844474c775e9f42dab672d603ae9",
      "tree": "7c21e54c431ef24d5eb0b27fbdb838f3b9f28eba",
      "parents": [
        "005bb86bd99077283df1968958d5c514a3bfa16a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 16 12:35:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 18 16:25:14 2013 -0700"
      },
      "message": "Use correct pid when running under test harness\n\nThis is a partial fix which addresses one of the root causes of this bug,\nbut only when running under test harness.  It has no effect otherwise.\n\nBug: 8598539\nChange-Id: I87444daef1d76b17544f331e651ba1c87893c381\n"
    },
    {
      "commit": "949a926cadbc961fbb649c91d76d7aee8ea4d7bd",
      "tree": "e90ad4773399fb206886eb236919fa78d7670cd2",
      "parents": [
        "64595e6727c478d3d80c7babbecdb470398f8c42"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 16 12:35:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 18 16:25:14 2013 -0700"
      },
      "message": "Use correct pid when running under test harness\n\nThis is a partial fix which addresses one of the root causes of this bug,\nbut only when running under test harness.  It has no effect otherwise.\n\nBug: 8598539\nChange-Id: I87444daef1d76b17544f331e651ba1c87893c381\n"
    },
    {
      "commit": "a75003e583b7b317951ceca13e44f3fd226012c7",
      "tree": "e4e134db5ac9861d6549a8e85eb3c61fcd274e71",
      "parents": [
        "cb7032acc963e447adbffcf95ee297643d64e0d7",
        "8d480b86ec00396b37a22803fdfe5f7bef3d8e05"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 15 19:07:56 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 15 19:07:57 2013 +0000"
      },
      "message": "Merge \"Workaround: requestPriority() is one-way\" into jb-mr2-dev"
    },
    {
      "commit": "5182337fcf848ca410ae61397752dfb0995067ef",
      "tree": "b1cc72631600a494654247f30b30676f0b944c35",
      "parents": [
        "8f1efee1c17e997af5ea3c46c62b3ae106b18264",
        "9a62391fa187a345a5d1301d4bc0b165c2ea4737"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 15 19:07:56 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 15 19:07:57 2013 +0000"
      },
      "message": "Merge \"Workaround: requestPriority() is one-way\" into jb-mr2-dev"
    },
    {
      "commit": "8d480b86ec00396b37a22803fdfe5f7bef3d8e05",
      "tree": "ee0beafe699756cbc41a9c7592e25670bb0636d8",
      "parents": [
        "5544c66ba0aa789a997b376df503a5ffae425dc7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 11 17:21:41 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 11 17:23:19 2013 -0700"
      },
      "message": "Workaround: requestPriority() is one-way\n\nBug: 8565696\nChange-Id: If5fcdf8593e1ca15bea45217bd683b43a2a106c7\n"
    },
    {
      "commit": "9a62391fa187a345a5d1301d4bc0b165c2ea4737",
      "tree": "16c33be4f98af807815e59b3817fc8d516f0d3ed",
      "parents": [
        "ec77122351b4e78c1fe5b60a208f76baf8c67591"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 11 17:21:41 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 11 17:23:19 2013 -0700"
      },
      "message": "Workaround: requestPriority() is one-way\n\nBug: 8565696\nChange-Id: If5fcdf8593e1ca15bea45217bd683b43a2a106c7\n"
    },
    {
      "commit": "ecba7488c5cceaacef95836b1b476433451e7761",
      "tree": "83245c19c2dda5c557531edb19478056034b5db5",
      "parents": [
        "5544c66ba0aa789a997b376df503a5ffae425dc7"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Apr 09 21:53:49 2013 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Apr 09 21:53:49 2013 -0700"
      },
      "message": "Add liblog\n\nBug: 8580410\nChange-Id: If493d87d60d71be664ad75b140c62acadb75b0d0\n"
    },
    {
      "commit": "da0dc0af0effe9fbfb3ce3187c8472fca2baf3c6",
      "tree": "67aa5a912048834766759d1842f7e54a20f74481",
      "parents": [
        "ec77122351b4e78c1fe5b60a208f76baf8c67591"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Apr 09 21:53:49 2013 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Apr 09 21:53:49 2013 -0700"
      },
      "message": "Add liblog\n\nBug: 8580410\nChange-Id: If493d87d60d71be664ad75b140c62acadb75b0d0\n"
    },
    {
      "commit": "7fd54ff906c69400727fc8e90118a8a0429d7ab2",
      "tree": "025b4ee5d9eeb5937fb645c88e9831637555d068",
      "parents": [
        "8344844311b852ea7321e914642bd9e57e0d5fb0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 03 17:27:56 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 04 14:29:56 2013 -0700"
      },
      "message": "audioflinger: multiple tracks on direct output\n\nFix problems when multiple tracks exist on a direct output\nthread:  when multiple tracks are active, continue to update all\ntrack states but only take into account the last track started\nfor audio HAL volume and mixer state control.\n\nBug 8388941\n\nChange-Id: I57e6757286f41651dda99b11a5449e431812431b\n"
    },
    {
      "commit": "d595b7c858c481a07745674ce2d8a6690e980e74",
      "tree": "d53fe81f7e976b4fbb0b537354243599fc7e57c3",
      "parents": [
        "a9cbef06acb2a422474cbf292debc1f31fcf9c44"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 03 17:27:56 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 04 14:29:56 2013 -0700"
      },
      "message": "audioflinger: multiple tracks on direct output\n\nFix problems when multiple tracks exist on a direct output\nthread:  when multiple tracks are active, continue to update all\ntrack states but only take into account the last track started\nfor audio HAL volume and mixer state control.\n\nBug 8388941\n\nChange-Id: I57e6757286f41651dda99b11a5449e431812431b\n"
    },
    {
      "commit": "d0ebb538599cc25726b856e0f5deeb8215db8c92",
      "tree": "f8b5bfbd9332676485198bca0132bb16bedf404b",
      "parents": [
        "d2c90696403bb3c9e28d7b51d65c9468bdf8e78b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 02 16:41:41 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 02 16:47:13 2013 -0700"
      },
      "message": "audioflinger: add effect config status check\n\nCheck the result of the effect engine configuration command\nand do not attempt to send parameters to, enable, or process\nthe effect if configuration fails.\n\nBug 8512027\n\nChange-Id: I8c78a05d79fba36b1a387aa5cf2700612301ac91\n"
    },
    {
      "commit": "2a9c5cd47159c41051fe7b8366d8205a7d1d5296",
      "tree": "edc049407401de769cc20a228a74f7016fac94e1",
      "parents": [
        "b7c9d61b9d398b272c8138a2c6aace069229ac03"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 02 16:41:41 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 02 16:47:13 2013 -0700"
      },
      "message": "audioflinger: add effect config status check\n\nCheck the result of the effect engine configuration command\nand do not attempt to send parameters to, enable, or process\nthe effect if configuration fails.\n\nBug 8512027\n\nChange-Id: I8c78a05d79fba36b1a387aa5cf2700612301ac91\n"
    },
    {
      "commit": "75d1ef97d9799061be9631b08b56592a7cea6013",
      "tree": "47e6488f95e866c8d1fbbdf1a44b5384a955a17e",
      "parents": [
        "dbda1c852d68fde2e729ff2f8e85a406da73994b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 11 10:58:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 11 10:58:50 2013 -0700"
      },
      "message": "Increase size of statistics buffer\n\nBug: 8354576\nChange-Id: I327e9dc203e09df8abc21e589ce9056540618abd\n"
    },
    {
      "commit": "0d35f7818dedd67844cc90218d5c131a8644f802",
      "tree": "a20ec711dad0a1f5945f62346d14ec8570b90f32",
      "parents": [
        "70369845f8250df4f6f22c336414b4df0a3ce53e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 11 10:58:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 11 10:58:50 2013 -0700"
      },
      "message": "Increase size of statistics buffer\n\nBug: 8354576\nChange-Id: I327e9dc203e09df8abc21e589ce9056540618abd\n"
    },
    {
      "commit": "538f498bbd5a2da51c9037a2689afc97f8bded8f",
      "tree": "1c9197aff7f824310044a6b88148e04c20c85552",
      "parents": [
        "0c57461f2c19f3a271c66f52cf8c9b2a82b13518"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 26 10:40:24 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 05 08:26:50 2013 -0800"
      },
      "message": "Add template class SingleStateQueue\n\nChange-Id: If7e2bc9b2a216524ee9cbb68682e2634933b4973\n"
    }
  ],
  "next": "5c4cc0d99d3b1cb35c5d7c237272ee53142745fb"
}
