)]}'
{
  "log": [
    {
      "commit": "fb3aacec395d5917e29244fbef4b200ac8d08d07",
      "tree": "13c5e8f35f99e359e0cfc105b846833718b055b9",
      "parents": [
        "65febca659a21b1b5f1616bd083fb289c9acaf19",
        "109347d421413303eb1678dd9e2aa9d40acf89d2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 12:42:44 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jul 02 12:42:44 2012 -0700"
      },
      "message": "am 109347d4: audioflinger: fix regression in attachAuxEffect().\n\n* commit \u0027109347d421413303eb1678dd9e2aa9d40acf89d2\u0027:\n  audioflinger: fix regression in attachAuxEffect().\n"
    },
    {
      "commit": "109347d421413303eb1678dd9e2aa9d40acf89d2",
      "tree": "51837c9c8163816bb896cb067e4a4a555f507a8b",
      "parents": [
        "717e128691f083a9469a1d0e363ac6ecd5c65d58"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 12:31:03 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 12:31:03 2012 -0700"
      },
      "message": "audioflinger: fix regression in attachAuxEffect().\n\nCommit 717e1286 introduced a regression in PlaybackThread::Track::attachAuxEffect()\nwhen called with an effect ID of 0 to detach the auxiliary effect.\n\nIt is normal in this case that AudioFlinger::getEffectThread_l() returns 0.\n\nBug 6768757.\n\nChange-Id: I7430bd1aad2f68da38f7c3e4794e7ad657bfc6be\n"
    },
    {
      "commit": "65febca659a21b1b5f1616bd083fb289c9acaf19",
      "tree": "16b6882983bb14f7f6cfff6e88801fa1f90c7cd5",
      "parents": [
        "f89a87ab3708e75c406b2abcb7e69dc1b076868a",
        "717e128691f083a9469a1d0e363ac6ecd5c65d58"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 01 09:34:18 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jul 01 09:34:18 2012 -0700"
      },
      "message": "am 717e1286: audioflinger: fix auxiliary effect attachment\n\n* commit \u0027717e128691f083a9469a1d0e363ac6ecd5c65d58\u0027:\n  audioflinger: fix auxiliary effect attachment\n"
    },
    {
      "commit": "717e128691f083a9469a1d0e363ac6ecd5c65d58",
      "tree": "70761520a17703d543262ebe7778f51a360d7923",
      "parents": [
        "33e28dd3c033641f4db9d1b99c7c88d6d08c61f7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 29 16:36:52 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 29 17:03:53 2012 -0700"
      },
      "message": "audioflinger: fix auxiliary effect attachment\n\nAuxiliary effects (Reverb) are global effects and as such follow\nthe default rule which is to attach them to the output thread that\nhandles music streams by default. This causes a problem when several\nthreads are eligible to handle music streams as tracks can be attached\nto either thread based on criteria unknown when teh effect is created.\n\nThe fix consists in moving the auxiliary effect if necessary when an\nAudioTrack is attached to it and this track is not on the same\noutput thread.\n\nBug 6608561.\n\nChange-Id: Ib32c3cabc731b2046aba728be1771982999c6069\n"
    },
    {
      "commit": "6b3c8a345d37d2cd9670ad6d94ce12c46a07f0b0",
      "tree": "03670ece3cd9971360876a7454f2c3fce3139854",
      "parents": [
        "a3ce152cac54d2519d596e1b1ece0cee9d41d496",
        "eb15716b59020f342df62bce5b293f0603b94861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 15 15:39:57 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 15 15:39:57 2012 -0700"
      },
      "message": "am eb15716b: Change definition of warmup period\n\n* commit \u0027eb15716b59020f342df62bce5b293f0603b94861\u0027:\n  Change definition of warmup period\n"
    },
    {
      "commit": "eb15716b59020f342df62bce5b293f0603b94861",
      "tree": "d230ab42f45394837dffc52deb8d31c8fef9c1c1",
      "parents": [
        "972af221ae7253e406e0e1ea853e56a3010ed6b1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 13 14:59:07 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 15 14:53:31 2012 -0700"
      },
      "message": "Change definition of warmup period\n\nPreviously, warmup was considered done as soon as any write() took\nmore than 0.5 nominal cycle time.  In practice, this was always the\nfirst write() that turned on power to the output path, and it didn\u0027t\naccurately account for filling the full kernel buffer queue, or for\nbuffering in the HAL sample rate conversion.\n\nNow warmup is considered done when a write() _after_ the first write\ntakes more than 0.5 nominal cycle time.\n\nThis will throttle the initial pull rate after coming out of standby.\nWhen combined with another change to throttle the pull rate for\ndevices with HAL sample rate conversion, it may help reduce some of the\nnotification glitches.  The only downside is that it will increase the\nwarmup time a bit.\n\nBug: 6508317, 6650846, 6607056\nChange-Id: I39f324c5195578170a55308e9601d3a1b41db3e0\n"
    },
    {
      "commit": "a3ce152cac54d2519d596e1b1ece0cee9d41d496",
      "tree": "b61591448c8baed6494f06f05f47300eb8eb01ae",
      "parents": [
        "f865add6e370577bccb2db3f76f6ca6ab727866e",
        "972af221ae7253e406e0e1ea853e56a3010ed6b1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 15 14:49:31 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 15 14:49:31 2012 -0700"
      },
      "message": "am 972af221: FastMixer compensates for SRC jitter in audio HAL\n\n* commit \u0027972af221ae7253e406e0e1ea853e56a3010ed6b1\u0027:\n  FastMixer compensates for SRC jitter in audio HAL\n"
    },
    {
      "commit": "972af221ae7253e406e0e1ea853e56a3010ed6b1",
      "tree": "77175ced586c67275d09b73524b935b15eab3090",
      "parents": [
        "fc42e16d96b7e1b18b573f40df1319c56f8ab933"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 13 17:14:03 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 15 10:21:47 2012 -0700"
      },
      "message": "FastMixer compensates for SRC jitter in audio HAL\n\nForce a sleep if audio HAL write() returns too quickly.\n\nBug: 6661275\nChange-Id: Ie810f5a087b89fb24dab229a0e500af1dee53571\n"
    },
    {
      "commit": "8234e627d1f786b3f93ba7c636a83a54811a9f98",
      "tree": "a402fa80c5b3436014a2a6a5645c190a5b7187ae",
      "parents": [
        "1782ece2b2eb342c04bab424aaa4db4597a28930",
        "0a14c4ce1a41bc09eb7855fa531a3af629a69139"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 15 08:24:07 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 15 08:24:07 2012 -0700"
      },
      "message": "am 0a14c4ce: Make CPU frequency statistics optional\n\n* commit \u00270a14c4ce1a41bc09eb7855fa531a3af629a69139\u0027:\n  Make CPU frequency statistics optional\n"
    },
    {
      "commit": "0a14c4ce1a41bc09eb7855fa531a3af629a69139",
      "tree": "dfde5cdadeea7bbbdb8e50477ca35ac4768693f0",
      "parents": [
        "362ebcbf100f7fccd37551c77e67c4faa7241b63"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 13 14:58:49 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 14 17:49:31 2012 -0700"
      },
      "message": "Make CPU frequency statistics optional\n\nCertain CPUs with dynamic cluster swapping and hotplug\ndon\u0027t report CPU frequency accurately.  The file descriptors\nused to read the frequency become stale and report bogus data.\nSo make this feature a build time option for debugging only.\nThis will also improve performance of the fast mixer loop.\n\nChange-Id: I602f81ec3281a37992769208be08084ed1469e8c\n"
    },
    {
      "commit": "362ebcbf100f7fccd37551c77e67c4faa7241b63",
      "tree": "62291e1b6f9940cec2b8e6a67357744cd1ee134f",
      "parents": [
        "7b4de10199f3a1803350e9a65baa671874d9c2f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 24 08:44:00 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 14 15:34:17 2012 -0700"
      },
      "message": "DO NOT MERGE Remove log spam for fast track denied\n\nBug: 6531054\nChange-Id: Iedf58e810a157aae88b5900da27c81054c437058\n"
    },
    {
      "commit": "e6adde403480333b613452ae0df442df9da4a5b2",
      "tree": "f32738e98444c0eaa7d696306d6bf5f850524f30",
      "parents": [
        "49dd5cf3469cd755321f8ec10013ad4fcfaf723d",
        "868c0abe9f26852c217bc201b337e72c68f829b8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 14 08:41:54 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 14 08:41:54 2012 -0700"
      },
      "message": "Merge \"Shorten dumpsys media.audio_flinger output\" into jb-dev"
    },
    {
      "commit": "49dd5cf3469cd755321f8ec10013ad4fcfaf723d",
      "tree": "2f849ff8d42627300eb0cd221e3bc04716db889e",
      "parents": [
        "e20435de10f63af812da9d4f801b61a8817733a0",
        "0c9d26d187017f7fb028ab52a0fbc6395142faa4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 14 08:41:38 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 14 08:41:38 2012 -0700"
      },
      "message": "Merge \"Log track name on obtain/releaseBuffer warnings\" into jb-dev"
    },
    {
      "commit": "3d51d5cb53cc630709a0ba78d0e60501a675f2d5",
      "tree": "c01dc8011b4e0061343c8b60b0da3508c63ae822",
      "parents": [
        "b4ea1ab821d652cb080910d4081f5f1318597a90"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Jun 12 18:10:35 2012 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Jun 13 15:18:29 2012 -0700"
      },
      "message": "Add NOTICE and MODULE_LICENSE_APACH2 to libs build under /frameworks/av/\n\nChange-Id: I0a3af3e2abdedebd5934f3d941d01c32cfc75e26\nrelated-to-bug: 6647465\n"
    },
    {
      "commit": "868c0abe9f26852c217bc201b337e72c68f829b8",
      "tree": "1ffcd485ce7c69bc424fc7fafb00412effd9c126",
      "parents": [
        "b4ea1ab821d652cb080910d4081f5f1318597a90"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 13 14:59:17 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 13 15:14:16 2012 -0700"
      },
      "message": "Shorten dumpsys media.audio_flinger output\n\nDon\u0027t include in FastMixer if it\u0027s not present.\nThis removes confusing clutter especially for devices\nwith a separate deep buffer output thread, or for the\nduplicating thread and A2DP output thread.\n\nChange-Id: I84933f5555593256f11ba0895ec915c09cf16963\n"
    },
    {
      "commit": "0c9d26d187017f7fb028ab52a0fbc6395142faa4",
      "tree": "35fd2f6babef082b85058fd27a69bda048687295",
      "parents": [
        "b4ea1ab821d652cb080910d4081f5f1318597a90"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 14:35:01 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 13 15:12:42 2012 -0700"
      },
      "message": "Log track name on obtain/releaseBuffer warnings\n\nThis should help diagnose problems by allowing us to correlate\nthe logs with the dumpsys media.audio_flinger output.\n\nChange-Id: I8c7c592b4f87d13b0f29c66ce7a2f301a0f063c9\n"
    },
    {
      "commit": "c15d6657a17d7cef91f800f40d11760e2e7340af",
      "tree": "c4346cb0fcde7483e42900aecce64df96250889b",
      "parents": [
        "b7acdfb8068bf408ed859dfdd441b4a8722eb12a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 14:52:57 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 11 11:39:54 2012 -0700"
      },
      "message": "Add audio watchdog thread\n\nChange-Id: I4ed62087bd6554179abb8258d2da606050e762c0\n"
    },
    {
      "commit": "28ed2f93324988767b5658eba7c1fa781a275183",
      "tree": "07ba39f61d41aa6ff2af76dc2c9122a102c92059",
      "parents": [
        "a4f7e0e9a0e92a063f1b3a08988cf46e2cf1fa94"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 07 10:17:54 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 08 10:09:22 2012 -0700"
      },
      "message": "Reduce underruns in screen off, esp. with EQ\n\nAdd MonoPipe APIs to specify setpoint.\nUse screen state to configure pipe setpoint.\nFix a long-standing bug where pipe sleep time was excessive,\n  which interacted poorly with governor and low clock frequencies.\n  Now it deducts the elapsed time since last write(),\n  which was significant when there was EQ and low clock frequency.\n\nBug: 6618373\nChange-Id: I6f3b0072c2244aeb033ef0795ad164491a164ff5\n"
    },
    {
      "commit": "a4f7e0e9a0e92a063f1b3a08988cf46e2cf1fa94",
      "tree": "007deb0f276a01d2276a953d2a493cf4f7d11d50",
      "parents": [
        "e35a55fbdff5a695ee35ff43f1466a62fb75662b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 07 17:16:09 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 07 17:16:09 2012 -0700"
      },
      "message": "audioflinger: fix duplicating thread standby\n\nThe code that waits for a track presentation to be complete\nbefore disabling it caused a regression for duplicating threads.\nBecause of the way output tracks activity is managed, the number\nof frames output by the duplicating thread would never\nreach the target set for a track to be considered presented.\nThe track would not be removed from active list and the thread would\nnot go to standby and keep its wakelock held.\n\nBug 6606922.\n\nChange-Id: I4b46b420ac4cbf79a86b6791ae6589d407b01c92\n"
    },
    {
      "commit": "e35a55fbdff5a695ee35ff43f1466a62fb75662b",
      "tree": "97d542ca3fcf24a4ab55747fe0bb27e379ad59dd",
      "parents": [
        "9a0d82df8fd681257bc5b29fb5e6c65fcc7cef5a",
        "f06c2ed50e1db871ae9eb2bd15a196064f8c278c"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jun 07 11:08:15 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 07 11:08:15 2012 -0700"
      },
      "message": "Merge \"Take latency and current time into account for visualization\" into jb-dev"
    },
    {
      "commit": "f06c2ed50e1db871ae9eb2bd15a196064f8c278c",
      "tree": "a6e809ffab6281359f5c22166113cb2039579f68",
      "parents": [
        "67c0a58e05f4c19d4a6f01fe6f06267d57b49305"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Jun 06 09:52:31 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jun 07 09:16:27 2012 -0700"
      },
      "message": "Take latency and current time into account for visualization\n\nBuffer more data, and return the data that is currently being\noutput from the audio output, to ensure that visualizations are\nsmooth and responsive even when the audio output has a large\nlatency and/or large buffers.\nb/6522728\n\nChange-Id: I401637f01be7600b3c594a55c869036c13b206c0\n"
    },
    {
      "commit": "9a0d82df8fd681257bc5b29fb5e6c65fcc7cef5a",
      "tree": "9e31aa4a1c1a6b52b24c124eab362b4b4a67fb4f",
      "parents": [
        "67c0a58e05f4c19d4a6f01fe6f06267d57b49305"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 05 18:12:11 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 06 09:23:31 2012 -0700"
      },
      "message": "audioflinger: modify fast mixer overrun management\n\nDo not force sleep when an overrun occurs. This was for non\nblocking audio HAL and is unused.\nKeep statistics on overruns.\n\nBug 6605215.\n\nChange-Id: I295455d4562201aa3814c88bdd6e52c9226712af\n"
    },
    {
      "commit": "67c0a58e05f4c19d4a6f01fe6f06267d57b49305",
      "tree": "0bfb89de1a57ad53abbd6314e6352538ab1a6317",
      "parents": [
        "ab9071b8d1b375418eb797c9a790da71de644344"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 01 19:31:12 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 05 12:50:16 2012 -0700"
      },
      "message": "audioflinger: various fixes on direct output\n\nVarious fixes in direct output playback thread implementation:\n- threadLoop_write() was broken for playback threads that do not\nuse a pipe sink.\n- output buffer size calculation was hard coded for stereo.\n- removed software volume that was implemented for PCM stereo\nformat only: the audio HAL has to implement volume if needed\nfor direct outputs.\n\nChange-Id: If211b4489be9af395435707b8cf0388cce1347b2\n"
    },
    {
      "commit": "ab9071b8d1b375418eb797c9a790da71de644344",
      "tree": "637a5322ed80b9de92433ed9851302e45d78b727",
      "parents": [
        "399930859a75d806ce0ef124ac22025ae4ef0549"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 04 13:45:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 04 14:27:56 2012 -0700"
      },
      "message": "audioflinger: fix active sleep time calculation.\n\nWhen an audioTrack underruns, the audioflinger mixer thread\nsleeps for a certain time to give the app a chance to recover.\nThis time is based on the reported audio HAL latency.\nSome audio HALs implementing deep buffering have a variable\nlatency and this creates a problem if the sleep time is cached\nwhen the output stream is opened and not updated afterwards.\n\nThis change derives the active sleep time from the mix buffer\nframecount instead of the latency. This is more conservative\nbut works for variable latency.\n\nBug 6588525.\n\nChange-Id: Ia892fc290fe06f836565c3ae15f7a2ce026c88c6\n"
    },
    {
      "commit": "399930859a75d806ce0ef124ac22025ae4ef0549",
      "tree": "2471b70dedc0bb33f7310de8ae0e5622344c6f82",
      "parents": [
        "1295bb4dcff7b29c75cd23746816df12a871d72c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 13:40:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 04 08:27:25 2012 -0700"
      },
      "message": "State queue dump\n\nBug: 6591648\nChange-Id: Iac75e5ea64e86640b3d890c46a636641b9733c6d\n"
    },
    {
      "commit": "1295bb4dcff7b29c75cd23746816df12a871d72c",
      "tree": "81cf673d36c8aaf3d9d51a9f372a8425ee5fa49b",
      "parents": [
        "bf0d21fb1310e8677caa53b90e8c3aecebc7fc13"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 07:43:43 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Jun 03 14:49:11 2012 -0700"
      },
      "message": "Fast track dumpsys\n\nBug: 6591648\nChange-Id: I696f51c682e7233ba690d97da26012084989b412\n"
    },
    {
      "commit": "bf0d21fb1310e8677caa53b90e8c3aecebc7fc13",
      "tree": "247c7705394820c7cb84899343bf7a9b834bbda6",
      "parents": [
        "81787e56f8f21407eade5accc50c6da39b8af9b2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 14:59:29 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Jun 03 14:42:51 2012 -0700"
      },
      "message": "Count underruns for normal tracks also\n\nBug: 6591648\nChange-Id: Iff9cabe392bb2ce97062603adb9c9dc7aa4170d5\n"
    },
    {
      "commit": "81787e56f8f21407eade5accc50c6da39b8af9b2",
      "tree": "1d33021d28ad0c469e5a6adc98e7a7d097a65ad5",
      "parents": [
        "7dc5b165d4f98a2059eaf1c7fec20b3b5773cd4c",
        "04a4ca4217e9b30342d5865024c340013d7184e8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Jun 03 14:40:55 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Jun 03 14:40:55 2012 -0700"
      },
      "message": "Merge \"Was calculating measured warmup time wrong\" into jb-dev"
    },
    {
      "commit": "7dc5b165d4f98a2059eaf1c7fec20b3b5773cd4c",
      "tree": "fdbdaa7545921e7ec3079f39013c3943dd22a376",
      "parents": [
        "0c22272f1c97fd4b7e106030a1fd5e6b50680b61",
        "893a05479c96f911d02beb0443da3ed6508143a7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 01 11:06:28 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 01 11:06:28 2012 -0700"
      },
      "message": "Merge \"Fix fast track leak if out of normal track names\" into jb-dev"
    },
    {
      "commit": "0c22272f1c97fd4b7e106030a1fd5e6b50680b61",
      "tree": "0b27f53c60c0e20d3e06d0fa7eb1f8e04ff6697f",
      "parents": [
        "dadc0ddbfe309086801b479ddc91c55eeb2a9cbb",
        "820ba70df8ba595ae9055dfd34fdbfa32f70f14d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 01 11:04:43 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 01 11:04:43 2012 -0700"
      },
      "message": "Merge \"Pipe throttle based on requested frame count\" into jb-dev"
    },
    {
      "commit": "04a4ca4217e9b30342d5865024c340013d7184e8",
      "tree": "5e212501d1b93a5eedad01410dc863fef49ec258",
      "parents": [
        "dadc0ddbfe309086801b479ddc91c55eeb2a9cbb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 01 10:49:51 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 01 10:51:34 2012 -0700"
      },
      "message": "Was calculating measured warmup time wrong\n\nBug: 6592923\nChange-Id: I980c6fc69d78c569147ea44ce33a7f8a41739c91\n"
    },
    {
      "commit": "893a05479c96f911d02beb0443da3ed6508143a7",
      "tree": "ba9fba13c28e13b555313231bfb4cbaba39d81b1",
      "parents": [
        "83410a85993ad6f5f0c122036ff0bda42bf1d4f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 10:32:06 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 14:39:20 2012 -0700"
      },
      "message": "Fix fast track leak if out of normal track names\n\nBug: 6580402\nChange-Id: I3ac7f012062c35833147f47ba822eb4bf532a824\n"
    },
    {
      "commit": "820ba70df8ba595ae9055dfd34fdbfa32f70f14d",
      "tree": "e97d469bcac8dc241ed7f6690db31035a6f1493b",
      "parents": [
        "4364d2d1fd712faed7e839b58fedba3f48f626d0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 16:34:17 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 17:39:45 2012 -0700"
      },
      "message": "Pipe throttle based on requested frame count\n\nNow does throttling based on the requested frame count, but\nstill permits overfilling pipe up to the rounded-up frame count.\nAlso still uses the larger frame count for non-blocking arithmetic.\n\nBug: 6585323\nChange-Id: Ic2420a071419905524a14c22ebe1ce0e32d70a9d\n"
    },
    {
      "commit": "3bdb4fbfc6730b6edc0b1ee980141574ed54ed8d",
      "tree": "0629fb88ed24815990afca3e04f4821e7b974336",
      "parents": [
        "cc9833b5db0e96f12daddb90a747fd146627377d",
        "91b14c4c144d0cc957a427cffc02ba10d0615677"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 30 14:07:38 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 30 14:07:38 2012 -0700"
      },
      "message": "Merge \"audioflinger: fix effect problem during underrun\" into jb-dev"
    },
    {
      "commit": "91b14c4c144d0cc957a427cffc02ba10d0615677",
      "tree": "dd7c1027319b6783cdc493bf4d37afb2537a2879",
      "parents": [
        "91b0d43a27b3a1cebd75270f953f3fb9fa4f2047"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 30 12:30:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 30 12:38:27 2012 -0700"
      },
      "message": "audioflinger: fix effect problem during underrun\n\nWhen an audio track underruns, the input buffer of the\ncorresponding effect chain (if any) must be cleared, otherwise\naudio from previous mixer run will be fed again to the effect process\nfunction.\n\nBug 6551652.\n\nChange-Id: I5cd02196745f756c85af82d6937e9dc54369b37f\n"
    },
    {
      "commit": "09cf462a265c3e9bc84c518cc75d77a5b1d69012",
      "tree": "9d3ae70459a1a6bf1aa6d3377e3f6dd1413b055b",
      "parents": [
        "6350e21e8947398a94402bc2969d13d407fbc3fb"
      ],
      "author": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Tue May 29 11:17:48 2012 -0700"
      },
      "committer": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Tue May 29 11:28:51 2012 -0700"
      },
      "message": "DO NOT MERGE: Minimal fix for takePicture/previewCallback deadlock\n\n- Caused by already held lock in camera service\n\n- Introduce one more lock, mICameraLock, to control access to camera\n  client through ICamera binder interface.\n\n- mLock is released before calling HAL takePicture, allowing HAL\n  callbacks to access camera client during takePicture processing.\n\nBug: 5804701\nChange-Id: Ibcef4857a2c844c964afefa70f9cdccdd0a55fd0\n"
    },
    {
      "commit": "f436fdcf93bd417fd3c9d2a8b19fd221d894b5e3",
      "tree": "930951e6490510ef9eeab7210c8f729950783bd5",
      "parents": [
        "e737cda649acbfa43fc1b74612a83f2fac9aa449"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 24 11:07:14 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 24 11:07:14 2012 -0700"
      },
      "message": "audioflinger: change session check in createTrack.\n\nDo not refuse to create a track on an output thread if the same session\nis present on another thread. It is now possible that two tracks\nwith the same session ID are on different threads if one can use deep\nbuffering and the other can\u0027t.\n\nIn this case, move effects attached to this session to the output\nthread ion which the new track is created.\n\nBug 6530324.\n\nChange-Id: I9019b3ee382e374c89d2319033afcfa7f886e4c4\n"
    },
    {
      "commit": "e737cda649acbfa43fc1b74612a83f2fac9aa449",
      "tree": "01ac3aaf0b68473c7e21c3056547b87a54f89f0f",
      "parents": [
        "8d9846c0693b7651b243f0161caa86be506f764a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 22 18:55:44 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 22 19:06:51 2012 -0700"
      },
      "message": "audioflinger: refine latency latency calculation.\n\nThere is an audio pipe between the normal mixer output and the fast\nmixer to cope for scheduling delays and buffer size difference.\nThis pipe depth was not taken into account in latency calculation.\n\nAdding the pipe contribution to the latency significantly improves A/V sync.\n\nBug 6520569.\n\nChange-Id: I5584908e8aa8a02170eb38b22b4370eea800a235\n"
    },
    {
      "commit": "fbae5dae5187aca9d974cbe15ec818e9c6f56705",
      "tree": "101ef33da2a18e0cb1c70a0e1ae085450dc60396",
      "parents": [
        "cd8a36fdc49a823f78d45e8e1a464dc261553b26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 21 09:17:20 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 21 12:36:06 2012 -0700"
      },
      "message": "Keep a copy of most recent audio played\n\nChange-Id: I6b2f97881c39998a2fae9ab79d669af6c0a37e94\n"
    },
    {
      "commit": "6d8aabe8a3be1ac0789d00b82c3ca8b81381f5ab",
      "tree": "1f621b7f3f61ede29474f1d2c3802ecffa1df4c7",
      "parents": [
        "874a897f09dc7b06679bb273506d7e0fa0152220"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 18 10:47:28 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 18 11:44:27 2012 -0700"
      },
      "message": "Add throttle to have pipe fill at more stable rate\n\nChange-Id: Ibff9ab62764e2acd04518a4a00e25f19e28aff4a\n"
    },
    {
      "commit": "99c99d00beb43b939dedc9ffb07adb89f6a85ba5",
      "tree": "a93aeb409fa2399bf552ea901793514f0cf79f6b",
      "parents": [
        "552477608b137fb66af126655c6865207a82d888"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 16:37:13 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 17 16:29:07 2012 -0700"
      },
      "message": "systrace for audio\n\nTrace fast track buffer fill status for underruns etc.\n\nMove the definition of macro to Android.mk.\n\nNo overhead if disabled.\n\nChange-Id: If0e83e21b61b059ca38f543f8a6ffb58e08c79ee\n"
    },
    {
      "commit": "552477608b137fb66af126655c6865207a82d888",
      "tree": "a0c3c8704d8a5dffc900a01255acd63e648e15c4",
      "parents": [
        "c059bd4246c1b3944965be921e5b334d51cd236c",
        "88cbea8a918bbaf5e06e48aadd5af5e81d58d232"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 17 15:47:18 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 17 15:47:18 2012 -0700"
      },
      "message": "Merge \"Display pipe underrun counters in dumpsys\" into jb-dev"
    },
    {
      "commit": "88cbea8a918bbaf5e06e48aadd5af5e81d58d232",
      "tree": "add79cd641d5e2ab4be79f49ca63680fa0e86962",
      "parents": [
        "e00e0485b0aa1e432be8c639da0eb5285942777b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 15 07:39:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 17 15:04:31 2012 -0700"
      },
      "message": "Display pipe underrun counters in dumpsys\n\nThe normal mixer writes it\u0027s submix to a pipe, which is read by the fast\nmixer.  Now dumpsys media.audio_flinger display the raw underrun counters\nwhen fast mixer tries to pull from the pipe but doesn\u0027t get enough frames.\n\nChange-Id: I72505f149f9e12802784da654a651d43734e1c79\n"
    },
    {
      "commit": "c059bd4246c1b3944965be921e5b334d51cd236c",
      "tree": "d1c5ee08f63985bc15c2d4ad9025ee6631667663",
      "parents": [
        "e00e0485b0aa1e432be8c639da0eb5285942777b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 17:41:09 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 17 15:01:45 2012 -0700"
      },
      "message": "Skip bad kHz values, and display them accurately\n\nOne device reports zero CPU kHz occasionally, so skip those values.\n\nPreserve accuracy of the low-order 4 bits of the the CPU frequency.\n\nChange-Id: I7d934f697412277462464fca82d112d0306a214e\n"
    },
    {
      "commit": "9017e5e0ebad9664bb7b6f2057e5bb29c852c64f",
      "tree": "7598acfb775b560be2e160057d9f9eec86167c0e",
      "parents": [
        "6d0780ae34ed2fa3e9631667f200e15ddd472464"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 15 07:39:52 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 15 17:19:11 2012 -0700"
      },
      "message": "Increase normal mixer\u0027s pipe to fast mixer\n\nChange-Id: I330925c7d07b6adb30b773bda3657e4efef9ae9b\n"
    },
    {
      "commit": "44a957f06400a338e7af20b3d16c4c4ae22a673c",
      "tree": "505dc33ba379c96f6ef5e07ac28843b1bbab8115",
      "parents": [
        "2986460984580833161bdaabc7f17da1005a8961"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 15 15:26:05 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 15 15:30:03 2012 -0700"
      },
      "message": "Fix static track activity ref counting\n\nWhen a static AudioTrack underruns, it means that playback is over.\nAs apps do not necessarily stop playback explicitly, AudioFlinger\nshould call stopOutput() to decrease activity ref count in\naudio policy manager.\n\nBug 6486311.\n\nChange-Id: I1ea722c443780329ded6310c958b24726e918d16\n"
    },
    {
      "commit": "2986460984580833161bdaabc7f17da1005a8961",
      "tree": "bd8aa210c0faee61dc45e23479e29cfc85f313c2",
      "parents": [
        "dfa29ab13647f22b30b2de34d4830c9e815bf120"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 08 18:57:51 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 14 17:20:12 2012 -0700"
      },
      "message": "Fix issues with synchronous record start.\n\n- Added a timeout in case the trigger event is never fired.\n- Extend AudioRecord obtainBuffer() timeout in case of\nsynchronous start to avoid spurious warning.\n- Make sure that the event is triggered if the track is\ndestroyed.\n- Reject event if the triggering track is in an incompatible state.\n\nAlso fix a problem when restoring a static AudioTrack after\na mediaserver crash.\n\nBug 6449468.\n\nChange-Id: Ib36e11111fb88f73caa31dcb0622792737d57a4b\n"
    },
    {
      "commit": "4adcede0dc54a85c31abaf139921aebd7a072d8e",
      "tree": "329681d4effaa4c3795d9567cb2279ae873758bb",
      "parents": [
        "09474df67278c0cd621b57c4aef1deaec4d8447f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 12:26:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 12:28:12 2012 -0700"
      },
      "message": "Reduce video frame drop rate\n\nThe video playback engine depends on having relatively precise audio\nprogress updates for its A/V sync and frame drop calculations.  For small\naudio HAL buffer sizes, this was not a problem, but when the HAL buffer\nsize was \u003e 12 ms, the normal mix buffer size became \u003e 24 ms and this\nthen caused video problems.  The new formula tries to keep the normal\nmix buffer size within a closer tolerance of 20 ms to 24 ms.\n\nAlso use consistent term: multiplier instead of multiple.\n\nBug: 6479613\nChange-Id: I903bad74461908e8c8f0a61e99ab5e24d5c44433\n"
    },
    {
      "commit": "09474df67278c0cd621b57c4aef1deaec4d8447f",
      "tree": "eafcf9a62df5202c4a0628a9ac9798b7c49dd08b",
      "parents": [
        "d08f48c2ad2941d62b313007955c7145075d562c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 10 14:48:07 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 08:56:45 2012 -0700"
      },
      "message": "Improve underrun handling for fast tracks\n\nMaintain more accurate accounting of type of underrun.\nAutomatically remove track from active list after a series of \"empty\" underruns.\n\nChange-Id: If042bf80e1790dcaaf195c99dc9c0ed9b55382c1\n"
    },
    {
      "commit": "d08f48c2ad2941d62b313007955c7145075d562c",
      "tree": "3cce1d96d82032c977f1f185b8dca8a829b581f6",
      "parents": [
        "94f60e297b9e45fac387cf10b6ce1acc067cb4a1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 01 18:14:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 08:25:39 2012 -0700"
      },
      "message": "Fix stopping process for fast tracks\n\nPreviously, the state of a fast track \"wiggled\" back and forth at the end.\n\nNow it goes through these transitions:\n  active -\u003e stopping_1 -\u003e stopping_2 -\u003e stopped\n\nThis CL is only for fast tracks, and does not change how\nnormal tracks work.\n\nChange-Id: Icc414f2b48c46dda63cfa6373ca22d033dd21cd4\n"
    },
    {
      "commit": "808e7d16504cbe5b28bb88c31afb2542ab488965",
      "tree": "599b15f2754300fe2bcb5e0d6630220f45fb960f",
      "parents": [
        "bb9d731bc2b5759f72f6d382834e431a0389cf07"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 11 19:44:09 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat May 12 10:21:08 2012 -0700"
      },
      "message": "AudioFlinger: fix global effects suspend logic\n\nAudio effects on the output mix should not be suspended when effects\non the output stage (post processing) are enabled.\n\nChange-Id: I2e1c08fa9358ea3cbaec68856738d504b1be54e4\n"
    },
    {
      "commit": "e58ccce45598bcf4b4874b0e87cd1eb8d05ba9a9",
      "tree": "03b73370e77533c245dddacdcfe91bcbf5760700",
      "parents": [
        "c20f467d54f921730aa0b2fd087ad83496aeaf4b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 11 15:19:24 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 11 15:21:26 2012 -0700"
      },
      "message": "Fix 2 bugs in fast mixer statistics\n\nWas losing the upper half of the bounds, and MHz was off.\n\nChange-Id: I61c98027b35ce7c3578ea6f3acf05aa5c48a5831\n"
    },
    {
      "commit": "d8e6fd35ec2b59ee7d873daf1f1d9d348221c7bc",
      "tree": "c5c5a16ca2990abee1a0e0e90d006e9437d3f3ce",
      "parents": [
        "c3798d7e97cb11076310f06163417c0631cce04e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 07 11:07:57 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 10 14:20:52 2012 -0700"
      },
      "message": "Use audio tag for system tracing\n\nDisabled by default; uncomment ATRACE_TAG to enable\n\nChange-Id: I99af894022a859ee5644bd853cfd8a48e4735ff9\n"
    },
    {
      "commit": "42d45cfd0c3d62357a6549c62f535e4d4fe08d91",
      "tree": "40667398d6db38a70fa2729e6d574a01b1ebefd1",
      "parents": [
        "c150ca7dda844891fa684f6898da7f7e0c40329d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 02 10:34:47 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 10 13:39:16 2012 -0700"
      },
      "message": "Update fast mixer statistics\n\nCompute statistics on fast mixer elapsed time and CPU load per cycle using a\nsimple moving average rather than by fixed blocks.  This has a couple advantages:\n - remove burstiness of CPU usage due to former floating-point calculations in fast mixer\n - gives us flexibility in how to report (e.g. could report over just the last 1 second)\n\nDisadvantage is increased RAM, and since the samples are not updated\natomically, it is possible to have an error in the statistics.  This\nshould not be much of an issue due to the relatively large number of samples.\n\nAlso add CPU raw ns and adjusted MHz statistics.\n\nChange-Id: Iaa2cd13f18250c3162aff40409b3694b769d9505\n"
    },
    {
      "commit": "e213c86d36414a8fc75e37c52999522fe09c7328",
      "tree": "77532fadc80029d620e5109a2e14c1b5b73f5990",
      "parents": [
        "fc52dd88e4d2f433feba5d5aaff1880659d46319"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 13:46:15 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 07 11:41:08 2012 -0700"
      },
      "message": "dumpsys fCnt and flags\n\nPreviously displayed TrackBase::mFrameCount but not control block frameCount.\nNow displays both.\n\nAlso display the track flags in control block.\n\nChange-Id: Ie53781d4784633d78b6f928d69ebd494d8f110ec\n"
    },
    {
      "commit": "31dfd1db7a4d2228d9642008af6f3dd744368eb6",
      "tree": "5182b898a5f21161ea879c4fe173f91d54366fd7",
      "parents": [
        "2409e4337b1e5968cbf75a839778f849266b64d9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 01 11:07:08 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 01 11:07:48 2012 -0700"
      },
      "message": "Disable fast track log spam\n\nexcept for \"denied by client\" and \"denied by server\"\n\nChange-Id: I133ab747933729cc1f386813ee06ece055bdb294\n"
    },
    {
      "commit": "810280460da5000785662f6c5b0c7ff3ee0a4cb3",
      "tree": "e098121453bef74dc47c00bb294db78daeebce19",
      "parents": [
        "6e66e4a9ffcb202beb2bcedb85c7d6f9ff391b4c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 30 18:15:12 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 30 18:15:12 2012 -0700"
      },
      "message": "Temporary fix for both normal tracks \u0026 fast tracks\n\nIf there is at least one active fast track, it forces a mixer\nstatus of ready, which messes up the logic for normal track underruns.\n\nChange-Id: I9de2fcaef090e2c2f99682333af3d3dd618b0d6b\n"
    },
    {
      "commit": "288ed2103d96f3aabd7e6bea3c080ab6db164049",
      "tree": "dec8e7b3a993e86baa8916ba70dcd6b3c053d062",
      "parents": [
        "0c0abd4ad26971b5fba94734137fe0bb1a590ab6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 17:52:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 30 13:00:31 2012 -0700"
      },
      "message": "Fix race condition for non-started fast tracks\n\nThis required re-implementing how fast tracks are considered active.\nNow, they use the same logic as normal tracks, except underrun is ignored.\n\nOther changes:\n - add framesReady() to AudioBufferProvider interface\n - rebased\n - add track underrun counter state to fast mixer dump state\n - move dumpsys header to Track::appendDumpHeader()\n   so it closer to where tracks are dumped\n - display track state in dumpsys as a character code\n - measure and display warmup time and cycles in dumpsys\n - copy in the presentation complete code\n - add ExtendedAudioBufferProvider for framesReady() which returns size_t\n - simplify underrun tracking\n - deferred reset track after stop()\n - add comments\n\nChange-Id: I7db8821bc565230ec76da1f9380fe3fb09735e5b\n"
    },
    {
      "commit": "83faee053cfd4251dbb591b62039f563ffdac399",
      "tree": "ca170f9a6c1a715ecc00ef49fc600aad92a23e11",
      "parents": [
        "209ec37b27a4fb6c92005c91ecf993ec19a3d430"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 27 18:24:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 27 19:00:37 2012 -0700"
      },
      "message": "AudioFlinger: fix stop detection for static tracks\n\nThe end of playback and end of presentation detection was broken for\nstatic AudioTracks (tracks using shared memory buffers passed by client).\n\nThe mixer should not wait for a minimal amount of frames to be available to mix\na static track otherwise the last frames might never be consumed.\n\nA static track should be removed from active list in case of underrun even if not\nstopped().\n\nIssue 6411521.\n\nChange-Id: I66a2c1a77e98149e5049a223a6f04c3b8c5ad11a\n"
    },
    {
      "commit": "300a2ee9327c05fbf9d3a5fd595b558097c7c5e8",
      "tree": "72c0932bffeede46c71ab2f7e5354039bdf2e160",
      "parents": [
        "9a025a922c1fed5cb5d1956a55b7f69ad259abb3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 13:47:36 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Apr 27 14:45:18 2012 -0700"
      },
      "message": "Fast mixer configuration\n\nAdd compile-time option for when to use fast mixer.\n\nDouble HAL frame count for fast tracks due to SRC, and make the normal\nframe count multiplier an even number for compatibility.  Sample rate\nconversion can result in underruns if the HAL frame count is used as is,\ndue to jitter.\n\nChange-Id: Ia1f8da1b8ac247d9807acfce3c318161db000905\n"
    },
    {
      "commit": "da747447c1d4b5205469b4e94485b8769df57a97",
      "tree": "7171032a464dba232449b98c16709e672ae97b82",
      "parents": [
        "940335776b6d4eb91b13c4e56bc20bed3ac0011b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 25 18:53:13 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 26 10:36:28 2012 -0700"
      },
      "message": "AudioFlinger: fix tracks ready for mixing logic.\n\nCommit fec279f5 broke the logic allowing to wait for an application\nto provide frames for mixing in the case of several active tracks.\n\nThis was causing audio gaps when playing music and superposing a\nsound Fx (keyboard clicks...).\n\nIssue 6185007.\n\nChange-Id: Id0fad150d0b615646d6b1387c0de8ca944d228f6\n"
    },
    {
      "commit": "e0fa467e1150c65a7b1b1ed904c579b40f97c9df",
      "tree": "44ae1e182fd15695fccf5d1f396f99edc7942ee5",
      "parents": [
        "e370bb62b89d2f2980f519392010ea08a24c558e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 24 14:35:14 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 18:41:32 2012 -0700"
      },
      "message": "Move frame count calculations for fast tracks\n\nFor fast tracks: move the default and minimum frame count calculations\nfrom client to server.  If accepted, the default and minimum frame count\nis the fast mixer (HAL) frame count.  If denied, the default and minimum\nframe count is the same as it currently is for normal tracks.\n\nFor normal tracks: there is no change yet, preserve legacy behavior for\nnow but add a FIXME to change this later.\n\nBug fix: the test for buffer alignment matches channelCount was wrong.\n\nBug fix: check for 8-bit data in shared memory, which isn\u0027t supported.\n\nOptimizations:\n - in set(), only call AudioSystem::getOutputSamplingRate() when needed\n - in createTrack_l(), only call AudioSystem::getSamplingRate() and\n   AudioSystem::getFrameCount() when needed\n\nChange-Id: I79d2fe507db1a8f7bb094c71da8a129951dbb82f\n"
    },
    {
      "commit": "1dc28b794587be22c90a97070d928f94586db638",
      "tree": "81fc99726926ceb84a331350434beb2666695cf1",
      "parents": [
        "9e786c78898d738b1cb21cd8bdfcc49dbcacfce6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 24 10:01:03 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 24 10:52:04 2012 -0700"
      },
      "message": "Use scheduling policy service\n\nChange-Id: I3c09da1dc0de5039d0c15ce7fb2bc373fa398712\n"
    },
    {
      "commit": "58912562617941964939a4182cda71eaeb153d4b",
      "tree": "f0d9551f41e729540b5c0bc23bd5f0b4682d346e",
      "parents": [
        "a08f041125c7688aa33aef1b229278641ae1c375"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 03 10:45:00 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 23 09:24:28 2012 -0700"
      },
      "message": "AudioFlinger normal mixer uses FastMixer\n\nChange-Id: I3131bb22d2d057e9197a2ebfa6aa1cfaab9e5321\n"
    },
    {
      "commit": "3acbd053c842e76e1a40fc8a0bf62de87eebf00f",
      "tree": "1d6dcc01039a1af770131c6b427efa27a2e5755f",
      "parents": [
        "f853499c6a088ef8506cacbb3ccdffa87e0cec3e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 10:39:56 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Apr 22 14:50:01 2012 -0700"
      },
      "message": "Configure policy of mediaserver threads\n\nChange-Id: Ifd825590ba36996064a458f64453a94b84722cb0\n"
    },
    {
      "commit": "c95cfbb87d0ac5e773037019a96bfc29972d4b4e",
      "tree": "016435873185a80476d7ab1f3dae8696b2c04ebb",
      "parents": [
        "8d314b709fdd81bb64bdaa8d72a0b19c355cefb9"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 11:53:11 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Fri Apr 20 10:09:25 2012 -0700"
      },
      "message": "TimedAudioTrack: Optimize the queue trim operation.\n\nHand merge from ics-aah\n\n\u003e TimedAudioTrack: Optimize the queue trim operation.\n\u003e\n\u003e Don\u0027t perform the end PTS calculation for each buffer during trimming.\n\u003e Instead, only calculate the ending PTS of a buffer if there is no next\n\u003e buffer in the queue.  This optimization assumes that the buffers being\n\u003e queued are in monotonic media time order (a fair assumption for now)\n\u003e and that the timestamps in the audio are contiguous (not a requirement\n\u003e for this API, but a reality of how it is being used right now).\n\u003e\n\u003e In the case where the audio is discontinuous on purpose, it is\n\u003e that this optimization will cause the system hold one extra buffer\n\u003e which it could have safely trimmed.  It should not be much of an issue\n\u003e since in real life the audio is almost always contiguous, and as long\n\u003e as the media clock is running and the mixer is mixing, the buffer will\n\u003e be used up and discard as part of the normal flow anyway.\n\u003e\n\u003e Change-Id: I00061e85ee7d5651fcf80751646c7d7415894a14\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: I0054b58e1389fa005aa990cb5710caf4af7b706a\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "8d314b709fdd81bb64bdaa8d72a0b19c355cefb9",
      "tree": "e76be79a37ce2a3985bc0361c28d794136624b3e",
      "parents": [
        "21e8c50bd13ebe44f3088e26c9c6df0e163c469c"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 19 12:08:17 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Fri Apr 20 10:09:25 2012 -0700"
      },
      "message": "TimedAudioTrack: Fix continuity threshold handling.\n\nHand merge from ics-aah\n\n\u003e TimedAudioTrack: Fix continuity threshold handling.\n\u003e\n\u003e Fix issues with continuity threshold handling; notably\n\u003e + If the steady-state continuity threshold is exceeded, be sure to\n\u003e   clear the on-time flag.  Failure to do this will result in the\n\u003e   system picking a new mix point which simply satisfies the\n\u003e   steady-state continuity threshold instead of the startup threshold.\n\u003e   Since we are putting a discontinuity in presentation anyway, we\n\u003e   really want to pick a perfect point, not just an OK point.\n\u003e + Tighten the steady-state continuity threshold.  It was currently set\n\u003e   to 100mSec which is enormous.  4mSec (the new setting) is much more\n\u003e   appropriate.  On systems with a VCXO (like tungsten) this should\n\u003e   never be wrong by more than a sample.  If TimedAudioTracks are ever\n\u003e   to be used on VCXO-less systems, this threshold should probably be a\n\u003e   a parameter configurable by applications on a track by track basis\n\u003e   so they can make the tradeoff between allowed error and frequency of\n\u003e   disruptive corrections.\n\u003e + Reset the on-time flag if the mixer provides no PTS during a mix\n\u003e   operation.  This makes for a convenient way for the HAL to reset\n\u003e   timed tracks when it makes changes for delay compensation across\n\u003e   multiple outputs.\n\u003e\n\u003e Change-Id: I2cb23de5a3d1f75618abc1c8ab903db883837aa8\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: Ibd28c9d290494b0b19eb01caf2d9bfdef606a9b4\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "21e8c50bd13ebe44f3088e26c9c6df0e163c469c",
      "tree": "0437226abb896de30fd20123eb3089168989391a",
      "parents": [
        "8d6086781c79620ce6133df7bd27f0efdee6b4e6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 12 09:39:42 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Apr 20 07:38:05 2012 -0700"
      },
      "message": "FastMixer update\n\nUpdates:\n - Add support for mono fast tracks\n - Add support for optional sample rate conversion on fast tracks\n - Log sample rate and frame count\n - Enable statistics\n\nChange-Id: Ife014edf4f452da361f3eaaae19209ef6ff6958b\n"
    },
    {
      "commit": "08ad5efcef90e24db2863c0f85972ed05fe848a2",
      "tree": "f2eff3f033d360ac8043ba4f6ffa2d11520bebee",
      "parents": [
        "9bd23229fdec1657398abc682ccccfce1c95f8aa"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Apr 19 12:35:00 2012 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Apr 19 12:53:56 2012 +0800"
      },
      "message": "Remove new camera connect API.\n\nApplications are not resumed under the lock screen now.\nThis API is not needed anymore.\n\nbug:5584464\nChange-Id: I115daf6b647348617ec0fc05b626878c945b9b29\n"
    },
    {
      "commit": "9bd23229fdec1657398abc682ccccfce1c95f8aa",
      "tree": "5a6790d8f19a3249b28a8b8da9e68e3a14bbde36",
      "parents": [
        "0ca3cf94c0dfc173ad7886ae162c4b67067539f6"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Apr 16 13:43:48 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Apr 18 17:40:48 2012 -0700"
      },
      "message": "Fix multichannel downmix pause bug on video player\n\nPausing a video player will cause the track audio mixer to be\n disabled, which causes the downmixer to be deleted. When reenabled,\n the track channel mask hasn\u0027t changed but the downmixer is there\n anymore.\nFixed by:\n- instanciating a downmixer when the AudioMixer track\n gets initialized (in getTrackName(), now taking a channel mask\n as input), and deleted when in deleteTrackName().\n- when the channel changes on a track, check whether it\n needs a downmixer or not. Preparing a track for downmix\n automatically removes the old downmixer if there was one.\n\nAlso: initialize the track downmixerBufferProvider field\n when AudioMixer is instanciated, so we can safely call\n delete on it in AudioMixer\u0027s destructor, in case\n deleteTrackName() wasn\u0027t called before the mixer was\n destroyed.\n\nChange-Id: I589b0781cda5b3c82f85b561c52b08546cac21f8\n"
    },
    {
      "commit": "0ca3cf94c0dfc173ad7886ae162c4b67067539f6",
      "tree": "bc156e7822e663626b78ec2ad09ef3970fbb48c5",
      "parents": [
        "ee685f6d19a6cc3b0bf02e69eb5dea11a2aeb601"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 09:24:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 15:04:46 2012 -0700"
      },
      "message": "rename audio policy output flags\n\nChange-Id: I27c46bd1d1b2b5f96b87af7d05b951fef18a1312\n"
    },
    {
      "commit": "acb86cccbd9d245439a04cef0bcefa589addaa4c",
      "tree": "597fe66a314f3bc8a4c1746f9d9bbff0a8bd1067",
      "parents": [
        "97b5d0d5b5ef766eb5dd680d05a5d199662d4ae0"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Apr 16 12:43:57 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Apr 18 09:29:45 2012 -0700"
      },
      "message": "Configure the resampler with the correct channel count when downmixing\n\nWhen a track needs to be downmixed and resampled, it gets downmixed\n first before being resampled. Therefore the resampler needs to\n be configured with the channel count of the output of the downmixer\n instead of that of the track.\nRemoved frame size checks that don\u0027t apply anymore now that we support\n frame sizes that are not powers of 2 (e.g. 12 for 5.1 16bits), and\n changed test performed for every buffer during playback into an\n assert.\n\nChange-Id: Ia220f00ee382f4f7848b661c58555bdca664e194\n"
    },
    {
      "commit": "97b5d0d5b5ef766eb5dd680d05a5d199662d4ae0",
      "tree": "a7042a97ac8019ba62a7c35ef9e11711caab7021",
      "parents": [
        "0845682ff93c9765b74b53dc404d0954efc28c2e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 23 18:54:19 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 18 07:49:43 2012 -0700"
      },
      "message": "Fast mixer\n\nChange-Id: I61552f83507e08e4c706076b9fb15362869e6265\n"
    },
    {
      "commit": "0845682ff93c9765b74b53dc404d0954efc28c2e",
      "tree": "c7a315e7ecbd659683279bd80b660ac1a195148a",
      "parents": [
        "52bef17f5953cd07b1655a3371d833f4de01caae",
        "dc998c809e084b617990b281e2ed5271830cc2e0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 18 07:37:55 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 18 07:37:55 2012 -0700"
      },
      "message": "Merge \"Add template class StateQueue\""
    },
    {
      "commit": "dc998c809e084b617990b281e2ed5271830cc2e0",
      "tree": "7d05323b201206ccb6cecf72d82faf82055afd70",
      "parents": [
        "eee482b84bb456e87fa42e8ad02fd2d803839586"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 23 18:53:59 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 18 07:34:34 2012 -0700"
      },
      "message": "Add template class StateQueue\n\nChange-Id: Iccc5eb42bc295a22b2e429a4551f083cd7b6831a\n"
    },
    {
      "commit": "f7ffb8bf0a58037f0bc9662c5275005a4e539948",
      "tree": "686df49dd97aed806b48b6ca3bba90cfc27d1ab7",
      "parents": [
        "4835705370584f6904c80afebcc6e8b9fdb110a5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Apr 14 09:06:57 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 17 16:02:22 2012 -0700"
      },
      "message": "audioflinger: update to new audio HAL.\n\nUpdated audio flinger to new function prototypes\nfor open_output_stream() and open_input_stream().\n\nCheck audio hw device version when loading a module and\nreject devices with a version different from current one.\n\nChange-Id: I9d4c81a1f59a15db78b3989417c2a411c638fe88\n"
    },
    {
      "commit": "4e2293f29f2e719af1245d365747ea06d074b345",
      "tree": "d07878412ffeca6ccd4e7e4bbbc0b4fb68370a59",
      "parents": [
        "99a80e10f2d0e88c0509a298bdd1df0308b55a7b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 12 09:39:07 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 16 17:43:58 2012 -0700"
      },
      "message": "AudioMixer new cmd: remove sample rate converter\n\nAdd a new command REMOVE to remove any sample rate converter\n   on a track, without having to delete the track name.\nAdd comments.\nRemove some dead code.\nFix whitespace and comparison to NULL.\n\nChange-Id: Id55a23ab5ee673189e99675b4e6fa5df7b617987\n"
    },
    {
      "commit": "a5e821439996de6005b2fa36b3bdd31f003ce23f",
      "tree": "04520106c0140dfeae4baff583749bf250e7b81f",
      "parents": [
        "a98db787397633155fd71b06ecaa765a7ad20cf2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 13:47:17 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 14:31:24 2012 -0700"
      },
      "message": "AudioMixer: fix crash in destructor\n\nCommit deeb1282 made that track-\u003eresampler is only set to NULL when\ngetTrackName() is called. It remains uninitialized for all unused tracks\ncausing a crash when deleted by Audiomixer destructor.\n\nIssue 6309441.\n\nChange-Id: I49451387a6afe81299b8368ef206524df32f74c4\n"
    },
    {
      "commit": "b388e531613730572067e193b6b66afb5d042233",
      "tree": "e84e7e8d25a909390498236462a90c241dc3c236",
      "parents": [
        "fbe308d428e42fe249ec317f76e3d11feb3264d5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Apr 14 13:32:48 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Apr 14 13:32:48 2012 -0700"
      },
      "message": "Fix ALOG_ASSERT in AudioFlinger\n\nFix broken ALOG_ASSERT in updateFramesPendingAfterTrim_l() introduced by\ncommit 1c345196.\n\nChange-Id: Ie1b2653069283f23ff0367f2628828e37fb0749c\n"
    },
    {
      "commit": "d3030da2ac3c0ebb8b7bdf38418263caf405b863",
      "tree": "d968ad7f783793049510b4badfee39fc066b1147",
      "parents": [
        "1c345196edc61694f29307a1826a64a0d26028dc"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 11:56:36 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 11:56:36 2012 -0700"
      },
      "message": "Fix the build\n\nforgot to upload final fixup during merge.  sry about that\n\nChange-Id: I2ddd2c08d8efa83c0a8d1e378ae4c28686145154\n"
    },
    {
      "commit": "1c345196edc61694f29307a1826a64a0d26028dc",
      "tree": "425a9fb3abcd532f061d45d74ddf0a04b88bac3a",
      "parents": [
        "9fbdee13d09447550dd22ae72c2dbabdce7f0a80"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Tue Mar 27 14:00:17 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 10:14:32 2012 -0700"
      },
      "message": "TimedAudio: Track of the number of pending frames.\n\nThis is a manual merge from ics-aah\n\n\u003e TimedAudio: Track of the number of pending frames.\n\u003e\n\u003e Keep track of the number of frames pending in the timed audio queue so\n\u003e we can implement framesReady in O(1) time instead of O(N).  This\n\u003e change partially addresses bug 6020970; the bug will be completely\n\u003e addressed once this change has been up-integrated into master.\n\u003e\n\u003e Change-Id: I599eb15ea1f6d715b97b30e65214fb6fadd169df\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: I6cbbbc3afc8efd066fe94865326ede0c6b3db2bd\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "9fbdee13d09447550dd22ae72c2dbabdce7f0a80",
      "tree": "9568a7d3610f1596b8da38cc921c3782691391cd",
      "parents": [
        "b34364269683363ca54aeed4952937cf37da7e06"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Mon Mar 26 17:51:46 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 10:14:32 2012 -0700"
      },
      "message": "TimedAudio: Fix a cause of audio popping.\n\nThis is a manual merge from ics-aah\n\n\u003e TimedAudio: Fix a cause of audio popping.\n\u003e\n\u003e Fix an issue with buffer lifecycle management which could cause audio\n\u003e pops on timed outputs.  There were two issues at work here.\n\u003e\n\u003e 1) During trim operations for the queued timed audio data, buffers\n\u003e    were being trimmed based on their starting PTS instead of when the\n\u003e    chunk of audio data actually ended.  This means that if you have a\n\u003e    very large chunk of audio data (larger than the mixer lead time),\n\u003e    then a buffer at the head of the queue could be eligible to be\n\u003e    trimmed before its data had been completely mixed into the output\n\u003e    stream, even though the output stream was fully buffered and in no\n\u003e    danger of underflow.\n\u003e 2) The implementation of getNextBuffer and releaseBuffer for timed\n\u003e    audio tracks was not keeping anything like a reference to the data\n\u003e    that it handed out to the mixer.  The original architecture here\n\u003e    seemed to be expecting a ring buffer design, but timed audio tracks\n\u003e    use a packet based design.  Pieces of packets are handed out to the\n\u003e    mixer which then frequently will hold onto that chunk of data\n\u003e    across two mix operations, using the first part of the chunk to\n\u003e    finish a mix buffer and then using the end of the chunk for the\n\u003e    start of the next mix buffer.  If the buffer that the mixer is\n\u003e    holding a piece of got trimmed before the start of the next mix\n\u003e    operation, it would return to its heap and could be filled with who\n\u003e    knows what by the time it actually got mixed.  On debug builds,\n\u003e    they seem to get zero\u0027ed out as they go back to the heap causing\n\u003e    obvious pops in presentation.\n\u003e\n\u003e This change addresses both issues.  Trim operations are now based on\n\u003e ending presentation time for a chunk of audio, not the start.  Also,\n\u003e when the head of the queue is in flight to the mixer, it can no longer\n\u003e be trimmed immediately, merely flagged for trim by the mixer when the\n\u003e mixer finally does call releaseBuffer.\n\u003e\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\u003e Change-Id: Ia1ba08cb9dea35a698723ab2d9bcbf804f1682fe\n\nChange-Id: I2c5e2f0375c410f0de075886aac56ff6317b144c\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "3f9c84c0a5af83fceb8669390e2d71b75ec7b550",
      "tree": "12f049ef754cdd81c720dbfbed8adfca0808f073",
      "parents": [
        "2d531e1b5865d61d5ca25d77d53017b1ad180efa"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 03 15:36:53 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 11 12:17:59 2012 -0700"
      },
      "message": "audio pre processing: test code for dual mic\n\nAdded functional test code to validate effect API for\nmulti mic simplementations.\n\nAlso fixed warning in AudioFlinger.\n\nChange-Id: I07be4d2e4d17791d3626c804ba3e9f87ff26d05a\n"
    },
    {
      "commit": "7d5b26230a179cd7bcc01f6578cd80d8c15a92a5",
      "tree": "563086c1185e0e54770d8c60c8eec1aefdddb89f",
      "parents": [
        "4b75a9c8b93a90749bc5d22912ad0d96c12f4ecf"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Apr 04 18:54:36 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Apr 09 11:27:14 2012 -0700"
      },
      "message": "AudioMixer uses downmix effect for multichannel content\n\nIn the AudioMixer structure associated with each track, add an object\n  that acts as the buffer provider when the track has more than two\n  channels of input in the mixer. This object, DownmixerBufferProvider,\n  gets audio from the actual buffer provider of the track, and applies\n  a downmix effect on it.\nThe downmix effect is created and configured when the track gets\n  created in AudioFlinger, which causes AudioMixer::getTrackName()\n  to be called with the new track\u0027s channel mask. It is released\n  when the track is disabled in the mixer.\n\nChange-Id: I05281ed5f61bef663a8af7ca7d5ceac3517c82db\n"
    },
    {
      "commit": "3f502bfc6d04d08369cf147284c5c4c2ac7c9a0e",
      "tree": "4515301bc0010e2997eeefa4e27ead43511c29a8",
      "parents": [
        "8d0648eff7a9a7bc7cd6318ba5fc96c759bef978",
        "010662326b9c43c703725f933e95e0897f8a6bdd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 05 15:06:49 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 05 15:06:49 2012 -0700"
      },
      "message": "Merge \"Non-blocking audio I/O interface, WIP\""
    },
    {
      "commit": "a4c5a550e2a3bc237179b8684e51718e05894492",
      "tree": "be7b6d154763ed772738a0126d10e6317920767d",
      "parents": [
        "1a9ed11a472493cac7f6dfcbfac2064526a493ed"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 29 10:12:40 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 04 08:44:57 2012 -0700"
      },
      "message": "audio policy: load audio hw modules.\n\nAudio HW modules are now loaded upon request from audio policy manager\naccording to the configuration in audio_policy.conf.\nRemoved hard coded HW module loading by AudioFlinger at init time.\nAdded methods to IAudioFlinger and AudioPolicyInterface\nto control the loading of audio HW modules.\nAdded methods to open an output or input stream on a specific hw module.\n\nChange-Id: I361b294ece1a9b56b2fb39cc64259dbb73b804f4\n"
    },
    {
      "commit": "1a9ed11a472493cac7f6dfcbfac2064526a493ed",
      "tree": "5f4a3c6856f294b3c0371afd87df96277215107b",
      "parents": [
        "290ca3a767a974ce9d041e5bcb0c69153f7851d5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 20 18:36:01 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 03 16:53:25 2012 -0700"
      },
      "message": "audio policy: add configuration file\n\nremoved outputs to stream mapping cache in audio system: the output for a\ngiven stream type must always be queried from audio policy manager as the cache\nis not always updated fast enough by audioflinger callback.\n\nremoved AudioFlinger::PlaybackThread::setStreamValid() not used anymore if\nstream to output mapping is not cached.\n\nChange-Id: Ieca720c0b292181f81247259c8a44359bc74c66b\n"
    },
    {
      "commit": "73d227557ba5192735356bacab9f77b44980793b",
      "tree": "7c7f0e72f5ffa5ff5920c35c3ad03b6b821e831f",
      "parents": [
        "2d6486f9112a6f0d23f17eaaad94bac62e16caab"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 13:38:30 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 02 11:26:18 2012 -0700"
      },
      "message": "AudioFlinger track flags and server\u0027s fast policy\n\nChange-Id: I72358c8e6829d173b3e60ced8a8babc089869fac\n"
    },
    {
      "commit": "0bf65bdde04b8e66c998ff37e2b2afafddddfa33",
      "tree": "3d80772f82336a6272ce05b019b09012c0b0b8df",
      "parents": [
        "deeb1282621f3177ad667360b40eef8e4fedb298"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 18:32:53 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 02 11:09:14 2012 -0700"
      },
      "message": "const methods and comments\n\nChange-Id: Ifd16750174fdb15b72507787502b587562ffc99e\n"
    },
    {
      "commit": "010662326b9c43c703725f933e95e0897f8a6bdd",
      "tree": "29a39db792c50d29f266d9df86af2d1de2d4c752",
      "parents": [
        "a1472d9883e35edd280201c8be3191695007dfd4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 11:50:44 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 02 07:44:17 2012 -0700"
      },
      "message": "Non-blocking audio I/O interface, WIP\n\nYet another abstraction similar to AudioTrack::Buffer and AudioBufferProvider,\nbut with support for streaming, non-blocking, and eventually PTS.\n\nThis is intended to be used as follows:\n - primary HAL output stream implements a Sink\n - primary HAL input stream implements a Source\n - Pipe implements a Sink\n - PipeReader implements a Source or TimedSource (not shown yet),\n   which supports \"read at PTS\"\n - fast AudioTrack on server side will implement a Source using cblk\n - normal AudioTrack on server side will not be changed initially\n - fast AudioRecord on server side will implement a Sink using cblk\n - normal AudioRecord on server side will not be changed initially\n - fast mixer thread will read from Sources and write to a Sink,\n   or (unlikely) implement a Source and multiple Sinks\n - Visualization and PCM logger will read from Source or TimedSource\n - A2DP normal mixer will be connected directly to its output stream\n   and there will be a kind of OutputTrack for duplication that will\n   read from a Sink with non-blocking write fed by the fast mixer.\n\nPatch set 3 changes:\n - Add more implementations of NBAIO interfaces:\n   added SourceAudioBufferProvider, MonoPipe, MonoPipeReader.\n - Added Format_sampleRate and Format_channelCount.\n - Extract out the roundUp() method.\n - Respond to most comments from previous code review.\n - The new classes are untested.\n\nPatch set 4 changes:\n - Fix bugs in MonoPipe::write() and MonoPipeReader::read()\n - Fix bug initializing mFrameBitShift too early\n - renamed roundUp() to roundup()\n - Fix Android.mk\n - Add LOG_TAG an LOG_NDEBUG, use ALOG_ASSERT and utils/Log.h instead of assert\n - Fix build warnings\n - Move constructor and destructor bodies from .h to .cpp\n - Line length 100\n - Following naming conventions for #include double-include protector macros\n - Include what you use\n - More NBAIO logging\n - MonoPipe write can be blocking\n\nPatch set 5 changes:\n - Address code review comments\n - Use a static library so unused implementations don\u0027t take memory\n - Comment out libsndfile dependency\n - Remove debugging LOGV and LOG_NDEBUG\n\nPatch set 6 changes (would be 6 at old location, actually 2 at new location):\n - Address code review comments on patchset 5\n - For MonoPipe, allow the full pipe to be used, no need to omit one slot\n - Don\u0027t do atomic releasing stores unless needed\n\nStill to do:\n - I\u0027m not happy with the Pipe class names\n - Update build/ for new static library?\n\nChange-Id: Ie6c61f05ce06b676b033be448a8ef9025a2ffcfd\n"
    },
    {
      "commit": "deeb1282621f3177ad667360b40eef8e4fedb298",
      "tree": "595d49e01dc93258bc061052f103e45e2811b129",
      "parents": [
        "a1472d9883e35edd280201c8be3191695007dfd4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Mar 25 11:59:31 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Apr 01 14:57:33 2012 -0700"
      },
      "message": "AudioMixer default track parameters\n\nMove the default initialization of track parameters from the AudioMixer\nconstructor to getTrackName().  This fixes a bug where the defaults were\nonly valid the first time a name was allocated.\n\nAlso added a switch case for parameter FORMAT.\n\nChange-Id: I07abd3aaf7f4efe9825a761d2bc662aaee2c6db0\n"
    },
    {
      "commit": "a1472d9883e35edd280201c8be3191695007dfd4",
      "tree": "22d33eed0e95560b5fe989ace6a2e0f53aff3790",
      "parents": [
        "40a1da57d21bbc883630e7a854a279685fe1fa61"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Mar 30 14:36:54 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Mar 30 21:21:36 2012 -0700"
      },
      "message": "Make AudioTrack/AudioRecord handle more than 2^32 frames\n\nb/6160363\nChange-Id: I471815012c6a113ec2c4dd7676e8fa288a70bc76\n"
    },
    {
      "commit": "a011e35b22f95f558d81dc9c94b68b1465c4661d",
      "tree": "3f8c46c8c7e30f36c3b629174a26bc4ca2a860b2",
      "parents": [
        "b4c0c4b800332fe55c60aa328ece8d849cee3a4d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 29 15:51:43 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 29 19:50:49 2012 -0700"
      },
      "message": "implemented synchronous audio capture\n\nAdded the infrastructure to support the synchronization of playback and\ncapture actions on specific events.\nThe first requirement for this feature is to synchronize the audio capture\nstart with the full rendering of a given audio content.\nThe applications can further be extended to other use cases\n(synchronized playback start...) by adding new synchronization events and\nnew synchronous control methods on player or recorders.\n\nAlso added a method to query the audio session from a ToneGenerator.\n\nChange-Id: I51f1167290d9cafdf2fbcdf9e4785156973af44c\n"
    },
    {
      "commit": "d8973a71a3d1dd670e5dcdf6e94ec0cd45444eec",
      "tree": "5499bb2d33aa98100c1fdb4cef50a715f3d95f66",
      "parents": [
        "559bf2836f5da25b75bfb229fec0d20d540ee426"
      ],
      "author": {
        "name": "Keun young Park",
        "email": "keunyoung@google.com",
        "time": "Wed Mar 28 14:13:09 2012 -0700"
      },
      "committer": {
        "name": "Keun young Park",
        "email": "keunyoung@google.com",
        "time": "Wed Mar 28 14:13:09 2012 -0700"
      },
      "message": "Fix deadlock in camera destruction after client app\u0027s crash\n\n* why deadlock happened: when an app (CTS camera test) crashes while using\n  camera, its binder is closed and reference counter is decreased. If camera\n  is inside callback, sp\u003cClient\u003e inside callback will hold the Client instance,\n  and Client instance is destroyed when the callback ends as sp\u003cClient\u003e to hold\n  it no longer exists. The destructor of Client instance tries to clean up\n  camera H/W which tries to stop threads created by camera HAL including the\n  thread context where the callback is running. This causes deadlock where the\n  callback thread itself is waiting for itself to terminate.\n  Note that the deadlock will not happen if camera callback is not active. In\n  that case, closing of binder will force the destruction of Client instance,\n  and the destruction happens in binder thread.\n\n* Fix: Forces Client descruction in binder thread\n- remove sp\u003cClient\u003e from callbacks to prevent destruction in callback context\n- add client lock to allow callback to use raw pointer safely. This prevents\n  the destructor from deleting the instance while callback is using it.\n- add status change inside destructor with client lock to safely destroy Client\n\nBug: 6214383\nChange-Id: Ic6d6396d4d95ce9e72a16ec2480ae65c100fe806\n"
    },
    {
      "commit": "559bf2836f5da25b75bfb229fec0d20d540ee426",
      "tree": "d7dd708b17eeca96a3e5d8bcc25a51ff3d1b5d0d",
      "parents": [
        "b0b2b4d890cf3bfb274797a759642b4e733343d7"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Mar 28 10:29:14 2012 -0700"
      },
      "committer": {
        "name": "Anatol Pomozov",
        "email": "anatol.pomozov@gmail.com",
        "time": "Wed Mar 28 12:07:41 2012 -0700"
      },
      "message": "AV Android make files changes\n\no plus a few file relocation: ActivityManager.cpp/h, SoundPool.h, etc\no remove some runtime dependencies to libandroid, libandroid_runtime, etc\n\nChange-Id: I047a47c5fb361dd5cf85cd98798c39f629a75d10\n"
    },
    {
      "commit": "b83d38feeeb88a8a2a6219e1fca2480b5a14fb0d",
      "tree": "7e1392f0427d0300d8140ef0a6c18dc32f393831",
      "parents": [
        "8f7f7ad54c698cb57a2a369cf1ae5b917853917b",
        "a075db4ff9b086ac2885df77bb6da0869293df92"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 26 07:16:37 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 26 07:16:37 2012 -0700"
      },
      "message": "Merge \"IAudioFlinger::createTrack and openRecord flags\""
    },
    {
      "commit": "d12c68ad699ce0ed822a4d4db86e8e02324c6b03",
      "tree": "ffe2a3e44b05ad91acff86224ace0a4e8532e670",
      "parents": [
        "4f5da11df06802856bf526f16563df7d5755f653"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 23 14:04:27 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 23 14:04:27 2012 -0700"
      },
      "message": "Revert \"AudioFlinger does not need libmedia any more\"\n\nThis reverts commit c920dee060ac69684be33210ee44b99a5fc3e8b2"
    },
    {
      "commit": "4f5da11df06802856bf526f16563df7d5755f653",
      "tree": "29cc2e5196553eb5878163342787298351f71a5d",
      "parents": [
        "ab55517549170b0def3d7b625324b6a44b60d5ae"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 22 15:21:35 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 22 15:24:22 2012 -0700"
      },
      "message": "AudioFlinger does not need libmedia any more\n\nChange-Id: Ifd2c61882109ec36ca68072a2bf6506e08c8cf34\n"
    },
    {
      "commit": "c5c49398584f2399af905a931e556ed6e0a29cd4",
      "tree": "0da87ace16edf4a3b992ca9a9934d34b73450ebd",
      "parents": [
        "ccf89b54f973f11082150d02ed957f7e967fbc8b",
        "f99590187e2e3f1cf6f093063170edec269cac5d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 08:29:18 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 08:29:18 2012 -0700"
      },
      "message": "Merge \"Clean up Track constructor\""
    },
    {
      "commit": "ccf89b54f973f11082150d02ed957f7e967fbc8b",
      "tree": "b3446119a9b6c03dcca98d1d9ee31a83adb8acad",
      "parents": [
        "63c1faa8dea7feb90255d31ef2a133d8f2818844",
        "5c94b6c7689a335e26a86e8a0d04b56dc627738e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 08:19:04 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 08:19:04 2012 -0700"
      },
      "message": "Merge \"AudioMixer can be configured for fewer max tracks\""
    }
  ],
  "next": "63c1faa8dea7feb90255d31ef2a133d8f2818844"
}
