)]}'
{
  "log": [
    {
      "commit": "b83d38feeeb88a8a2a6219e1fca2480b5a14fb0d",
      "tree": "7e1392f0427d0300d8140ef0a6c18dc32f393831",
      "parents": [
        "8f7f7ad54c698cb57a2a369cf1ae5b917853917b",
        "a075db4ff9b086ac2885df77bb6da0869293df92"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 26 07:16:37 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 26 07:16:37 2012 -0700"
      },
      "message": "Merge \"IAudioFlinger::createTrack and openRecord flags\""
    },
    {
      "commit": "d12c68ad699ce0ed822a4d4db86e8e02324c6b03",
      "tree": "ffe2a3e44b05ad91acff86224ace0a4e8532e670",
      "parents": [
        "4f5da11df06802856bf526f16563df7d5755f653"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 23 14:04:27 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 23 14:04:27 2012 -0700"
      },
      "message": "Revert \"AudioFlinger does not need libmedia any more\"\n\nThis reverts commit c920dee060ac69684be33210ee44b99a5fc3e8b2"
    },
    {
      "commit": "4f5da11df06802856bf526f16563df7d5755f653",
      "tree": "29cc2e5196553eb5878163342787298351f71a5d",
      "parents": [
        "ab55517549170b0def3d7b625324b6a44b60d5ae"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 22 15:21:35 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 22 15:24:22 2012 -0700"
      },
      "message": "AudioFlinger does not need libmedia any more\n\nChange-Id: Ifd2c61882109ec36ca68072a2bf6506e08c8cf34\n"
    },
    {
      "commit": "c5c49398584f2399af905a931e556ed6e0a29cd4",
      "tree": "0da87ace16edf4a3b992ca9a9934d34b73450ebd",
      "parents": [
        "ccf89b54f973f11082150d02ed957f7e967fbc8b",
        "f99590187e2e3f1cf6f093063170edec269cac5d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 08:29:18 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 08:29:18 2012 -0700"
      },
      "message": "Merge \"Clean up Track constructor\""
    },
    {
      "commit": "ccf89b54f973f11082150d02ed957f7e967fbc8b",
      "tree": "b3446119a9b6c03dcca98d1d9ee31a83adb8acad",
      "parents": [
        "63c1faa8dea7feb90255d31ef2a133d8f2818844",
        "5c94b6c7689a335e26a86e8a0d04b56dc627738e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 08:19:04 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 08:19:04 2012 -0700"
      },
      "message": "Merge \"AudioMixer can be configured for fewer max tracks\""
    },
    {
      "commit": "63c1faa8dea7feb90255d31ef2a133d8f2818844",
      "tree": "973c66b51e7e85b6ea753b5643f7d99c66d82dde",
      "parents": [
        "7153494670bdac8b650cb10b8b1838651e0ca418",
        "17a736c3e1d062d7fc916329eb32aef8935614af"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 07:24:21 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 07:24:21 2012 -0700"
      },
      "message": "Merge \"Update comments\""
    },
    {
      "commit": "7153494670bdac8b650cb10b8b1838651e0ca418",
      "tree": "94c6c21f7100bdb9aefc82bb0c6d77482742a455",
      "parents": [
        "a26ff6f22f4e86d09514c2819237bd9748455018",
        "ea7939a079b3600cab955760839b021326f8cfc3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 07:22:40 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 07:22:40 2012 -0700"
      },
      "message": "Merge \"Whitespace\""
    },
    {
      "commit": "a26ff6f22f4e86d09514c2819237bd9748455018",
      "tree": "e50bf0801eeb218e579448016aa69c548b1c0187",
      "parents": [
        "903626bd3cf03920f2ca8ce8ce5cca2874d5e02d",
        "a03567676e8766828ff970b87e13bc4c97b23473"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 07:21:21 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 07:21:21 2012 -0700"
      },
      "message": "Merge \"new doesn\u0027t fail on Android\""
    },
    {
      "commit": "9a5f413a21b320fea0607e653bc75b1a4f0e7a2e",
      "tree": "4e423f1d508eb65b0df732ba6776316c0597e299",
      "parents": [
        "65b5a46b4387e064d1bfb2ae9e8a1aa523b20f41",
        "f607e2e488ad0438bf6d4a4cd841ba1f902206c7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 20 19:35:53 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Mar 20 19:35:53 2012 -0700"
      },
      "message": "am a48285c4: am 165ee4c5: am 14958e21: Merge \"audioflinger: fix issue with camcorder and A2DP\" into ics-mr1\n\n* commit \u0027a48285c4f22ffc43f1771ebd1ff35dcec48db2c7\u0027:\n  audioflinger: fix issue with camcorder and A2DP\n"
    },
    {
      "commit": "5c94b6c7689a335e26a86e8a0d04b56dc627738e",
      "tree": "05dcb7c6007c923a4f3ef04371e62834940a66b0",
      "parents": [
        "6da08fc33642b832d1cde2e46815a5fd67dd0016"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 17:01:29 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 17:27:10 2012 -0700"
      },
      "message": "AudioMixer can be configured for fewer max tracks\n\nChange-Id: I371b17cef071d083eecf35cd3627a3adff907a33\n"
    },
    {
      "commit": "f99590187e2e3f1cf6f093063170edec269cac5d",
      "tree": "6eebb059b54519d1208ca349e63fc4cf452bc4d5",
      "parents": [
        "6da08fc33642b832d1cde2e46815a5fd67dd0016"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 11:14:37 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 17:15:12 2012 -0700"
      },
      "message": "Clean up Track constructor\n\nThe \u0027thread\u0027 parameter can never be NULL.\nUse constructor initialization list when possible.\nMake more members const.\nOnly put the relevant code under \"if (mCblk !\u003d NULL)\".\nAdd comment about track name leak.\n\nChange-Id: Ib963390a69bed1999638cc982a759edd1d5f4712\n"
    },
    {
      "commit": "ea7939a079b3600cab955760839b021326f8cfc3",
      "tree": "570fb56838735a46a28e28a4f083d763f758ea24",
      "parents": [
        "eb76ff27c13386eb5a2dad73b1a8366f80eb0ff7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 12:56:26 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 17:53:33 2012 -0700"
      },
      "message": "Whitespace\n\nFix indentation, and add blank lines in key places for clarity\n\nChange-Id: I57a0a8142394f83203161aa9b8aa9276abf3ed7c\n"
    },
    {
      "commit": "2ee367e444e7b62e02bde8a2e47603a9ad342c6e",
      "tree": "95649f9b430efcb58ffd0dad50ea44f4ab038eb3",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 17:36:25 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 17:36:25 2012 -0700"
      },
      "message": "Add libmedia_native\n\nChange-Id: I3ac357c78fb89f108d15c6e5b9fa317de0e9fb9a\n"
    },
    {
      "commit": "17a736c3e1d062d7fc916329eb32aef8935614af",
      "tree": "7fb73e48de8641ce6ad7b65fb4204bc60cd3e5f0",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 08:52:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 14:12:01 2012 -0700"
      },
      "message": "Update comments\n\nChange-Id: I327663a020670d0a72ff57bd0b682e2ce0528650\n"
    },
    {
      "commit": "a03567676e8766828ff970b87e13bc4c97b23473",
      "tree": "0bb2f382b1ee44d8c38d5dadf0b45d7962889836",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 10:38:51 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 10:50:57 2012 -0700"
      },
      "message": "new doesn\u0027t fail on Android\n\nChange-Id: I5079a3bf31097dd0807b2d806d5f8d3cff2077ab\n"
    },
    {
      "commit": "a075db4ff9b086ac2885df77bb6da0869293df92",
      "tree": "2496dbf3d7fbb569b843780535bcea450157eb25",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:22:44 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 09:04:23 2012 -0700"
      },
      "message": "IAudioFlinger::createTrack and openRecord flags\n\ncreateTrack and openRecord don\u0027t need the \"old\" flags parameter,\nwhich was either audio_policy_output_t or audio_in_acoustics_t\nshifted left by 16 bits.  But they do need \"new\" flags, which\nare defined by the application use case.  Initially, the only\napplication use case flag is timed output, but others are planned.\n\nFor output, the audio_policy_output_t flags are passed to\nAudioSystem::getOutput, which returns an audio_io_handle_t, and that\nhandle is then passed to createTrack. So createTrack doesn\u0027t need the\nold flags parameter.\n\nFor input, the audio_in_acoustics_t flags are passed to\nAudioSystem::getInput, which returns an audio_io_handle_t, and that\nhandle is then passed to openRecord. So openRecord doesn\u0027t need the\nold flags parameter.\n\nChange-Id: I18a9870911846cca69d420c19fe6a9face2fe8c4\n"
    },
    {
      "commit": "9d7b4c074205609271f61e1a4741ac0c524a1795",
      "tree": "c33b192e00e226495066be24aa9df36212378d72",
      "parents": [
        "7d372bd9a6dd7c2174519a8c575011109a949ebb",
        "4ade00863737a82bb41f289a6a40893ceefca43e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 19 08:34:56 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Mar 19 08:34:56 2012 -0700"
      },
      "message": "am 14958e21: Merge \"audioflinger: fix issue with camcorder and A2DP\" into ics-mr1\n\n* commit \u002714958e21c12f922d7501d32c3bec05109eb342d5\u0027:\n  audioflinger: fix issue with camcorder and A2DP\n"
    },
    {
      "commit": "89d94e79dad032fb18ddc655e6068e4231d3f0aa",
      "tree": "efb718faffa2573a33f203cadfa99f180dbf170c",
      "parents": [
        "083644fee99d23491554484301943e6a7daf262b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 16 20:37:59 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 16 20:37:59 2012 -0700"
      },
      "message": "audioflinger: fix issue with camcorder and A2DP\n\nSome audio HALs do not support well a device selection of 0 (no device)\nreceived on an input stream.\n\nThis can happen because of a problem in the audioflinger code that handles\nthe forwarding of the output device selection to the record thread for use by\nthe pre processing modules that need it. If the output device is 0 (meaning\nno op, which happens when stopping playback over A2DP) audioflinger could not\ndetect it was an output device selection and would forward it to the input\nstream (see AudioFlinger::setParameters() and RecordThread::checkForNewParameters_l().\n\nIssue 6179641.\n\nChange-Id: Idae534521866538e0d12ba259a2834f402a922e2\n"
    },
    {
      "commit": "b12153e36ae5e514d96c77d660b327d1a8f5000f",
      "tree": "fbfe8dc937f925b7075786b969522fb9012ae69b",
      "parents": [
        "6469edeeac6079b118e8f81252116c40574c9841"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 16 11:42:24 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 16 11:51:30 2012 -0700"
      },
      "message": "Add libmedia_native\n\nChange-Id: Ib8cff8abd73723b793f08da99ad59549f219e0e7\n"
    },
    {
      "commit": "49f306f863b14f8bfc3b405ebfd3a2fb2b403c15",
      "tree": "d7c29856e1529b3337e5a2093fa1553c8818a3df",
      "parents": [
        "2f70d9f89a0461cafdbd84a3d8d65062f420d77a",
        "2fd2440d0175ca3e196b01b7541a9e0d4ed9a694"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Mar 15 21:23:24 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 15 21:23:24 2012 -0700"
      },
      "message": "Merge \"Add a new camera open API that allows taking the ownership.\""
    },
    {
      "commit": "2fd2440d0175ca3e196b01b7541a9e0d4ed9a694",
      "tree": "d87e4314688e65f4c53f04021c8452051d4b31eb",
      "parents": [
        "cbcd6e869dd41158076e742a31c1ee410fc0c713"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Feb 23 19:01:00 2012 -0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Mar 15 14:50:48 2012 +0800"
      },
      "message": "Add a new camera open API that allows taking the ownership.\n\nThe purpose is to let face unlock always get the camera\nsuccessfully. What happened was the camera applications may\nhave opened the camera in onResume under the lock screen.\nThis API lets face unlock take the camera from the camera\napplication. A new permission will be added, so other\napplicatoins won\u0027t be able to take the camera from the face\nunlock.\n\nbug:5584464\n\nChange-Id: Ib3d9dcbc2161815b68db42327dc01148453704c6\n"
    },
    {
      "commit": "33b383948e8f270bff30378476f00dce289004eb",
      "tree": "a42eeb76674395b36611da694166ddd4144a0fa8",
      "parents": [
        "dfaf549e3e310bc22444f4404b19f4907b24c286"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 15:59:35 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 16:44:34 2012 -0700"
      },
      "message": "Remove dependency on audio_* location\n\nChange-Id: I4bc66115fcb9ba22b057bd72db3f561dcb18a0d8\n"
    },
    {
      "commit": "dfaf549e3e310bc22444f4404b19f4907b24c286",
      "tree": "645d0b309dc35779259bf948ec26d9b6205a828c",
      "parents": [
        "3b229ed97c0dfc85a8cf881341e29e595e0edea7",
        "190a46f7c84e160386610c0c4cecb9767fb5503b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 16:28:38 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 14 16:28:38 2012 -0700"
      },
      "message": "Merge \"AudioFlinger playback thread CPU measurement in Hz\""
    },
    {
      "commit": "190a46f7c84e160386610c0c4cecb9767fb5503b",
      "tree": "f3e534d11f6444178b04442a94b2dfdefea7c7dd",
      "parents": [
        "e53b9ead781c36e96d6b6f012ddffc93a3d80f0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:27:10 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 16:03:01 2012 -0700"
      },
      "message": "AudioFlinger playback thread CPU measurement in Hz\n\nLog statistics on CPU usage in Hz in addition to wall clock time\n\nUse CPU statistics for all playback threads, not just MIXER\n(but they are disabled by default by a compile-time debug macro).\n\nThreadCpuUsage library:\n - Move statistics out of the library and leave that up to the caller\n - Add API to determine a CPU\u0027s frequency\n\nChange-Id: Ia1011123146e641fcf210ef26e78ae2b4d3b64ad\n"
    },
    {
      "commit": "3b229ed97c0dfc85a8cf881341e29e595e0edea7",
      "tree": "7e0fce33031b6f1c312c8e2bed8a42bfafc5643f",
      "parents": [
        "7734b0297330ab45c114c3d129152b14ffeb26cd",
        "612bbb57c59397a540e96f06bdd16e437a583af5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 14 15:30:05 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 14 15:30:05 2012 -0700"
      },
      "message": "Merge \"audioflinger: more info in dumpsys\""
    },
    {
      "commit": "612bbb57c59397a540e96f06bdd16e437a583af5",
      "tree": "9f8a71b42b3e7cfea724a73035cc41c856fa852d",
      "parents": [
        "27e52c70cf02ee5f7f6b49df80674c5fbf8a7a2e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 14 15:03:26 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 14 15:04:54 2012 -0700"
      },
      "message": "audioflinger: more info in dumpsys\n\nAdded TID and io handle to AudioFlinger threads dump.\n\nChange-Id: Ib1a856f3bad55c73e4c395b5e59d57435f4b9a4c\n"
    },
    {
      "commit": "d3cee2f0f649c01e1153d593cbe723887b8e0ba0",
      "tree": "f8cd7dbe368775e022fb139895a8a35c0c7b95d2",
      "parents": [
        "e53b9ead781c36e96d6b6f012ddffc93a3d80f0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 17:55:35 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 17:55:35 2012 -0700"
      },
      "message": "Break circular dependency on media player service\n\nBug: 6165157\nChange-Id: I3c85bbcaf31f3cb9a009e273f7b6284015eb3bd8\n"
    },
    {
      "commit": "e53b9ead781c36e96d6b6f012ddffc93a3d80f0d",
      "tree": "4bcde0bc9a797851ec1bee4f630c8c4f0735f623",
      "parents": [
        "b87396f9ebabbb7b47683bceca96cbe635a1ca00"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 16:29:55 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 11:09:47 2012 -0700"
      },
      "message": "Whitespace and indentation\n\nFix indentation to be multiple of 4.\nMake it easier to search:\n  sp\u003c not sp \u003c to\n  \"switch (...)\" instead of \"switch(...)\" (also \"if\" and \"while\")\nRemove redundant blank line at start or EOF.\nRemove whitespace at end of line.\nRemove extra blank lines where they don\u0027t add value.\n\nUse git diff -b or -w to verify.\n\nChange-Id: I966b7ba852faa5474be6907fb212f5e267c2874e\n"
    },
    {
      "commit": "fd83fbf5ead098070bae674b20e6f87f45ab5d4c",
      "tree": "943a0945c076afc9536c3ddf96c50475bf9d519e",
      "parents": [
        "aa4397f07c43bd83bc3100b749401dc3d15e7622",
        "5798d4ebf236357a4b13246f40e52b90a34d09a4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 07:16:44 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 13 07:16:44 2012 -0700"
      },
      "message": "Merge \"Clean up assertion checks\""
    },
    {
      "commit": "aa4397f07c43bd83bc3100b749401dc3d15e7622",
      "tree": "44ec13ce56037243854454b25072fcc06e63972b",
      "parents": [
        "73f4bc33e0d458933460250a47c64aa868c05f97"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 18:13:59 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 18:13:59 2012 -0700"
      },
      "message": "Fix bug where mMixerStatus was set to IDLE\n\nChange-Id: I55df1738fb7ba17ba6caeea6a17557526eac17a7\n"
    },
    {
      "commit": "5798d4ebf236357a4b13246f40e52b90a34d09a4",
      "tree": "b9cb82b889bee3c6b32bfa2d2870bd88034b0fdd",
      "parents": [
        "73f4bc33e0d458933460250a47c64aa868c05f97"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 12:18:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 15:56:50 2012 -0700"
      },
      "message": "Clean up assertion checks\n\nUse ALOG_ASSERT instead of assert.\nUse compile-time asserts where appropriate.\nFix typo in an ALOGV.\n\nChange-Id: I58f1c1ffc14319a022c88b5a88b8d0368660da8b\n"
    },
    {
      "commit": "73f4bc33e0d458933460250a47c64aa868c05f97",
      "tree": "556b3eb2a31d5a986ec7213dfac598aa821b2091",
      "parents": [
        "470aa50c36089fbe0427557f7cf4464dd26a1c52"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 12:08:48 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 15:14:24 2012 -0700"
      },
      "message": "Inline applyVolume() into threadLoop_mix()\n\nAlso the declaration of applyVolume in PlaybackThread was dead.\n\nChange-Id: I4b1a9848d07d3d7f340baea05b17f667c78df868\n"
    },
    {
      "commit": "470aa50c36089fbe0427557f7cf4464dd26a1c52",
      "tree": "4daa77f30c176aa51be2337d52e21046b04c1f39",
      "parents": [
        "2d6ef93773465cd3e66146fac35050a472c589f7",
        "1998661fdb6b0b5ae103e047e3d653c5da1b99e3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 15:05:51 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 12 15:05:51 2012 -0700"
      },
      "message": "Merge \"Remove unnecessary friend declarations\""
    },
    {
      "commit": "2d6ef93773465cd3e66146fac35050a472c589f7",
      "tree": "2a4a9d42d5911e3f04712560014671ab742465ca",
      "parents": [
        "0643d428cebcfe885ec2777253d45ee6e05da6fe",
        "688aac7675f18bdd7bff13334759e20bc4e6c390"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 15:05:21 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 12 15:05:21 2012 -0700"
      },
      "message": "Merge \"Remove virtual from methods that don\u0027t need it\""
    },
    {
      "commit": "66fcab972e9218d47c58a915f391b2f48a09903a",
      "tree": "f0c7144368a2371c0032dac6e511d0a711296bae",
      "parents": [
        "d64f3a376536a993fe6d81730b8b7b738500435e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 14:59:21 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 08:58:26 2012 -0700"
      },
      "message": "Merge dup code at thread entry and param change\n\nThis CL is mostly just cleanup, but there are a couple of fixes marked\n\"FIX\" below.\n\nMerge the duplicate code that was at the beginning of threadLoop() and\nafter a parameter change.  cacheParameters_l() is now called at entry to\nthreadLoop() and after any parameter change.  It re-calculates all values\nthat are derived from parameters, and caches them in instance variables.\n\nupdateWaitTime_l():\n - FIX activeSleepTime depends on mWaitTimeMs, which was initially set\n   to infinity.  updateWaitTime_l() was not called at entry to\n   threadLoop(), so activeSleepTime was not set correctly before the\n   first parameter change.\n\n - FIX reversed the order of calls after parameter change\n   for the same reason so that updateWaitTime_l() is called before\n   calculating values that are derived from wait time.\n\n - marked it private since now it\u0027s only called from DuplicatingThread\n\nChange-Id: If2607d2ed66c6893d910433e48208a93c41fb7e9\n"
    },
    {
      "commit": "18868c5db2f90309c6d11e5837822135e4a0c0fa",
      "tree": "58c7505f59a1a93ab729fc039aa5cb1eaa49652e",
      "parents": [
        "f2015b625cd6bea86da7401e725332c35b90e7cf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 09:15:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 15:32:22 2012 -0800"
      },
      "message": "Use audio_policy_output_flags_t consistently\n\nThis affects:\n - IAudioFlinger::openOutput\n - AudioTrack::AudioTrack\n - AudioTrack::set\n - apps that call these\n\nChange-Id: I26fb281bac6cb87593d17697bc9cb37a835af205\n"
    },
    {
      "commit": "d69549665d412f1f6ebad48ad8cd05133ada8728",
      "tree": "2cb31ad125c38af908d483acaf50d52e9aaf9ef8",
      "parents": [
        "887c5d2ac34d81bde66dadbd7b2ff07501744778",
        "53d76dbe7c55821e89d9da02e7a563f7fb45de87"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 13:44:14 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 09 13:44:14 2012 -0800"
      },
      "message": "Merge \"Replace hard-coded 3 by FCC_2 to simplify searches\""
    },
    {
      "commit": "688aac7675f18bdd7bff13334759e20bc4e6c390",
      "tree": "1c210a88c1cff71f1117b54fc347802ee7bdc390",
      "parents": [
        "083c154162c88a9f63aeaa10a4b52dd454bda9ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 10:30:26 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 12:48:18 2012 -0800"
      },
      "message": "Remove virtual from methods that don\u0027t need it\n\nChange-Id: I30e17e61aae25b036436c0e270313c80c43e5f06\n"
    },
    {
      "commit": "1998661fdb6b0b5ae103e047e3d653c5da1b99e3",
      "tree": "bddc97b4c0bfb6c5367f8189a328ac869a8f2759",
      "parents": [
        "083c154162c88a9f63aeaa10a4b52dd454bda9ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 12:07:30 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 12:18:48 2012 -0800"
      },
      "message": "Remove unnecessary friend declarations\n\nAdd comments to the remaining friends, so we know what is left if we\ndecide to remove them later.\n\nChange-Id: I1de929257dc4700960f77902cda3d303177c72cf\n"
    },
    {
      "commit": "083c154162c88a9f63aeaa10a4b52dd454bda9ff",
      "tree": "8301c82a13fbab347ca6057972fff30c1f685fed",
      "parents": [
        "b3dfcf483a96816fe2e949dd86fed26e52ad7404",
        "639dbee79140956c43926344c23af765f6e0c9a5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 07:19:43 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 09 07:19:43 2012 -0800"
      },
      "message": "Merge \"Don\u0027t ask policy manager about invalid stream type\""
    },
    {
      "commit": "b3dfcf483a96816fe2e949dd86fed26e52ad7404",
      "tree": "b059e5d7f968b48c5933d99ffd62fad8d6ff134c",
      "parents": [
        "a19ffb656616feec70613ba67ddfe15a504a4e76",
        "81872a2ce65653ae980621ba2907da56a83ba9a7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 07:19:17 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 09 07:19:17 2012 -0800"
      },
      "message": "Merge \"AudioPolicyService InputDesc minor cleanup\""
    },
    {
      "commit": "a19ffb656616feec70613ba67ddfe15a504a4e76",
      "tree": "4fdde29e9a31aa2ea250b4d2cf2b26bc556d3432",
      "parents": [
        "5e5631bbf2403b8242e77977792318d65362ed91",
        "6374252107fd6539397598195ea6defd5870fafb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 08 17:45:44 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 08 17:45:44 2012 -0800"
      },
      "message": "Merge \"audio policy: use audio_devices_t when appropriate\""
    },
    {
      "commit": "81872a2ce65653ae980621ba2907da56a83ba9a7",
      "tree": "bfddaac17716089daa023ef3a225d04ba01a359a",
      "parents": [
        "f3c2e3bd65449b413c378219e08c71bf744cfbf3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 16:49:22 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 16:30:00 2012 -0800"
      },
      "message": "AudioPolicyService InputDesc minor cleanup\n\nAdd a non-default constructor to set the mSessionId, and make mSessionId const.\n\nRemove explicit clear on mEffects - it is automatically cleared by the destructor.\n\nAudioPolicyService::setPreProcessorEnabled:\n - parameter is const *\n - use an alias instead of making a Vector copy\n\nDestructor doesn\u0027t need to be virtual since there are no subclasses.\n\nChange-Id: Ibc3c3bea8259839430b1cf5356186c7d96f1082f\n"
    },
    {
      "commit": "53d76dbe7c55821e89d9da02e7a563f7fb45de87",
      "tree": "3d1b5bcc6724a00ae58939712be4b28d068225c9",
      "parents": [
        "f3c2e3bd65449b413c378219e08c71bf744cfbf3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 12:32:47 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 16:18:57 2012 -0800"
      },
      "message": "Replace hard-coded 3 by FCC_2 to simplify searches\n\nChange-Id: I92881d04e8378307f849fb343071a58d181a68b4\n"
    },
    {
      "commit": "6374252107fd6539397598195ea6defd5870fafb",
      "tree": "ab13f5d0fd4aeaee695d58d7f8f4723d923754ae",
      "parents": [
        "f2eda12fb968829ee6f67e9b45e01eb4e2105c09"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 08 13:42:42 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 08 15:57:09 2012 -0800"
      },
      "message": "audio policy: use audio_devices_t when appropriate\n\nChange-Id: I1b3a5879e81c789fb53d356af3d3a1ee2dca955f\n"
    },
    {
      "commit": "fec279f5a0bfaa2a42e91ab6dfa0282baeee308b",
      "tree": "8ab1678442af7a516a6d12d34c42e2a3d43a7dd6",
      "parents": [
        "3dbe8acdeb2309eab0c22dd1c8d732c7e94d3413"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 07:47:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 07:52:57 2012 -0800"
      },
      "message": "Mixer status cleanup\n\nUse mPrevMixerStatus for DirectOutputThread also.\nRemove the MIXER_CONTINUE logic and use MIXER_IDLE instead.\nRename the field mixerStatus to mMixerStatus.\nRename local variable back to mixerStatus.\n\nChange-Id: I0a8145fc856c6c5ff8b784b6176ef3c4d8eb7408\n"
    },
    {
      "commit": "b071e9bc248865ef87a339044c0c5cbabfac175c",
      "tree": "caa0212392475dcd125d748f2eaf50f11b2b84d8",
      "parents": [
        "b279312a9038b9c5b9b05b31b1b1db86f748efd8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 17:05:59 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 17:05:59 2012 -0800"
      },
      "message": "Cleanup DirectOutputThread::mActiveTrack\n\nRename activeTrack to mActiveTrack.\nRelease the reference earlier, at the end of threadLoop_mix().\nThis allows the field to be made private and to\n  move the declaration from PlaybackThread to DirectOutputThread.\n\nChange-Id: I02be7a254638f7d85e92aaf0002d20ca0092a5c3\n"
    },
    {
      "commit": "639dbee79140956c43926344c23af765f6e0c9a5",
      "tree": "9ae31c1e9a1da475fdc9e0522eaf64da28af62d5",
      "parents": [
        "b279312a9038b9c5b9b05b31b1b1db86f748efd8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 12:26:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 16:36:23 2012 -0800"
      },
      "message": "Don\u0027t ask policy manager about invalid stream type\n\nChange-Id: If50fbff9d34045d1398984da48da7e6428a74491\n"
    },
    {
      "commit": "b279312a9038b9c5b9b05b31b1b1db86f748efd8",
      "tree": "0ee1b4441fada98495d4430ca5425b60f7187817",
      "parents": [
        "da6dd679c196f1e342ce41ee9839e87309563e13",
        "b81cc8c6f3eec9edb255ea99b6a6f243585b1e38"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 16:08:59 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 07 16:08:59 2012 -0800"
      },
      "message": "Merge \"IAudioFlingerClient::ioConfigChanged param2 const\""
    },
    {
      "commit": "fa26a859bacb597587a8f49acfc3127351fa688c",
      "tree": "9139e6966ad0957fc5d4dd80cbc88f22a3767a17",
      "parents": [
        "a13ad6e84db128eadf23b154d3346f0bb473a5f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:28:04 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 11:04:55 2012 -0800"
      },
      "message": "Isolate references to outputTracks/mOutputTracks\n\nMove all references to DuplicatingThread::outputTracks and\nDuplicatingThread::mOutputTracks from the common threadLoop() into\nvirtual methods.  This allows them to be moved from PlaybackThread to\nDuplicatingThread, and to be marked private.\n\nAlso use vector assignment to copy mOutputTracks to outputTracks.\n\nChange-Id: Ieb1cf1ad36b8a65143e61e6c92a65fb43427e5e2\n"
    },
    {
      "commit": "a13ad6e84db128eadf23b154d3346f0bb473a5f7",
      "tree": "089693e18957e4d6bc0315fa79b0f88f5e3e0dbd",
      "parents": [
        "a3707a280177e934a1e0a15660d9176663b7fc17",
        "d4513b09123deebf8023b73a82d2d46d35806cea"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 10:44:29 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 07 10:44:29 2012 -0800"
      },
      "message": "Merge \"Make applyVolume private to DirectOutputThread\""
    },
    {
      "commit": "d4513b09123deebf8023b73a82d2d46d35806cea",
      "tree": "bff4d188e7d9cbf5b5b542ac555f7b406e1ba46d",
      "parents": [
        "1465f0c3df04c3166155a852a6a5c10069c1fd0a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 15:52:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 10:40:43 2012 -0800"
      },
      "message": "Make applyVolume private to DirectOutputThread\n\nChange-Id: I7ca4a59505857cbd106b6f274c66e9580dead271\n"
    },
    {
      "commit": "a3707a280177e934a1e0a15660d9176663b7fc17",
      "tree": "56d975052ce6d0e50a21a7a7e23139bbf30f9eaa",
      "parents": [
        "1465f0c3df04c3166155a852a6a5c10069c1fd0a",
        "cbc52bfb3b51c81c945b1e35990324bde892829a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 10:38:12 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 07 10:38:12 2012 -0800"
      },
      "message": "Merge \"Add comments about sequence for setting parameters\""
    },
    {
      "commit": "1465f0c3df04c3166155a852a6a5c10069c1fd0a",
      "tree": "e89c51678875afc1d9055550e8f2ef97806b338a",
      "parents": [
        "f8edf68a1e39da273eafe8c85bdbedc26636c4ec"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:23:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 07:28:12 2012 -0800"
      },
      "message": "Merge the calls to prepareTracks_l\n\nChange-Id: I1dd759581333e2908d980180d44db7bf5ed6591d\n"
    },
    {
      "commit": "b81cc8c6f3eec9edb255ea99b6a6f243585b1e38",
      "tree": "a3cad338817394b18b441bbb3f31853bfd9ed4f5",
      "parents": [
        "f8edf68a1e39da273eafe8c85bdbedc26636c4ec"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 01 09:14:51 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 16:43:19 2012 -0800"
      },
      "message": "IAudioFlingerClient::ioConfigChanged param2 const\n\nThe 3rd parameter (param2) to AudioFlingerClient::ioConfigChanged\nis used as an input.  So changed it from void * to const void *.\nIt is then cast to const OutputDescriptor *\nor const audio_stream_type_t * depending on the event.\n\nChange-Id: Ieec0d284f139b74b3389b5ef69c7935a8e5650ee\n"
    },
    {
      "commit": "f8edf68a1e39da273eafe8c85bdbedc26636c4ec",
      "tree": "99cf34fc2caead1b27a828bbf3d762902c9b5440",
      "parents": [
        "92b8360fe9c3174dc0edaaab4b746d8a3d3f831f",
        "012ca6b4f69fb24385025c0e84b8f816525a3032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 16:22:30 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 06 16:22:30 2012 -0800"
      },
      "message": "Merge \"Rename fields of AudioSessionRef\""
    },
    {
      "commit": "cbc52bfb3b51c81c945b1e35990324bde892829a",
      "tree": "240280d717db745f2e46d2688487afe6c55f61e2",
      "parents": [
        "92b8360fe9c3174dc0edaaab4b746d8a3d3f831f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 01 09:21:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 16:18:17 2012 -0800"
      },
      "message": "Add comments about sequence for setting parameters\n\nChange-Id: Iffa59a34c3c47bdc1d3234cdcb4d8ff99c102825\n"
    },
    {
      "commit": "92b8360fe9c3174dc0edaaab4b746d8a3d3f831f",
      "tree": "d1b2c2d59685479ff449726cdd626b5fd0e353ce",
      "parents": [
        "7d010baec6d5514b938b90545ff447366ddf1158",
        "952eeb27682a9b2ddfa761f24b6eb5e18fe5d814"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 15:23:58 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 06 15:23:58 2012 -0800"
      },
      "message": "Merge \"Fix indentation for re-organized code\""
    },
    {
      "commit": "438b036deaf4413503567a75a2861c000d21da5b",
      "tree": "05fe0bad8c24d4e7e95bf20a61bad745a62221e4",
      "parents": [
        "70a1577d42c6e222c98f0245e7b81b0e8bc238f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:24:48 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 12:46:21 2012 -0800"
      },
      "message": "Rename updateWaitTime since a lock is held\n\nChange-Id: I9bb978cbd0debf5b21676467060f72eebafea3e6\n"
    },
    {
      "commit": "952eeb27682a9b2ddfa761f24b6eb5e18fe5d814",
      "tree": "2f3f23aa5201ab9d0611be216a5470d58a1bf4d6",
      "parents": [
        "70a1577d42c6e222c98f0245e7b81b0e8bc238f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:30:57 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 12:14:54 2012 -0800"
      },
      "message": "Fix indentation for re-organized code\n\nChange-Id: I63471cebdbd095b7ad4e481611b785f9b02c7941\n"
    },
    {
      "commit": "012ca6b4f69fb24385025c0e84b8f816525a3032",
      "tree": "707f045a8e82983d1650184a4be92493133a3148",
      "parents": [
        "70a1577d42c6e222c98f0245e7b81b0e8bc238f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:22:01 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:43:55 2012 -0800"
      },
      "message": "Rename fields of AudioSessionRef\n\nChange-Id: I9f2a66094135c4ac6bec2d3e9db3ac5fbf988ede\n"
    },
    {
      "commit": "000f0e39b4d0c88441297a05ab5f8da6832c1640",
      "tree": "7305f3c498bbb3f326df3201074e5e631a1c95a6",
      "parents": [
        "4bce61f407d43b216c288a8d7b26fb5519853dba"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 01 17:10:56 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 05 11:01:10 2012 -0800"
      },
      "message": "threadLoop merge\n\nChange-Id: Id8e6330ac6be76f9c2debba94f856de87e2d98f7\n"
    },
    {
      "commit": "3030fcefcfcfc48789612659206b957cd0489a54",
      "tree": "2e359e135c7eb575cec715b0cfe1f4b6a51bb3b4",
      "parents": [
        "e8286332f3817a8b7cc4cfd8f6450a3913533660"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 01 09:38:00 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 01 09:43:32 2012 -0800"
      },
      "message": "renamed audio policy output flag.\n\nRenamed AUDIO_POLICY_OUTPUT_FLAG_INDIRECT to AUDIO_POLICY_OUTPUT_FLAG_NONE\nwhich is more appropriate.\n\nChange-Id: Ia14d60397df0f2dcd9bea0186400a09da35bc104\n"
    },
    {
      "commit": "e8286332f3817a8b7cc4cfd8f6450a3913533660",
      "tree": "c783132bbe76feacb35e2c8804349c2c15be6745",
      "parents": [
        "848b6a8a4ccff424e382ce5e1d946da6ede580a0",
        "480b46802bef1371d5caa16ad5454fce04769c57"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 14:59:08 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 29 14:59:08 2012 -0800"
      },
      "message": "Merge \"Shorten thread names\""
    },
    {
      "commit": "3e07470f3b122097cacfe5b85cdb1359279a2f33",
      "tree": "01cd459b03e9384672466c7acdd7e14e9242fcd4",
      "parents": [
        "bc4b08ba67a0245e092aee8f08ba30ef22d421bf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 18:40:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 14:52:54 2012 -0800"
      },
      "message": "Prepare for threadLoop merge - active tracks\n\nContinued work on making the copies of threadLoop more similar:\n - Remove alias for mActiveTracks in MixerThread and DuplicatingThread.\n - Pull in declaration of activeTrack in DirectOutputThread.\n - Remove redundant parameter of prepareTracks_l().\n - Comment prepareTracks_l().\n\nChange-Id: If1087c1902b454acec01ddfdd9f055f0ca7abf04\n"
    },
    {
      "commit": "bc4b08ba67a0245e092aee8f08ba30ef22d421bf",
      "tree": "adbf9c79aee788643f112a82269ccc7addb73494",
      "parents": [
        "91cda8bdf8358a8b977a44e016b60a70bc1a5ee9",
        "d805b718b1fd2d5407ef665c8d4bb42e63dc71a9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 14:44:39 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 29 14:44:39 2012 -0800"
      },
      "message": "Merge \"Update AudioFlinger comments\""
    },
    {
      "commit": "91cda8bdf8358a8b977a44e016b60a70bc1a5ee9",
      "tree": "2b120cdb61f9eba624fef617910a899d48018109",
      "parents": [
        "c455fe9727d361076b7cead3efdac2d32a1a1d6d",
        "73ca0f5837d5448f7a5eb159a09cd0ebe82b4de9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 14:43:19 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 29 14:43:19 2012 -0800"
      },
      "message": "Merge \"Pull in declaration of effectChains to inner block\""
    },
    {
      "commit": "73ca0f5837d5448f7a5eb159a09cd0ebe82b4de9",
      "tree": "c998f3102cf0b63133726cd80f051901b4a2be15",
      "parents": [
        "8b20e9272d2f8d5160494de3212d66a399b3637f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 07:56:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 11:49:50 2012 -0800"
      },
      "message": "Pull in declaration of effectChains to inner block\n\nChange-Id: I09eacf72124942abd604132b9f4e774b1236fcf3\n"
    },
    {
      "commit": "c455fe9727d361076b7cead3efdac2d32a1a1d6d",
      "tree": "10f603fdaeb746bdb00bc43e567751109783db0a",
      "parents": [
        "8b20e9272d2f8d5160494de3212d66a399b3637f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 07:07:30 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 11:36:54 2012 -0800"
      },
      "message": "mSuspend comments and usage\n\nEmphasize that playbackthread::mSuspend is a counter, not a bool\n\nChange-Id: I7188e56814e1c54dbc65e560f3627f138257d644\n"
    },
    {
      "commit": "688a64030834ea2f52cc9765676ddf6aa34df767",
      "tree": "dbe70440330e69300fab019f9b90585e025e5c10",
      "parents": [
        "a3873833d518e032138cf70188b6f33cd7acec3d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 07:57:06 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 09:38:15 2012 -0800"
      },
      "message": "Mark similar and different sections in threadLoop\n\nMost of these comments will be removed after the threadLoop merge.\n\nNote: the trivial change in assignments to mixBufferSize, and the\ncomments about \"tracks to remove\" is to make them all identical.\n\nChange-Id: I3b1a33a7f2cd12ad557a1986bb71f6171161974a\n"
    },
    {
      "commit": "d805b718b1fd2d5407ef665c8d4bb42e63dc71a9",
      "tree": "941a1104efc261d317b0d3b795b8825a6eed0922",
      "parents": [
        "a3873833d518e032138cf70188b6f33cd7acec3d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 15:42:48 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 07:01:44 2012 -0800"
      },
      "message": "Update AudioFlinger comments\n\nAdd comments to enum mixer_state\nNote side-effect of lockEffectChains_l\nFix a typo\n\nChange-Id: Ibd51678bac2193201cbcbe081ff5664046fbc494\n"
    },
    {
      "commit": "480b46802bef1371d5caa16ad5454fce04769c57",
      "tree": "50bc53de16466d73d177b8f19ff96e8b9774b730",
      "parents": [
        "a3873833d518e032138cf70188b6f33cd7acec3d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 12:30:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 16:38:09 2012 -0800"
      },
      "message": "Shorten thread names\n\nprctl(PR_SET_NAME) limits to 15 characters.  Before we had names like\n\"Binder Thread #\" and the counter was cut off :-( Also remove redundant\n\"thread\" at end of name; it\u0027s always a thread.\n\nChange-Id: I1f99c2730ba0787ed9b59c15914356cddf698e2f\n"
    },
    {
      "commit": "a3873833d518e032138cf70188b6f33cd7acec3d",
      "tree": "2a51dc4f5028548e2217d079c595f925af7968ac",
      "parents": [
        "3e9c3a1d34960cd258f294d31135ab6bf76179d5",
        "04743e99e71c0da012508c7119f414027654ee94"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:23:42 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:23:42 2012 -0800"
      },
      "message": "Merge \"Unlock effect chains in the middle of two if\u0027s\""
    },
    {
      "commit": "3e9c3a1d34960cd258f294d31135ab6bf76179d5",
      "tree": "c4fdfd452a5249202c38bdd5fa06acc94af31402",
      "parents": [
        "a17c820c556fddf7ddd96b82b3e9874e340ffafd",
        "a3b09254d44cd8d66ec947abe547538c4cfeaa89"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:21:51 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:21:51 2012 -0800"
      },
      "message": "Merge \"Simplify removeNotificationClient\""
    },
    {
      "commit": "a17c820c556fddf7ddd96b82b3e9874e340ffafd",
      "tree": "410130682b9d03614ce01e3e5af6bb0a2073d25d",
      "parents": [
        "3f791be1032e6c4cc499598dd2be116db6fb33c3",
        "02fe1bf923bbe5789202dbd5810e2c04794562e6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:21:09 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:21:09 2012 -0800"
      },
      "message": "Merge \"AudioFlinger const methods and parameters\""
    },
    {
      "commit": "cfbd62616ab2b12f0fee603658f04e5827cc7f8f",
      "tree": "0f3328716fdd788e603a52cc7e8cf80550a406bf",
      "parents": [
        "fadb2c73fce479205432652530663e1e90fd546c",
        "b6b740629c9f11535086e744465bada03f26df11"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:18:27 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:18:27 2012 -0800"
      },
      "message": "Merge \"Fix theoretical race condition in addOutputTrack\""
    },
    {
      "commit": "fadb2c73fce479205432652530663e1e90fd546c",
      "tree": "255d5dc9cdbda67837cbb3a7907ecd797f6b305f",
      "parents": [
        "77f70f7de1977d7b0a9f9c37a25e34db16feb7b4",
        "01c4ebf6b794493898114a502ed36de13137f7e5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:17:47 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:17:47 2012 -0800"
      },
      "message": "Merge \"AudioBufferProvider comments and cleanup\""
    },
    {
      "commit": "843a12d146bd64642bf85a4e56c274246e3893a6",
      "tree": "82aca30fbbcc5c40f41a75dc3205ce983c187059",
      "parents": [
        "acb364073e62acddced517f2edfe0326245b2af9",
        "8abf44d2f2bcd20a2835570efe89d89c19db426a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 13:23:51 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 27 13:23:51 2012 -0800"
      },
      "message": "Merge \"Fix tracking of hardware state for dump\""
    },
    {
      "commit": "df712ea86e6350f7005a02ab0e1c60c28a343ed0",
      "tree": "75401d5ef563d1ae76aaae4965f65bb39f92736c",
      "parents": [
        "d3393c35259588e8ad61a43d1d1aa1568e943307"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sat Feb 25 18:48:35 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Feb 27 13:03:08 2012 -0800"
      },
      "message": "fix libgui header location\n\nChange-Id: Iec71706cdd4f29c6904993648ce873e83ef9cafe\n"
    },
    {
      "commit": "e628d515888baadba75442128678e747e930ed58",
      "tree": "008e72b199be7b6fa0d86f308edb183df3851fe1",
      "parents": [
        "d3cee0b1f77baa4fb7a049eb757e9f5006890726",
        "c0b52836d07f823732f0ff98ca5ca9d7f5730cb8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 07:24:46 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 27 07:24:46 2012 -0800"
      },
      "message": "Merge \"Make threadLoop() logs identical\""
    },
    {
      "commit": "d3cee0b1f77baa4fb7a049eb757e9f5006890726",
      "tree": "6692b5674e5c0285cc28aa2d2753a0c787e0a9cb",
      "parents": [
        "1843df5b4f8f8f8394a96bcaeb5836d720ae9cf5",
        "5d4eeeaf76ebe177b43e87b2a9df5e55e39021f0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 07:21:00 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 27 07:21:00 2012 -0800"
      },
      "message": "Merge \"Move declaration of mixerStatus to inner block\""
    },
    {
      "commit": "1843df5b4f8f8f8394a96bcaeb5836d720ae9cf5",
      "tree": "c2be52b9aec3d9a84fbf44059aa86f233275141f",
      "parents": [
        "37d825e72a6c606553a745da1212590a425996d3",
        "9eeafeb52fecf90882e9b44eeefcb7c3e16aa915"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 24 19:08:12 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 24 19:08:12 2012 -0800"
      },
      "message": "Merge \"remove dependency on android_native{s_priv|buffer}.h\""
    },
    {
      "commit": "9eeafeb52fecf90882e9b44eeefcb7c3e16aa915",
      "tree": "0a09b02937d7097e042367163fbe4c9d4b5b2230",
      "parents": [
        "5ce96d97feafc6989f6141bb2633eae3d87ddf28"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 24 18:25:41 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 24 18:26:01 2012 -0800"
      },
      "message": "remove dependency on android_native{s_priv|buffer}.h\n\nChange-Id: Ie4b95f7061c240f37c504414259f92d72c4ffc89\n"
    },
    {
      "commit": "a3b09254d44cd8d66ec947abe547538c4cfeaa89",
      "tree": "9a21a4b2b34e264d71f4a44262e5f555ce9513d6",
      "parents": [
        "37d825e72a6c606553a745da1212590a425996d3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 09:19:01 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 17:00:30 2012 -0800"
      },
      "message": "Simplify removeNotificationClient\n\nNo need to check for presence of item before removing\n(but we do lose the log of the previous value).\n\nChange-Id: I2838430824de5f257f2ee15db0c22b1920c67d08\n"
    },
    {
      "commit": "02fe1bf923bbe5789202dbd5810e2c04794562e6",
      "tree": "0a3c1634d0e3b36e996a9be60540bf63b226f84e",
      "parents": [
        "37d825e72a6c606553a745da1212590a425996d3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 15:42:17 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:34:43 2012 -0800"
      },
      "message": "AudioFlinger const methods and parameters\n\nChange-Id: I93ec28024005ed23aa141518092a012a4a7c44c5\n"
    },
    {
      "commit": "c0b52836d07f823732f0ff98ca5ca9d7f5730cb8",
      "tree": "458884704d091098a8b44fceab1c5d9daa0e362d",
      "parents": [
        "37d825e72a6c606553a745da1212590a425996d3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 11:18:09 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:26:07 2012 -0800"
      },
      "message": "Make threadLoop() logs identical\n\nChange the wording of the logs in the various copies of threadLoop()\nto be identical.  This will make it easier to merge them soon.\n\nChange-Id: Idfa181e437738712c784dc7f746cac79f83d2931\n"
    },
    {
      "commit": "5d4eeeaf76ebe177b43e87b2a9df5e55e39021f0",
      "tree": "f27b737f2e5dad2ac6c04ae0294f121a47210aec",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 07:25:40 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:14:46 2012 -0800"
      },
      "message": "Move declaration of mixerStatus to inner block\n\nmixerStatus was being declared (and initialized) too early,\nwhich also resulted in a duplicate initialization.  Moved\nthe declaration into the block where it is actually used.\n\nChange-Id: Ifdcfefe362a5efe3493dd616cdb44645c6f9aed5\n"
    },
    {
      "commit": "37d825e72a6c606553a745da1212590a425996d3",
      "tree": "268310fe31b44c0eee84b1d91adfbbaff2103a76",
      "parents": [
        "5ce96d97feafc6989f6141bb2633eae3d87ddf28"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 07:21:48 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:02:24 2012 -0800"
      },
      "message": "Pull out duplicated copies of silent mode check\n\nAlso fix the error handling for the property_get.\n\nThis is part of preparation for the threadLoop() merge.\n\nChange-Id: I6405190ea18146d1271575e1dfe9f279e8f36b17\n"
    },
    {
      "commit": "04743e99e71c0da012508c7119f414027654ee94",
      "tree": "01efb09ba3b56687256ad81564092c7f92d9186f",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 11:20:09 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 15:55:08 2012 -0800"
      },
      "message": "Unlock effect chains in the middle of two if\u0027s\n\nAs part of the upcoming threadLoop() merge, this CL makes it clearer\nwhat are the similar and different parts before and after unlocking\neffect chains.\n\nIn each threadLoop(), the old code was:\n\n    if (sleepTime \u003d\u003d 0) {\n        // A\n        unlockEffectChains(effectChains);\n        // B\n    } else {\n        unlockEffectChains(effectChains);\n        // C\n    }\n\nThe new code is:\n\n    if (sleepTime \u003d\u003d 0) {\n        // A\n    }\n    unlockEffectChains(effectChains);\n    if (sleepTime \u003d\u003d 0) {\n        // B\n    } else {\n        // C\n    }\n\nAlso this is slightly slower by one \"if\", it has the advantage of making\nit much more obvious about what is done before and after the unlock,\nand also to see the similarities and differences among the various\ncopies of threadLoop().\n\nChange-Id: I7bf4369d2dcb072573ec43b7e52c637f0097dc00\n"
    },
    {
      "commit": "5ce96d97feafc6989f6141bb2633eae3d87ddf28",
      "tree": "4a38a92123c13a19107d0b73d8ec877f50e87011",
      "parents": [
        "7fb5e8832f582ec515550696e9dabc3a8d9de14d",
        "83efdd0fc08cd5aedf50b45741a8a87be8dc4b41"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 14:25:15 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 24 14:25:15 2012 -0800"
      },
      "message": "Merge \"Pull CPU statistics code out of threadLoop()\""
    },
    {
      "commit": "b6b740629c9f11535086e744465bada03f26df11",
      "tree": "7561f2281d6fbe6b59a71470b1432e8f90e80391",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 14:12:20 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 14:20:29 2012 -0800"
      },
      "message": "Fix theoretical race condition in addOutputTrack\n\nThis is not a real race, because addOutputTrack was only called in two\nplaces, and in both places there could be no other threads referencing\nthe DuplicatingThread instance.\n\nThose two places are:\n - the DuplicatingThread constructor, which is of course safe\n - openDuplicateOutput - this is safe because it\u0027s called immediately\n   after the new DuplicatingThread, and there are no sp\u003c\u003e either in the\n   constructor or here which could cause onFirstRef() to do Thread::run().\n\nBut for safety in case addOutputTrack is ever called somewhere else,\nor there are sp\u003c\u003e created earlier, it is safer to take the thread lock.\n\nChange-Id: I1502d014fa37ec5dbf4bf40d3e2884af311cd5e9\n"
    },
    {
      "commit": "83efdd0fc08cd5aedf50b45741a8a87be8dc4b41",
      "tree": "7e87220c4ea29345be9fd7a6c041bf58dc9f816f",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 07:21:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 13:56:12 2012 -0800"
      },
      "message": "Pull CPU statistics code out of threadLoop()\n\nThis is to prepare for the threadLoop() merge\n\nChange-Id: I118c7d5c6b011b5d5b95ec7d63fb03feb166a9cf\n"
    },
    {
      "commit": "01c4ebf6b794493898114a502ed36de13137f7e5",
      "tree": "7f663fdad4040a40411e79d837c14e52e11a65b9",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 10:47:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 13:42:13 2012 -0800"
      },
      "message": "AudioBufferProvider comments and cleanup\n\nAdd comments about which methods implement the AudioBufferProvider interface.\n\nSimplified the definition of kInvalidPts.  \u003cstdint.h\u003e is very hard to work\nwith, there seems to be no way to use it reliably to get INT64_MAX without\nhaving a separate source file, which is ugly because it means kInvalidPts\nis not a compile-time constant.  So I just deleted AudioBufferProvider.cpp\nand used a hard-coded constant instead.\n\nAdded a default constructor for Buffer so that the fields aren\u0027t random\n(especially .raw which is used to determine if the buffer is valid).\n\nMake the pts for getNextBuffer default to kInvalidPTS so code that\ndoesn\u0027t need a pts doesn\u0027t have to specify a value.\n\nRename the parameter to AudioMixer::setBufferProvider to make it clearer.\n\nChange-Id: I87e7290884d4ed975b019f62d1ab6ae2bc5065a5\n"
    },
    {
      "commit": "8abf44d2f2bcd20a2835570efe89d89c19db426a",
      "tree": "29fc684b04d18621913145c807c4493f5b607d86",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 14:16:03 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 13:31:26 2012 -0800"
      },
      "message": "Fix tracking of hardware state for dump\n\nAt end of AudioFlinger::onFirstRef(), the hardware status was being left\nin wrong state.  It should be AUDIO_HW_IDLE but was AUDIO_HW_INIT.\n\nmHardwareStatus was being set to AUDIO_HW_OUTPUT_OPEN too early, and so\na return would leave it in the wrong state until next hardware operation.\n\nTake the hardware lock for dev-\u003eget_parameters, and update mHardwareStatus\nbefore and after.\n\nKeep hardware lock only for the duration of the dev-\u003eset_parameters.\n\nRename two constants in enum hardware_call_state to have the prefix\nAUDIO_HW so they follow the naming conventions.\n\nAdd comments.\n\nChange-Id: I6c7450b11f9b13adaeef9cec874333e478a58fc0\n"
    },
    {
      "commit": "5cf034d92d901169ca6e36c90475f40715827fcd",
      "tree": "7a6d8c982f699f2e8a8ea0cfd0088dfdada23399",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 21 10:35:56 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 13:14:28 2012 -0800"
      },
      "message": "Remove TrackBase::mFlags\n\nThe bit-field TrackBase::mFlags was supposed to have track-specific\nflags in the upper 16 bits, and system flags in the lower 16 bits.\n\nThe upper 16 bits of mFlags were initialized in the TrackBase\nconstructor from the flags parameter of IAudioFlinger::createTrack()\nand IAudioFlinger::openRecord(), and the lower 16 bits were cleared.\n\nHowever, the upper 16 bits of mFlags were never acccessed again.\nSo really there are no track-specific flags.  I left the flags\nin the parameter list of createTrack() and openRecord() but made a\nnote that these should be removed eventually as they are dead.\n\nThis leaves only the one system flag \"step server failed\".  I replaced\nthe bit-field mFlags by bool mStepServerFailed, which is simpler and\nslightly faster.\n\nChange-Id: I6650f5487be72791b4a67d73adcd10ffa04e2aa5\n"
    },
    {
      "commit": "d6fd85a157ce2054b2304e6d171fa87ae09c363d",
      "tree": "dfba92cafe7500bd06aa5e7927405285ca662ecc",
      "parents": [
        "42539cb5d02f0cbaedba2de6ad6be42a0d7a9a9a",
        "9eaa55756c5b245970447019250ce852f5189525"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 13:22:13 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 22 13:22:13 2012 -0800"
      },
      "message": "Merge \"Avoid wp\u003c\u003e::unsafe_get() with a few exceptions\""
    },
    {
      "commit": "9eaa55756c5b245970447019250ce852f5189525",
      "tree": "68428af4a3b22a62f9c09a2c4c7b8a8a95a936fd",
      "parents": [
        "2e77ad2a9f7afb57b6f9127dd7c229e774baa9c8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 13:32:16 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 13:19:26 2012 -0800"
      },
      "message": "Avoid wp\u003c\u003e::unsafe_get() with a few exceptions\n\nAvoid using wp\u003c\u003e::unsafe_get() except in a log, and other specific cases\nwhen it\u0027s known to be safe.\n\nUse more specific subclass types for parameters to avoid down-casts.\n\nWhen a constructor or method parameter is \"this\" of an object that is\ncurrently being constructed, it\u0027s better to use a raw pointer rather\nthan either sp\u003c\u003e or wp\u003c\u003e.\n\nUsing the raw pointer is safe, provided either:\n - it is \"this\" of an object being constructed (which has sp\u003c\u003e refcount of 0),\n - or the caller already holds an sp\u003c\u003e\n\nThe raw pointer is simpler and faster, and it avoids the problem of the\nsp\u003c\u003e reference count being incremented and then decremented to zero on\nscope exit, which would cause the object\u0027s destructor to run while the\nobject is still being constructed.\n\nAlso removed some dead code per a review comment.\n\nChange-Id: I7375f64da3aec11b928c33cb01faff186252ef5e\n"
    },
    {
      "commit": "f063b49e95c28d63a58215ebda892a5fee4204cc",
      "tree": "9909300bea158357aa45f1fb64f7b83c15208636",
      "parents": [
        "c33305c5dd4cc06e71eb0c66a7150aa6ab647c99"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 16:24:10 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 11:46:53 2012 -0800"
      },
      "message": "Fix build warning\n\nwarning: pointer of type \u0027void *\u0027 used in arithmetic\nwarning: enumeral and non-enumeral type in conditional expression\n\nChange-Id: I7b8d626a636145ef648e3b5d0e77068216dd012e\n"
    },
    {
      "commit": "3b81acab52b7140c1b8b20be2d67be3e221637e7",
      "tree": "0b225360603f19ba2f60fb1cf7a616dfe51d99b1",
      "parents": [
        "1b094ee8f7fe7eca65bf3d2f983ba95eef6db93d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 15:26:23 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:41:56 2012 -0800"
      },
      "message": "Remove bit fields to improve performance\n\nuint16_t enabled is (mostly) changed to bool in a separate CL\n\nChange-Id: Ied9f8c034b2479cee9a8778cee7b8ff92ae75b7b\n"
    },
    {
      "commit": "1b094ee8f7fe7eca65bf3d2f983ba95eef6db93d",
      "tree": "5b3509943e54e317cc30a56cdf1712dc50d7528a",
      "parents": [
        "29dcfcd66d884801e9907d04e81d407ee770802c",
        "a111792f1314479c649d1d44c30c2caf70c00c2a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:40:43 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 17 09:40:43 2012 -0800"
      },
      "message": "Merge \"Simplify code\""
    }
  ],
  "next": "a111792f1314479c649d1d44c30c2caf70c00c2a"
}
