)]}'
{
  "log": [
    {
      "commit": "c49d9f8511442ce555fa7365de24f3ef21928670",
      "tree": "99e613171c80ca3414e62962193f48bc4e1d259b",
      "parents": [
        "7165268ffa6c7b6b405b6afad82e2a346500e8ee",
        "a8542f05253e31a64428baf93a31183988a065bb"
      ],
      "author": {
        "name": "Ruben Brunk",
        "email": "rubenbrunk@google.com",
        "time": "Fri Aug 16 17:36:49 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 16 17:36:49 2013 -0700"
      },
      "message": "am a8542f05: am e9f3a314: Merge \"Refactor CameraService to handle errors properly.\" into klp-dev\n\n* commit \u0027a8542f05253e31a64428baf93a31183988a065bb\u0027:\n  Refactor CameraService to handle errors properly.\n"
    },
    {
      "commit": "0f61d8f14aa368c9cd7076528e8096e10ed100a0",
      "tree": "ed95cb70d56dd3a732f4e1909c96e7889b23ce94",
      "parents": [
        "75c16dde986e16ac5fd4d34b06b0cc6a90679866"
      ],
      "author": {
        "name": "Ruben Brunk",
        "email": "rubenbrunk@google.com",
        "time": "Thu Aug 08 13:07:18 2013 -0700"
      },
      "committer": {
        "name": "Ruben Brunk",
        "email": "rubenbrunk@google.com",
        "time": "Fri Aug 16 14:42:28 2013 -0700"
      },
      "message": "Refactor CameraService to handle errors properly.\n\nBug: 10361136\n\n-Connect calls now return status_t error flags.\n\nChange-Id: Idca453b111e5df31327f6c99ebe853bb2e332b95\n"
    },
    {
      "commit": "7165268ffa6c7b6b405b6afad82e2a346500e8ee",
      "tree": "ec120fa6844211de77859c5199cc2382ff2cab53",
      "parents": [
        "b86432b1d62e7c9034223f0120b9bceb44215c41"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 15:17:55 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 16 14:10:13 2013 -0700"
      },
      "message": "Don\u0027t lock and then immediately unlock effect chains\n\nChange-Id: Id9a4b1e9c49cecfd3a008a7814b5c14dad9a5831\n"
    },
    {
      "commit": "b86432b1d62e7c9034223f0120b9bceb44215c41",
      "tree": "6486a52a543beacdd79cfe3c5d40cb27692014de",
      "parents": [
        "9e98235a9e9bb870e1c76911e3b4d00386a52c39"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 15:08:12 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 16 14:10:13 2013 -0700"
      },
      "message": "Fix races in reading activeTrack-\u003emState without lock\n\nChange-Id: I8cfbd9884fa5959a846ddb52cdc797266b896769\n"
    },
    {
      "commit": "9e98235a9e9bb870e1c76911e3b4d00386a52c39",
      "tree": "39eef4de6e3c0bba45ab950efb8431fc92694985",
      "parents": [
        "5edadd46c76c5ff1c3edabf2ea943c2278e82e1c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 14:39:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 16 14:10:13 2013 -0700"
      },
      "message": "Simplify flow by having all mActiveTrack.clear() continue\n\nChange-Id: Icd160b0aa79a747bd19fabaa7feee813afb155e0\n"
    },
    {
      "commit": "5edadd46c76c5ff1c3edabf2ea943c2278e82e1c",
      "tree": "df18e48e7d4d385ea590dd3afea363857513e100",
      "parents": [
        "ad5bcc29b216412dbc4d936c270d30620c68f361"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 16:30:49 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 16 14:10:13 2013 -0700"
      },
      "message": "Don\u0027t sleep with effect chains locked\n\nChange-Id: I6eae037304d3dc8a8f3ef55c5b210fd4f8856e99\n"
    },
    {
      "commit": "ad5bcc29b216412dbc4d936c270d30620c68f361",
      "tree": "29664377c45c34d11661b13dc31176f4d944e13d",
      "parents": [
        "1ba19cd7fcdf18ab6efab2a1b831affab9a46157"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 14:21:34 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 16 14:10:13 2013 -0700"
      },
      "message": "Copy mActiveTrack for stability and easier access\n\nChange-Id: If0d88610ec35128054a22f42b2d79f07c4b724eb\n"
    },
    {
      "commit": "1ba19cd7fcdf18ab6efab2a1b831affab9a46157",
      "tree": "825e9cbd89eb78bcf729cd0f23e5d386ab341094",
      "parents": [
        "e44db0d659d25bbb5caee2464668ba55403a12e5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 14:02:21 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 16 14:10:13 2013 -0700"
      },
      "message": "Simplify code by pulling up mActiveTrack \u003d\u003d 0 test\n\nChange-Id: I225bb032b2fde97d891191f3599d9850c2d27bb2\n"
    },
    {
      "commit": "d9fc34fb0fcfcc739f868b116edf50c62af19d5e",
      "tree": "e9866027d09e762d71946fb66acc9db32915670f",
      "parents": [
        "4ef0b463a56c19bad9197aa9f90d792090461429"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 13:55:45 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 15 10:18:27 2013 -0700"
      },
      "message": "Remove dead \u0027if\u0027\n\nChange-Id: I23c082f0115ae598cad293be0ac66a130afb692a\n"
    },
    {
      "commit": "4ef0b463a56c19bad9197aa9f90d792090461429",
      "tree": "f601c1fd4510af2639696d8b04ebd03d9eee1dfb",
      "parents": [
        "62cf1fda94a21e0efac1778c54a03672c122a23b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 13:52:27 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 15 10:18:27 2013 -0700"
      },
      "message": "Fix race in checking exitPending() in RecordThread::threadLoop()\n\nChange-Id: I97a1c5ab17a6c334d275be794392dcf6c9a88d0e\n"
    },
    {
      "commit": "2cfbf88b89854f30b295e8ae26a031edb8d712f8",
      "tree": "de470785a197074c16bd570a809c429f8916c181",
      "parents": [
        "26a4029c95620a2b98187cf003cd3c58eea03747"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 13:12:11 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:21:00 2013 -0700"
      },
      "message": "Simplify code that checks for record standby\n\nTake advantage of the new processConfigEvents_l()\nand it\u0027s post condition that mConfigEvents is empty.\n\nChange-Id: Icd40fb175f3e374203c9c8d2e9df2c3929bed89b\n"
    },
    {
      "commit": "26a4029c95620a2b98187cf003cd3c58eea03747",
      "tree": "86a061b3224ea4f70a7e4062c601c860d2efe8cc",
      "parents": [
        "d5418eb594435c958d6c37fa9938161a0112adbd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 13:11:40 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:20:20 2013 -0700"
      },
      "message": "checkForNewParameters_l returns a value which is currently ignored\n\nChange-Id: I19b9cc9df094d67560f6e832d94fa284dca18687\n"
    },
    {
      "commit": "d5418eb594435c958d6c37fa9938161a0112adbd",
      "tree": "c7175f3ce1e40259527cd71b9042fa68c561ec16",
      "parents": [
        "f777331418a86cd9fd709af898ef24a69967aeb4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 13:11:06 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:19:06 2013 -0700"
      },
      "message": "Use Autolock where possible\n\nChange-Id: Id0e1836831c45beda4e5cb11e983005ea699fc2a\n"
    },
    {
      "commit": "f777331418a86cd9fd709af898ef24a69967aeb4",
      "tree": "81b985eeffa164abe2155053d75c7a9f07fd3efb",
      "parents": [
        "c527a7c2b1bfd26e8f3086e1b653d56e521379d9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 16:00:42 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:18:59 2013 -0700"
      },
      "message": "Add ThreadBase::processConfigEvents_l()\n\nChange-Id: I6bcdc212a984c52ab98b0b0744943b4ecc1e1542\n"
    },
    {
      "commit": "c527a7c2b1bfd26e8f3086e1b653d56e521379d9",
      "tree": "0946aada0e5cefeebc9fc87ec2d0ae843c5b0553",
      "parents": [
        "47c2070b2ce8aedb7300c0aad91caccf3c383841"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 15:43:49 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:18:57 2013 -0700"
      },
      "message": "Pull in scope of effectChains\n\nChange-Id: Id5336f8663099088a0958fb8bd59fc5df9f92829\n"
    },
    {
      "commit": "47c2070b2ce8aedb7300c0aad91caccf3c383841",
      "tree": "e208b41bdd4c0e6f687689677bce0b46ad7a7c0d",
      "parents": [
        "2d94426cd3302cb1215c92c5f1c4b90c24ceb72b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 15:37:35 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:18:52 2013 -0700"
      },
      "message": "Add record thread locking comments and FIXMEs\n\nChange-Id: Ia5bdc9b8b013c2e40af17c82833051290bf4df70\n"
    },
    {
      "commit": "2d94426cd3302cb1215c92c5f1c4b90c24ceb72b",
      "tree": "af82d92d37fa470693c375fc30714c93f33f7d1f",
      "parents": [
        "295a6e8a0c0f3bc10ba6e03d3342820d4a4e85b8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 13:54:08 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:18:50 2013 -0700"
      },
      "message": "Convert if/else-if in threadLoop to switch\n\nChange-Id: I7428abb332ead6c2a1df5903f6c4e166be1f7abb\n"
    },
    {
      "commit": "3468e8a4d79cc6a7bb0f03f8382426195bed44df",
      "tree": "90b5254f472d47ceeb5d40a1a65fc54ae0675987",
      "parents": [
        "266a718ccdfcbdf5d6f64b3e047e7a7ebe8814c2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 16:01:22 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:08:16 2013 -0700"
      },
      "message": "Fix switch indentation to follow our audio style\n\nChange-Id: I137763917962b276838715319b163c763cb54c71\n"
    },
    {
      "commit": "34fca34606b448e6b71c2942f63cb13a0aebd620",
      "tree": "45c5942f63ba22888ed24b5801400cde07b3fae2",
      "parents": [
        "3255095af6677caeeebf81c8891ce8db745617ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:48:14 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:56:00 2013 -0700"
      },
      "message": "Explicit comparison to 0 for integral types\n\nChange-Id: I2bfe864d1bda719581e297a38d96abfc0e3748b9\n"
    },
    {
      "commit": "3255095af6677caeeebf81c8891ce8db745617ff",
      "tree": "376e23fcb3425e63b984cbfa6e7b8939c0b040b6",
      "parents": [
        "6e2ebe97f2ad0a21907f20f9ee644c4eacbb7a40"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 10:45:10 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:56:00 2013 -0700"
      },
      "message": "Move local variable declarations to point of first use\n\nChange-Id: Ia0fc4b099a3cf8bb5b67b287e7687e9dc9691e0e\n"
    },
    {
      "commit": "6e2ebe97f2ad0a21907f20f9ee644c4eacbb7a40",
      "tree": "ea9d525f25620253ea86f434452bc37fbad73f76",
      "parents": [
        "e198c360d5e75a9b2097844c495c10902e7e8500"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:14:51 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:55:59 2013 -0700"
      },
      "message": "Use curly braces in \u0027if\u0027 to make it easier to add logs\n\nChange-Id: I58b33fefdd8bf703647414157a99a3223be3531c\n"
    },
    {
      "commit": "e198c360d5e75a9b2097844c495c10902e7e8500",
      "tree": "be6884fcddb31fb8feda454e38b00053ccac7bf1",
      "parents": [
        "2fc14730e4697a6f456b4631549c9981f6b0b115"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:13:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:55:52 2013 -0700"
      },
      "message": "Whitespace\n\nChange-Id: Id3ccc183a03421330d0498faaa62a45915cdc3d6\n"
    },
    {
      "commit": "2fc14730e4697a6f456b4631549c9981f6b0b115",
      "tree": "0f48a06513b295104f8c085a971fcbdf3feca1fe",
      "parents": [
        "c0029a8551d65929cbf51a55bd3bae3342a1f2fe"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 14:58:14 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:24:18 2013 -0700"
      },
      "message": "Comments\n\nChange-Id: I56f82904cb3855bad6f33ad1ff4ddf66a61c5720\n"
    },
    {
      "commit": "c0029a8551d65929cbf51a55bd3bae3342a1f2fe",
      "tree": "ef53c7838044f5b48370d3339dbf7279b3e79ed7",
      "parents": [
        "09ffeabfa7365ccbe104ed8d642165c9aaf1aff2",
        "ec3fb50c8ee25ac263a9c2cbe9242f877bef960c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 15:28:12 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 13 15:28:13 2013 +0000"
      },
      "message": "Merge \"Check input HAL channel mask instead of channel count\""
    },
    {
      "commit": "030033342a6ea17003e6af38a56c7edc6d2ead01",
      "tree": "342168125e3c97f01af88dfe133f99c7f71d7e3d",
      "parents": [
        "9156ef3e11b68cc4b6d3cea77f1f63673855a6d1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 15:40:54 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 16:35:25 2013 -0700"
      },
      "message": "Clean up error handling in createTrack and openRecord\n\nOutside callers now use initCheck() to determine whether a TrackBase\nhas been created successfully, instead of relying on internal knowledge.\n\nPreviously, callers needed to know that a TrackBase was only valid if it\u0027s\ngetCbk() !\u003d 0.  For a Track (playback), they needed to know to also check\nthe track\u0027s name (track index).  Now, outsiders can just call initCheck().\n\nOther changes:\n - Return a 0 reference if track creation fails\n - Remove a dead line of code in AudioFlinger::openRecord\n\nChange-Id: If374924a3f6fd27906f625aa83dd0a1e3f506e00\n"
    },
    {
      "commit": "9156ef3e11b68cc4b6d3cea77f1f63673855a6d1",
      "tree": "700dbc7c88d9ea46944cf9c35de4997195a4e724",
      "parents": [
        "e51a70ab6326715f614c737de1e8ea1941057b3b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 15:39:08 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 16:26:12 2013 -0700"
      },
      "message": "Status pointer passed by caller is always non-NULL\n\nin createTrack, openRecord, createEffect, createTrack_l,\ncreateRecordTrack_l, and createEffect_l.\n\nChange-Id: I2e459e4de9c78145f4d496e6abf289479a2f0941\n"
    },
    {
      "commit": "e51a70ab6326715f614c737de1e8ea1941057b3b",
      "tree": "d9e8a714907e01fbde51605c2b6ba3ebf9c68424",
      "parents": [
        "e92db4bdb575d897d6bbd5086761fa9387393c83",
        "aac30336994235e42a92861eb83289131a6b94dd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 18:53:12 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 12 18:53:12 2013 +0000"
      },
      "message": "Merge \"Remove obsolete TrackBase::getBuffer()\""
    },
    {
      "commit": "e92db4bdb575d897d6bbd5086761fa9387393c83",
      "tree": "05d3fd3203ceb9542ce5deacb5522177a9a2bf1f",
      "parents": [
        "412494b1711d18d7a3be2bb6022814c8ac46f473",
        "cf04c2cb8e031acc03c1c91cb1ccab15098c89b6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 18:45:02 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 12 18:45:02 2013 +0000"
      },
      "message": "Merge \"Pull up readyToRun into ThreadBase\""
    },
    {
      "commit": "b0e6b967c290c905c4c696df4a8ac9e9d591928b",
      "tree": "79a36e1b212adcdd6c52307f76e161c22b9aadec",
      "parents": [
        "14575a203b93cd5988738913b8589e5a7271a945",
        "c1fac191069774c7bfcb062edbb821ea56e7dbc0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 17:44:53 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 12 17:44:54 2013 +0000"
      },
      "message": "Merge \"Simplify the code that allocates mMixBuffer by removing mAllocMixBuffer\""
    },
    {
      "commit": "309f7abb3c170ba764e67e9b6fed31fb442e9953",
      "tree": "745c10c2db038f0e549a6c97a5e5abd5bf3de137",
      "parents": [
        "3a6d5ded7187ae324532a60b03532c33d607e282",
        "937098b9b564a779ff1c8c2d9e60769ee5c69810"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 09 15:20:32 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 09 15:20:32 2013 +0000"
      },
      "message": "Merge \"Use 0 for sp\u003c\u003e, NULL for raw pointers\""
    },
    {
      "commit": "3a6d5ded7187ae324532a60b03532c33d607e282",
      "tree": "cc35999a6033af71465d1c6064be32e9c3e71d84",
      "parents": [
        "5e078add4022360d18328ec41eee75703e8c424c",
        "f506e9495f2b2123b3bec7d42ec8ef13c6213ee8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 09 15:11:07 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 09 15:11:07 2013 +0000"
      },
      "message": "Merge \"Rename reqChannels to reqChannelMask\""
    },
    {
      "commit": "f874f1375d758c8a7a84572a94371fbd4085f0df",
      "tree": "c0e04f9c8414788c6f55d61bbf256cf92d29123e",
      "parents": [
        "2c03d0a2b741310c47d5f625cbdec4a4e4a0778e",
        "70949c47fbae3f836d15f040551d7631be3ed7c2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 08 16:47:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 08 16:47:17 2013 +0000"
      },
      "message": "Merge \"Pull up mBufferSize from RecordThread to ThreadBase\""
    },
    {
      "commit": "2c03d0a2b741310c47d5f625cbdec4a4e4a0778e",
      "tree": "d87782874178a103e5c01a2d78260b29773345e3",
      "parents": [
        "6b682a20b66322bf673f575f8c4fd9e45f3e8183",
        "6ae6b811666865815ebb1f670aacb1a0f2edaa73"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 08 16:33:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 08 16:33:35 2013 +0000"
      },
      "message": "Merge \"Remove obsolete field RecordTrack::mAudioRecordServerProxy\""
    },
    {
      "commit": "da09d5f1d8c7946708f8504daf305d96713b78bd",
      "tree": "cb41220c24654b8f599d5206f28d21c2dd240a21",
      "parents": [
        "f31abb4ee82050030b3e5a0793bb2b8e30f40d31",
        "fb872cc6f77f6d74011fab703b3edd7023c736cb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 08 15:19:02 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 08 15:19:02 2013 +0000"
      },
      "message": "Merge \"memset audio_config to zero\""
    },
    {
      "commit": "ec3fb50c8ee25ac263a9c2cbe9242f877bef960c",
      "tree": "e7231dc974c8d15f5c3686bbe772c05477497fbf",
      "parents": [
        "deeef54487a34034dc0cfaab20b20d557224c07c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 07:30:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 14:44:00 2013 -0700"
      },
      "message": "Check input HAL channel mask instead of channel count\n\nThe only supported channel masks are mono and stereo;\narbitrary channel masks are not yet allowed.\n\nChange-Id: I9cebbe56480b53b98e59aa55245a1f03a30d2839\n"
    },
    {
      "commit": "aac30336994235e42a92861eb83289131a6b94dd",
      "tree": "09febd07aef324753e2dad1d7ff27132d91d0167",
      "parents": [
        "deeef54487a34034dc0cfaab20b20d557224c07c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 14:41:45 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 14:41:45 2013 -0700"
      },
      "message": "Remove obsolete TrackBase::getBuffer()\n\nChange-Id: Ic39c7baa9538080bfec114bf18ff9b9986c93fed\n"
    },
    {
      "commit": "937098b9b564a779ff1c8c2d9e60769ee5c69810",
      "tree": "687e9fee2acde8204b60e3221234b992b311fb12",
      "parents": [
        "5279e3e1187e4da0fed4349d29ea548f52e95f95"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 11:19:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 14:04:56 2013 -0700"
      },
      "message": "Use 0 for sp\u003c\u003e, NULL for raw pointers\n\nChange-Id: Ia0595afdc41e1dec428d7a3db73558b54c417bf3\n"
    },
    {
      "commit": "deeef54487a34034dc0cfaab20b20d557224c07c",
      "tree": "cc0aa13d8349df8a57e82374cfd2df9095cf2cbe",
      "parents": [
        "230c5bde2779c618b26edc73443280b2d9371c70"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Aug 02 01:50:59 2013 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 06 20:05:40 2013 +0000"
      },
      "message": "separte producer and consumer interfaces\n\nBug: 9265647\nChange-Id: Iefabc11e4bd2e2e8ffd31160476c450affe6629c\n"
    },
    {
      "commit": "fb872cc6f77f6d74011fab703b3edd7023c736cb",
      "tree": "da47692b3a543e644728e6e8a66d35802a8086b3",
      "parents": [
        "230c5bde2779c618b26edc73443280b2d9371c70"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 10:45:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 11:09:33 2013 -0700"
      },
      "message": "memset audio_config to zero\n\nPer guideline in hardware/libhardware/include/hardware/audio.h,\n\"You should memset() the entire structure to zero before use to\nensure forward compatibility.\"\n\nChange-Id: I2bce70ef6ea4b070668bd9cbc54bfe20a60111aa\n"
    },
    {
      "commit": "f506e9495f2b2123b3bec7d42ec8ef13c6213ee8",
      "tree": "60220524a2b03015a3e53d1968ffcfb92e869195",
      "parents": [
        "5279e3e1187e4da0fed4349d29ea548f52e95f95"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 10:49:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 11:06:05 2013 -0700"
      },
      "message": "Rename reqChannels to reqChannelMask\n\nThis avoids potential ambiguity with channel count.\n\nChange-Id: I0db82efc4c14dd8189d65a1db29809a085acf528\n"
    },
    {
      "commit": "6ae6b811666865815ebb1f670aacb1a0f2edaa73",
      "tree": "4a65f9bf68867d7b174e266d8ee206029e5af644",
      "parents": [
        "5279e3e1187e4da0fed4349d29ea548f52e95f95"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 15:16:21 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 09:26:14 2013 -0700"
      },
      "message": "Remove obsolete field RecordTrack::mAudioRecordServerProxy\n\nChange-Id: I054ba929e209797542940a0e734fc15f19f321c9\n"
    },
    {
      "commit": "cf04c2cb8e031acc03c1c91cb1ccab15098c89b6",
      "tree": "0ca5546e422ad11837bd6db746d0411a7136a816",
      "parents": [
        "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 07:41:16 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 09:08:28 2013 -0700"
      },
      "message": "Pull up readyToRun into ThreadBase\n\nChange-Id: Ib150afd72c3b35d83599a61664e89302a8feb4b5\n"
    },
    {
      "commit": "c1fac191069774c7bfcb062edbb821ea56e7dbc0",
      "tree": "d3b0d0065f3797041fedb4c1ae5122d29098a711",
      "parents": [
        "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 07:41:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 09:01:11 2013 -0700"
      },
      "message": "Simplify the code that allocates mMixBuffer by removing mAllocMixBuffer\n\nChange-Id: I5ac41210251789a034d760309c50fe018f2442ce\n"
    },
    {
      "commit": "70949c47fbae3f836d15f040551d7631be3ed7c2",
      "tree": "4bed0b2a693f915ca1d92233664dec9d49e20e5a",
      "parents": [
        "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 07:40:12 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 08:48:29 2013 -0700"
      },
      "message": "Pull up mBufferSize from RecordThread to ThreadBase\n\nNow both playback and record threads have a HAL buffer size for fast\ntracks, and a potentially larger-sized buffer for normal tracks.\n\nChange-Id: I6f57b85ecece3cbd4e9e64b8c41c3352f7656912\n"
    },
    {
      "commit": "5279e3e1187e4da0fed4349d29ea548f52e95f95",
      "tree": "1c908f1fd12712e5163fb2dc5ec00a32d2250637",
      "parents": [
        "75180715a8f85dd7ddf3da710fba8eb7709f8999",
        "90e58b1fefc8caf70b34301a92bc86179580b6fc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 14:22:28 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 06 14:22:28 2013 +0000"
      },
      "message": "Merge \"RecordThread::createRecordTrack_l use flags for fast tracks\""
    },
    {
      "commit": "75180715a8f85dd7ddf3da710fba8eb7709f8999",
      "tree": "953a1b6a986c46a2297ba403597a3d11e8de7ca0",
      "parents": [
        "3aa03e40668dd90390d9f1702f8c576e15b366c3",
        "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 23:13:13 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 05 23:13:13 2013 +0000"
      },
      "message": "Merge \"RecordTrack::createRecordTrack_l flags are in/out\""
    },
    {
      "commit": "3aa03e40668dd90390d9f1702f8c576e15b366c3",
      "tree": "01037957009952351730da4b588c3e2bcc42cda9",
      "parents": [
        "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1",
        "eeca32671896739e84050da5992d5f151a1629de"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 22:59:42 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 05 22:59:43 2013 +0000"
      },
      "message": "Merge \"IAudioFlinger::openRecord track_flags_t flags is in/out\""
    },
    {
      "commit": "ce7842c295638ee1432041186700a71d4bf1c176",
      "tree": "fd4edd0305eb36296aa8d803dc31e605d0323147",
      "parents": [
        "f86b18b1ce3cf20a39aea1fcaf90ec66f9d6d63e",
        "b2f5b19e5b6e1408a259add23dba91037756a943"
      ],
      "author": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Mon Aug 05 21:46:04 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 05 21:46:04 2013 +0000"
      },
      "message": "Merge \"Camera3: Provide consumer usage flags to HAL for each stream\""
    },
    {
      "commit": "b2f5b19e5b6e1408a259add23dba91037756a943",
      "tree": "e604903d5d2f5abb099737ee9ae206200cfc99c9",
      "parents": [
        "7b82efe7a376c882f8f938e1c41b8311a8cdda4a"
      ],
      "author": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Tue Jul 30 14:36:03 2013 -0700"
      },
      "committer": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Mon Aug 05 13:56:43 2013 -0700"
      },
      "message": "Camera3: Provide consumer usage flags to HAL for each stream\n\nAt stream configure time, pass on the stream\u0027s consumer usage flags\nto the HAL, to speed up final hardware configuration.\n\nBug: 9592202\nChange-Id: Ie467be053be36a09e482f5f05cad65df42d66476\n"
    },
    {
      "commit": "90e58b1fefc8caf70b34301a92bc86179580b6fc",
      "tree": "c3413197c464b11a3ea8ca846443cc7b15326582",
      "parents": [
        "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:16:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordThread::createRecordTrack_l use flags for fast tracks\n\nLook at client\u0027s request for a fast track in the flags parameter,\nand check whether the request can be satisfied.\n\nChange-Id: I65ddaeb1b85670fe9066076f638bfed0cda01c0d\n"
    },
    {
      "commit": "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2",
      "tree": "a467af6f181bff45e8c1e47284ebbc4d6d3ccead",
      "parents": [
        "eeca32671896739e84050da5992d5f151a1629de"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:14:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordTrack::createRecordTrack_l flags are in/out\n\nThe flags are currently unused, but will be used for requesting a fast\ntrack.  Making flags in/out will allow reporting back up to client that\nthe request is denied.\n\nChange-Id: Ifbee57da3632ce130551065a426577fb97b1a68d\n"
    },
    {
      "commit": "eeca32671896739e84050da5992d5f151a1629de",
      "tree": "d611c0a426354e80345956c945e9381e6137209b",
      "parents": [
        "27f7b2a8fe899565487d8a326676a5f7d0a05a37"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:12:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "IAudioFlinger::openRecord track_flags_t flags is in/out\n\nThis will allow AudioFlinger to tell client it is denying a request.\n\nChange-Id: Iff2be3ad6636371bbda9c9899a283c94620c1f06\n"
    },
    {
      "commit": "f36dbfe3d517e9311be0a4d0fd6658380690e84c",
      "tree": "65768073d7fd288eac6c28f1283589d65fe0cbad",
      "parents": [
        "1a3739169becc850999c3c06db402541119a428c",
        "82aaf94a5b18939e4d790bbc752031f3070704a3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:14:01 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 02 16:14:01 2013 +0000"
      },
      "message": "Merge \"Report underruns for fast tracks also\""
    },
    {
      "commit": "1a3739169becc850999c3c06db402541119a428c",
      "tree": "84762cba8a976b67dca741e8cad5adb2486f0c71",
      "parents": [
        "c5f8c3e5502f3c220fdbb54573608f3b3bd47517",
        "6d4d879037a495f9a4276a6996d1845594ce9090"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Aug 01 12:47:14 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 01 12:47:14 2013 -0700"
      },
      "message": "am 6d4d8790: am b687ff9f: Merge \"Fix mismatched delete/new couple\"\n\n* commit \u00276d4d879037a495f9a4276a6996d1845594ce9090\u0027:\n  Fix mismatched delete/new couple\n"
    },
    {
      "commit": "6d4d879037a495f9a4276a6996d1845594ce9090",
      "tree": "1568f08d63b37c6554771642ba7f8f17b11c2a4a",
      "parents": [
        "b57fb786a32d4ea78cd8bbf24a65593353d87a88",
        "b687ff9f2e02790e8a8e3964cb73e87546cd72dd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Aug 01 12:43:55 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 01 12:43:55 2013 -0700"
      },
      "message": "am b687ff9f: Merge \"Fix mismatched delete/new couple\"\n\n* commit \u0027b687ff9f2e02790e8a8e3964cb73e87546cd72dd\u0027:\n  Fix mismatched delete/new couple\n"
    },
    {
      "commit": "c5f8c3e5502f3c220fdbb54573608f3b3bd47517",
      "tree": "fea374510d195e9252fa28070a8be595e27296da",
      "parents": [
        "30873bfd08255e2c4e98ff5732ffff2838772617",
        "11d0d44d583f679638cc927bfffe920e495e90cc"
      ],
      "author": {
        "name": "Zhijun He",
        "email": "zhijunhe@google.com",
        "time": "Wed Jul 31 21:17:58 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 31 21:17:58 2013 +0000"
      },
      "message": "Merge \"Camera: fix the metadate parcel write issue\""
    },
    {
      "commit": "11d0d44d583f679638cc927bfffe920e495e90cc",
      "tree": "e795a55fea68ccd8f7b5a92edbadaa3b77260a7f",
      "parents": [
        "7b82efe7a376c882f8f938e1c41b8311a8cdda4a"
      ],
      "author": {
        "name": "Zhijun He",
        "email": "zhijunhe@google.com",
        "time": "Wed Jul 31 09:50:58 2013 -0700"
      },
      "committer": {
        "name": "Zhijun He",
        "email": "zhijunhe@google.com",
        "time": "Wed Jul 31 12:10:51 2013 -0700"
      },
      "message": "Camera: fix the metadate parcel write issue\n\nAlso rename the frameId to requestId to make it less confusing.\n\nChange-Id: I14a20b6fcabb86294afb31fc0c56397e185c1373\n"
    },
    {
      "commit": "82aaf94a5b18939e4d790bbc752031f3070704a3",
      "tree": "4e39e32d0ccde726548afcbd81e253d5e316b295",
      "parents": [
        "b08ab81bab9e8cd2e3a7fff02725a387070fd078"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:05:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 09:15:00 2013 -0700"
      },
      "message": "Report underruns for fast tracks also\n\nThis fixes a regression that was introduced earlier\nby commit 9f80dd223d83d9bb9077fb6baee056cee4eaf7e5\ncalled \"New control block for AudioTrack and AudioRecord\".\nThat commit broke underrun reporting for fast tracks.\n\nAlso remove Track::mUnderrunCount, which counted the number of underrun\nevents, and was only used by dumpsys media.audio_flinger.\n\nNow dumpsys media.audio_flinger reports the number of underrun frames,\n\nIsolated underrun-related control block accesses via the proxy, so that\nthe server is not directly poking around in the control block.\n\nThe new proxy APIs are AudioTrackServerProxy::getUnderrunFrames() and\nAudioTrackServerProxy::tallyUnderrunFrames().  getUnderrunFrames() returns\na rolling counter for streaming tracks, or zero for static buffer tracks\nwhich never underrun, but do a kind of \u0027pause\u0027 at end of buffer.\ntallyUnderrunFrames() increments the counter by a specified number of frames.\n\nChange-Id: Ib31fd73eb17cbb23888ce3af8ff29f471f5bd5a2\n"
    },
    {
      "commit": "b08ab81bab9e8cd2e3a7fff02725a387070fd078",
      "tree": "ca39f5da6fd5d654a71472143ee4718855f576d6",
      "parents": [
        "4d74828fc0f6c13d49a36147a4250bcfa8ad0a47",
        "34af02647b387a252fb02bab8e2cb9f7bd9c8abb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 22:40:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 22:40:16 2013 +0000"
      },
      "message": "Merge \"Add resampler comments and fix a typo\""
    },
    {
      "commit": "34af02647b387a252fb02bab8e2cb9f7bd9c8abb",
      "tree": "2e2e6f24d984884746c91704fb054e00e38e5ff0",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 11:52:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 12:01:03 2013 -0700"
      },
      "message": "Add resampler comments and fix a typo\n\nChange-Id: Ie071673875f663de4212eed4a4dff89d51a5a915\n"
    },
    {
      "commit": "7b82efe7a376c882f8f938e1c41b8311a8cdda4a",
      "tree": "d7ed69f0a495bc1a873a285ba11e72a9867c5565",
      "parents": [
        "d054c32443a493513ab63529b0c8b1aca290278c"
      ],
      "author": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Thu Jul 25 17:12:35 2013 -0700"
      },
      "committer": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Tue Jul 30 10:58:44 2013 -0700"
      },
      "message": "Camera: Rename new API to camera2, rearrange camera service\n\n - Support API rename from photography to camera2\n - Reorganize camera service files\n   - API support files to api1/, api2/, api_pro/\n   - HAL device support files into device{1,2,3}/\n   - Common files into common/\n   - Camera service remains at top-level\n\nChange-Id: Ie474c12536f543832fba0a2dc936ac4fd39fe6a9\n"
    },
    {
      "commit": "d054c32443a493513ab63529b0c8b1aca290278c",
      "tree": "fc68ba259ded1dd4960bee2938a9bcc7c599c9a3",
      "parents": [
        "96f60d8f04432a1ed503b3e24d5736d28c63c9a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 12:59:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:50:48 2013 -0700"
      },
      "message": "Move control block mName to createTrack() output\n\nThis is part of a series of CLs to clean up the shared memory\ncontrol block, by removing any fields that don\u0027t have to be there.\n\nChange-Id: I6e51003a1293b6800258c31b22cff2eba42162e7\n"
    },
    {
      "commit": "96f60d8f04432a1ed503b3e24d5736d28c63c9a2",
      "tree": "083f6224327e0965a925076b3e1aec5636598203",
      "parents": [
        "97252bb0e40a5a9b41f020163393cf6c5da10b7e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 10:21:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:40:17 2013 -0700"
      },
      "message": "Rename control block flags to mFlags\n\nChange-Id: I7b6d31e24531954ab1ecdf3ed56c19433700bd89\n"
    },
    {
      "commit": "97252bb0e40a5a9b41f020163393cf6c5da10b7e",
      "tree": "2730f01323e31639eb85736a20ad0e0cf867876e",
      "parents": [
        "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
        "291bb6d8947c5b0c062f0895d623c529259bfa39"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "message": "Merge \"AudioRecord and HAL input stream must be 16-bit PCM only\""
    },
    {
      "commit": "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
      "tree": "997cd41de1adb829c194f56cf29eb02945666b94",
      "parents": [
        "eced2daaa6c91a3731eef978ce65c6ec319c5e6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 09:45:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:24:03 2013 -0700"
      },
      "message": "Rename control block server to mServer and add comments\n\nChange-Id: Ieabd91acee92d0e84e66fbd358df5282b856306e\n"
    },
    {
      "commit": "a30e75897934da2ce7b1b03bcb4b58e139d3e81e",
      "tree": "78a398fee8ff72494debd7284ce0b43115412ad0",
      "parents": [
        "fa319e6d918b84f93fb5457af5d1cca6421ac517",
        "9fdcb0a9497ca290bcf364b10868587b6bde3a34"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 14:36:19 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 14:36:20 2013 +0000"
      },
      "message": "Merge \"Fix theoretical race using TrackBase::sampleRate()\""
    },
    {
      "commit": "eb144bbbd0b18427562b0d7db5b38e11f9484739",
      "tree": "c9ca9b64b648eef884e088f55c3693c0ddbc9c40",
      "parents": [
        "1bb59258458350af518170558120783bc2f9e61d"
      ],
      "author": {
        "name": "Andrei V. FOMITCHEV",
        "email": "andreix.fomitchev@intel.com",
        "time": "Tue Oct 09 11:33:25 2012 +0200"
      },
      "committer": {
        "name": "David Wagner",
        "email": "david.wagner@intel.com",
        "time": "Tue Jul 30 14:42:08 2013 +0200"
      },
      "message": "Fix mismatched delete/new couple\n\nIn RecordThread::readInputParameters(), mRsmpInBuffer is allocated\nwith new[] and should be freed with delete[] instead of delete.\n\nThis error has been found by valgrind.\n\nChange-Id: I2f947abb658a21a7d1e61eebb99270cb37d2d147\nSigned-off-by: Andrei V. FOMITCHEV \u003candreix.fomitchev@intel.com\u003e\nSigned-off-by: David Wagner \u003cdavid.wagner@intel.com\u003e\nSigned-off-by: Jack Ren \u003cjack.ren@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n"
    },
    {
      "commit": "fa319e6d918b84f93fb5457af5d1cca6421ac517",
      "tree": "2ccff564a324d72c8bd5d872a220f56b26431203",
      "parents": [
        "548efc94813c1dec6e8cf6c085ae41ccb04827f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:17:38 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:20:47 2013 -0700"
      },
      "message": "Remove CC_LIKELY and CC_UNLIKELY where not needed\n\nOnly keep them in performance-sensitive code\n\nChange-Id: Ib257ddd7bc39ce9896997ffae008c524ac743d01\n"
    },
    {
      "commit": "548efc94813c1dec6e8cf6c085ae41ccb04827f1",
      "tree": "620319f408aa2fc988373767cd382572bf32f3a3",
      "parents": [
        "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 29 08:48:51 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Rename RecordThread::mInputBytes to the more generic mBufferSize\n\nThis prepares for using it in PlaybackThreads later\n\nChange-Id: Id90a92aa6372e4b69914b0008cef07296ca5d6a3\n"
    },
    {
      "commit": "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128",
      "tree": "064801660f69f98c8ed48db753902ac141d6bc32",
      "parents": [
        "2314e90eb8de63a7058297817125b94c1eac8019"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:37:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Move members from ThreadBase to PlaybackThread\n\nMove mNormalFrameCount and frameCountHAL(), since they\u0027re not used by\nrecord threads.  Also comment which fields are updated by readParameters().\n\nChange-Id: I5fc0a8a89cc637976f22d49271a5a3e136dab4e1\n"
    },
    {
      "commit": "7f249fa9bcb64da324d19f551943fac7686d221c",
      "tree": "76cc14be9525f53fbf910c00884ebe4b5c9988c9",
      "parents": [
        "ae4b5f93444802632d71ec34373842e6f5febbaa",
        "fad226abd12435dbcd232f7de396f1a097b2bd5f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 21:13:08 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 21:13:14 2013 +0000"
      },
      "message": "Merge \"Use standard name and type for channel mask\""
    },
    {
      "commit": "ae4b5f93444802632d71ec34373842e6f5febbaa",
      "tree": "cca9ed2ca45ba428c58976c3bda7dcc83cb2b3a1",
      "parents": [
        "175f8338e67aae6d0ca420b8f45a5f7cab4394d5",
        "1581101ce2a8c1b8d0b07b643ad891595221d781"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Jul 29 20:54:20 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 20:54:20 2013 +0000"
      },
      "message": "Merge \"camera2 api: Override default RGBx formats to IMPLEMENTATION_DEFINED\""
    },
    {
      "commit": "175f8338e67aae6d0ca420b8f45a5f7cab4394d5",
      "tree": "cea9a9e0eb01e11f87ceb30dbdfdff293ac26513",
      "parents": [
        "5be847c22e7cec35a8b342338541fe1472bfd1a0",
        "d8ea699dc8e7dac58bb32e9cdb31b0758da25817"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 20:24:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 20:24:16 2013 +0000"
      },
      "message": "Merge \"Simplify getParameters()\""
    },
    {
      "commit": "f6ed423af92a56ef54bba23eba883b1f21448b54",
      "tree": "bad2f734e3191cbfa3c72bdeadcd88f5015e6ba8",
      "parents": [
        "2eeca1f8e18106d118f7268cb9d8597539685c5c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:16:27 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 12:43:12 2013 -0700"
      },
      "message": "Treat mChannelCount as uint32_t consistently\n\nmChannelCount was 8-, 16-, or 32-bits\n\nChange-Id: I2cc2fedf3e33144e5c8bbd9894763282d9217f63\n"
    },
    {
      "commit": "1581101ce2a8c1b8d0b07b643ad891595221d781",
      "tree": "31ddd4257df3a28c066fdbe40586451c595612ab",
      "parents": [
        "de7c96afc382ac73108116d3431342633fa4e489"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Jul 29 12:25:59 2013 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Jul 29 12:25:59 2013 -0700"
      },
      "message": "camera2 api: Override default RGBx formats to IMPLEMENTATION_DEFINED\n\nBug: 9487482\nChange-Id: I09d3b4e41454d350c4bc7b1f8e893c3dad655e73\n"
    },
    {
      "commit": "2eeca1f8e18106d118f7268cb9d8597539685c5c",
      "tree": "28b2c665c838d4e78265c74c284694f85a77a579",
      "parents": [
        "b59c1ad726b8bdf441f373d0bdc612539769334a",
        "34542acfa25c6413c87a94b6f7cc315a0c496277"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "message": "Merge \"Move local variable declarations to point of first use\""
    },
    {
      "commit": "b59c1ad726b8bdf441f373d0bdc612539769334a",
      "tree": "9f870ae2f9f64f4a01f3c91e95d310db4d9895b7",
      "parents": [
        "3af48e6b28983da8c11d3d7d7fdd2088d881b462",
        "3dcd00dddec86a1c5133083ad7ba2265d49c048c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:59:04 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:59:09 2013 +0000"
      },
      "message": "Merge \"Declare methods in binder opcode order\""
    },
    {
      "commit": "3dcd00dddec86a1c5133083ad7ba2265d49c048c",
      "tree": "0cb9279c20e16d3f059739818b71e9b77c185330",
      "parents": [
        "b283374cbf79dc5a36f1eef0015d7baf8881792e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 10:10:23 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 10:49:59 2013 -0700"
      },
      "message": "Declare methods in binder opcode order\n\nChange-Id: I5f624b7a51ffe1a17a67c056cf984f74e4c56eac\n"
    },
    {
      "commit": "3af48e6b28983da8c11d3d7d7fdd2088d881b462",
      "tree": "9cc0c78c849d44737bf6ccc3cb218f0829b6880a",
      "parents": [
        "b283374cbf79dc5a36f1eef0015d7baf8881792e",
        "35cc4f3127322ad3e3dd1e15e8ae29ff4b4a3af6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:37:58 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:37:58 2013 +0000"
      },
      "message": "Merge \"Remove obsolete mBufferEnd\""
    },
    {
      "commit": "b283374cbf79dc5a36f1eef0015d7baf8881792e",
      "tree": "b2f1680b6c3c3094a50176e234f8f8ca424f0058",
      "parents": [
        "bd4c4fbb3b073e48963185d11a15da1fa18d2e54",
        "9e8fcbcd8efa51d70d1207ff57bfbfe31324287a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:06:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:06:18 2013 +0000"
      },
      "message": "Merge \"Move delete AudioMixer closer to point of re-allocation\""
    },
    {
      "commit": "35cc4f3127322ad3e3dd1e15e8ae29ff4b4a3af6",
      "tree": "ad534d537cd19cdb33fb5068059f3bd726e1f805",
      "parents": [
        "bd4c4fbb3b073e48963185d11a15da1fa18d2e54"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:21:35 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 09:40:24 2013 -0700"
      },
      "message": "Remove obsolete mBufferEnd\n\nChange-Id: I507c6109d66000bb30933ca23b912a1316f55e5e\n"
    },
    {
      "commit": "bd4c4fbb3b073e48963185d11a15da1fa18d2e54",
      "tree": "00ebf9a7c78cd47ca27ca22b072142e3b21e7c04",
      "parents": [
        "afbbc6c5f6bc470d504dcf24ceb3ac21d57fb78d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:21:14 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 09:40:19 2013 -0700"
      },
      "message": "Remove obsolete TrackBase::step(), mStepCount, mStepServerFailed\n\nChange-Id: I6347096f066b8b19451c6472db7b0671f0cf7702\n"
    },
    {
      "commit": "afbbc6c5f6bc470d504dcf24ceb3ac21d57fb78d",
      "tree": "6fc44421938fc9a08c232580f581b89f95259ed3",
      "parents": [
        "420ea49539d23ab305a7b33c0854a7a475493dd4",
        "a8356f663014e7d4c27869629af83d8bb3441e19"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 14:27:55 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 14:27:56 2013 +0000"
      },
      "message": "Merge \"Simplify RecordTrack::stop()\""
    },
    {
      "commit": "420ea49539d23ab305a7b33c0854a7a475493dd4",
      "tree": "d67162f23f49a00a39f701548f6a52a11376d537",
      "parents": [
        "65d30dd9ee498f7b3bfc033735458a6ff399c207",
        "fc38a2e0268b5e531db2975c3a81462a3593c861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Jul 27 00:00:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jul 27 00:00:34 2013 +0000"
      },
      "message": "Merge \"CBLK_OVERRUN, not CBLK_UNDERRUN, is for record threads\""
    },
    {
      "commit": "65d30dd9ee498f7b3bfc033735458a6ff399c207",
      "tree": "e5fa59313d1c9ed9e61622217b92383fccac93eb",
      "parents": [
        "422801c5e9b795105f28e639c4bed5ee3f4e56f3",
        "0fea74cdbc09c1259e08215e2ea90e7988d62df8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 26 23:24:50 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 26 23:24:50 2013 +0000"
      },
      "message": "Merge \"Remove obsolete TrackBase::reset()\""
    },
    {
      "commit": "422801c5e9b795105f28e639c4bed5ee3f4e56f3",
      "tree": "b01bec728cec33edab05f66d8fa2a88fc5533f16",
      "parents": [
        "94ea60f975c3eb7ce6d2a4430538a42a5fc3babd",
        "7fc97ba08e2850f3f16db704b78ce78e3dbe1ff0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 26 21:33:40 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 26 21:33:41 2013 +0000"
      },
      "message": "Merge \"HAL stream format for mixer output threads must be stereo 16-bit PCM\""
    },
    {
      "commit": "a8356f663014e7d4c27869629af83d8bb3441e19",
      "tree": "af015d8d690aaf239b940d0ca65576bd795719c9",
      "parents": [
        "fc38a2e0268b5e531db2975c3a81462a3593c861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:37:52 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:44:51 2013 -0700"
      },
      "message": "Simplify RecordTrack::stop()\n\nChange-Id: Ib959c1e9dc9544d12277ce11bea445118b2e0521\n"
    },
    {
      "commit": "fc38a2e0268b5e531db2975c3a81462a3593c861",
      "tree": "bc9f29a75795ea00e5ab0785ae2b11647acdc1c1",
      "parents": [
        "0fea74cdbc09c1259e08215e2ea90e7988d62df8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:41:19 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:42:26 2013 -0700"
      },
      "message": "CBLK_OVERRUN, not CBLK_UNDERRUN, is for record threads\n\nChange-Id: I8948f76ef4717a423c37cd6ea7db4381636af612\n"
    },
    {
      "commit": "0fea74cdbc09c1259e08215e2ea90e7988d62df8",
      "tree": "45421baddb2bab78c036dba12063e7d70b5b2082",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:34:57 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:39:31 2013 -0700"
      },
      "message": "Remove obsolete TrackBase::reset()\n\nChange-Id: I38100b7e28a12d7af8cb40ae3f4d9cb4a0ebe701\n"
    },
    {
      "commit": "bfb1b832079bbb9426f72f3863199a54aefd02da",
      "tree": "5007d22456776dc77d124be84bcfe8bc4152bbb2",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 07 09:53:42 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "AudioFlinger: offload playback, non-blocking write\n\n- Added specialized playback thread class for offload playback,\nderived from directoutput thread.\nThis thread type handles specific state transitions for offloaded\ntracks and offloading commands (pause/resume/drain/flush..) to audio HAL.\nAs opposed to other threads, does not go to standby if the track is paused.\n\n- Added support for asynchronous write and drain operations at audio HAL.\nUse a thread to handle async callback events from HAL: this avoids locking\nplayback thread mutex when executing the callback and cause deadlocks when\ncalling audio HAL functions with the playback thread mutex locked.\n\n- Better accouting for track activity: call start/stop and release Output\nmethods in audio policy manager when tracks are actually added and removed\nfrom the active tracks list.\nAdded a command thread in audio policy service to handle stop/release commands\nasynchronously and avoid deadlocks with playback thread.\n\n- Track terminated status is not a state anymore. This condition is othogonal\nto state to permitted state transitions while terminated.\n\nChange-Id: Id157f4b3277620568d8eace7535d9186602564de\n"
    },
    {
      "commit": "9e8fcbcd8efa51d70d1207ff57bfbfe31324287a",
      "tree": "43dae12b292fcfe0ab9ed12c57f26a170b16b807",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 10:09:11 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 12:50:26 2013 -0700"
      },
      "message": "Move delete AudioMixer closer to point of re-allocation\n\nNo need to delete AudioMixer before readOutputParameters\n\nChange-Id: Icafa785c9021bbe8d985e4f9527f8fc8c5e62622\n"
    },
    {
      "commit": "7fc97ba08e2850f3f16db704b78ce78e3dbe1ff0",
      "tree": "ada9fda1321150cc75295eece5f7f82e35f0c9f3",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:18:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 12:22:18 2013 -0700"
      },
      "message": "HAL stream format for mixer output threads must be stereo 16-bit PCM\n\nDirect and tunnel output threads can support various HAL stream formats,\nincluded encoded.  But currently there are stereo 16-bit PCM assumptions\nin several places for mixer and duplicating output threads:\n - mMixBuffer and mixBuffer()\n - AudioMixer including resampler\n - FastMixer\u0027s mixBuffer\n - effects\n - NBAIO_Format\n - anywhere FCC_2 is used\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces stereo 16-bit\nPCM in mixer and duplicating threads at the place where the HAL format\nis read.  It was already being checked in checkForNewParameters_l(),\nbut not in readOutputParameters().\n\nChange-Id: Ibe344cc922743da234299097aa1bb1f54795cc9b\n"
    },
    {
      "commit": "d8ea699dc8e7dac58bb32e9cdb31b0758da25817",
      "tree": "6610e00d5fe1cc23c316ed0b0663ec06dede82db",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 14:17:15 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:31:38 2013 -0700"
      },
      "message": "Simplify getParameters()\n\nChange-Id: Iedfeca3cd477d023c350d6d4e6eed874ee467a32\n"
    },
    {
      "commit": "34542acfa25c6413c87a94b6f7cc315a0c496277",
      "tree": "8fdb43eabdcceca8291966fe88d9c37a3864beee",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 11:29:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:21:55 2013 -0700"
      },
      "message": "Move local variable declarations to point of first use\n\nChange-Id: Ideb83dea2c3002651c34fa646753cba598e29e93\n"
    },
    {
      "commit": "fad226abd12435dbcd232f7de396f1a097b2bd5f",
      "tree": "4e5214f8f5b142239a9583e79032b70330fa7c8e",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:19:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 17:49:04 2013 -0700"
      },
      "message": "Use standard name and type for channel mask\n\nFormer name \u0027channels\u0027 was ambiguous with respect to channel count.\n\nChange-Id: I716f792d95a7e0c787d27514ad6e93dbcef8a415\n"
    },
    {
      "commit": "291bb6d8947c5b0c062f0895d623c529259bfa39",
      "tree": "aa527f282bf3523c3692f086e4e088e8e21aa69c",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:23:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 16:03:05 2013 -0700"
      },
      "message": "AudioRecord and HAL input stream must be 16-bit PCM only\n\nCurrently there are 16-bit PCM assumptions in several places for capture:\n - resampler API\n - mRsmpInBuffer and mRsmpOutBuffer\n - RecordThread::threadLoop upmix, downmix, and resampling\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces 16-bit PCM in both\nclient and server at all places where a format is checked.\n\nChange-Id: I08b0570bff626ad0d341804825a72c14e61b4233\n"
    },
    {
      "commit": "2ab500c632569e2f131a1a2288459933da70c4ee",
      "tree": "fe3d1ab19e24e225ea2b6eab9cf2735cda0b2336",
      "parents": [
        "0429aa9322a1419eae0b932491b22f300cd58206"
      ],
      "author": {
        "name": "Zhijun He",
        "email": "zhijunhe@google.com",
        "time": "Tue Jul 23 08:02:53 2013 -0700"
      },
      "committer": {
        "name": "Zhijun He",
        "email": "zhijunhe@google.com",
        "time": "Tue Jul 23 11:01:59 2013 -0700"
      },
      "message": "camera2: Implement ICameraDeviceUser::waitUntilIdle\n\nAlso fixed some logging typo\n\nChange-Id: Ib254bdb137dca10b12595c23aeb1c53097423425\n"
    },
    {
      "commit": "47110057829ba7d5c7b41fd2aa381b5f5ed811ca",
      "tree": "47aba0629cdbad3ba01cca4e52bd3a1c167e392b",
      "parents": [
        "01061c1d57700b37fa879217763494cdf94d5c98"
      ],
      "author": {
        "name": "Zhijun He",
        "email": "zhijunhe@google.com",
        "time": "Mon Jul 22 17:34:34 2013 -0700"
      },
      "committer": {
        "name": "Zhijun He",
        "email": "zhijunhe@google.com",
        "time": "Mon Jul 22 17:39:20 2013 -0700"
      },
      "message": "Camera: ProCamera connect need support HAL3 device\n\nChange-Id: Iae7e5f9e6387f61f1c4bbb91f75803fc1fdf2668\n"
    },
    {
      "commit": "01061c1d57700b37fa879217763494cdf94d5c98",
      "tree": "c75bede54ece9d23cb7a04cdfb6cc89066b4fe82",
      "parents": [
        "cb155c8f4bf556b0d37c3596c4dc265ab491152b",
        "4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 22 15:02:08 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 15:02:08 2013 +0000"
      },
      "message": "Merge \"Use AudioSystem::setLowRamDevice() to configure memory\""
    },
    {
      "commit": "cb155c8f4bf556b0d37c3596c4dc265ab491152b",
      "tree": "5b9f53d2c33435c511b010801de6233106497783",
      "parents": [
        "18cf609ca3f20a9da2c7e140088d7557e7479f49",
        "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 22 14:43:59 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 14:43:59 2013 +0000"
      },
      "message": "Merge \"Revert \"Fix Audioflinger crash when TeeSink is enabled\"\""
    }
  ],
  "next": "18cf609ca3f20a9da2c7e140088d7557e7479f49"
}
