)]}'
{
  "log": [
    {
      "commit": "78b5e82f421bfdf5c1c72bd0ca2fb7f3bc1a45ff",
      "tree": "b3446119a9b6c03dcca98d1d9ee31a83adb8acad",
      "parents": [
        "c524ffda17017d8467a237a1eddfd7e7c03c6617"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 23 14:05:52 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 23 14:05:52 2012 -0700"
      },
      "message": "Revert \"Split libmedia into libmedia and libmedia_native\"\n\nThis reverts commit 0a3edd38df0743dcc7091bb7ebf29e7e7dadc7cb"
    },
    {
      "commit": "c524ffda17017d8467a237a1eddfd7e7c03c6617",
      "tree": "f474647ebc3c87fe7aee804d558a3cfbd38fcfe3",
      "parents": [
        "ccf89b54f973f11082150d02ed957f7e967fbc8b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 09:08:11 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 15:45:29 2012 -0700"
      },
      "message": "Split libmedia into libmedia and libmedia_native\n\nThis is still in the old location\n\nChange-Id: Ic1be549b5b607cfd519cb4cecc581624510a4ee1\n"
    },
    {
      "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": "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": "1bb8e81b066a2311fd238fc6dae8f026e33ed99e",
      "tree": "b532516a844ab20331120a4d6f7777c27c36548c",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093",
        "b12153e36ae5e514d96c77d660b327d1a8f5000f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 16:21:04 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 19 16:21:04 2012 -0700"
      },
      "message": "Merge \"Add libmedia_native\""
    },
    {
      "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": "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": "ab334fd351ae5a0e18903da123d63e565b536874",
      "tree": "9bcc5a6151326d9ca345f9dfac0d9d68d48e73b4",
      "parents": [
        "3c5bbaee376d235404f267fbe1693d1960bfaaef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 12:56:06 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 15 13:15:27 2012 -0700"
      },
      "message": "audio_channel_in/out_mask_from_count\n\nand avoid ambiguous term \"channels\" where it might be confusing\nas to whether it is a channel mask or channel count\n\nChange-Id: I744fa08ccb6001a98c97bd638d2c9d56836c4234\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": "36a4d2cc7a44eb42d0d9ef5fe50b6747a7a34cab",
      "tree": "eec0f805e2e83ed1d720519748527c03affafc29",
      "parents": [
        "5e7616cc0e5493241211333134555d74aec89982",
        "6b74d671a1321a6ecc4a40b6c87beedfecc1ec44"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Mar 13 13:23:07 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 13 13:23:07 2012 -0700"
      },
      "message": "Merge \"Gapless playback, step 1.\""
    },
    {
      "commit": "6b74d671a1321a6ecc4a40b6c87beedfecc1ec44",
      "tree": "44092c52e8439f1991f23601287d424db916c814",
      "parents": [
        "887c5d2ac34d81bde66dadbd7b2ff07501744778"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 28 16:07:44 2012 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Mar 13 13:13:14 2012 -0700"
      },
      "message": "Gapless playback, step 1.\n\nCurrently able to play Ogg Vorbis, PCM WAV and other lossless files seamlessly\nby reusing the initial AudioTrack for subsequent players.\n\nChange-Id: Ie7cf6b9076bdf4f9211574456d192c02c04fecc7\n"
    },
    {
      "commit": "5e7616cc0e5493241211333134555d74aec89982",
      "tree": "e2a972018a13cbf8c2ad6c3d7592dbbb73fec3a8",
      "parents": [
        "e53b9ead781c36e96d6b6f012ddffc93a3d80f0d",
        "6c6b4d0d2b98a7ceee8b697daaf611f8df3254fb"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Mar 13 12:44:54 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 13 12:44:54 2012 -0700"
      },
      "message": "Merge \"Switched to use the header files in /frameworks/native and deleted the duplicate header files in /frameworks/base\""
    },
    {
      "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": "6c6b4d0d2b98a7ceee8b697daaf611f8df3254fb",
      "tree": "307356be51d237ee22f88affdc3376270d571be9",
      "parents": [
        "aa4397f07c43bd83bc3100b749401dc3d15e7622"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Mar 12 14:37:53 2012 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Mar 12 21:28:57 2012 -0700"
      },
      "message": "Switched to use the header files in /frameworks/native\nand deleted the duplicate header files in /frameworks/base\n\no related-to-bug: 6044887\n\nChange-Id: I17e0692d9a9b5c8796ded36677c833ca8ab36795\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": "f2015b625cd6bea86da7401e725332c35b90e7cf",
      "tree": "3ec55cd1f89c6c1ae8ea4614e32c654df9c72869",
      "parents": [
        "5e9ce08417c36aa572c3f18b40ff9335d409b1e9",
        "679ab0b0792846a89162ce41c953819d70030112"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 15:23:45 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 09 15:23:45 2012 -0800"
      },
      "message": "Merge \"Use AudioRecord::record_flags consistently\""
    },
    {
      "commit": "679ab0b0792846a89162ce41c953819d70030112",
      "tree": "ecd714f568d940051e492b313f3af5bd5d9b4193",
      "parents": [
        "f3c2e3bd65449b413c378219e08c71bf744cfbf3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 09:04:02 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 18:11:55 2012 -0800"
      },
      "message": "Use AudioRecord::record_flags consistently\n\nChange-Id: I6f369a2b99eb515603bc7d5629a07db2b96783fe\n"
    },
    {
      "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": "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": "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": "d8d6185c978c9b27ca69e7791785e0983ed9e8b8",
      "tree": "cda49b71e787cf1bcf68671e237389f70706cff3",
      "parents": [
        "985ed9a1a22ec7e6e245d3fb8e93d3a23bdc539b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 05 17:06:40 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 05 17:18:36 2012 -0800"
      },
      "message": "AudioTrack: relax check on minimum buffer size\n\nCurrent AudioTrack implementation enforces that the requested audio\nbuffer size is at least corresponding the audio latency.\nThis requirement is too strong and leads to problems with current\nstagefright and AudioSink implementations when playing over output\nstreams with long latency.\n\nUltimately, the AudioSink design should be changed to specify a minimum\nbuffer size in time or frames units but not in buffer count units.\n\nChange-Id: I8ba603956f92ac49143a8249572665aa548f2f0f\n"
    },
    {
      "commit": "c795b64060c3af9d7961fc1371e4ccfa8ee3e450",
      "tree": "aafa8ecde306b5420e96b7a6e0965d1f1f4c4fa6",
      "parents": [
        "4b77dc28097288cb062fce6bf5de0fb3394877a9"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Feb 22 15:38:35 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Mar 01 14:41:35 2012 -0800"
      },
      "message": "Switch the way we configure for MediaPlayer retransmission.\n\nThis is a cherry-pick of I6ab07d89b2eeb0650e634b8c3b7a0b36aba4e7dd\nwith merge conflicts addressed by hand and additional changes made in\nresponse to code review feedback.\n\nMove in the direction of a more publishable API for configuring a\nmedia player for retransmission.  It used to be that we used a custom\ninvoke and a modified URL (prefixed with aahTX://).  There are many\nissues with this technique and it was never meant to stand the test of\ntime.\n\nThis CL gets rid of all that.  A new (but currently hidden) method was\nintroduced to the java level MediaPlayer API, called\nsetRetransmitTarget(InetSocketAddress), which allows an app writer to\nset the retransmit target.  For now, this method needs to be called\nbefore a call to setDataSource (which is pretty unusual for the\nMediaPlayer API) because this mid level code uses this as a cue to\ninstantiate an aahTX player instead of relying on the data source to\nselect a player.  When retranmit functionality becomes part of the\nexisting android player implemenation, this\nset-retrans-before-set-data-source behavior can go away, along with\nthe aahTX player itself.\n\nChange-Id: I3b46c5227bbf69acb2f3cc4f93cfccad9777be98\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\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": "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": "606ee61616efdba4696ae591ad10a4be33d8c946",
      "tree": "c8f6aa403d0ef620065513124750ae0db62b9f70",
      "parents": [
        "a3873833d518e032138cf70188b6f33cd7acec3d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:33:14 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 08:50:18 2012 -0800"
      },
      "message": "AudioRecord const methods\n\nChange-Id: Ifae4fd7820b650aaca2b13c8658c292db1c46c0f\n"
    },
    {
      "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": "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": "af7d8189f91c45ab919a6c9ac386b268c8d91168",
      "tree": "92619572cd0a03705a5b564ef5749fdd8066d86f",
      "parents": [
        "4ff14bae91075eb274eb1c2975982358946e7e63"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Jan 11 12:23:42 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:11 2012 -0800"
      },
      "message": "Enhance Visualizer behavior in the case of mediaserver death.\n\nBring the Visualizer class into line with the SDK documentation by\nreturning ERROR_DEAD_OBJECT instead of ERROR_INVALID_OPERATION when\nthe Visualizer loses its binder connection to the mediaserver because\nof a mediaserver restart.\n\nAlso add a new callback interface to allow clients to be\nasynchronously notified in the case of server death.  Right now, the\ninterface definition and the registration method are flagged as hidden\npending API council review/approval.\n\nSee http://b/issue?id\u003d5717519 for details.\n\nChange-Id: Ic15856f27ed5a950a583ac11ca81f79bd7e9b1a0\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "4ff14bae91075eb274eb1c2975982358946e7e63",
      "tree": "e9e54fddb9832d30b69c2a11c9ed2884397f2f95",
      "parents": [
        "951bd8d1ad9581a414e171ad8605a9515d0ad667"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Feb 08 16:37:41 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:11 2012 -0800"
      },
      "message": "Upintegrate Audio Flinger changes from ICS_AAH\n\nBring in changes to audio flinger made to support timed audio tracks\nand HW master volume control.\n\nChange-Id: Ide52d48809bdbed13acf35fd59b24637e35064ae\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "d9b9b8d09e7471b0ffa21cfa9f944ef4ad300a71",
      "tree": "e2b8666cc7ca81254ce264129ddd70c076a63ed1",
      "parents": [
        "ed15977476a3d53103866e6d527fa3fb65d4166c",
        "99e53b86eebb605b70dd7591b89bf61a9414ed0e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:42:32 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 14 09:42:32 2012 -0800"
      },
      "message": "Merge \"Update comments\""
    },
    {
      "commit": "99e53b86eebb605b70dd7591b89bf61a9414ed0e",
      "tree": "8939550ada02fe21121550a83952ebf7638c0dac",
      "parents": [
        "6dbc1359f778575d09d6da722b060a6d72c2e7c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 08:59:58 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:17:59 2012 -0800"
      },
      "message": "Update comments\n\nWe no longer put the filename at start of file.\n\nChange-Id: Ic435b159a23105681e3d4a6cb1ac097bc853302e\n"
    },
    {
      "commit": "ed15977476a3d53103866e6d527fa3fb65d4166c",
      "tree": "8c42c9c2f1ecb0ee10359e806a68927e4d0697e9",
      "parents": [
        "8d6a2449a91f5116d7243ab039393195ebd663fe",
        "38f5d71e72f3b76c5b519614d27f051d53cd2712"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:09:03 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 14 09:09:03 2012 -0800"
      },
      "message": "Merge \"Remove dead code AudioTrack::getLoop\""
    },
    {
      "commit": "6dbc1359f778575d09d6da722b060a6d72c2e7c5",
      "tree": "721c46e8b89595b51a80ee71c71542895edc1308",
      "parents": [
        "7a8b0ed6419e57dd8b41d3806893d63d3df91aab"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 10:56:47 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 07:30:48 2012 -0800"
      },
      "message": "AudioRecord and AudioTrack client tid\n\nInform AudioFlinger of the tid of the callback thread.\n\nChange-Id: I670df92dd06749b057238b48ed1094b13aab720b\n"
    },
    {
      "commit": "9f1d4448050a4df7118c90c0c0d3e6f9c4b82f3b",
      "tree": "c63307d3e5438e9a33848b2e697ba6fabd7044e7",
      "parents": [
        "9d1f02d74fd395ec4de6861147da289423f0ab6f",
        "f1d5aa162c02a16b7195a43a9bcea4d592600ac4"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Feb 10 14:17:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 14:17:06 2012 -0800"
      },
      "message": "Merge \"Move away from MediaDebug and use ADebug instead\""
    },
    {
      "commit": "9d1f02d74fd395ec4de6861147da289423f0ab6f",
      "tree": "127f5a23da9e17614da1c5f7d84002f3c80c9016",
      "parents": [
        "0ba18ec1b343a8de70924f87630dd1f329b00fe6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 17:47:58 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 13:48:44 2012 -0800"
      },
      "message": "Follow raw pointer and sp\u003c\u003e conventions\n\nUnconditional delete for raw pointers.\nUse \"if (sp !\u003d 0)\" not \"if (sp.get() !\u003d 0)\" or \"if (sp !\u003d NULL)\".\nUse \"if (raw !\u003d NULL)\" not \"if (raw)\".\n\nChange-Id: I531a8da7c37149261ed2f34b862ec4896a4b785b\n"
    },
    {
      "commit": "f1d5aa162c02a16b7195a43a9bcea4d592600ac4",
      "tree": "dc270a6e1a4ee6695e309eeb29c4d9ed7f3a20a2",
      "parents": [
        "43089daaf82bd2b8e5f9a29b80af5abaae4657b3"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Feb 06 23:46:37 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Feb 10 11:43:09 2012 -0800"
      },
      "message": "Move away from MediaDebug and use ADebug instead\n\nChange-Id: I963a3b6f79a7292891973cbeeaf3378b38629f08\n"
    },
    {
      "commit": "90bebef5669a9385c706b042d146a31dca2e5d9b",
      "tree": "a60c6383825eb3ed02493036605391d015732190",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 15:24:38 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 17:21:49 2012 -0800"
      },
      "message": "No newline or space at end of ALOG format string\n\nChange-Id: I0bef580cbc818cb7c87aea23919d26f1446cec32\n"
    },
    {
      "commit": "38f5d71e72f3b76c5b519614d27f051d53cd2712",
      "tree": "a27ac85c22bc55b10bdeeaa3bddaae473325caaf",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 14:12:12 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 14:12:12 2012 -0800"
      },
      "message": "Remove dead code AudioTrack::getLoop\n\nChange-Id: I868329c52f31bc20125f068500d8f892b4ec9796\n"
    },
    {
      "commit": "72ef00de10fa95bfcb948ed88ab9b7a177ed0b48",
      "tree": "beeaffd33a57a6cc5fa48f2fa905fc680c4746d1",
      "parents": [
        "dbfafaffe2e97eaf8d74ec6b6c468418a1ad2443"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 11:09:42 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 10:06:32 2012 -0800"
      },
      "message": "Use audio_io_handle_t consistently instead of int\n\nOther:\n - add a comment to nextUniqueId\n - made ThreadBase::mId const, since it is only assigned in constructor.\n\nChange-Id: I4e8b7bec4e45badcde6274d574b8a9aabd046837\n"
    },
    {
      "commit": "5e92a7861196ddae14638d4b7a63fc4892b7ef59",
      "tree": "6772b944a26acb22381a2eb38871b46cff9d856a",
      "parents": [
        "0a20fa9c41c96e31fa20e071074a4b6e7f6c41c3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 30 07:40:52 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 09:21:39 2012 -0800"
      },
      "message": "Effect UUID inputs passed by pointer are const\n\nChange-Id: I1f5c338bcb7368e3dd8cd5f804b2e6d9fbe087f8\n"
    },
    {
      "commit": "4f9b0c54011eb8fd2ccfb393c2dcd51cd07800e0",
      "tree": "318b28bb04ce0b4ce39f75f6a8dbac27cee1455c",
      "parents": [
        "86feafe15b3f9609e1e9f64184688c2b6f2e4834",
        "0e265cf36d201a7ccc0238b5c60b50f43d1dc450"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:34:33 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:34:33 2012 -0800"
      },
      "message": "Merge \"Remove dead mutex in AudioTrack/AudioRecord thread\""
    },
    {
      "commit": "f22147e5d2982e0c461f7ce8058c2d596d518bd4",
      "tree": "a0358efa5118e6a644c735b44c2378161ae0a8c6",
      "parents": [
        "1579d7948117e3e6541b0cfda02cc5234a3280ea",
        "a5224f319e2ba4b51ddb4287705ccf8d4b8ecc51"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 07:42:40 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 07:42:40 2012 -0800"
      },
      "message": "Merge \"AudioTrack declare more methods const\""
    },
    {
      "commit": "a5224f319e2ba4b51ddb4287705ccf8d4b8ecc51",
      "tree": "eb36f63045d044c840072ad95398d49b743cd6bd",
      "parents": [
        "787bae0578fbaab6219ebf23494866b224d01438"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 12:41:44 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 15:48:25 2012 -0800"
      },
      "message": "AudioTrack declare more methods const\n\nChange-Id: I4999e984460893961d0d8092cff17f3cf07d7214\n"
    },
    {
      "commit": "f587ba5b991c7cd91e4df093d0d796bd419e5d67",
      "tree": "0fe274cdfa6dcae81617725b5ea376c86245b104",
      "parents": [
        "787bae0578fbaab6219ebf23494866b224d01438"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 26 16:25:10 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 15:40:56 2012 -0800"
      },
      "message": "Declare more IAudioFlinger methods const\n\nThis is just documentation, as C++ method const-ness doesn\u0027t mean anything\nfor a binder API.  Instead, here const means \"no side effects\".\n\nChange-Id: Iaa9cd2fe477db10ae9a40cac4f79f0faa9b4e5e6\n"
    },
    {
      "commit": "787bae0578fbaab6219ebf23494866b224d01438",
      "tree": "935422276579d6f7c3b4e835e1a79bc9082a2b26",
      "parents": [
        "ff3c83e04ae459c4252b86dd4440b4e37ee92c16",
        "de9719b3ec71472e6bf75117152176af51d1a515"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 08:31:01 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 03 08:31:01 2012 -0800"
      },
      "message": "Merge \"Use audio_in_acoustics_t consistently\""
    },
    {
      "commit": "ff3c83e04ae459c4252b86dd4440b4e37ee92c16",
      "tree": "8de4de832991dd2086313b6168f8523d002f6251",
      "parents": [
        "a0d68338a88c2ddb4502f95017b546d603ef1ec7",
        "3d2f877c1cb4e4ae4ddde7f57f4353de9341f11b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 08:00:52 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 03 08:00:52 2012 -0800"
      },
      "message": "Merge \"Use ToneGenerator::tone_type consistently\""
    },
    {
      "commit": "a0d68338a88c2ddb4502f95017b546d603ef1ec7",
      "tree": "f052125f4720fde00179d41d4ee04e02934052e4",
      "parents": [
        "87f155d6655b2d3b27e69281a29e85c6407e4d26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 16:47:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 07:57:01 2012 -0800"
      },
      "message": "Use NULL not 0 for raw pointers\n\nUse if (p !\u003d NULL) instead of if (ptr)\n\nChange-Id: Iaec3413a59ccbf233c98fcd918cc7d70ac5da9fa\n"
    },
    {
      "commit": "62da7fbd60bee2dd57f503126266e9f04311d400",
      "tree": "22c9118701f42b77ed573001779390437d96872c",
      "parents": [
        "d45ee9d9d61af0791c7c3c51f8d4fe6794ef02a5",
        "83d86538c4c479a9225c75ab27938e8f05abb9c8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 07:18:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 03 07:18:06 2012 -0800"
      },
      "message": "Merge \"Make AudioTrack control block volume field private\""
    },
    {
      "commit": "457d4c01ec0e922771ef57158431f48e4d267905",
      "tree": "b0218b14a0b83343e151f2e5e3ec637210547abc",
      "parents": [
        "e336de43a7cf186fe9d5070f5badfad6e302d9e3",
        "211eeaf17e5565b68447d29799dbf158a33cf4cf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 13:26:12 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 02 13:26:12 2012 -0800"
      },
      "message": "Merge \"More audio_stream_type_t\""
    },
    {
      "commit": "0e265cf36d201a7ccc0238b5c60b50f43d1dc450",
      "tree": "395a2c8f3685c1d1140f3ad12d2dff884d7db6ad",
      "parents": [
        "bf6954598193147cac980b8b5d7ad5215f1dec16"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 10:52:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 11:23:30 2012 -0800"
      },
      "message": "Remove dead mutex in AudioTrack/AudioRecord thread\n\nThe client callback threads had mutexes called AudioTrackThread::mLock\nand ClientRecordThread::mLock.  These mutexes were only used by start()\nand stop(), and were unused by the thread itself.  But start() and\nstop() already have their own protection provided by AudioTrack::mLock\nand AudioRecord::mLock.  So the thread mutexes can be removed.\n\nChange-Id: I098406d381645d77fba06a15511e179a327848ef\n"
    },
    {
      "commit": "d459b485c61bd3e7fd81c5cd3af8ada27fc3e8d3",
      "tree": "394810d0fda09babebb89e1eff80ec54509c5a14",
      "parents": [
        "bb62819aa34b0e89090ccc50e5915e25bc137583"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Jan 31 11:16:24 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Jan 31 11:16:24 2012 -0800"
      },
      "message": "Slighly improve the API to discover if the OMX stack is running in the local\n\nprocess.\n\nChange-Id: Idd3c2f0d4a9542af01a3fdfd3b0bfab90e083505\n"
    },
    {
      "commit": "211eeaf17e5565b68447d29799dbf158a33cf4cf",
      "tree": "5b309757ae12403d5edd39f7e7d99cc3b405766c",
      "parents": [
        "fd267d7cf640225bb57f0ed1af44efc153275f6d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 09:37:45 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 16:33:43 2012 -0800"
      },
      "message": "More audio_stream_type_t\n\nChange-Id: I1260259efe0aa3fc1ef13de69758aaa592e1f815\n"
    },
    {
      "commit": "3d2f877c1cb4e4ae4ddde7f57f4353de9341f11b",
      "tree": "02ba1339028105733ff3897c5c72952781dc793d",
      "parents": [
        "a3a2cd4072aaa2d93c91251a786eb7323f8d2c27"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 15:25:25 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 16:01:44 2012 -0800"
      },
      "message": "Use ToneGenerator::tone_type consistently\n\nAlso remove defaults in startToneCommand(), they\u0027re not needed and the\ndefault for tone type was nonsense.\n\nChange-Id: I70fa8cee4f3dbb8c66ceb3719c8d3d2f447f05b9\n"
    },
    {
      "commit": "de9719b3ec71472e6bf75117152176af51d1a515",
      "tree": "d745196f8aa6832a18e380d78ad1bd1eae1e9e8f",
      "parents": [
        "a3a2cd4072aaa2d93c91251a786eb7323f8d2c27"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 12:32:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 13:31:54 2012 -0800"
      },
      "message": "Use audio_in_acoustics_t consistently\n\nChange-Id: I0a9dd668fb2e57b1c3ece3190588194974b99062\n"
    },
    {
      "commit": "eba51fb3a361f67a6a64d5a16eba6084fe27d60e",
      "tree": "2d3dc41818d33d596e66486dcf509086b9dde1e0",
      "parents": [
        "80a0d2de0a7db5cdcaf40fe33b14523b65d19423"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 23 13:58:49 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 26 16:50:19 2012 -0800"
      },
      "message": "Use audio_source_t consistently\n\nWas a mix of audio_source_t, uint8_t, and int.\n\nRelated fixes:\n - fix comments in MediaRecorder.java\n - AudioPolicyService server side was not checking source parameter at\n   all, so if the client wrapper was bypassed, invalid values could be\n   passed into audio HAL\n - JNI android_media_AudioRecord_setup was checking source for positive\n   values, but not negative values. This test is redundant, since already\n   checked at Java and now checked by AudioPolicyService also, but might\n   as well make it correct.\n\nChange-Id: Ie5e25d646dcd59a86d7985aa46cfcb4a1ba64a4a\n"
    },
    {
      "commit": "83d86538c4c479a9225c75ab27938e8f05abb9c8",
      "tree": "72fdff9fb9bb7e41fe48c41bfed65ab83b64f85f",
      "parents": [
        "58f30210ea540b6ce5aa6a46330cd3499483cb97"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 14:39:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 16:19:59 2012 -0800"
      },
      "message": "Make AudioTrack control block volume field private\n\nThis is part of the process of abstracting the control block\nto make it easier to maintain.\n\nChange-Id: Idb8f461e68dab3bcf268159cc0781651c6fb7094\n"
    },
    {
      "commit": "af0b82748ed900efab48068137114740cc84ee8f",
      "tree": "576307fdbeb7b1501f97f846aa4af7c2ae4af17f",
      "parents": [
        "58f30210ea540b6ce5aa6a46330cd3499483cb97",
        "112ab3e11b9992814363e0f9c629ef7fba86950b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 15:06:01 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 20 15:06:01 2012 -0800"
      },
      "message": "Merge \"Fix warning for redundant typedef\""
    },
    {
      "commit": "58f30210ea540b6ce5aa6a46330cd3499483cb97",
      "tree": "8c559ac8ca7892803b62e5e6d6018e9a4f4533a3",
      "parents": [
        "9bf3a2f69bbfa2562664181b779941e776b7e835"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 12:27:51 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 14:41:34 2012 -0800"
      },
      "message": "Use audio_format_t consistently, continued\n\nWas int or uint32_t.\n\nWhen AudioFlinger::format can\u0027t determine the correct format,\nreturn INVALID rather than DEFAULT.\n\nInit mFormat to INVALID rather than DEFAULT in the constructor.\nSubclass constructors will set mFormat to the correct value.\n\nChange-Id: I9b62640aa107d24d2d27925f5563d0d7407d1b73\n"
    },
    {
      "commit": "4a98a7c95f3c7d1e8c2913086ce35533a7d5cbf3",
      "tree": "b2b8fe52281fcb953146b8cb620a1a72babd7bdf",
      "parents": [
        "31acba114c686e7364fd8875c89e48acb32f9733",
        "9096f3471434d7f0d2419ac0ee2a618045489718"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 12:16:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 20 12:16:06 2012 -0800"
      },
      "message": "Merge \"Fix typos in string constants\""
    },
    {
      "commit": "d967f0a099db2b71597a3127134afd4a46287a4a",
      "tree": "6428f1e6df83934c1ae6b46c10d6ee19cfe35c6a",
      "parents": [
        "05bfe50e13793404a78c20c850d467d17734d496",
        "7fc9a6fdf146ded90b51c52f4a05d797294dcb85"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 12:14:32 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 20 12:14:32 2012 -0800"
      },
      "message": "Merge \"Remove redundant get()\""
    },
    {
      "commit": "05bfe50e13793404a78c20c850d467d17734d496",
      "tree": "170ad8aee42f47bf510dcae85e1b0e6657ab6e32",
      "parents": [
        "ea3cc3bca949139e401b77f2ac0cce7ac6e76f8f",
        "511754b5839fd9b09fc56b89ae007fbc39084a33"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 11:49:04 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 20 11:49:04 2012 -0800"
      },
      "message": "Merge \"Move memcpy_to_i16_from_u8 to audio_utils\""
    },
    {
      "commit": "7fc9a6fdf146ded90b51c52f4a05d797294dcb85",
      "tree": "215cbb16f9babb95e8598123219abc9fed6156b9",
      "parents": [
        "27a0d83f53ddbfd6449ab0e3c786742a2cd135a9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 10 10:46:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 11:44:26 2012 -0800"
      },
      "message": "Remove redundant get()\n\nget() is almost always unnecessary, except in a LOG.\nAlso no need to check for !\u003d 0 before calling get().\n\nChange-Id: Ib06e7a503f86cf102f09acc1ffb2ad085025516d\n"
    },
    {
      "commit": "112ab3e11b9992814363e0f9c629ef7fba86950b",
      "tree": "881b2166b745db93ca10fe26e7274fdc11a52f87",
      "parents": [
        "ea3cc3bca949139e401b77f2ac0cce7ac6e76f8f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 11:11:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 11:11:38 2012 -0800"
      },
      "message": "Fix warning for redundant typedef\n\nframeworks/base/media/libmedia/autodetect.cpp:22: warning: \u0027typedef\u0027 was ignored in this declaration\n\nChange-Id: I8c7404b9f5aa515c0fe92a5a46f24248d6fe96bf\n"
    },
    {
      "commit": "ea3cc3bca949139e401b77f2ac0cce7ac6e76f8f",
      "tree": "461e74fe9f5d14b718732ff58edc35164827ae01",
      "parents": [
        "6f444c95d86936217bf49fc11d279851b0fa364d",
        "0b07b8085d7b837b4dd5f09e0c8c39408f6bdbf7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 10:07:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 20 10:07:06 2012 -0800"
      },
      "message": "Merge \"Remove dead setRingerMode(mode, mask)\""
    },
    {
      "commit": "9096f3471434d7f0d2419ac0ee2a618045489718",
      "tree": "ea05feac3518a0f1f8daaf5a43750dd3bbfde9da",
      "parents": [
        "27a0d83f53ddbfd6449ab0e3c786742a2cd135a9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 08:14:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 08:18:22 2012 -0800"
      },
      "message": "Fix typos in string constants\n\nThese were copy/paste errors in code that was copied from AudioTrack.\n\nChange-Id: I64a04d6026667884ddb1fefba67a71d69c691d62\n"
    },
    {
      "commit": "27a0d83f53ddbfd6449ab0e3c786742a2cd135a9",
      "tree": "6bb67bb1bf2d9c069053a98a0a6d6a31bfa2fd02",
      "parents": [
        "241fc78866b2aefd75cd1890df5a75b7008728e8",
        "a3f1fa308728976fc9ca1b4f37d26e633b32b9ac"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 06:10:37 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 19 06:10:37 2012 -0800"
      },
      "message": "Merge \"Fix incorrect includes of AudioTrack.h\""
    },
    {
      "commit": "241fc78866b2aefd75cd1890df5a75b7008728e8",
      "tree": "e7bb3a3c5ee9749b09a3a914f348f13c77334216",
      "parents": [
        "86905f445c96743b037eed6360afa956a85b019c",
        "347966c827883711d1ec631f204e4a6ab74e9d99"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 06:09:20 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 19 06:09:20 2012 -0800"
      },
      "message": "Merge \"Simplify range check for audio_mode_t (continued)\""
    },
    {
      "commit": "a3f1fa308728976fc9ca1b4f37d26e633b32b9ac",
      "tree": "613598b5d86ce915b4f505c0d9c19592fa8f7d79",
      "parents": [
        "04eaf3e5f20d7faa956c0d672024ffb5117f4c26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 14:54:46 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 16:06:47 2012 -0800"
      },
      "message": "Fix incorrect includes of AudioTrack.h\n\nRemove unnecessary includes of AudioTrack.h.\nUse forward declaration of class names in preference to #include when possible.\n\nChange-Id: I12982811fa75c2c7695d8bbfa595a7aaec047dc0\n"
    },
    {
      "commit": "347966c827883711d1ec631f204e4a6ab74e9d99",
      "tree": "fb6dccc3b6a583c319cf0a82395c93461835a5ae",
      "parents": [
        "04eaf3e5f20d7faa956c0d672024ffb5117f4c26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 14:58:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 15:57:40 2012 -0800"
      },
      "message": "Simplify range check for audio_mode_t (continued)\n\nMissed one place in earlier CL of same name\n\nChange-Id: I0dd25364d0b8d5d731c02d352f139a0c8d4df1a8\n"
    },
    {
      "commit": "0b07b8085d7b837b4dd5f09e0c8c39408f6bdbf7",
      "tree": "97068573fa84e254ad129147682603d5818c2ae2",
      "parents": [
        "04eaf3e5f20d7faa956c0d672024ffb5117f4c26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 14:56:06 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 15:10:31 2012 -0800"
      },
      "message": "Remove dead setRingerMode(mode, mask)\n\nChange-Id: Ia4cc8be8424a40b3dcb7ebd0264fdff4e5247f7f\n"
    },
    {
      "commit": "c813985abd8ba61e999b3505f6a332574f87a1be",
      "tree": "d87c4ec564d4f3d19db4c1032661799cce847617",
      "parents": [
        "04eaf3e5f20d7faa956c0d672024ffb5117f4c26"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 18 10:51:55 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 18 10:51:55 2012 -0800"
      },
      "message": "Temporarily restore AudioSystem/AudioTrack APIs with their former signatures\n\nuntil we get updated prebuilts from vendor.\n\nChange-Id: I8aae81d2513edca0ab268053a11c8c4206879e61\n"
    },
    {
      "commit": "04eaf3e5f20d7faa956c0d672024ffb5117f4c26",
      "tree": "a1c32a1cd2e94f80e11748b6e56c0d7899492c11",
      "parents": [
        "63ad6aacc6ce6b729bf25f41376cfea731a2c1eb",
        "b1cf75c4935001f61057989ee3cf27bbf09ecd9c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 07:46:18 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 18 07:46:18 2012 -0800"
      },
      "message": "Merge \"Track volume cleanup\""
    },
    {
      "commit": "63ad6aacc6ce6b729bf25f41376cfea731a2c1eb",
      "tree": "7f5a8de6e8540f2424668e5c650dee567194fb4d",
      "parents": [
        "f237a30e9344d43f832ba11db6f62c6ad2084444",
        "83844cc2f95dc279015b47fd1e18c7cb4eabe9a1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 17 17:35:03 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 17 17:35:03 2012 -0800"
      },
      "message": "Merge \"audio framework: manage stream volume per device\""
    },
    {
      "commit": "b1cf75c4935001f61057989ee3cf27bbf09ecd9c",
      "tree": "e3daaea6160475e36dedfccaabf5d8b94406d05e",
      "parents": [
        "f237a30e9344d43f832ba11db6f62c6ad2084444"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 12:20:54 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 16:25:17 2012 -0800"
      },
      "message": "Track volume cleanup\n\nAlways read and write track volumes atomically. In most places this was\nalready being done, but there were a couple places where the left and\nright channels were read independently.\n\nChanged constant MAX_GAIN_INT to be a uint32_t instead of a float.\nIt is always used as a uint32_t in comparisons and assignments.\nUse MAX_GAIN_INT in more places.\n\nNow that volume is always accessed atomically, removed the union\nand alias for uint16_t volume[2], and kept only volumeLR.\n\nRemoved volatile as it\u0027s meaningless.\n\nIn AudioFlinger, clamp the track volumes read from shared memory\nbefore applying master and stream volume.\n\nChange-Id: If65e2b27e5bc3db5bf75540479843041b58433f0\n"
    },
    {
      "commit": "511754b5839fd9b09fc56b89ae007fbc39084a33",
      "tree": "7db3e4ac83e2d108dd2190c37887a001faa3664f",
      "parents": [
        "f237a30e9344d43f832ba11db6f62c6ad2084444"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 09:52:19 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 15:15:06 2012 -0800"
      },
      "message": "Move memcpy_to_i16_from_u8 to audio_utils\n\nThis will make it easier for this kind of code to be optimized\nfor each target architecture.\n\nChange-Id: I9efd27d6c0175b00b9a784353244805cec63c0b8\n"
    },
    {
      "commit": "83844cc2f95dc279015b47fd1e18c7cb4eabe9a1",
      "tree": "3e9f329efec962076a0904ce7f093a9a51bac6b1",
      "parents": [
        "263709e7be37c7040aaef385bc5c9389a9b5f514"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 18 16:43:31 2011 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 17 15:15:04 2012 -0800"
      },
      "message": "audio framework: manage stream volume per device\n\nImprove volume management by keeping track of volume for each type\nof device independently.\nVolume for each stream (MUSIC, RINGTONE, VOICE_CALL...) is now maintained\nper device.\n\nThe main changes are:\n- AudioService now keeps tracks of stream volumes per device:\n volume indexes are kept in a HashMap \u003c device , index\u003e.\n active device is queried from policy manager when a volume change request\n is received\n initalization, mute and unmute happen on all device simultaneously\n- Settings: suffixes is added to volume keys to store each device\nvolume independently.\n- AudioSystem/AudioPolicyService/AudioPolicyInterface: added a device argument\nto setStreamVolumeIndex() and getStreamVolumeIndex() to address each\ndevice independently.\n- AudioPolicyManagerBase: keep track of stream volumes for each device\nand apply volume according to current device selection.\n\nChange-Id: I61ef1c45caadca04d16363bca4140e0f81901b3f\n"
    },
    {
      "commit": "3f6448e020969be59ad4d8df99c5296f237ffbd9",
      "tree": "5a55c2ba389c11e41d48842468f3c8aa4d108aa7",
      "parents": [
        "0696400a6bb9abbed62b3b9c6aa105495dc600a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 16 13:11:50 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 11:59:35 2012 -0800"
      },
      "message": "Move fixed_fft to system/media/audio_utils\n\nChange-Id: If8a03911434862a872539c313f54825ffb2cc672\n"
    },
    {
      "commit": "0696400a6bb9abbed62b3b9c6aa105495dc600a2",
      "tree": "2368d7ccb33fbceb99585839b85420e38e59abf0",
      "parents": [
        "a9b21c5a7c24fe14d20372263c0bf5faf3d3e348",
        "f78aee70d15daf4690de7e7b4983ee68b0d1381d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 11:32:53 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 17 11:32:53 2012 -0800"
      },
      "message": "Merge \"Use audio_mode_t consistently\""
    },
    {
      "commit": "a9b21c5a7c24fe14d20372263c0bf5faf3d3e348",
      "tree": "ae5642e47beac63937bc5e812532d3ddfd31507e",
      "parents": [
        "263709e7be37c7040aaef385bc5c9389a9b5f514"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 10:06:38 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 10:06:38 2012 -0800"
      },
      "message": "Rename Visualizer::mLock\n\nThis avoids confusion with parent class AudioEffect\u0027s mLock which is\nprotected.\n\nChange-Id: I2ae0b0869fe3c606f682252973795b34477951d0\n"
    },
    {
      "commit": "613882293184e575a44bff681a3decaefe889e69",
      "tree": "052f84c8fe6e7b201f03117f617c3ad77b8b0dd0",
      "parents": [
        "0107954f72153db747a3727dc1157e9236dfed90",
        "b9980659501d0428d65d8292f3c32da69d37fbd2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 07:27:46 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 17 07:27:46 2012 -0800"
      },
      "message": "Merge \"Use size_t for frame size\""
    },
    {
      "commit": "0107954f72153db747a3727dc1157e9236dfed90",
      "tree": "f279f37a12104778bdf7fa912e2205dd0c339f6e",
      "parents": [
        "b9ac2007cd141992eb5412ffb1c6527e0259b3ab",
        "fff6d715a8db0daf08a50634f242c40268de3d49"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 07:25:36 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 17 07:25:36 2012 -0800"
      },
      "message": "Merge \"Use audio_stream_type_t consistently\""
    },
    {
      "commit": "05632a5fa4b88ca474294887fc92a9fcdf0e2352",
      "tree": "28e36d2cce839d66870ea066a2b334dd9b63c833",
      "parents": [
        "09192653e836b21689f004bf8dee375356641181"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 03 14:22:33 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 15:25:14 2012 -0800"
      },
      "message": "AudioTrack and AudioFlinger send level cleanup\n\nAdd an API to control block for getting/setting send level.\nThis allow us to make the mSendLevel field private.\n\nDocument the lack of barriers.\n\nUse 0.0f to initialize floating-point values (for doc only).\n\nChange-Id: I59f83b00adeb89eeee227e7648625d9a835be7a4\n"
    },
    {
      "commit": "b9980659501d0428d65d8292f3c32da69d37fbd2",
      "tree": "8b703aca299f4f715a65d07cc37b753e9753a941",
      "parents": [
        "f4e76c538f81068bc2e125f3f9ef8b8dd40f2d2a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 09:48:27 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 14:58:44 2012 -0800"
      },
      "message": "Use size_t for frame size\n\nexcept in the control block, where we don\u0027t have room.\n\nIn AudioFlinger::ThreadBase::TrackBase::getBuffer,\nread the frame size from control block only once.\n\nChange-Id: Id6c4bccd4ed3e07d91df6bbea43bae45524f9f4e\n"
    },
    {
      "commit": "fff6d715a8db0daf08a50634f242c40268de3d49",
      "tree": "f5331971b746b2e0d878e1127003a0dab72e5fbb",
      "parents": [
        "09192653e836b21689f004bf8dee375356641181"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 16:38:12 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 10:20:14 2012 -0800"
      },
      "message": "Use audio_stream_type_t consistently\n\nAt native level it was a mixture of audio_stream_type_t, int, uint32_t,\nand uint8_t.  Java is still int.  Also fixed a couple of hard-coded -1\ninstead of AUDIO_STREAM_DEFAULT, and in startToneCommand a hard-coded 0\ninstead of AUDIO_STREAM_VOICE_CALL.\n\nChange-Id: Ia33bfd70edca8c2daec9052984b369cd8eee2a83\n"
    },
    {
      "commit": "4cc55d53d542c4f4ed645738cebb65b9e7eb6c44",
      "tree": "417efab1bc349bfaa4bdf7fccdff0e53fb76e7c0",
      "parents": [
        "d5a8bf0bca459389cdb81fdcc30893516bdce951",
        "e1c3962e268ffc12bfd1bd9ea84da1f135f36960"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 10:30:28 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 12 10:30:28 2012 -0800"
      },
      "message": "Merge \"Use audio_format_t consistently\""
    },
    {
      "commit": "f78aee70d15daf4690de7e7b4983ee68b0d1381d",
      "tree": "c84e36c036a847bdf12f44c949eacb7b3ba79698",
      "parents": [
        "d5a8bf0bca459389cdb81fdcc30893516bdce951"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 11:00:47 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 09:52:37 2012 -0800"
      },
      "message": "Use audio_mode_t consistently\n\nIt was int or uint32_t.\nAlso make getMode() const.\n\nChange-Id: Ibe45aadbf413b9158e4dd17f2b3bcc6355288d37\n"
    },
    {
      "commit": "83bc7f3cf78b28a818417f40a4f0c00593993366",
      "tree": "92870fd797bc4cc281c60e463848e27e7f16b1ea",
      "parents": [
        "3bba0e0a60b15895134bc2c731d21fd7ebd28784"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 12:38:13 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 12:27:41 2012 -0800"
      },
      "message": "libmedia new can\u0027t fail on Android\n\nChange-Id: Ie79dd5abb8078b35474bf0f1b3a6ff994a3a3360\n"
    },
    {
      "commit": "3bba0e0a60b15895134bc2c731d21fd7ebd28784",
      "tree": "d2a61bc06a6a7338fb5a08505a8865ea378c27e6",
      "parents": [
        "544096247a907bc55688e5c03d5586ba5219d82a",
        "f8c1a6f7ef515810356816b50bfe18af95f3ec32"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 11:40:27 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 11 11:40:27 2012 -0800"
      },
      "message": "Merge \"Fix race in AudioSystem::getInputBufferSize\""
    },
    {
      "commit": "544096247a907bc55688e5c03d5586ba5219d82a",
      "tree": "e5a79fd39e116b521df89d20d09f1e472153ce85",
      "parents": [
        "e3a067f8bc98134941ee1a4da8c2a92a15aaa9cc",
        "0049acfc8b1c33eb90afc925dacd08a487618e17"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 11:39:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 11 11:39:06 2012 -0800"
      },
      "message": "Merge \"Fix bug in JetPlayer::loadFromFile\""
    },
    {
      "commit": "e3a067f8bc98134941ee1a4da8c2a92a15aaa9cc",
      "tree": "97e9e84c95a32d4f956de7cfc466242c85d5f808",
      "parents": [
        "e51dd6dd7b7034c171246ebf5e08b187ef17150c",
        "930f4caa1e311ef7ff538c421a324396157eb24f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 11:38:21 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 11 11:38:21 2012 -0800"
      },
      "message": "Merge \"Simplify range check for audio_mode_t\""
    },
    {
      "commit": "0132e12ded92529b1520ad62f5134fa31361c90b",
      "tree": "ae97a86b1eb46ac93290ca795a7c0e08773c06f9",
      "parents": [
        "2ea3410d0d3d592ce30c3ba0ce3e0e63b1244057",
        "1099586bd48a8a90bb1cc4e7c279703bc7259214"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 10:23:34 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 11 10:23:34 2012 -0800"
      },
      "message": "Merge \"Declare IAudioTrack methods in binder opcode order\""
    },
    {
      "commit": "f8c1a6f7ef515810356816b50bfe18af95f3ec32",
      "tree": "39adc0cad7ded05219a3d4ca9f9388511bbe7c97",
      "parents": [
        "c1dc1cb1d1eaf84e88669f1a5f22579a0d9237c2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 10 09:01:19 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 10 15:43:48 2012 -0800"
      },
      "message": "Fix race in AudioSystem::getInputBufferSize\n\nIt was caching the recording parameters without a mutex.\n\nChange-Id: Ic4b9f621cbc080d224c2233cf3ca3454fc0f19bd\n"
    },
    {
      "commit": "0049acfc8b1c33eb90afc925dacd08a487618e17",
      "tree": "7e4d4b45c01eddf9fe71248edc7ebd24f70d2fc5",
      "parents": [
        "c1dc1cb1d1eaf84e88669f1a5f22579a0d9237c2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 10 08:41:33 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 10 15:43:24 2012 -0800"
      },
      "message": "Fix bug in JetPlayer::loadFromFile\n\nA long pathname would corrupt the heap due to incorrect use of strncpy.\n\nAlso was using hard-coded constant 256 instead of PATH_MAX.\n\nChange-Id: Iba382bbb38624fbc41fec91449f9814f77d4ac0d\n"
    },
    {
      "commit": "930f4caa1e311ef7ff538c421a324396157eb24f",
      "tree": "ac544b75a8964ac7759355fd0659d246070bcc57",
      "parents": [
        "c1dc1cb1d1eaf84e88669f1a5f22579a0d9237c2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 16:47:31 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 10 15:42:32 2012 -0800"
      },
      "message": "Simplify range check for audio_mode_t\n\nAudioSystem::setMode previously allowed negative modes, but these were\nthen rejected by AudioFlinger.\n\nNow negative modes (including AUDIO_MODE_INVALID and AUDIO_MODE_CURRENT)\nare explicitly disallowed.\n\nChange-Id: I0bac8fea737c8eb1f5b6afbb893e48739f88d745\n"
    },
    {
      "commit": "5c7b3bcc88e2b472f1f7b416d89222714b96a567",
      "tree": "8de86a7b665428b3dddc2fce5abbbe722e37ef80",
      "parents": [
        "febdbfec3b1ed0e20aa4f10bfdd82702d3e41f4b",
        "9a2aaf927e56a4b4acab23ef16b3f133a9f48a63"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 09 10:24:40 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 09 10:24:40 2012 -0800"
      },
      "message": "Merge \"Clean up AudioTrack::mActive and stopped()\""
    },
    {
      "commit": "29357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47",
      "tree": "3bdafe4b02fe36f6ee29c3170f0b0d2799bebf86",
      "parents": [
        "d709ca9c6a0fa1c8f40cbe624a119398643c5087"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Sun Jan 08 13:19:13 2012 +0000"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\n"
    },
    {
      "commit": "1099586bd48a8a90bb1cc4e7c279703bc7259214",
      "tree": "c1b5f494fb3a212954495539bfe0c506bfc3dd05",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 03 14:50:23 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 13:35:57 2012 -0800"
      },
      "message": "Declare IAudioTrack methods in binder opcode order\n\nThis makes it easier to match up the declarations.\n\nChange-Id: I0996c20b2903b778b356dfe52b07b0ec634855dd\n"
    },
    {
      "commit": "5ff1dd576bb93c45b44088a51544a18fc43ebf58",
      "tree": "c002dcda87f08329197b01395539bd25f10ca737",
      "parents": [
        "8a08dcc0a5de19a904e77d5f31bed3dff9a59890"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Jan 05 23:22:43 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 10:07:54 2012 +0000"
      },
      "message": "Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157065\n\nBug: 5449033\nChange-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69\n"
    },
    {
      "commit": "e1c3962e268ffc12bfd1bd9ea84da1f135f36960",
      "tree": "d24fac9434dbe5808a6c31a50414da7b5ce47c9a",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 09:36:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 13:34:54 2012 -0800"
      },
      "message": "Use audio_format_t consistently\n\nWas int, uint32_t, uint16_t, and uint8_t with 2-bit bitfield.\nAlso replace 0 by AUDIO_FORMAT_DEFAULT and replace 1 by\nAUDIO_FORMAT_PCM_16_BIT.\n\nChange-Id: Ia8804f53f1725669e368857d5bb2044917e17975\n"
    }
  ],
  "next": "9a2aaf927e56a4b4acab23ef16b3f133a9f48a63"
}
