)]}'
{
  "log": [
    {
      "commit": "d38faa28eb767a108a7a9467c1a481957531d2af",
      "tree": "9d39bc688b148c31a70b3bd6c43e87999690fb63",
      "parents": [
        "b20a352b7e4eb6690e86e0dcf9d58d73640dc874",
        "142ce9a65b7505819e1205ad5bfa5d63843c7f43"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 09:52:54 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 09:52:54 2012 -0800"
      },
      "message": "am 4de803c7: am 459df4ef: am e7650c32: am e5bdd24b: Merge \"stagefright aacenc: Avoid warnings about incompatible pointer types\"\n\n* commit \u00274de803c76d4afd0f542c086b555b71729b3c5796\u0027:\n  stagefright aacenc: Avoid warnings about incompatible pointer types\n"
    },
    {
      "commit": "142ce9a65b7505819e1205ad5bfa5d63843c7f43",
      "tree": "88f72f0a473bdedcb2512f579149f309ccdbb80e",
      "parents": [
        "9884ee5920da4976a4de809567ad8fcbe8608433",
        "ccdf9e6e3dc929a9ffee7ed2aab57115ef810527"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 09:45:40 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 09:45:40 2012 -0800"
      },
      "message": "am e5bdd24b: Merge \"stagefright aacenc: Avoid warnings about incompatible pointer types\"\n\n* commit \u0027e5bdd24b69c4033163d478d721247691e11cea36\u0027:\n  stagefright aacenc: Avoid warnings about incompatible pointer types\n"
    },
    {
      "commit": "b20a352b7e4eb6690e86e0dcf9d58d73640dc874",
      "tree": "3023e803fec8874219049f24fe869650b205ef54",
      "parents": [
        "042d1b44537eeb3ead09778f4284a35be9e9f5d3",
        "9884ee5920da4976a4de809567ad8fcbe8608433"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 09:28:09 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 09:28:09 2012 -0800"
      },
      "message": "am 307f47aa: am 7e8b65df: am 7ffa4546: am 47b56c5a: Merge \"stagefright aacenc: Add const declarations to some pointers\"\n\n* commit \u0027307f47aa5def85d0c0bb4af725ff557707c5be86\u0027:\n  stagefright aacenc: Add const declarations to some pointers\n"
    },
    {
      "commit": "9884ee5920da4976a4de809567ad8fcbe8608433",
      "tree": "70869a66e5e283a5fd46cd1b8279c0add7d7a728",
      "parents": [
        "db7670ab7a884efb64f0e7a20425b6445d749822",
        "aa1639aeb42e7c403315319bf55632de93d3c8d9"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 09:20:44 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 09:20:44 2012 -0800"
      },
      "message": "am 47b56c5a: Merge \"stagefright aacenc: Add const declarations to some pointers\"\n\n* commit \u002747b56c5a46287ea226c05e3c0238a91f4702491a\u0027:\n  stagefright aacenc: Add const declarations to some pointers\n"
    },
    {
      "commit": "ccdf9e6e3dc929a9ffee7ed2aab57115ef810527",
      "tree": "76031c8576797b93322bfb46e5022ab0c5cffc88",
      "parents": [
        "aa1639aeb42e7c403315319bf55632de93d3c8d9",
        "cf8b805a0c0695097211ca18237c27f45b0df85c"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 09:20:36 2012 -0800"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 24 09:20:37 2012 -0800"
      },
      "message": "Merge \"stagefright aacenc: Avoid warnings about incompatible pointer types\""
    },
    {
      "commit": "042d1b44537eeb3ead09778f4284a35be9e9f5d3",
      "tree": "89b8397a32c029352abc28a07f3ed150d5d3fc68",
      "parents": [
        "54263bcfa6e9ad2fcb3e89617240f4ec0b3a2f99",
        "db7670ab7a884efb64f0e7a20425b6445d749822"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 09:12:17 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 09:12:17 2012 -0800"
      },
      "message": "am 5c2f1220: am 901b8bb0: am aa86aa60: am 1b704610: Merge \"stagefright aacenc: Fix inline asm\"\n\n* commit \u00275c2f1220f90ae68a064195ba3c94f1319813f32c\u0027:\n  stagefright aacenc: Fix inline asm\n"
    },
    {
      "commit": "aa1639aeb42e7c403315319bf55632de93d3c8d9",
      "tree": "65487d4fe9a8aad6fcdc3c4322fcdc7048b62e38",
      "parents": [
        "3e4d4efcaf00c8263c7bcd651e453e93b60535da",
        "9fc4dfb69df0b5a13b7a1904272eb1dcf8113d0c"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 08:53:24 2012 -0800"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 24 08:53:25 2012 -0800"
      },
      "message": "Merge \"stagefright aacenc: Add const declarations to some pointers\""
    },
    {
      "commit": "db7670ab7a884efb64f0e7a20425b6445d749822",
      "tree": "b4009a76bf26daf8380cbebc1966cc39617ecf37",
      "parents": [
        "7ce8b8c79c866fd787f3b4628abf5028207312e6",
        "3e4d4efcaf00c8263c7bcd651e453e93b60535da"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 08:50:32 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 08:50:32 2012 -0800"
      },
      "message": "am 1b704610: Merge \"stagefright aacenc: Fix inline asm\"\n\n* commit \u00271b7046108c0f381fa8b7efaebae02c1a2b3099b3\u0027:\n  stagefright aacenc: Fix inline asm\n"
    },
    {
      "commit": "3e4d4efcaf00c8263c7bcd651e453e93b60535da",
      "tree": "b689355ac28b6185f4203bd64cd762d3829e0ff1",
      "parents": [
        "6dfeab4ddf3fcb82483f29d146329aa959fc0c82",
        "9da751147af3222258093d9f41cabf0ea1391c04"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 08:38:22 2012 -0800"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 24 08:38:23 2012 -0800"
      },
      "message": "Merge \"stagefright aacenc: Fix inline asm\""
    },
    {
      "commit": "54263bcfa6e9ad2fcb3e89617240f4ec0b3a2f99",
      "tree": "9d9c9779938fcddd57fe82291d4ac3e189dc5e93",
      "parents": [
        "afc08acfae7946ab3305feede3a96bc6441be75f",
        "7ce8b8c79c866fd787f3b4628abf5028207312e6"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 08:01:10 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 08:01:10 2012 -0800"
      },
      "message": "am 0c96e869: am 41087f79: am d7ab4e0c: am bf1e85bf: Merge \"stagefright aacenc: Fix inline asm constraints\"\n\n* commit \u00270c96e8690408e3cfc12eee521a442c52f1c10b27\u0027:\n  stagefright aacenc: Fix inline asm constraints\n"
    },
    {
      "commit": "7ce8b8c79c866fd787f3b4628abf5028207312e6",
      "tree": "fa55f8db0ff1e9ec0f9974e6055aa7dda0b9ae4c",
      "parents": [
        "c58295bfa07615b81b9bf5784cb8e2dac79aded7",
        "6dfeab4ddf3fcb82483f29d146329aa959fc0c82"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 07:53:43 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 07:53:43 2012 -0800"
      },
      "message": "am bf1e85bf: Merge \"stagefright aacenc: Fix inline asm constraints\"\n\n* commit \u0027bf1e85bfc8293646d57f0017afbfb0e09a1a41d7\u0027:\n  stagefright aacenc: Fix inline asm constraints\n"
    },
    {
      "commit": "6dfeab4ddf3fcb82483f29d146329aa959fc0c82",
      "tree": "6b31e1bcadc9d8ea7329aca8d702f5c4d41e3d6f",
      "parents": [
        "013b73bfc4d5fb21082ccccf45fa08c18f86aa08",
        "d2fdc7129d96391d22065866c612d532dfe411b3"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Feb 24 07:39:02 2012 -0800"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 24 07:39:03 2012 -0800"
      },
      "message": "Merge \"stagefright aacenc: Fix inline asm constraints\""
    },
    {
      "commit": "afc08acfae7946ab3305feede3a96bc6441be75f",
      "tree": "3e6a621742333be2e379a109e83593832b6cc1c0",
      "parents": [
        "04394b1c83d56e2956ba84aa9cb4b5d3b01d8ae8",
        "25eefbedf4b0ba6aea38605f4ba19c75a40810d1"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 23 21:00:59 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 23 21:00:59 2012 -0800"
      },
      "message": "Merge \"Changed TimedTextInBandSource to TimedText3GPPSource.\""
    },
    {
      "commit": "04394b1c83d56e2956ba84aa9cb4b5d3b01d8ae8",
      "tree": "00ab13a1d3e0685d84a66284148b53463823efe7",
      "parents": [
        "e98f8c04faf27df3b1829d336299ad51dad569cf"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 23 12:23:57 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 23 14:04:20 2012 -0800"
      },
      "message": "Fix memory leakage due to unreleased MuxOMX objects after disconnection\n\no related-to-bug: 5984232\n\nChange-Id: I20cbeff6ae865e995d02342549f1e09320543740\n"
    },
    {
      "commit": "e98f8c04faf27df3b1829d336299ad51dad569cf",
      "tree": "87ed36ebec49fde19611331385befab93f25a724",
      "parents": [
        "16d3dfb5710290b334a07aadeb7d3620c7624e7c"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Feb 23 11:21:43 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Feb 23 11:21:43 2012 -0800"
      },
      "message": "Be more greedy when it comes to gathering input and output buffers.\n\nChange-Id: I54c4f608e5155917ca35eba5655b4c06357fb112\n"
    },
    {
      "commit": "16d3dfb5710290b334a07aadeb7d3620c7624e7c",
      "tree": "280d299b0efbbf8818cc5ee46e424507c3f41e28",
      "parents": [
        "7fd1703162a6ff694b03f6fd0a8c9f3525f6d9a4",
        "2d8bedd05437b6fccdbc6bf70f673ffd86744d59"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Feb 23 09:13:45 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 23 09:13:45 2012 -0800"
      },
      "message": "Merge \"Add new APIs AMessage::(set|find)Buffer to make it safer to pass\""
    },
    {
      "commit": "7fd1703162a6ff694b03f6fd0a8c9f3525f6d9a4",
      "tree": "272ac90d4df3ebe73d0763a6782adf7a4917f185",
      "parents": [
        "79af02c6a813b5d31fba3e7b72686a02f0ae7e0f",
        "43b1d8ad30bcd61c8cc62fce52fdc6d8381e5732"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Feb 23 04:29:30 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 23 04:29:30 2012 -0800"
      },
      "message": "Merge \"Drop support for Android HTTP stack\""
    },
    {
      "commit": "25eefbedf4b0ba6aea38605f4ba19c75a40810d1",
      "tree": "6d85adf5f9b2ad8f5d3b29a15e72279fa0fcd16c",
      "parents": [
        "3b81acab52b7140c1b8b20be2d67be3e221637e7"
      ],
      "author": {
        "name": "Insun Kang",
        "email": "insun@google.com",
        "time": "Thu Feb 23 14:03:23 2012 +0900"
      },
      "committer": {
        "name": "Insun Kang",
        "email": "insun@google.com",
        "time": "Thu Feb 23 15:13:24 2012 +0900"
      },
      "message": "Changed TimedTextInBandSource to TimedText3GPPSource.\n\nChange-Id: I820adffbf9b4012f25ab45e9624ae2c35fc5af94\n"
    },
    {
      "commit": "2d8bedd05437b6fccdbc6bf70f673ffd86744d59",
      "tree": "1a11658a7379249eb4f6bd73b356baa4a661f41e",
      "parents": [
        "79af02c6a813b5d31fba3e7b72686a02f0ae7e0f"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Feb 21 14:38:23 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Feb 22 16:20:59 2012 -0800"
      },
      "message": "Add new APIs AMessage::(set|find)Buffer to make it safer to pass\n\nABuffer objects through messages.\n\nChange-Id: I9f8b4e4c4767d0d70a0105e0c0813b754379b49d\n"
    },
    {
      "commit": "79af02c6a813b5d31fba3e7b72686a02f0ae7e0f",
      "tree": "662f61b610a5b0ee180d4b7940e1e1860b098eab",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d",
        "5778822d86b0337407514b9372562b86edfa91cd"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Feb 22 15:13:44 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 22 15:13:44 2012 -0800"
      },
      "message": "Merge \"Implementation of a java media codec interface and associated tools.\""
    },
    {
      "commit": "5778822d86b0337407514b9372562b86edfa91cd",
      "tree": "b8faf8188dfb8865bd88b4dfc778a7d9ab89bb73",
      "parents": [
        "c33305c5dd4cc06e71eb0c66a7150aa6ab647c99"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Feb 21 11:47:18 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Feb 22 15:06:06 2012 -0800"
      },
      "message": "Implementation of a java media codec interface and associated tools.\n\nChange-Id: I13e54062d4de584355c5d82bb027a68aeaf2923b\n"
    },
    {
      "commit": "d6fd85a157ce2054b2304e6d171fa87ae09c363d",
      "tree": "dfba92cafe7500bd06aa5e7927405285ca662ecc",
      "parents": [
        "42539cb5d02f0cbaedba2de6ad6be42a0d7a9a9a",
        "9eaa55756c5b245970447019250ce852f5189525"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 13:22:13 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 22 13:22:13 2012 -0800"
      },
      "message": "Merge \"Avoid wp\u003c\u003e::unsafe_get() with a few exceptions\""
    },
    {
      "commit": "9eaa55756c5b245970447019250ce852f5189525",
      "tree": "68428af4a3b22a62f9c09a2c4c7b8a8a95a936fd",
      "parents": [
        "2e77ad2a9f7afb57b6f9127dd7c229e774baa9c8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 13:32:16 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 13:19:26 2012 -0800"
      },
      "message": "Avoid wp\u003c\u003e::unsafe_get() with a few exceptions\n\nAvoid using wp\u003c\u003e::unsafe_get() except in a log, and other specific cases\nwhen it\u0027s known to be safe.\n\nUse more specific subclass types for parameters to avoid down-casts.\n\nWhen a constructor or method parameter is \"this\" of an object that is\ncurrently being constructed, it\u0027s better to use a raw pointer rather\nthan either sp\u003c\u003e or wp\u003c\u003e.\n\nUsing the raw pointer is safe, provided either:\n - it is \"this\" of an object being constructed (which has sp\u003c\u003e refcount of 0),\n - or the caller already holds an sp\u003c\u003e\n\nThe raw pointer is simpler and faster, and it avoids the problem of the\nsp\u003c\u003e reference count being incremented and then decremented to zero on\nscope exit, which would cause the object\u0027s destructor to run while the\nobject is still being constructed.\n\nAlso removed some dead code per a review comment.\n\nChange-Id: I7375f64da3aec11b928c33cb01faff186252ef5e\n"
    },
    {
      "commit": "42539cb5d02f0cbaedba2de6ad6be42a0d7a9a9a",
      "tree": "ac1862977f9452a394f6bc82ac11c212b7f17734",
      "parents": [
        "2e77ad2a9f7afb57b6f9127dd7c229e774baa9c8",
        "f063b49e95c28d63a58215ebda892a5fee4204cc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 13:14:50 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 22 13:14:50 2012 -0800"
      },
      "message": "Merge \"Fix build warning\""
    },
    {
      "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": "2e77ad2a9f7afb57b6f9127dd7c229e774baa9c8",
      "tree": "070aac75ae2aab56beef610f91eeecd90f3ce599",
      "parents": [
        "c33305c5dd4cc06e71eb0c66a7150aa6ab647c99"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Feb 21 17:16:25 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Feb 22 10:20:46 2012 -0800"
      },
      "message": "Allow to record time lapse videos without using setProfile()\n\no also added a check on whether capture rate was set before starting time lapse video recording.\n\no related-to-bug: 6045507\n\nChange-Id: I8e1fdc8e8931e2684ab3822dc6260db44658e87d\n"
    },
    {
      "commit": "43b1d8ad30bcd61c8cc62fce52fdc6d8381e5732",
      "tree": "35cd178d25795958207b0d59a4a7d676d95f89df",
      "parents": [
        "c33305c5dd4cc06e71eb0c66a7150aa6ab647c99"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Feb 16 17:49:31 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Feb 22 17:21:43 2012 +0000"
      },
      "message": "Drop support for Android HTTP stack\n\nAll future releases will use the Chromium HTTP stack and maintaining two HTTP\n    stacks adds maintenance overhead. The Chromium HTTP stack requires V8, but we\n    now use V8 in all build targets (b/5495373), so we can safely drop the Android\n    HTTP stack.\n\nLoadListener, HttpAuthHandlerImpl, Network, SslErrorHandlerImpl, WebViewWorker\n- Android-stack specific, removed\nStreamLoader, FrameLoader\n- Require LoadListener, removed\nCacheLoader, ContentLoader, DataLoader, FileLoader\n- Extend StreamLoader, removed\n\nBrowserFrame\n- Removed methods that create LoadListener\n- BrowserFrame.startLoadingResource() is called from native\nCallbackProxy, WebView\n- Removed calls to Network methods\nCacheManager, CookieManager, CookieSyncManager, WebViewCore, WebResourceResponse\n- Removed other Android-stack specific code\nJniUtlil\n- Removed useChromiumHttpStack()\nWebViewDatabase\n- Removed all code to create cookies and cache databases for Android HTTP stack\n\nSee corresponding WebKit change https://android-git.corp.google.com/g/166327.\n\nBug: 5495616\nChange-Id: If491675516f6eb187077af4220214bb6e6a8d045\n"
    },
    {
      "commit": "c33305c5dd4cc06e71eb0c66a7150aa6ab647c99",
      "tree": "2c25b614a0145b4bbc35b835e89542489fbf6cf1",
      "parents": [
        "b9c769aa8ec26e25a7a61e14a9d521c2adf5b68d",
        "b575ddce78d266fa218006f90306158dda5c8f56"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Feb 21 11:10:35 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 21 11:10:35 2012 -0800"
      },
      "message": "Merge \"Limit the amount of audio record data in each buffer\""
    },
    {
      "commit": "b9c769aa8ec26e25a7a61e14a9d521c2adf5b68d",
      "tree": "aad79235c527eee70bd2bf5acbe6003ca108ec70",
      "parents": [
        "3b81acab52b7140c1b8b20be2d67be3e221637e7"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Feb 17 17:45:42 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Feb 21 14:19:26 2012 +0000"
      },
      "message": "Update stagefright makefile after dropping support for JSC\n\nBug: 5495373\nChange-Id: Ibb81196edd3a6eaa4999cf0e30a78368afb66360\n"
    },
    {
      "commit": "3b81acab52b7140c1b8b20be2d67be3e221637e7",
      "tree": "0b225360603f19ba2f60fb1cf7a616dfe51d99b1",
      "parents": [
        "1b094ee8f7fe7eca65bf3d2f983ba95eef6db93d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 15:26:23 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:41:56 2012 -0800"
      },
      "message": "Remove bit fields to improve performance\n\nuint16_t enabled is (mostly) changed to bool in a separate CL\n\nChange-Id: Ied9f8c034b2479cee9a8778cee7b8ff92ae75b7b\n"
    },
    {
      "commit": "1b094ee8f7fe7eca65bf3d2f983ba95eef6db93d",
      "tree": "5b3509943e54e317cc30a56cdf1712dc50d7528a",
      "parents": [
        "29dcfcd66d884801e9907d04e81d407ee770802c",
        "a111792f1314479c649d1d44c30c2caf70c00c2a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:40:43 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 17 09:40:43 2012 -0800"
      },
      "message": "Merge \"Simplify code\""
    },
    {
      "commit": "a111792f1314479c649d1d44c30c2caf70c00c2a",
      "tree": "f67b5f32a61a259f292b7d0d992f31b8e2ff857c",
      "parents": [
        "761defc341c5ce9019a42919c441f035f665ec0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 26 10:53:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:39:07 2012 -0800"
      },
      "message": "Simplify code\n\nUse DefaultKeyedVector::valueFor to avoid extra test\nMake local variables as local as possible\nNo double parentheses\nNo typedef for single use\nNo parentheses around indirect function call\nNo AudioFlinger:: prefix when not needed\nRemove unnecessary casts\nRemove block with only one line\n\nSaves 128 bytes\n\nChange-Id: I3a87430eeb01b81e7b81a1c38f6fdd3274ec48f3\n"
    },
    {
      "commit": "29dcfcd66d884801e9907d04e81d407ee770802c",
      "tree": "3b494547cfc30a85df3681e1f35b31346914919e",
      "parents": [
        "9fda4b87441fe17d90d8144639c9de6d9022c3c0",
        "fe5b3ba4b332d5fc9aa4f453434329b9f38768c2"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Fri Feb 17 09:20:43 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 17 09:20:43 2012 -0800"
      },
      "message": "Merge \"Put a bandaid on a segfault in timed audio track handling.\""
    },
    {
      "commit": "fe5b3ba4b332d5fc9aa4f453434329b9f38768c2",
      "tree": "534a0b20d48f361e34531de1b396c17bab264811",
      "parents": [
        "761defc341c5ce9019a42919c441f035f665ec0d"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Sun Feb 12 17:51:21 2012 -0800"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Thu Feb 16 17:59:30 2012 -0800"
      },
      "message": "Put a bandaid on a segfault in timed audio track handling.\n\nAdd a bandaid to prevent a segfault which can occur while handling\ntimed audio buffers.  There is a deeper problem which should\neventually be addressed, but for now this fix should prevent any\ncrashing.\n\nThe deeper problem is as follows.\n\nWhen the AudioFlinger mixer gets data to mix from an AudioTrack, it\nends up getting a structure filled out which points into an IMemory\nregion owned by the AudioTrack.  Unfortunately, this structure is not\nholding a refcount on the IMemory which it points into.  If the\nIMemory refcount hits 0 and the chunk of RAM is retuned to the binder\nheap it came from, there can still be a Buffer object being held by\nthe AudioFlinger mixer which points into the region of memory which\nwas retuned to the binfer heap.  If AF reads from this buffer, it\ncould read corrupt data (if the region of memory gets handed back out\nto a writer), or it could segfault (if the heap has been freed and the\npages unmapped).  Similar problems could happen if AF attempts to\nwrite to the buffer, heap corruption in one case, segfaulting in the\nother.\n\nIn the past, this has not been an issue for AF, because tracks\nallocate a single IMemory (which serves as a ring buffer) and the\nIMemory lives for as long as the track lives.  As an artifact of the\nway the code came out, the mixer cannot be holding a Buffer structure\npointing into the IMemory which used to be owned by a track if the\ntrack no longer exists.  Tracks cannot come into or out of existence\nduring a mix operation, which is the only thing which makes this safe.\n\nTimedTracks work differently, however.  Timed tracks each allocate a\nsmall binder heap, and then hand out IMemory instances  broken out of\nthis heap.  The heap lives as long as the track, so the worst which\ncould happen here is that a TimedTrack\u0027s IMemory gets returned to the\nheap while there is still a buffer structure in flight pointing into\nthe memory region, then the region gets handed out again and\noverwritten by new data causing the mixer to mix the wrong audio.  The\ntiming to cause this to happen is very difficult to encounter, and you\nto generate the timing conditions required, you need to be in a pretty\nbad failure state where audio is already breaking up and skipping, so\nits unlikely that anyone would notice (which is why I\u0027m band-aiding\nthe segfault and letting the deeper issue slide for now).\n\nIn general, however, it might be a good idea to revisit this buffering\ndesign.  On principal, if someone is going to hold pointers into a\nrefcounted object, they should be holding a ref on the object at the\nsame time.  Failure to do this will usually lead to a situation where\nthere are corruption or segfault issues, or to a system where the\nrefcounted object\u0027s lifetime must be implicitly managed very carefully\nin ways which are usually non-obvious and are easy to break by new\nengineers on a project.\n\nChange-Id: Ib391075395ed0ef46a03c37aa38a82d09e88abeb\n"
    },
    {
      "commit": "9fda4b87441fe17d90d8144639c9de6d9022c3c0",
      "tree": "d428b982cf5c83b178dc16d3c3553fdfcae6ce9c",
      "parents": [
        "761defc341c5ce9019a42919c441f035f665ec0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 14:04:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 16 16:57:44 2012 -0800"
      },
      "message": "Fixed possible heap corruption in EffectDesc\n\n\"EffectDesc *effect \u003d new EffectDesc(*effects[i]);\" was relying on the\ndefault copy constructor for EffectDesc, but the default copy constructor\ndoes a member-by-member copy.  This works OK for mUuid, but a member\ncopy of mName and mParams shares pointers.  This could result in heap\ncorruption later on due to a double free.  Changed to add an explicit\ncopy constructor that does a deep copy of both mName and mParams.\n\nA malloc() and strdup() were being freed by delete, but the correct\nmatching API for these is free().  Fortunately our current memory runtime\nimplementation ignores the difference. Changed to use free().\n\nEffectDesc and InputSourceDesc member fields were being torn down by\nthe code that does delete.  Changed to do the tear-down in ~EffectDesc()\nand ~InputSourceDesc().\n\nAdded constructor EffectDesc() with name and UUID parameters, rather\nthan having caller fill in the object after construction.\n\nMade ~EffectDesc() and ~InputSourceDesc() non-virtual to save memory,\nsince they have no subclasses.\n\nChange-Id: Ibb5cc2e6760d72e0c4cf537068ac4432c717bafd\n"
    },
    {
      "commit": "761defc341c5ce9019a42919c441f035f665ec0d",
      "tree": "23b76ab41456c90e80559ffbb7d8e31a38104dc4",
      "parents": [
        "ef7740be67a4d7b6b033ebed59c3d4a9c74a2c18"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 09 15:09:05 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:12 2012 -0800"
      },
      "message": "Upintegreate AAH TX and RX players from ICS_AAH\n\nUpintegrate the android at home TX and RX players developed in the\nICS_AAH branch.\n\nChange-Id: I8247d3702e30d8b0e215b31a92675d8ab28dccbb\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "ef7740be67a4d7b6b033ebed59c3d4a9c74a2c18",
      "tree": "896b721ec2200ffe089800c7b367b92e88a59f2d",
      "parents": [
        "af7d8189f91c45ab919a6c9ac386b268c8d91168"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 09 11:28:36 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:12 2012 -0800"
      },
      "message": "Fix a segfault in AudioFlinger.\n\nCheck the string returned by a HAL\u0027s implementation of get_parameters\nfor NULL before attempting to make use of it.  That way, we won\u0027t\nbring down the mediaserver because of a poorly written HAL.\n\nChange-Id: Ic99d7b004520d7d6347842a681c0595e889b68ea\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\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": "951bd8d1ad9581a414e171ad8605a9515d0ad667",
      "tree": "ff6c38d23fc61f39cbaa33b29a1bec5dd03c9d40",
      "parents": [
        "6dad4378f2a78d967defc8912ecf47f6ed117584"
      ],
      "author": {
        "name": "Mike J. Chen",
        "email": "mjchen@google.com",
        "time": "Mon Aug 15 11:59:47 2011 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:10 2012 -0800"
      },
      "message": "Upintegrate the common_time service from ics-aah.\n\nMove the common_time service developed in the ics-aah branch back into\nmaster.\n\nThe common_time service is a small service build to synchronize an\narbitrary timeline amongst peers on a local sub-net.  While running\nand configured, the service will elect a master from the set of\navailable devices within the subnet, define a relationship between the\ncommon_time timeline the local time timeline (provided by the local\ntime HAL), and then attempt to maintain synchronization between common\nand local time by controlling the frequency of the local time clock\nvia the HAL, or by disciplining local time in the digital domain if\nthe local time HAL implementation does not support HW slewing.\n\nOn its own, the native common time service will do nothing until it is\nconfigured.  The CommonTimeManagementService (running out of the\nsystem server process) is responsible for implementing policy\nregarding configuration and operation of the common_time service and\nwill be added in a subsequent CL.\n\nChange-Id: I71292f9b9b1797665865689c4572c9d3a0552f64\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "b575ddce78d266fa218006f90306158dda5c8f56",
      "tree": "b60d95b1f2b8cd5130e8ec6e1aef4f617d6076ca",
      "parents": [
        "7a8b0ed6419e57dd8b41d3806893d63d3df91aab"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Feb 14 14:58:20 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Feb 15 12:54:17 2012 -0800"
      },
      "message": "Limit the amount of audio record data in each buffer\n\no The size of each input buffer should be less than or equal to kMaxBufferSize\no related-to-bug: 5977032\n\nChange-Id: I04343169aac3df56694aad4ba7967ec45337ad7e\n"
    },
    {
      "commit": "6dad4378f2a78d967defc8912ecf47f6ed117584",
      "tree": "fb4fa4804cfa198fe6a625993c7cff520a492be8",
      "parents": [
        "d9b9b8d09e7471b0ffa21cfa9f944ef4ad300a71",
        "6637baae4244aec731c4014da72418d330636ae1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:44:47 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 14 09:44:47 2012 -0800"
      },
      "message": "Merge \"Fix races related to volume and mute\""
    },
    {
      "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": "8d6a2449a91f5116d7243ab039393195ebd663fe",
      "tree": "a4ac36a5ff020ac5e730a6ec7feaebfd2a14acad",
      "parents": [
        "6dbc1359f778575d09d6da722b060a6d72c2e7c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 14:04:28 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:06:20 2012 -0800"
      },
      "message": "Use size_t and ssize_t with Vector\n\nUse size_t with size() and ssize_t with indexOfKey().  Exception:\nuse ssize_t for backwards loops, and indices that are overloaded as a\nmarker or error code.\n\nChange-Id: Ibf2a360af4539b72b09c818dda22ea2a0de92431\n"
    },
    {
      "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": "7a8b0ed6419e57dd8b41d3806893d63d3df91aab",
      "tree": "da2076d221f7eb3e26db190d51173c04a91e0788",
      "parents": [
        "1f5ce8b0941c9c6baadd40d151634145f6d5a35c"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Feb 02 09:06:31 2012 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Feb 13 12:39:54 2012 -0800"
      },
      "message": "Playback rate on MediaPlayer\n\nAdd support for modifying the playback rate of a MediaPlayer\n by altering the sample rate of its AudioTrack.\nThe playback rate is expressed in permille, where 1000 is the\n playback at normal speed.\n\nChange-Id: I981d060ab32f7bae7a767e82c60c88ae635dceed\n"
    },
    {
      "commit": "1f5ce8b0941c9c6baadd40d151634145f6d5a35c",
      "tree": "a1e57ab3d0decb8e4748f89e8f7caeab4c5caf80",
      "parents": [
        "44deb053252a3bd2f57a007ab9560f4924f62394",
        "94fef38613962c983c46ab0b97c58f5373412d2d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 13 12:27:27 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 13 12:27:27 2012 -0800"
      },
      "message": "Merge \"Fix audio preprocessing library wrapper\""
    },
    {
      "commit": "44deb053252a3bd2f57a007ab9560f4924f62394",
      "tree": "57fac6fb14c9f7897409b54b360afebef59c2e70",
      "parents": [
        "860936d780d98a5968f40e66ca6ae800c67adbc3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Feb 05 18:09:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 13 10:30:23 2012 -0800"
      },
      "message": "Factor out and speed up permission-checking code\n\nUse the caching permission check for dump to save IPC.\n\nCache getpid() to save kernel call for other permission checks.\n\nThe C runtime library getpid() can\u0027t cache due to a fork\nrace condition, but we know that mediaserver doesn\u0027t fork.\n\nDon\u0027t construct String16 on the stack.\n\nChange-Id: I6be6161dae5155d39ba6ed6228e7683e67be34ed\n"
    },
    {
      "commit": "860936d780d98a5968f40e66ca6ae800c67adbc3",
      "tree": "e385efb4808bbed472210480944eaa989c4ad9ea",
      "parents": [
        "2b213bc220768d2b984239511cd4554a96bc0079",
        "7c5b72c1ea1a7a8ec40c1364e5e32043799c811f"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Feb 10 17:57:16 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 17:57:16 2012 -0800"
      },
      "message": "Merge \"Change the signature of method addTextSource() in AwesomePlayer\""
    },
    {
      "commit": "2b213bc220768d2b984239511cd4554a96bc0079",
      "tree": "06053ae20ae309df04caa0ad5a63563fe72f5a15",
      "parents": [
        "b6333aa8317ce5162ab006c4baed6b0890936dc7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 14:05:20 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:36:46 2012 -0800"
      },
      "message": "mAudioHwDevs and related cleanup\n\nInline AudioFlinger::initCheck and remove unnecessary lock.\n\nRemove redundant check of mAudioHwDevs.size().\n\nNo need to lock mHardwareLock for each device separately\nduring initialization.\n\nUse size_t not int to loop through Vector, since size() returns size_t.\n\nAdd missing hardware lock for get_mic_mute() and get_input_buffer_size().\n\nAdd comments.\n\nChange-Id: Iafae78ef78bbf65f703d99fcc27c2f4ff221aedc\n"
    },
    {
      "commit": "b6333aa8317ce5162ab006c4baed6b0890936dc7",
      "tree": "d4fb7b888a6b12f4d3c35c0a84d49490dc33bc8e",
      "parents": [
        "3a144d08b713e3c0f6b7b8e95bc42cef5886f4fa",
        "b28686f95daee16edeb5f39af2cd5274ac3dc99f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:32:16 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 15:32:16 2012 -0800"
      },
      "message": "Merge \"Simplify ThreadBase::exit() aka requestExitAndWait\""
    },
    {
      "commit": "3a144d08b713e3c0f6b7b8e95bc42cef5886f4fa",
      "tree": "b3c0d783ff3b8ef62804701409b038447d3f2cbb",
      "parents": [
        "0d9302d7830b46542821b3e5f3e4f96942bd3cb3",
        "cdf2158f3b9498d6cd0eb228d8bee16e32399e16"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:31:54 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 15:31:54 2012 -0800"
      },
      "message": "Merge \"Disable HQ resamplers for now until qualified\""
    },
    {
      "commit": "0d9302d7830b46542821b3e5f3e4f96942bd3cb3",
      "tree": "f14d8a8e3a243dc6fa7d63d48017132814ff3b86",
      "parents": [
        "858df80948ee64f478782a6a6c06533ba1651ef1",
        "2f732eb768004c6362fae8a02c60b69c9400b032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:31:07 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 15:31:07 2012 -0800"
      },
      "message": "Merge \"Move header declarations around for clarity\""
    },
    {
      "commit": "858df80948ee64f478782a6a6c06533ba1651ef1",
      "tree": "d5b854a26e507ab8ce03037371146e5a34937151",
      "parents": [
        "95a87908ddf240760e8e8b35a6cafcc149c7f33f",
        "58123c3a8b5f34f9d1f70264a3c568ed90288501"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:30:15 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 15:30:15 2012 -0800"
      },
      "message": "Merge \"Camel case readability \u0026 private disconnect(bool)\""
    },
    {
      "commit": "95a87908ddf240760e8e8b35a6cafcc149c7f33f",
      "tree": "10f8fe22a6b34ae2d82eedc01c3f43cf1039b292",
      "parents": [
        "c8ad36bbb30e99e49026cba78e5e0f83db5cb0f6",
        "d198b61603d5fa9298edea4ddb5852ea45159906"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:29:35 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 15:29:35 2012 -0800"
      },
      "message": "Merge \"Remove aliasing\""
    },
    {
      "commit": "c8ad36bbb30e99e49026cba78e5e0f83db5cb0f6",
      "tree": "b11dc2fa925f100ccad66a2f5aa2cf2d01331117",
      "parents": [
        "31f0acff69efd46897221d847becca79ab15105f",
        "5b9ff43995f6a6b819d9ad37dd8cdc5ad4a088d7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:28:57 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 15:28:57 2012 -0800"
      },
      "message": "Merge \"Use mul from audioutils\""
    },
    {
      "commit": "31f0acff69efd46897221d847becca79ab15105f",
      "tree": "bf04e79a2935e9426bcd4cdf1815dbfb0c1e6397",
      "parents": [
        "9f1d4448050a4df7118c90c0c0d3e6f9c4b82f3b",
        "004f719467c498942c40de9f260be601ee45e630"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:28:45 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 15:28:45 2012 -0800"
      },
      "message": "Merge \"Mark fields const if only set in constructor\""
    },
    {
      "commit": "b28686f95daee16edeb5f39af2cd5274ac3dc99f",
      "tree": "84d9f579f42b724ca4c1dce405f3c8a5901e9d9d",
      "parents": [
        "7ae4a2c130ec2cb5dec69d095b810698acc543b3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 08:39:38 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 15:02:44 2012 -0800"
      },
      "message": "Simplify ThreadBase::exit() aka requestExitAndWait\n\nWe can remove mExiting and use Thread::exitPending() instead.\n\nThe local sp\u003c\u003e on \"this\" in exit() is not needed, since the caller must\nalso hold an sp\u003c\u003e in order to be calling us. (Unless it was using a raw\npointer, but that would be dangerous for other reasons.)\n\nAdd comment explaining the mLock in exit().\n\nChange-Id: I319e5107533a1a7cdbd13c292685f3e2be60f6c4\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": "0ba18ec1b343a8de70924f87630dd1f329b00fe6",
      "tree": "13000f3913f814761effcd771b93a66a5f46341a",
      "parents": [
        "12018d80add66f5558675614d73fa6549150806e",
        "90bebef5669a9385c706b042d146a31dca2e5d9b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 13:36:24 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 13:36:24 2012 -0800"
      },
      "message": "Merge \"No newline or space at end of ALOG format string\""
    },
    {
      "commit": "12018d80add66f5558675614d73fa6549150806e",
      "tree": "8fbeaafce1f62e72edcef8d43a6a435fb3fe301c",
      "parents": [
        "8b5980798ca06e57b1284e6e23fa220e1207bf41",
        "b7bf796b758e144f94f6ed4d16c21bf22a118fb3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 13:33:31 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 13:33:31 2012 -0800"
      },
      "message": "Merge \"Move declaration of stream_type_t up earlier\""
    },
    {
      "commit": "8b5980798ca06e57b1284e6e23fa220e1207bf41",
      "tree": "253051dc7a47b0338667ef777c2a0ada373eb4df",
      "parents": [
        "5a4b1aaee6109252e268b1e5d0c15b59e21ce993",
        "23d82a9bc9a43b49ba684ba40875b91db310d3b9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 13:33:02 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 13:33:02 2012 -0800"
      },
      "message": "Merge \"Fix typos in ALOG for pid vs tid\""
    },
    {
      "commit": "5a4b1aaee6109252e268b1e5d0c15b59e21ce993",
      "tree": "6562454f863a38d838d3ce30dca258b754b98456",
      "parents": [
        "43089daaf82bd2b8e5f9a29b80af5abaae4657b3",
        "02bbd20cece1785c223ac4ca2ddc635931a80673"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 10 13:30:24 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 13:30:24 2012 -0800"
      },
      "message": "Merge \"Rename type() to streamType()\""
    },
    {
      "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": "cdf2158f3b9498d6cd0eb228d8bee16e32399e16",
      "tree": "21af355df3a1f1d8d559b419fe8daf37c46dadbc",
      "parents": [
        "7ae4a2c130ec2cb5dec69d095b810698acc543b3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 14:01:58 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 09 18:14:44 2012 -0800"
      },
      "message": "Disable HQ resamplers for now until qualified\n\nThis saves about 6500 bytes.\n\nChange-Id: I87102fe561c95c19c9e615dea3de914f96639257\n"
    },
    {
      "commit": "7c5b72c1ea1a7a8ec40c1364e5e32043799c811f",
      "tree": "fa5ec98db2048b78c35b828843a78e9cf4e6f8a2",
      "parents": [
        "43089daaf82bd2b8e5f9a29b80af5abaae4657b3"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 09 17:32:57 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 09 17:32:57 2012 -0800"
      },
      "message": "Change the signature of method addTextSource() in AwesomePlayer\n\no avoid a unnecessary copy constructor call\n\nChange-Id: Ib598bbe42d42a835549e2d29502c6f196f859874\n"
    },
    {
      "commit": "2f732eb768004c6362fae8a02c60b69c9400b032",
      "tree": "e47161097aae718d7496059fd53b0238f3627a53",
      "parents": [
        "7ae4a2c130ec2cb5dec69d095b810698acc543b3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 26 09:48:03 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 09 17:29:26 2012 -0800"
      },
      "message": "Move header declarations around for clarity\n\nPut IAudioFlinger methods in binder opcode order.\nMove hardware call state closer to where it is used.\ngetMode() and btNrecIsOff() are private.\n\nChange-Id: Ie50340b396c39c763f2b155cbc08da8a0d0f2424\n"
    },
    {
      "commit": "004f719467c498942c40de9f260be601ee45e630",
      "tree": "92763f0176b88c463d756e04a6109deb42ec441d",
      "parents": [
        "7ae4a2c130ec2cb5dec69d095b810698acc543b3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 30 09:26:17 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 09 17:00:15 2012 -0800"
      },
      "message": "Mark fields const if only set in constructor\n\nChange-Id: Iacd06bb9efaf708cf965033be1f2297b58f7f75c\n"
    },
    {
      "commit": "d198b61603d5fa9298edea4ddb5852ea45159906",
      "tree": "3c03752e50c74f4bcdcf185d8e84e00788ffea04",
      "parents": [
        "7ae4a2c130ec2cb5dec69d095b810698acc543b3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 14:09:43 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 09 16:58:07 2012 -0800"
      },
      "message": "Remove aliasing\n\nCode was aliasing mBuffer as buffer, but continuing to use both buffer\nand mBuffer after that point.  This was at best misleading, and at worst\ncould confuse the compiler into generating bad code.  There was no\nperformance advantage to the alias, in fact removing it saves 16 bytes.\n\nChange-Id: I55023ddba465d9be82f66745b088d18af658ac60\n"
    },
    {
      "commit": "58123c3a8b5f34f9d1f70264a3c568ed90288501",
      "tree": "19111bc4d31bd66596fc47272fe778f1ea1af9d9",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 10:32:24 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 09 16:43:39 2012 -0800"
      },
      "message": "Camel case readability \u0026 private disconnect(bool)\n\nChange-Id: If66516ed2703e048c5e6ccc6cd431446a024f4a1\n"
    },
    {
      "commit": "5b9ff43995f6a6b819d9ad37dd8cdc5ad4a088d7",
      "tree": "bfa47df10004a01c070003633ac7096a8496e3d5",
      "parents": [
        "7ae4a2c130ec2cb5dec69d095b810698acc543b3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 09 08:22:46 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 09 16:34:23 2012 -0800"
      },
      "message": "Use mul from audioutils\n\nI verified that the disassembled output is identical.\n\nChange-Id: I34a76f0842ebc4aef2c923e079e38d0bc1f98b5c\n"
    },
    {
      "commit": "23d82a9bc9a43b49ba684ba40875b91db310d3b9",
      "tree": "380803dbedfeeb154242e465da524c061f91ff40",
      "parents": [
        "7ae4a2c130ec2cb5dec69d095b810698acc543b3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 11:10:00 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 09 16:33:17 2012 -0800"
      },
      "message": "Fix typos in ALOG for pid vs tid\n\nChange-Id: I6dc70f137d0ff8a86427ab8882a81886e1de0782\n"
    },
    {
      "commit": "43089daaf82bd2b8e5f9a29b80af5abaae4657b3",
      "tree": "f02db6abff1cd9d35151468dee35fc0b741e80d3",
      "parents": [
        "5ec58d925520e6913fba3fc54413881af751c610"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 09 11:53:57 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 09 15:02:08 2012 -0800"
      },
      "message": "Finish up B frame support in MPEG4Writer\n\no optimize to reduce the size of the size of the ctts box\no change the type for the time offset field in ctts table entry from int32_t to uint32_t according to the mp4 file spec\no also moved away from MediaDebug and used ADebug instead.\n\no related-to-bug: 4232183\n\nChange-Id: I19364303728da64359c63169eec7487508c1d0f8\n"
    },
    {
      "commit": "5ec58d925520e6913fba3fc54413881af751c610",
      "tree": "d833f4cf3772a3f3b8a68d2cc1060ed58840b82f",
      "parents": [
        "7ae4a2c130ec2cb5dec69d095b810698acc543b3"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Feb 09 09:55:45 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Feb 09 14:32:08 2012 -0800"
      },
      "message": "Experiment with seeking to closest frame instead of closest syncframe\n\nAlso supports SEEK_CLOSEST mode in the Matroska/Webm extractor.\n\nChange-Id: I257771648dfe41392a4cf8932f625489dcb9f234\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": "6637baae4244aec731c4014da72418d330636ae1",
      "tree": "5244135379ecfdd8ce7394ccfed0b363ccabcf56",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 09 09:40:36 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 17:01:49 2012 -0800"
      },
      "message": "Fix races related to volume and mute\n\nFix race conditions when setting master volume, master mute, stream\nvolume, stream mute for a playback thread, and when reading stream\nvolume of a playback thread.  Lock order is AudioFlinger, then thread.\n\nRename streamVolumeInternal to streamVolume_l, comment, and use it to\nimplement streamVolume().\n\nCode size reduction:\n - Remove dead code: AudioFlinger::PlaybackThread::masterVolume, masterMute, streamMute.\n - Change return type of non-binder methods that always succeed from status_t to void.\n - Remove virtual from volume and mute methods that don\u0027t need it.\n\nThis change saves 228 bytes but decreases performance of binder operations\ndue to the added locks.\n\nChange-Id: Iac75abc1f54784873a667d1981b2e08f8f31e5c9\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": "b7bf796b758e144f94f6ed4d16c21bf22a118fb3",
      "tree": "ae407de10945e65b4092455db41ae6b8b3c8462c",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 12:36:25 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 12:54:31 2012 -0800"
      },
      "message": "Move declaration of stream_type_t up earlier\n\nstream_type_t is used by AudioFlinger class, so it should be declared there.\nThis way we don\u0027t have to peek into PlaybackThread to get the declaration.\n\nChange-Id: Ie08bab1604699214d1e8df2d48d3fbfbbc436e96\n"
    },
    {
      "commit": "02bbd20cece1785c223ac4ca2ddc635931a80673",
      "tree": "f43adecd4648ff511eacc7ca2921c167ed3220de",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 12:35:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 12:52:00 2012 -0800"
      },
      "message": "Rename type() to streamType()\n\nThis avoids possible confusion with thread\u0027s type().\nAlso remove redundant cast \"(audio_stream_type_t)\".\n\nChange-Id: I320b9177b6c267a102d215f002228bcf988c437a\n"
    },
    {
      "commit": "7ae4a2c130ec2cb5dec69d095b810698acc543b3",
      "tree": "40ab500ed6b99d4662be5abee1a8fe98f2d58902",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0",
        "000e18370baae60ffd9f25b509501dd8c26deabf"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Feb 08 10:42:35 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 10:42:35 2012 -0800"
      },
      "message": "Merge \"Enable B frame support in MPEG4Writer\""
    },
    {
      "commit": "98ec94c5854daccc3474758524e7f4adfe535ce0",
      "tree": "bec80965e65828ee2f890d25c275fd3bf422eb45",
      "parents": [
        "72ef00de10fa95bfcb948ed88ab9b7a177ed0b48"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 25 14:28:29 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 10:24:54 2012 -0800"
      },
      "message": "Combine duplicate code \u0026 document wp\u003c\u003e in mClients\n\nChange-Id: Iea8cfe8e57563337fb2484a1246ef79d6ad3db18\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": "dbfafaffe2e97eaf8d74ec6b6c468418a1ad2443",
      "tree": "594fe80487e000923e244f40ecd3adbd138608fb",
      "parents": [
        "5e92a7861196ddae14638d4b7a63fc4892b7ef59"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 25 15:27:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 09:49:14 2012 -0800"
      },
      "message": "Simplify destructors\n\nRemove explicit clear() when the order doesn\u0027t matter.\n\nChange-Id: I5931bc7ef5f681c7ce329aa9ec0a6e46d34a56c5\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": "0a20fa9c41c96e31fa20e071074a4b6e7f6c41c3",
      "tree": "128bf63eaea4d94fbf42d6954cd92046f90bf98e",
      "parents": [
        "b61ec89bb0c701b3bd06eb658f854230681f8b39",
        "bb001926447d0b7dc71ca8bb3c9856f3136d8f4c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:40:28 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:40:28 2012 -0800"
      },
      "message": "Merge \"Use pid_t not int\""
    },
    {
      "commit": "b61ec89bb0c701b3bd06eb658f854230681f8b39",
      "tree": "d1281080768cd8ab98f97cc331e2e7bb27019059",
      "parents": [
        "63d2daed17ab749baa80bc808fb5083b688b771b",
        "1a0ae5be3d1273cba12584b33830d859510fbf82"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:40:15 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:40:15 2012 -0800"
      },
      "message": "Merge \"Don\u0027t double destruct audio_track_cblk_t\""
    },
    {
      "commit": "63d2daed17ab749baa80bc808fb5083b688b771b",
      "tree": "735cfc77d2082c044816fe367f33401fd5b472c7",
      "parents": [
        "4f9b0c54011eb8fd2ccfb393c2dcd51cd07800e0",
        "c59c004a3a6042c0990d71179f88eee2ce781e3c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:39:39 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:39:39 2012 -0800"
      },
      "message": "Merge \"AudioFlinger methods const and inline\""
    },
    {
      "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": "86feafe15b3f9609e1e9f64184688c2b6f2e4834",
      "tree": "281f6c3826240aeabc62820918b9e206a6cfb76e",
      "parents": [
        "e616d4e6de6d53ddebbc3d7fb381af94589c2232",
        "c19e22450e6e3d07594c935c7a9522e85e909e82"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:33:41 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:33:41 2012 -0800"
      },
      "message": "Merge \"Use virtual destructors\""
    },
    {
      "commit": "e616d4e6de6d53ddebbc3d7fb381af94589c2232",
      "tree": "ec4258e62eeb8cc12077af1a8dae45b6b4f0d6cb",
      "parents": [
        "f22147e5d2982e0c461f7ce8058c2d596d518bd4",
        "090f01963e215f895020a31e22368cd44e086ce3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 07:45:15 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 07:45:15 2012 -0800"
      },
      "message": "Merge \"Improve performance for sp\u003c\u003e on stack\""
    },
    {
      "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": "1579d7948117e3e6541b0cfda02cc5234a3280ea",
      "tree": "b86c07193eb8e2d6d313e1136fccffa043d4c7af",
      "parents": [
        "b5a66e15f371143f48665bbd462d75309582845d",
        "7378ca506e4e20c2b2d4e94a131cf1b95831adb5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 07:41:44 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 07:41:44 2012 -0800"
      },
      "message": "Merge \"Use 0 not NULL for sp\u003c\u003e and wp\u003c\u003e\""
    },
    {
      "commit": "b5a66e15f371143f48665bbd462d75309582845d",
      "tree": "45d58fa394a3d11bb4fb68ab6356191d863fc559",
      "parents": [
        "e98bbd36d67243fe987b09904956550a68af1cc7",
        "4c340c6521b634f159d2d6bc4e9359226fd8edf8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 07:40:23 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 07:40:23 2012 -0800"
      },
      "message": "Merge \"Use bool instead of int\""
    },
    {
      "commit": "e98bbd36d67243fe987b09904956550a68af1cc7",
      "tree": "3ad396f50bb4ad8e1bbf9fa939c4978851ec998b",
      "parents": [
        "dfa75555098a385ac8f4d29a73b32d66501f133d",
        "f587ba5b991c7cd91e4df093d0d796bd419e5d67"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 07:39:27 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 07:39:27 2012 -0800"
      },
      "message": "Merge \"Declare more IAudioFlinger methods const\""
    },
    {
      "commit": "dfa75555098a385ac8f4d29a73b32d66501f133d",
      "tree": "85e6870a94c1999e713fbbc07697806fa2851921",
      "parents": [
        "f83463148fbe344989ee1da07d15b94c38a61582",
        "d5e54f7a36daedc3b2a642d1499c262da04e6280"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 07:38:42 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 07:38:42 2012 -0800"
      },
      "message": "Merge \"Remove dead code\""
    },
    {
      "commit": "000e18370baae60ffd9f25b509501dd8c26deabf",
      "tree": "e447e9ceb46428f5f961534c38cef023e7206b3d",
      "parents": [
        "60c2b4ece6528d6d3f4e9e2c7e45772b65c4b87d"
      ],
      "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": "Tue Feb 07 18:32:29 2012 -0800"
      },
      "message": "Enable B frame support in MPEG4Writer\n\nThis patch allows us to automatically detect whether ctts box is needed in MPEG4Writer.\nMPEG4Writer uses ctts version 0 (non-negative offset value) store the composition time\noffset on a needed basis.\n\nCurrently, the size of the ctts box is not optimized. Optimization will be addressed\nin a subsequent patch.\n\no also changed the private method retrieveDecodingTime(bool) in OMXCodec\n  to getDecodingTime()\n\no related-to-bug: 4232183\n\nChange-Id: Ic6dc7b25ecd258c2506ca4b9c25156e922456e51\n"
    },
    {
      "commit": "f83463148fbe344989ee1da07d15b94c38a61582",
      "tree": "9c1f35749defb3acf0217182e4155ba351def261",
      "parents": [
        "60c2b4ece6528d6d3f4e9e2c7e45772b65c4b87d",
        "132e88ee86e4f11d1b649c336cd2d6eb5980c3fc"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Feb 07 10:43:08 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 07 10:43:08 2012 -0800"
      },
      "message": "Merge \"MatroskaExtractor: to support MPEG4 and MP3 codec.\""
    }
  ],
  "next": "94fef38613962c983c46ab0b97c58f5373412d2d"
}
