)]}'
{
  "log": [
    {
      "commit": "b0a144d705a021994628d136a170a6d2bd4282e7",
      "tree": "f6144a26c0e19fa9a7ba75e136c80afeb9ecf14a",
      "parents": [
        "7f308c3e0556a5e704bcb3b341842ed50ba80b0a",
        "fdb3c07db5d44535eb8c3ec46dc78ad8446c01eb"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Feb 12 22:24:53 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 12 22:24:55 2016 +0000"
      },
      "message": "Merge \"AudioTrack: support ENCODING_IEC61937\" into nyc-dev"
    },
    {
      "commit": "fdb3c07db5d44535eb8c3ec46dc78ad8446c01eb",
      "tree": "b8c3d97da524e8aefcb37e736619da6b8e087a82",
      "parents": [
        "3ea4f828a6906e9931f96ebdcae9c63e14b86cbd"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Feb 09 10:47:02 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Feb 12 06:30:43 2016 +0000"
      },
      "message": "AudioTrack: support ENCODING_IEC61937\n\nSet DIRECT flag.\nUse audio_has_proportional_frames() instead of audio_is_linear_pcm()\nwhere appropriate.\n\nBug: 24541671\nBug: 20891646\nBug: 26373761\nChange-Id: Ia32036b18683b084d6c9887593df87397ea0afd9\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "e99556b85081778027653bd3e716a529ab518b35",
      "tree": "b7895d2eead6577be1f77ed8c28d205ebd6e5b3d",
      "parents": [
        "dea9cbc6badae6a03a16fa49a02215f18e3ed93a",
        "e10393e72454bfd8298017dc193faf424f4e9a8f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 04:06:53 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 12 04:06:54 2016 +0000"
      },
      "message": "Merge \"Fix audio timestamp computation for pause, stop, and dynamic speed changes\" into nyc-dev"
    },
    {
      "commit": "b3a486fecddc9e9264fe63d356eca0812493db27",
      "tree": "cd2ff28eac5233cdb2037b437cb68abe9b9dff3c",
      "parents": [
        "e8c8ed47ca15aa6be83c6feef89e27a832e763e9"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Aug 04 15:17:58 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 00:34:47 2016 +0000"
      },
      "message": "Enable FastTrack timestamps\n\nBug: 26413951\nChange-Id: I99a69241a0bcd69f6bfebf785cac6d9ee1e2cd5f\n"
    },
    {
      "commit": "e10393e72454bfd8298017dc193faf424f4e9a8f",
      "tree": "e7d3946c0e12b8f50e351a401eaa35986e2d0f2d",
      "parents": [
        "e8c8ed47ca15aa6be83c6feef89e27a832e763e9"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 12 13:59:33 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 00:17:13 2016 +0000"
      },
      "message": "Fix audio timestamp computation for pause, stop, and dynamic speed changes\n\nTimestamp on pause and underrun (stop) do not reflect actual position.\nTimestamps do not account for dynamic changes to track speed / sample rate.\n\nBug: 11085154\nBug: 17552775\nChange-Id: I0e5e40ab3eaee82f0c91b9f399089698a0b1947e\n"
    },
    {
      "commit": "3f0c902beb53a245c9db35e871607dba05b8d391",
      "tree": "93b456b76dd9504e53de955f75c5c6a4f3d2be7c",
      "parents": [
        "00803f7e94052144ecf476268bc717191ee29865"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jan 15 17:49:46 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 10 15:57:51 2016 +0000"
      },
      "message": "Add AudioRecord timestamps\n\nBug: 13569372\nBug: 22886739\nChange-Id: Ibc81afefb733d23676a632a0f2da31163fdbe05f\n"
    },
    {
      "commit": "d79072e9dff59f767cce2cda1caab80ce5a0815b",
      "tree": "cab9cab36ddf4bb61675c4508d923b283fd3edd6",
      "parents": [
        "a7b723715bab4ddf6db364c825135a9bc003c7c0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 06 08:41:20 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 25 15:34:04 2016 -0800"
      },
      "message": "Remove TimedAudioTrack and associated code\n\nBug: 8278435\nChange-Id: I095c1a4888e645e14d93b0b15fbef4524a831ca1\n"
    },
    {
      "commit": "2812d9ea3a3a33142dd8e23c9d949c498d6f7a12",
      "tree": "5079c758817d0c42b3f7ade661366fdae25fe5d1",
      "parents": [
        "e0db30868d9734f95a02df516dd0dc6a7226474b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jan 04 10:34:30 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 16 11:21:38 2016 -0800"
      },
      "message": "AudioTrack: Add getUnderrunCount()\n\nThis allows an app to detect application-level output glitches.\nUnderrun counts survive track recreation.\n\nChange-Id: I8eb14e92f6fc1007718a29b0666ab51ace30cdb8\nBug: 25641253\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "dcb346b7dc5b88c3e85db8a70bbd6a2fee8192b9",
      "tree": "e0038e85e097843f469a6befe9fae1014435f4f5",
      "parents": [
        "ebdddf82b07fa2c4134c3c00dbbbaa1ad3286726"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Sep 09 10:47:29 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Dec 08 11:29:11 2015 -0800"
      },
      "message": "Run audio services in audioserver instead of mediaserver\n\naudioflinger, audiopolicy, (fm) radio, soundtrigger moved to audioserver.\nmedialog is removed from mediaserver.\naudioserver has same permissions and rights as mediaserver.\n\nmediaserver is allowed to specify client uid to audioserver.\n\nSubsequent CL will add medialog to audioserver.\n\nTBD: Pare down permissions.\n\nBug: 24511453\nChange-Id: Iccaa08b874a502710d142e72f8abbb3d97c44cfa\n"
    },
    {
      "commit": "e6fb82a207f5256933e2d83e77262331af50a27f",
      "tree": "c1dda7d2e1d4c3439f804e0c4039eeb8d89f27cd",
      "parents": [
        "6dc5a7bce1fdb89aae91967fc984da521e6ca2b2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 09 14:39:02 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 16 21:18:09 2015 +0000"
      },
      "message": "For static obtainBuffer(), do not set mUnreleased if acknowledging flush.\n\nstatic audio tracks use obtainBuffer() to update position in start().\n\nBug: 22938515\nChange-Id: I8ae32f6cce4d122386d2cf8982e158049b04ba9a\n"
    },
    {
      "commit": "a542782d0045588e55e075a763cedcd2d504ad22",
      "tree": "972b585a13ec997abea11db48f4c438c6a93bf05",
      "parents": [
        "0f05031545e43c8fe49a9dda0cfd9dce202d1ef3"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 11 16:15:35 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 11 16:18:12 2015 -0700"
      },
      "message": "Workaround static fast track start-after-stop issue\n\nBug: 23291988\nBug: 23614327\nBug: 23924081\nChange-Id: Id1a519ed4bb2a6f4cb197da8450f7069b55c0d48\n"
    },
    {
      "commit": "564d144fc28917d42e3a67718ac51d61bfc36315",
      "tree": "6db8c93d002f5594bf80ee709706609a4df92fb4",
      "parents": [
        "27e0350ae57184d5e300f96c8338379f5d3d0fbc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 09 12:26:52 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 09 12:41:10 2015 -0700"
      },
      "message": "Revert \"Do not acknowledge flush() on start() for static tracks\"\n\nThis reverts commit cafe86a9cb6625bb1ec6383e16e28e4c9e455f87.\n\nBug: 23924093.\nChange-Id: I186d1013b06a286eca93c30bb9b3545dc36695ff\n"
    },
    {
      "commit": "cafe86a9cb6625bb1ec6383e16e28e4c9e455f87",
      "tree": "14b334794322ae63ad0e1478bf9ccdc38335a55d",
      "parents": [
        "b3b34074477b9f8713924e18f7a0120965112720"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Aug 14 09:34:50 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 24 19:07:39 2015 +0000"
      },
      "message": "Do not acknowledge flush() on start() for static tracks\n\nBug: 22938515\nChange-Id: I1de653de169a3fbbaa693da6057897ea57772447\n"
    },
    {
      "commit": "4c6afaf1053ecbfda6d95098e0f49772ecbcf2e1",
      "tree": "0b22dbafb75fc4c064b25f3b3f923cf39664ece2",
      "parents": [
        "ca097142ba4664858bc29bb538bcfcf5ea03ebe7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 12 18:23:35 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 12 18:23:35 2015 -0700"
      },
      "message": "Fix AudioRecord cleanup if construction fails\n\nBug: 11671194\nChange-Id: Id48350264f8b5ce53bf7ce2b308bf4ba21e59241\n"
    },
    {
      "commit": "1b42097f38e72574ed853a35f4e8a66e4739c421",
      "tree": "e708293755e42bca48d47380b8b8568cfc3d2f1f",
      "parents": [
        "5f88cdae61079be7920aee166eaac4941f65fb9f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 22 10:52:21 2015 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 29 23:36:01 2015 +0000"
      },
      "message": "AudioTrack: fix spurious retrograde messages\n\nThe retrograde motion was confused by some positions coming from\nthe DSP on offloaded tracks. So the retrograde check was moved up\ninto AudioTrack.cpp. This allows us to take advantage of the checks\nfor invalid positions based on timing.\n\nBug: 2047891\nChange-Id: Ifcad2349201443a7f1711347c203297100449536\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "5a8a95de6dad1a3bcf3da5a37b35766e89086e13",
      "tree": "64b82016eaef26f51b75470714172c06287c9c56",
      "parents": [
        "ea44f41bb142555e747cc11382296e94af99d312"
      ],
      "author": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Sat Apr 18 14:47:04 2015 -0700"
      },
      "committer": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Wed Apr 22 10:57:24 2015 -0700"
      },
      "message": "Use AudioPlaybackRate to hold TimestretchBufferProvider parameters\n\nUse this struct to handle the parameters for TimestretchBufferProvider all\nacross the system.\nAdd stretch mode and fallback mode to TimestretchBuffer Provider.\n\nChange-Id: I19099924a7003c62e48bb6ead56c785cb129fba2\n"
    },
    {
      "commit": "8edb8dc44b8a2f81bdb5db645b6b708548771a31",
      "tree": "663bda0f8a3d43894fa6d3d3f4283ed0df427f03",
      "parents": [
        "c5656cc900aeb4a705e27508dd82c70030a97709"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 26 19:13:55 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 09 18:49:15 2015 -0700"
      },
      "message": "Add playback rate to AudioTrack\n\nBug: 19196501\nChange-Id: I6411e1d3ce652b711a71a6d9df020cb5f60d4714\n"
    },
    {
      "commit": "86f79e3f3bc1de7b4e4dd045de8962b8a62ab5d5",
      "tree": "222616b4bb2cb2cbfcc0d7c14581e182143e87cd",
      "parents": [
        "77a44e8d1f902a100500ea69a450e22889dcff31",
        "73c02e4277b399c2ec1555d32b6ad5df23bb83dc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 23:30:58 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 08 23:30:58 2015 +0000"
      },
      "message": "Merge \"Improve ResamplerBufferProvider\""
    },
    {
      "commit": "73c02e4277b399c2ec1555d32b6ad5df23bb83dc",
      "tree": "c42d75e42eda5b09915c0962107083f1c55dc74a",
      "parents": [
        "97a893eb34f8687485c88eaf15917974a203f20b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sun Mar 29 01:13:58 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 15:55:46 2015 -0700"
      },
      "message": "Improve ResamplerBufferProvider\n\nChange-Id: I3cc3af221ad5797ff219d75227350733afa180db\n"
    },
    {
      "commit": "77a44e8d1f902a100500ea69a450e22889dcff31",
      "tree": "0e1ca5b8a21f3d99141542b0d866e382db140591",
      "parents": [
        "0c0acdadc9ca961acd1f3b4b85c2befef2dc7161",
        "97a893eb34f8687485c88eaf15917974a203f20b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 22:54:38 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 08 22:54:39 2015 +0000"
      },
      "message": "Merge \"Add RecordBufferConverter for RecordThread data processing\""
    },
    {
      "commit": "97a893eb34f8687485c88eaf15917974a203f20b",
      "tree": "6a103ab6f76dcabb0416677055dab4a8454f9fd7",
      "parents": [
        "6b3b7e304e0f8f167241b2c75f1eb04a9ef192ec"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sun Mar 29 01:03:07 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 15:23:30 2015 -0700"
      },
      "message": "Add RecordBufferConverter for RecordThread data processing\n\nChange-Id: Ia3aab8590cd41e8a7cba0a7345d70d2866d92045\n"
    },
    {
      "commit": "3bcf8597189c592713675ec58326ecbef0ac4ae9",
      "tree": "5656987c2e9d6fe9c99bb632865318489432fe36",
      "parents": [
        "322b4d25387a04c9afebe998326d005bbdf17ede"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 03 12:13:24 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 08 12:38:08 2015 -0700"
      },
      "message": "audio flinger: improve device to device audio patches\n\nAllow creation of audio patches between input and output\ndevices managed by the same audio HW module.\n\nChange-Id: I4b83268a4d5c41f3d5905d7581202cf5193efd32\n"
    },
    {
      "commit": "b369cafd67beb63dd0278dba543f519956208a7f",
      "tree": "c50687a52df6b28cb071b36a5377cae9054bbefa",
      "parents": [
        "253930b927d375413a42f170fa1ef8d98b8f7cb4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 30 20:51:47 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 01 00:03:48 2015 +0000"
      },
      "message": "audio flinger: fix standby on output with HW A/V sync\n\nFix a bug in audio HAL pause logic on output threads with\nHW A/V sync preventing the HAL to enter standby when\nthe audio track is stopped and detroyed.\n\nBug: 19980184.\n\nChange-Id: Ia497dad23159038b447fcbc18a67bb61b70b79cc\n"
    },
    {
      "commit": "6140c79c31f5dc237fba69554de5be641cedf113",
      "tree": "47bd7b5544c7e76f49956629f91168e3b493add7",
      "parents": [
        "377165c24968b044faccaf366a2377fa32143e2f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 19 14:30:21 2015 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Mar 23 12:49:00 2015 -0700"
      },
      "message": "AudioFlinger: prevent retrograde timestamps for direct mode\n\nPrevent retrograde motion in the HAL or drivers from making it\nup through the AudioFlinger to the app.\n\nBug: 19604395\nChange-Id: I11d6c0f7cab69e75fd4b4a2a90f64960b4bb6d5a\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "240934ba80d6c6165749db7681d243c6857a092f",
      "tree": "ed11373a97a1e0815e6949dc4f7d08d449a6fecc",
      "parents": [
        "1a86a8adbf4ab43a6aed2c3c8aa0830c001adb77"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Mar 11 18:25:50 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 16 10:47:09 2015 -0700"
      },
      "message": "audioflinger: refresh fast track underrun state upon start\n\nFalse underrun is detected when starting recycled fast tracks, which\nleads to continuous fatal assertion failures and even AP reboot.\n\nTrack\u0027s last mObservedUnderruns isn\u0027t updated one at previous stop()\ncall. Hence, when we start the same track again, we should synchronize\nit to the latest state instead of relying on stale one.\n\nauthored-by: Weiyin Jiang\u003cwjiang@codeaurora.org\u003e\nCRs-Fixed: 803389\nBug: 19635137\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\nChange-Id: Ia003a49c6896dba965798c062c98b8c367ef8369\n"
    },
    {
      "commit": "63238efb0d674758902918e3cdaac322126484b7",
      "tree": "07fdf37a2bc73a886d8ea41f69e722ed914754af",
      "parents": [
        "d7e1d08c2ac21cdd2f3b7f83fec7094f6a98fc08"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 02 15:50:29 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 03 08:50:40 2015 -0800"
      },
      "message": "Remove redundant semicolon from namespace closing\n\nChange-Id: I163f9d3d216c283ae1160ce4802e5247cf44fba7\n"
    },
    {
      "commit": "7841f704fee0e5acd45fa6e47a336120c3cad42c",
      "tree": "c75096dc548d0bdb9eec94663e08dc59fe287fc5",
      "parents": [
        "364b2600670e178931f0e88dbffb4f1f3dccc4ea",
        "5bedff60b2facaa1ec5b9433647ebf1504f065ca"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 26 23:39:12 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 26 23:39:14 2015 +0000"
      },
      "message": "Merge \"Do not pre-fill OutputTrack buffer for duplicating thread\""
    },
    {
      "commit": "ad8510a339ffab330c2c46e5c247dd1cf9e15c22",
      "tree": "f8643e6711ce756876c02cbb2c0ed4ed459c6187",
      "parents": [
        "04333cdc8d6a3c8e4a11835371e8ad13adf3f7f0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 17 16:24:07 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 19 09:47:41 2015 -0800"
      },
      "message": "Include what you use\n\nChange-Id: I1967861f383bb5ed6743fb69e3bd439907ed7033\n"
    },
    {
      "commit": "5bedff60b2facaa1ec5b9433647ebf1504f065ca",
      "tree": "d9d22703626906b38ee1f5c571f21f49ce447199",
      "parents": [
        "7790a33241f773d8a99c6f27d3bde36da08d6238"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jan 16 11:05:32 2015 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jan 22 13:48:03 2015 -0800"
      },
      "message": "Do not pre-fill OutputTrack buffer for duplicating thread\n\nIt is not necessary to start the downstream MixerThread early,\nrather allow stop() to flush the remaining frames.\n\nChange-Id: Ibcf8e7f5eda09d0f915d50697ff0c24c32fd11c4\n"
    },
    {
      "commit": "c25b84abdd7ff229d0af663fbf3a37bd9512939d",
      "tree": "f6b95e15432dfac6410a1c61bd34e1f8aacdbb3e",
      "parents": [
        "abdb990953ffe94a9dc544aea0bed17ef7d5f484"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 14 19:04:10 2015 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jan 15 16:57:42 2015 -0800"
      },
      "message": "Allow duplicating thread to use native mixing audio format\n\nUpdate OutputTrack to take variable formats.\nPreviously conversion to AUDIO_FORMAT_PCM_16_BIT was required.\n\nChange-Id: I4a96a60ddd8d8dfe651405a0bcd4f98c89bc1ade\n"
    },
    {
      "commit": "23c8dc13787186dc98731055858b2fba3aedc105",
      "tree": "08ed5ebd4244095641a3d7494e9dab6b6d471eb5",
      "parents": [
        "c30943f7485fa84a32e7d070234b3def692d9d16",
        "85aca658ac7d20584b0647427256df50a5f243ef"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 17 18:08:04 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Dec 17 18:08:04 2014 +0000"
      },
      "message": "am 85aca658: am d33712d7: am 145cf5d8: Merge \"audioflinger: implement pause/resume for direct outputs\" into lmp-mr1-dev\n\n* commit \u002785aca658ac7d20584b0647427256df50a5f243ef\u0027:\n  audioflinger: implement pause/resume for direct outputs\n"
    },
    {
      "commit": "d1f69b0b17acbd96987ecb2f3378abd394d05903",
      "tree": "e3061c609dfaa2c217bb79a8d85e4571e8bd0d3d",
      "parents": [
        "8ddb02230d02968d471aa41b22433957c38827c0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 15 14:33:13 2014 -0800"
      },
      "committer": {
        "name": "Rachad Alao",
        "email": "rachad@google.com",
        "time": "Tue Dec 16 01:38:34 2014 +0000"
      },
      "message": "audioflinger: implement pause/resume for direct outputs\n\nExtend pause/resume support to direct output threads\n(was only for offload threads).\n\nIf the HAL implements pause/resume, track pause/resume is forwarded to\nthe HAL.\n\nPause, flush, resume sequence is respected by executing the HAL\ncalls in the playback thread (same as offload).\n\nMake sure the track flags on client side are consistent with the\nflags on server side.\n\nBug: 17883772.\nChange-Id: I89b360d69818f7a9204bd36e3ec63a79e106ecf1\n"
    },
    {
      "commit": "3458bb2356e711419487056fe1dd474e100466a3",
      "tree": "1373847b3427ae0d27b5a178e4bcf3ad43e5970e",
      "parents": [
        "127d79425e668077baf1edbbfe80b344f522b7a6",
        "121143d5242a790d0bd01fe1b9cec5d28a1ba1d7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 26 19:57:31 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 26 19:57:31 2014 +0000"
      },
      "message": "am 121143d5: am bf14c62e: am 72bf901c: Merge \"audio policy: new getOutputForAttr() prototype.\" into lmp-mr1-dev\n\n* commit \u0027121143d5242a790d0bd01fe1b9cec5d28a1ba1d7\u0027:\n  audio policy: new getOutputForAttr() prototype.\n"
    },
    {
      "commit": "3a3e87005fdfbfe4564605220a044b8023d0f539",
      "tree": "657e4b6b3ca4d8d7030333975203c91a895b30dd",
      "parents": [
        "5ecbdf58b0674ac4a8b9d56b49ebeb1033e5bd27",
        "72215491c60fbcdb9a2f0be782e24e39cca249c5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 26 12:10:00 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 26 12:10:00 2014 +0000"
      },
      "message": "am 72215491: am 1a475921: am 223fd5c9: audio: new routing strategies and stream types\n\n* commit \u002772215491c60fbcdb9a2f0be782e24e39cca249c5\u0027:\n  audio: new routing strategies and stream types\n"
    },
    {
      "commit": "e83b55dc29ca16092ba02f36f55fa6e0e37fd78c",
      "tree": "f8232611b6372b74579e3ed03dfbeb167011d257",
      "parents": [
        "0f78eabb733e1413d7febd00c0bad0f0add02314"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 14 10:06:21 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 25 12:48:19 2014 -0800"
      },
      "message": "audio policy: new getOutputForAttr() prototype.\n\nUpdate getOutputForAttr() prototype and group all logic\ndealing with audio attributes to stream type conversion in\naudio policy manager.\n\ngetOutputForAttr():\n- specifies the audio session (for future use)\n- returns a status code\n- receives either stream type (for legacy) or audio attributes\n- returns an updated streamtype\n\nRemove logic dealing with legacy stream types to attributes conversion\nfrom AudioTrack.\n\nUse correct type for audio sessions in other APIs (startOutput() ...).\n\nreleaseOutput() specifies the audio session (for future use).\n\nBug: 18067208.\n\nChange-Id: I1bfbe9626c04c7955d77f8a70aecfad2cb204817\n"
    },
    {
      "commit": "223fd5c9738e9665e495904d37d4632414b68c1e",
      "tree": "33e0afab9a7479cdc4c688a742a8977c8ead21e4",
      "parents": [
        "bc0f452b9a76dd8c8244e775bc9c5aa85cae3ddf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 11 13:43:36 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 21 10:41:13 2014 -0800"
      },
      "message": "audio: new routing strategies and stream types\n\nAdded new routing strategies and stream type for internal use\nby audio policy manager and audio flinger:\n- One for accessibility to allow different routing than media\n- One for re-routing (remote submix) in preparation of dynamic\npolicies\n- Added stream type for \"internal\" audio flinger tracks used\nfor audio patches and duplication.\n\nBug: 18067208.\nChange-Id: I88f884b552e51e4a49c29125e5a1204cf58ff434\n"
    },
    {
      "commit": "847cbecbfda35e27a73a767c93fd0150ba001882",
      "tree": "f75e3789ae442087d9378016901525322bfd269e",
      "parents": [
        "44ce5407e8b582a37431464322d92c6bc3cc732a",
        "a248703b0799a9a27481f0ec13df90214a661eb5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Nov 18 20:19:13 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 18 20:19:13 2014 +0000"
      },
      "message": "am a248703b: am a3e2c146: am 4d0a5985: Merge \"Prevent stopped audio tracks from mixing data\" into lmp-mr1-dev\n\n* commit \u0027a248703b0799a9a27481f0ec13df90214a661eb5\u0027:\n  Prevent stopped audio tracks from mixing data\n"
    },
    {
      "commit": "27876c02c21cd3ab7ef01bdd1fc5400c5143584a",
      "tree": "3c096ec71dfdb81fcafe4a68165006f1371fdf5d",
      "parents": [
        "97e6ca1a0be83e420ab238d9a1c31d3112126646"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 09 18:07:55 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Nov 17 18:06:10 2014 -0800"
      },
      "message": "Prevent stopped audio tracks from mixing data\n\nStatic tracks should have zero framesReady when stopping or stopped,\nto prevent mixer from running potentially indefinitely with loop mode.\n\nBug: 16070883\n\nChange-Id: Iab9968044d1a6f8543bbcbfb246f49f27d68cace\n"
    },
    {
      "commit": "e979d5bb0060ad4fb4fb9aa5aefc6f9b722a1bab",
      "tree": "f9a0f2e051e07658db8cbb22453b3362dba06e36",
      "parents": [
        "504f701d475bdefbd6a27f00933975bc501e072d",
        "12d0cd1bf756ec96755fae2e573659898bfba6d6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 03 18:28:47 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 03 18:28:47 2014 +0000"
      },
      "message": "am 12d0cd1b: am 3a8bad2e: am be9ebd46: Merge \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\" into lmp-dev\n\n* commit \u002712d0cd1bf756ec96755fae2e573659898bfba6d6\u0027:\n  Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\n"
    },
    {
      "commit": "4c053ea158b29fa2cdd4c6f39d3c8da4ee5a7a02",
      "tree": "129617d405d098b749beafbcd87c58321bf2b055",
      "parents": [
        "8b76b592be5bc162fb5a6d7e8c47812544b6b345"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Sep 28 14:41:07 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 02 16:50:26 2014 -0700"
      },
      "message": "Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\n\nThe per-thread timestamp latch was not synchronized with the per-track\nreleased frames.  Now the value of each track\u0027s released frames is\nlatched along with the timestamp.\n\nBug: 17531839\nBug: 17669342\nChange-Id: I9d50c8c6a5de55a3f4561ac40e20d497376c1257\n"
    },
    {
      "commit": "4113fe9dcbcda53d09f9b9c91f59d9a54e6c2408",
      "tree": "1f343dd021b0195b8894661a2bc79e16db424c44",
      "parents": [
        "e7c6790095545fa4e2bd6d534ae8d8a6fb486f37",
        "0e42a8807edec5541ecac4a050459fbb72c477dc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 02 13:48:16 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 02 13:48:16 2014 +0000"
      },
      "message": "am 0e42a880: am e5095be1: am a49c94ea: Merge \"Revert \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\"\" into lmp-dev\n\n* commit \u00270e42a8807edec5541ecac4a050459fbb72c477dc\u0027:\n  Revert \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\"\n"
    },
    {
      "commit": "a49c94ea49c8329a1bdefe980e1f7d335c0d1ec5",
      "tree": "c095d3a59114c8a893e3657ad5efc6fdb40f2c9b",
      "parents": [
        "d0b9efe7d8300e48f7a99c1dd746d60060206b3c",
        "6954127b7ace022677ac407ff943c2793f8a11be"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 01 23:09:52 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Oct 01 23:09:53 2014 +0000"
      },
      "message": "Merge \"Revert \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\"\" into lmp-dev"
    },
    {
      "commit": "6954127b7ace022677ac407ff943c2793f8a11be",
      "tree": "3e038561671d256e03d63fb88a32e529e198701a",
      "parents": [
        "54464ba861aaafd11ee5645f5d1ecd1171c6e9fe"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 01 22:38:43 2014 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 01 22:45:18 2014 +0000"
      },
      "message": "Revert \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\"\n\nThis reverts commit 54464ba861aaafd11ee5645f5d1ecd1171c6e9fe.\n\nBug: 17733142.\n\nChange-Id: I9886d40032b2f7d96bee03e600e14f78943d8052\n"
    },
    {
      "commit": "ac2a2239dfc86c70f7382bebdb85c8cc1a9f6119",
      "tree": "24de5fcceec00e55053623a9f9e79427b0a6ebde",
      "parents": [
        "1e3aedd7d613708fb13f05cc343a229ed22ea266",
        "785da8f542120e49d29289947e69aba180c1724b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 01 02:26:48 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 01 02:26:48 2014 +0000"
      },
      "message": "am 785da8f5: am 955e24d3: Merge \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\" into lmp-dev\n\n* commit \u0027785da8f542120e49d29289947e69aba180c1724b\u0027:\n  Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\n"
    },
    {
      "commit": "a2dda4fcb3ab34a58c5218bb3a8a156cf04651b2",
      "tree": "15e55894c0fd8ce2b70486b82275a1da4244a7fb",
      "parents": [
        "0643f8d84c2bdbf6c29136a5c484c8f31ce2f83d",
        "e0270e79066825bb232ef5f271ac9ef84ce91b0f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 01 02:26:46 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 01 02:26:46 2014 +0000"
      },
      "message": "am e0270e79: am f71224ce: Merge \"audioflinger: forward flush to direct output streams\" into lmp-dev\n\n* commit \u0027e0270e79066825bb232ef5f271ac9ef84ce91b0f\u0027:\n  audioflinger: forward flush to direct output streams\n"
    },
    {
      "commit": "955e24d3a8e218d4711cabc6558781e095011132",
      "tree": "1b27aa45a2224cbdc9e247935c811e8ab62af40a",
      "parents": [
        "6c7ae72f0eccf456744474785afd25f9e205881c",
        "54464ba861aaafd11ee5645f5d1ecd1171c6e9fe"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 30 01:44:18 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 30 01:44:18 2014 +0000"
      },
      "message": "Merge \"Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\" into lmp-dev"
    },
    {
      "commit": "54464ba861aaafd11ee5645f5d1ecd1171c6e9fe",
      "tree": "c04a12c44ee589fec8baebafe200fe95529fa76a",
      "parents": [
        "a67ced9746e6f0d4e03ff8007682091afea71f6c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Sep 28 14:41:07 2014 -0700"
      },
      "committer": {
        "name": "Rachad Alao",
        "email": "rachad@google.com",
        "time": "Tue Sep 30 01:10:58 2014 +0000"
      },
      "message": "Fix uncertainty of one normal mix buffer in AudioTrack::getTimestamp\n\nThe per-thread timestamp latch was not synchronized with the per-track\nreleased frames.  Now the value of each track\u0027s released frames is\nlatched along with the timestamp.\n\nBug: 17531839\nBug: 17669342\nChange-Id: I96252782911bd42a2534cc4030521b7eeb99a7b9\n"
    },
    {
      "commit": "e659ef420dae0caae84ab78f9df8952acb9ad3a0",
      "tree": "9b21158041ed871365f939fc37034858328ef115",
      "parents": [
        "dc2e6ddc933e40632e79a866d9ece870db1a975e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 29 13:06:46 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 29 17:39:39 2014 -0700"
      },
      "message": "audioflinger: forward flush to direct output streams\n\nTrack flush should be forwarded to the audio HAL when playing\non a direct output stream.\n\nBug: 17704953.\nChange-Id: Iafc94327fe9aebf1d4eaa97b76c6767b7ac5babe\n"
    },
    {
      "commit": "e716ae7a76941932535cd47ae454423dee598c1e",
      "tree": "abb20cd4e79bac3e49a8071bd7fd643550969ca3",
      "parents": [
        "20ac005f3747d2301959f92cd53eb1815e331fa8",
        "f5e9870228db68d9cb927ff49f2e46dabfb7bbec"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 16 08:47:54 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 16 08:47:54 2014 +0000"
      },
      "message": "am f5e98702: am cf7863ea: Merge \"audioflinger: fix pre processing effect leak\" into lmp-dev\n\n* commit \u0027f5e9870228db68d9cb927ff49f2e46dabfb7bbec\u0027:\n  audioflinger: fix pre processing effect leak\n"
    },
    {
      "commit": "aaa44478a373232d8416657035a9020f9c7aa7c3",
      "tree": "95a4724c0d7ebbe065551f0aeaf5d65283ab3e04",
      "parents": [
        "f0b31e6333839972afb2e374f6d8824180d29fc2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 12 17:41:50 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 15 09:31:31 2014 -0700"
      },
      "message": "audioflinger: fix pre processing effect leak\n\nWhen a capture thread was closed, the effects attached to this thread\nwere left dangling and the associated effect chain destroyed.\nWhen their last client was disconnected, the effects were not released\nproperly from the effect library because the destruction process could\nnot be completed without the effect being attached to a thread.\n\nA similar problem prevented a RecordTrack to be properly released if\nits client was destroyed after the capture thread.\n\nThe fix consists in allowing the effect or record track to be properly\nreleased even if its parent thread cannot be promoted.\n\nAlso save any effect chain still present on a closed capture thread\nin case a new client wants to reuse the effects on the same session later.\n\nBug: 17110064.\nChange-Id: I5cd644daa357afd1f3548f9bcb28e6152d95fdb8\n"
    },
    {
      "commit": "648c1ecee3f79ff9d754dd982be59484de08d752",
      "tree": "790ebb44db33c2218fab8aa2ee740a746d4cccc0",
      "parents": [
        "c08f60b17967cf99bb03105081fb9064b5f34545",
        "955d8f906e920fe8da66e7943a7f2bfa98422e19"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 03 17:55:48 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 03 17:55:48 2014 +0000"
      },
      "message": "am 955d8f90: am 23c8cf95: Merge \"Restore the ability to build tee sink for debugging\" into lmp-dev\n\n* commit \u0027955d8f906e920fe8da66e7943a7f2bfa98422e19\u0027:\n  Restore the ability to build tee sink for debugging\n"
    },
    {
      "commit": "329f6511ee4e03a4605c70bbda8d3a96d2544884",
      "tree": "7c80c71e7eb84ba39106205214c9e58b5f6aed1e",
      "parents": [
        "9dd4a2ddd7caf8cbe50d8a76e0ec3e0274d2bce6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 28 16:23:16 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 02 13:54:21 2014 -0700"
      },
      "message": "Restore the ability to build tee sink for debugging\n\nThis changelist does not enable tee sink, but makes it possible to do so.\nTee sink had suffered some bit rot since it is not built by default.\n\nAlso fixes a crash for \u003e 2 byte per sample or \u003e 2 channels.\nStill does not write correct header for floating-point;\nthat will be best solved by moving to libsndfile.\n\nBug: 16990102\nChange-Id: I8e92c588ccc513d7802d696fcfb324e815772df6\n"
    },
    {
      "commit": "efaa7ab620b2ee936efa4fb74dc4c670ed757a46",
      "tree": "d6af179bd5e333f3d392baf525b2a18dd4edd238",
      "parents": [
        "16681c8f4afa5f18649ed934c9d84198516a1054"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 20 08:48:54 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 26 11:45:42 2014 -0700"
      },
      "message": "Clear the timestamp latch valid flag if no new timestamp available\n\nBug: 11815245\nChange-Id: I94885a1b4c2c7c055b8eacc7f7d0fcd064094b6d\n"
    },
    {
      "commit": "c2730ba7c5e9559b7499ef5e0d7742deb18c5110",
      "tree": "efa845ec9fd1cb5cc2a2cf20b62538b74668b173",
      "parents": [
        "92ce4715315bddd158c7d4028556632f0547e3b9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 20 15:47:07 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 06 11:42:07 2014 -0700"
      },
      "message": "audio policy: add support for USB devices for voice call\n\nAdd possibility to use sink and source devices not on\nthe primary HW module for voice calls (e.g. USB headsets).\n\nBug: 15520724.\n\nChange-Id: Ib27db4ba759b6d91ea1104dc2e35c87733517b30\n"
    },
    {
      "commit": "4dc680607181e6a76f4e91a39366c4f5dfb7b03e",
      "tree": "5212b6ff474b8ef68a68cb1cf144f54e5348de77",
      "parents": [
        "d530d415e60373caf875a37d2d747a51470ee45c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 28 17:26:49 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 28 18:10:29 2014 -0700"
      },
      "message": "audio policy: pass session ID to capture activity methods\n\nIndicate the audio session ID when calling getInput(),\nstartInput(), stopInput(), releaseInput().\n\nBug: 12378680.\nChange-Id: I763793752f93e2f4e1445a5ab217c895af011038\n"
    },
    {
      "commit": "83b8808faad1e91690c64d7007348be8d9ebde73",
      "tree": "b541b1172f804e04bd19b29f7878a1becf6205d7",
      "parents": [
        "c15c265676da2226a18a5373812608b19d4719d7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 20 18:31:16 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 24 02:56:47 2014 +0000"
      },
      "message": "audio flinger: add patch connection between hw modules\n\nAdd support for audio device connections between different audio\nhw modules.\nThe patch is performed by creating a bridge between the playback\nthread connected to the sink device and the record thread connected\nto the source device using a pair of specialized PlaybackTrack and\nRecordTrack.\n- Added PatchTrack and PatchRecord classes.\n- Added TrackBase type to indicate more clearly the track behavior.\n- A TrackBase can allocate the buffer or reuse an existing one.\n- Factored some code in openOutput() and openInput() for internal use\nby PatchPanel.\n\nBug: 14815883.\n\nChange-Id: Ib9515fcda864610458a4bc81fa8f59096ff4d7db\n"
    },
    {
      "commit": "529c61b7e4468a3e21f302f2a92a660249daa722",
      "tree": "26133aeea97d8ea2d564a6ff0193e471c575914f",
      "parents": [
        "ada688878122d6504cccebb9121f9d4f8f701e38"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 18 15:31:02 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 18 15:32:41 2014 -0700"
      },
      "message": "Fix copy/paste bug\n\nintroduced by Change-Id: I4e9b7fa99858b488ac98a441fa70e31dbba1b865\n\nChange-Id: I9a0c8800f5cf3767cc259776f95c96cad972e392\n"
    },
    {
      "commit": "6e6704c06d61bc356e30c164081e5bcffb37920c",
      "tree": "825e014f01a7eb5a2f3282965d2a5ba9a21b4071",
      "parents": [
        "7b24ee381e806dcb53308c1cafc8a45f4e2d8300"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 03 10:20:00 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 17 12:13:05 2014 -0700"
      },
      "message": "Improve dumpsys for capture threads\n\nShow per-track sample rate, and whether there is a fast capture thread\n\nChange-Id: If6a08a40d1eeba0690aa8da3c541f845ec101b7f\n"
    },
    {
      "commit": "5e58b0abe5b6c8f5bd96a8f78bbeeeb4d3892020",
      "tree": "975ed02efce4eaefcf5b0ceb5f33d212542a33a6",
      "parents": [
        "72d039f007722c92ee5ea7ffd03ece19d2781103"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 23 19:07:29 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jul 08 21:09:13 2014 -0700"
      },
      "message": "Add floating point volume handling to AudioMixer\n\nUse floating point volume in AudioMixer mixing when floating\npoint input is used with the new mixer engine.\nAudioResampler is updated to take floating point volume to match.\nBoth legacy integer and floating point mixer engines work.\n\nFor now, integer volume is used when the new mixer engine\nruns in integer input mode, for backward compatibility with\nthe legacy mixer.  The new mixer engine will generally run in\nfloating point input mode. When the legacy path is removed,\nthe integer volumes will be removed.\n\nChange-Id: I79e80c292ae7c8b8bdd0aa371a1b2c3a1b618290\n"
    },
    {
      "commit": "3348e36c51e91e78020bcc6578eda83d97c31bec",
      "tree": "ee3df8ed9f79863fc34589813710896a7e08af86",
      "parents": [
        "075abae2a954bf3edf18ad1705c2c0f188454ae0"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jul 07 10:21:44 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jul 07 10:29:36 2014 -0700"
      },
      "message": "Replace int bitDepth with audio_format_t in Resampler\n\nRemove mBitDepth from class (not used).\nReplace with audio_format_t in factory method to distinguish\nbetween float and pcm 16-bit.\n\nChange-Id: I166860796c68285077ef4458d8758d19b82523f9\n"
    },
    {
      "commit": "ab5cdbaf65ca509681d2726aacdf3ac8bfb6b3fa",
      "tree": "0d406acdfea2d44cd430ef16ee2a25b7722e4b1d",
      "parents": [
        "29a8b2fe294a34ac7f004203426961a599e725ea"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 09 17:22:27 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 19 10:05:57 2014 -0700"
      },
      "message": "AudioTrack: add support for compressed audio\n\nAdd support for compressed audio playback by use\nof an AudioTrack attached to a direct output thread.\n\nBug: 9428304.\n\nChange-Id: I4a61be9cf0e31003ca85935d6e0ee38ca8192e03\n"
    },
    {
      "commit": "3bcffa136909c1fb6e88ee4efd12ccac18360a85",
      "tree": "6aedd2a1ead0fa545a93229fa2965477ec627de7",
      "parents": [
        "0ac53364b79dc72ee0c09f0efc46a22ab4374dbf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 12 18:38:45 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 13 08:56:56 2014 -0700"
      },
      "message": "force command flush after releasing a reference to shared memory\n\nAfter releasing a reference to a shared memory interface,\nIPCThreadState::self()-\u003eflushCommands() must be called to ensure\nthat the corresponding reference is also cleared immediately in the\nremote process. Otherwise the binder implementaiton will not\npush the clear systematically causing the memory region not to be freed.\n\nSee issues 10711502 and 2801375.\n\nBug: 14057166.\nChange-Id: If55f36f00d452d6cf00cf83bd2fba1c8f3abcb57\n"
    },
    {
      "commit": "0ac53364b79dc72ee0c09f0efc46a22ab4374dbf",
      "tree": "d2ae61d98423e9ea9ed865b7637a897f610344a1",
      "parents": [
        "421c34ef58f89f4cc39737118bb58b762e84e1c9",
        "ced6e74215937182fe2f9f6b0867f7c28ccd02c1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 11 17:10:46 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 10 22:06:31 2014 +0000"
      },
      "message": "Merge \"Fix non-monotonic AudioTrack::getTimestamp after pause\" into lmp-preview-dev"
    },
    {
      "commit": "ced6e74215937182fe2f9f6b0867f7c28ccd02c1",
      "tree": "576dcfc6d7631c817a3ecd65387e3ae64b41230a",
      "parents": [
        "0d843fdc91c98d447c3c3e357020d07b783c7bc0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 09 17:12:32 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jun 10 15:51:52 2014 -0700"
      },
      "message": "Fix non-monotonic AudioTrack::getTimestamp after pause\n\nBug: 15523502\nChange-Id: Ifd4aa7fca197bc041c1620fc3f7d953a8902551a\n"
    },
    {
      "commit": "c263ca0ad8b6bdf5b0693996bc5f2f5916e0cd49",
      "tree": "d513a586c518ed6f061cf446a5f2e3e18017b4f2",
      "parents": [
        "cc839bd4727be02d9352f46d043a7e9cc9c7d642"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 04 20:31:46 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 05 03:36:20 2014 +0000"
      },
      "message": "Squashed commit of the following:\n\ncommit 9128d6ffec43731d723f9b394f243d940f4c7e41\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Tue May 13 10:38:42 2014 -0700\n\n    Use of fast capture by normal capture\n\n    Will only configure fast capture path if the input buffer size is less than\n    10 ms and the input sample rate is same as the primary output sample rate.\n\n    Change-Id: I4a7cdc6069d750845412c626d27e83f72a1ab397\n\ncommit 2e5e0806a5abe7499848358ef5fde5c26405000d\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Mon Jun 2 08:29:22 2014 -0700\n\n    Add mPrimaryOutputSampleRate\n\n    Change-Id: I46b527fc3f2b5a5720a74b4f0b9a8f2e0d570b09\n\ncommit baf1d73467923996d1b1f2a9237260cc5697e050\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 30 10:42:03 2014 -0700\n\n    Change parameter type for volume to float in AudioMixer\n\n    Change-Id: I4da1505ce852505f86f8e5b87f60e8edceeb30e0\n\ncommit 40fe20fa9760cd03c69778c2021cf7a490d75ece\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 30 10:35:47 2014 -0700\n\n    Rename UNITY_GAIN to UNITY_GAIN_INT in AudioMixer\n\n    Change-Id: Ic040311305026f0b4c4280a5b3bef7a447ac1da3\n\ncommit 37c9a2b49f876abc5ff537a9ec036d7f0a423775\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Thu May 29 21:33:13 2014 -0700\n\n    Refactor setVolumeRampVariables in AudioMixer\n\n    Change-Id: I8fcf3101bcea292de7c65433fa578f1c9cdd0974\n\ncommit 397070eca31f121d5d3993de1bfea99aaea5d4f3\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Thu May 29 18:52:38 2014 -0700\n\n    Fix floating point output from mixer\n\n    A buffer pointer was being erroneously reset to buffer start,\n    potentially causing an audio glitch. The floating point\n    output mode is not enabled at this time, but will be in\n    the future.\n\n    Change-Id: If8b6414d232f064f3a2e2c5a6da889a91b27fb24\n\ncommit 2e61aa5b33b2247bbc5d4eaa0b519df9accd4bbc\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 23 21:22:17 2014 -0700\n\n    Add multiple format capability to FastMixer\n\n    Floating point data from MixerThread into FastMixer.\n    Multiple output format capability from FastMixer to Sink.\n\n    Change-Id: I0da17810ee71381a39a006c46faec71108d22c26\n\ncommit b9ea653c702a785bbd23a66c5e588d40b4192c4e\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Thu May 29 15:53:09 2014 -0700\n\n    Avoid resetting BufferProviders in mixer unnecessarily\n\n    Change-Id: Iad85c4dfd21be1dbf89dc11906106b34219376f8\n\ncommit 7f1a6d6da21c616f80cf9ba21bea11b419ec561b\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Tue May 27 12:32:17 2014 -0700\n\n    Update dynamic resampler buffer fetching\n\n    Make the criteria tight for fetching to avoid storing\n    excessive frame data internal to the resampler.\n    This should reduce jitter in frame delivery computation.\n\n    Bug: 14962343\n    Change-Id: I7adaf714d11c272696ccdbf218bda994c7217477\n\ncommit b5e4aac07b9a02f0c803c090058602b03ac09ebb\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Tue May 27 12:30:54 2014 -0700\n\n    Allow kFastTrackMultiplier to be specified per device\n\n    Change-Id: I4eaaaf038df720cec4f5d9221d1b632970f9e3dd\n\ncommit b93cd97a52af31122df2da2cc0415cda888c8c73\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 23 21:13:31 2014 -0700\n\n    Rename mixBuffer to mMixerBuffer in FastMixer\n\n    Likewise mixBufferState becomes mMixerBufferState.\n    This harmonizes with the naming in AF::MixerThread.\n\n    Change-Id: I1255d7c07cc2c6ee925d7430925236d2bd163122\n\ncommit 8340758622b9711365a8801806cbdf934803c63f\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Mon May 12 16:51:41 2014 -0700\n\n    Add multiple format capability to AudioMixer\n\n    Change-Id: I04ac1cafd90b6ed652f8d51888ad07576678f0bc\n    Signed-off-by: Andy Hung \u003chunga@google.com\u003e\n\ncommit 6b695b9d094820c232a897a3fabbe83d2b7193fe\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Thu Mar 13 14:59:31 2014 -0700\n\n    Start adding FastCapture based on FastThread WIP\n\n    This version supports at most one fast capture client.\n\n    Change-Id: Idf609bfc80ae22433433d66a5232c043c65506df\n\ncommit e951ad05a2c388471d7e2806d91e7d51325a150a\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Mon May 12 11:06:26 2014 -0700\n\n    Move validation of frameCount from set to openRecord_l\n\n    This move is needed because frameCount is validated on server side for\n    fast tracks (as should be done for normal tracks too).\n\n    Change-Id: I6d99e80869fd90fab373cf60ef348c01f075fbca\n\ncommit 73e76992dbba794894837c38e5472312ea829cf3\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Tue May 13 10:41:52 2014 -0700\n\n    Allow track buffer \"allocation\" to be from pipe\n\n    Change-Id: Ib9ac170f8e8b7746b3588157a56cbee3b753a1cb\n\ncommit 60de1d7ded05c6304037d4858b401094b1d2b4d3\nAuthor: Andy Hung \u003chunga@google.com\u003e\nDate:   Fri May 9 15:02:21 2014 -0700\n\n    Add format parameter to getTrackName() and track_t\n\n    Change-Id: Ia152a839014e235fbfb656104c15d7c1b456d02e\n    Signed-off-by: Andy Hung \u003chunga@google.com\u003e\n\nChange-Id: Ied0ade8b25d23e89bb03319a7e3135c238f735b9\n"
    },
    {
      "commit": "e348c5b72ad889389c7c1c900c121f0fbee221b5",
      "tree": "9c77581ad7520309c0bb90f11bba766a6cd61b28",
      "parents": [
        "9382378b6b271949bdce527ea3da748c13c4c692",
        "c0bf836f8a4e34d66c10a2bb8b8cee0db04790cc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:47:50 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:47:50 2014 -0700"
      },
      "message": "resolved conflicts for merge of c0bf836f to master\n\nChange-Id: I5cf238fa56d6fff443b212870cf9dd7f1110e7da\n"
    },
    {
      "commit": "ad71caf25e31ecfc4ecf2c925e38fd87905fbc8e",
      "tree": "74b759675cdc008e10e9b4fa94344e9dd54f8868",
      "parents": [
        "acbd9492996348bf4565fbaa5a14772f0f4ace38",
        "3b6da6bfb50a1c0324fb4c87326d3a477944d5fe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 01:28:18 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 22 01:28:18 2014 +0000"
      },
      "message": "am 3b6da6bf: Merge \"Move frameworks/av off private API.\"\n\n* commit \u00273b6da6bfb50a1c0324fb4c87326d3a477944d5fe\u0027:\n  Move frameworks/av off private API.\n"
    },
    {
      "commit": "ee499291404a192b059f2e04c5afc65aa6cdd74c",
      "tree": "1c1537b599b21c331b15493f776adcbff307ac2f",
      "parents": [
        "d084206d5a4a5364211af46e4201311933e83bfc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 17:55:51 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:15:33 2014 -0700"
      },
      "message": "Move frameworks/av off private API.\n\nBug: 11156955\nChange-Id: Ib3bb9d66a2bf92977c2445b62aa074a2d7a45aea\n"
    },
    {
      "commit": "9382378b6b271949bdce527ea3da748c13c4c692",
      "tree": "9b20c4e7b8e8dc733937f9125cd22b4c11c046a7",
      "parents": [
        "d83062287758be57d1d0908b30bb18aa9b367f38",
        "b108091734ee7668084cc1063187c2b10ddb7bb7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:01:17 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:01:17 2014 -0700"
      },
      "message": "resolved conflicts for merge of b1080917 to master\n\nChange-Id: Iabbe3e95e29f28461ff722b550e8a9f35bd2528f\n"
    },
    {
      "commit": "acbd9492996348bf4565fbaa5a14772f0f4ace38",
      "tree": "396267d5b424f0335491e80a95920ae200b956d9",
      "parents": [
        "4c9bde7a3e636d3ecccd7905d142dbbb80e977a0",
        "d084206d5a4a5364211af46e4201311933e83bfc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 00:39:10 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 22 00:39:10 2014 +0000"
      },
      "message": "am d084206d: Merge \"Move frameworks/av off __futex_syscall3.\"\n\n* commit \u0027d084206d5a4a5364211af46e4201311933e83bfc\u0027:\n  Move frameworks/av off __futex_syscall3.\n"
    },
    {
      "commit": "77e1512aee8092069514973379a59a318e721be3",
      "tree": "875411e1d44b2cf12e99134af2d7cfb7f9acceae",
      "parents": [
        "ce473c32705e2d1c5fcc817198101e1220b3c8f7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 17:31:18 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 17:31:18 2014 -0700"
      },
      "message": "Move frameworks/av off __futex_syscall3.\n\nBug: 11156955\nChange-Id: I943080bc51b6efa781059b48b5b5ecc4fa287512\n"
    },
    {
      "commit": "b4db73d022f3de3530bc2b3c9c831ccfdd1a2ead",
      "tree": "76def5c5d352697b31806a6c0b842ef1a0bc8925",
      "parents": [
        "1e54e6dfc1bb8d33089ed8857f0f194e696f85e2",
        "e541269be94f3a1072932d51537905b120ef4733"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon May 19 22:06:18 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon May 19 22:06:18 2014 +0000"
      },
      "message": "Merge \"Use new channel count functions for audio masks\""
    },
    {
      "commit": "c56f3426099a3cf2d07ccff8886050c7fbce140f",
      "tree": "9e486a809f9d500a70fd26c4e1d2596ded190dbe",
      "parents": [
        "7c96d53a65085f42ac2b6d416cbc16fd36ed72ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 21 17:53:17 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 19 09:46:25 2014 -0700"
      },
      "message": "Pass stereo gains as packed minifloat\n\nThis will allow (eventually) a greater dynamic range for gains.\nHowever there are still a few remaining places in effects and mixer\nthat will also need to be changed in order to get the full benefit.\n\nAlso fixes a minor bug: was not checking for NaN in AudioTrack C++.\n\nChange-Id: I63bce9e82e0a61546d8ff475fb94bcb700d99c96\n"
    },
    {
      "commit": "e541269be94f3a1072932d51537905b120ef4733",
      "tree": "39646def02d7230929eb85189f48b9193b8c23a0",
      "parents": [
        "7c96d53a65085f42ac2b6d416cbc16fd36ed72ff"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 16 11:25:07 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 16 15:05:05 2014 -0700"
      },
      "message": "Use new channel count functions for audio masks\n\nChange-Id: Ia658ab4b6320d19fdb50f123c930918724ff0ef3\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "deb9081a61b446dbe50461082974a4228899f178",
      "tree": "c33345fcecaed0e76e22173f5ca1fdfe8286b028",
      "parents": [
        "cbe6fddebe3ec84176037de7f9681d2407fa1113",
        "755b0a611f539dfa49e88aac592a938427c7e1b8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 14 15:06:00 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 14 15:06:01 2014 +0000"
      },
      "message": "Merge \"Pull up mFlags and isFastTrack from Track to TrackBase\""
    },
    {
      "commit": "755b0a611f539dfa49e88aac592a938427c7e1b8",
      "tree": "ae3e77f36be2bf2b98bd06ec71b458d29b50c867",
      "parents": [
        "5b17c0b5b418c340d3e5201a72ee8c88c1755355"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 13 11:30:28 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 13 13:26:35 2014 -0700"
      },
      "message": "Pull up mFlags and isFastTrack from Track to TrackBase\n\nChange-Id: I6bd48292310be4e05758a11f617f50585904422d\n"
    },
    {
      "commit": "021cf9634ab09c0753a40b7c9ef4ba603be5c3da",
      "tree": "03fb2a864179983e482cae4dac6a502a6dcef136",
      "parents": [
        "aa0315f9fdcf99e84a969a4f81192150ddaef260"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 13 10:18:14 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 13 13:09:17 2014 -0700"
      },
      "message": "AudioFlinger: add specific mutex for client lists\n\nAdd a specific mutex to protect access to mClients and\nmNotificationClients lists. This avoids locking the main AudioFlinger\nmutex from inside thread loops and allows not to worry about\ncross deadlocks when sending a config event with status reply while\nkeeping the ThreadBase or AudioFlinger mutex locked.\nAs a way of consequence, remove notification client list passed to\nprocessConfigEvents_l() and audioConfigChanged() as the list\ncan now be accessed by locking client mutex only.\n\nChange-Id: I228022204b6709a8bb60cc96d9514a6ffe59b62e\n"
    },
    {
      "commit": "fe9570c7b937b49d3603ccb394aed732b79bc6be",
      "tree": "9bc651997eec71010c91543e390472a6f155f775",
      "parents": [
        "16821ec9e1619f4edcc87f21ea1537580109b14d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 07 08:42:25 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 09 16:15:49 2014 -0700"
      },
      "message": "Remove obsolete IAudioRecord::getCblk()\n\nChange-Id: Id20b5efd765b9796b0e391610e06dc928a829ebf\n"
    },
    {
      "commit": "d776ac63ce9c013c9626226e43f7db606e035838",
      "tree": "f75ca450359caa5a69b4124399d19d0522046826",
      "parents": [
        "0c5b910e6eb2b9b2a622ccc0dd66e8fcae3eb28b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 07 09:16:09 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 09 11:32:43 2014 -0700"
      },
      "message": "IAudioFlinger::openRecord returns IMemory(s)\n\nopenRecord() now explicitly returns the control block and data buffer\nas separate IMemory references.  If the IMemory for data buffer\nis 0, this means it immediately follows the control block.\n\nChange-Id: Ic098f88f0e037f8fbe30006689e18cacacf09d06\n"
    },
    {
      "commit": "1a7be1ec9c769203e6c8e26378de0ab8e2ad493d",
      "tree": "68773b199cc4adcb96124270863244477570c78e",
      "parents": [
        "f131f87369ec06fc27fc1f14ea72f0ca1a066509",
        "91820d46b5f3065c2fded3cdf65d305715b33bb1"
      ],
      "author": {
        "name": "Bill Yi",
        "email": "byi@google.com",
        "time": "Tue Apr 29 11:34:16 2014 -0700"
      },
      "committer": {
        "name": "Bill Yi",
        "email": "byi@google.com",
        "time": "Tue Apr 29 11:34:16 2014 -0700"
      },
      "message": "Merge commit \u002791820d46b5f3065c2fded3cdf65d305715b33bb1\u0027 into HEAD\n"
    },
    {
      "commit": "1b24cf32e02a1372e57b3a2a432bc0adfe496e6d",
      "tree": "220f4583ae1081df62fa5c861eed3e9e90a24515",
      "parents": [
        "4845b69f70ff457be8d8908f6eb61e2af67e00d3",
        "e80631aa1992ca50af679cd6a018c0ffda7f9b17"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Apr 15 23:37:19 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 15 23:37:19 2014 +0000"
      },
      "message": "am e80631aa: am 839d11d1: Merge changes I0a744dc7,Id993a70d\n\n* commit \u0027e80631aa1992ca50af679cd6a018c0ffda7f9b17\u0027:\n  media: use size_t for integer iterator to Vector::size()\n  media: 64 bit compile issues\n"
    },
    {
      "commit": "e80631aa1992ca50af679cd6a018c0ffda7f9b17",
      "tree": "6b3fcc9fbb5b02976e4bb2163e994952303bead5",
      "parents": [
        "d4a3cae8cc4cf924925ae57723e61c89f6c4fd51",
        "839d11d1f7be9dff2f06c7d30a9eb39cb6782078"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Apr 15 22:35:00 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 15 22:35:00 2014 +0000"
      },
      "message": "am 839d11d1: Merge changes I0a744dc7,Id993a70d\n\n* commit \u0027839d11d1f7be9dff2f06c7d30a9eb39cb6782078\u0027:\n  media: use size_t for integer iterator to Vector::size()\n  media: 64 bit compile issues\n"
    },
    {
      "commit": "3ab368e0810d894dcbc0971350c095049478a055",
      "tree": "a50053c391da8c02797158395f2ecfec83218855",
      "parents": [
        "db43b34c3428e480f8c4c66e7e88f4001f37f91e"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Apr 15 14:55:53 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Apr 15 14:57:31 2014 -0700"
      },
      "message": "media: use size_t for integer iterator to Vector::size()\n\nChange-Id: I0a744dc7815a86a993df9b0623440be620ec8903\n"
    },
    {
      "commit": "adad3d7d935da176ff24941b4ae9edf7340e9b96",
      "tree": "7a8a2f8e31c7dd690805c1cfd9982d218c66296b",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 21 14:51:43 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 14:46:28 2014 -0700"
      },
      "message": "Use LOG_ALWAYS_FATAL instead of LOG_FATAL\n\nLOG_FATAL is compiled out in most builds, so the\nassertion checks were not being performed.\n\nChange-Id: I774f0985ab9c5ccecd8989a0f1c940386b73fc35\n"
    },
    {
      "commit": "2d3ca68363f723fbe269d3ce52dab4985dfc7154",
      "tree": "c1f8c7bbae0e128158ce90a9985d0219dd719182",
      "parents": [
        "164985121796cf214c7a83d32005d9b01125b558"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Fri Mar 07 13:43:49 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 17 18:32:07 2014 -0700"
      },
      "message": "audioflinger: OffloadThread fix for resume underrun\n\nAudioFlinger can miss resuming h/w on a pause-\u003eresume transition\nif sufficient data isn\u0027t available\n\nBug: 11358524.\nChange-Id: Ic3c75256290d3515fd4a96dfcc900909fbe5bc15\n"
    },
    {
      "commit": "164985121796cf214c7a83d32005d9b01125b558",
      "tree": "5e84c9a2511f94338b116962ef4eb7ba5903b708",
      "parents": [
        "8d6c292a0bed3d63b5b7297d09a604af6327c663"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 17 17:22:08 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 17 18:31:43 2014 -0700"
      },
      "message": "AudioFlinger: Change track ready condition in STOPPING_1 state\n\nSet FS_FILLED only if framesReady() \u003e 0\n\nChange-Id: Ibb1d2e988ff17fcf3a7ab61031a3f85df82f18d5\n"
    },
    {
      "commit": "8d6c292a0bed3d63b5b7297d09a604af6327c663",
      "tree": "344c2297ed00e1e10998490bc4e2f00358536133",
      "parents": [
        "9ff25ced1404c896df9e6ed3a6ad289305559361"
      ],
      "author": {
        "name": "Krishnankutty Kolathappilly",
        "email": "kkolat@codeaurora.org",
        "time": "Tue Feb 04 16:23:42 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 17 18:30:13 2014 -0700"
      },
      "message": "audioflinger: Handle pause /resume in stopping state\n\n-Pre-requisite:\n Perform seek on the clip. After seek the data remaining till EOS\n is little more than the driver and common block buffering.\n-Framework state:\n Offload thread is waiting for signal from the HAL for a free\n buffer. Audio Player calls sink stop on reaching EOS. Audio\n track is waiting on obtain buffer for a free space in common\n block to send the last buffer. The track is moved to stopping\n state as input EOS is reached.\n-Issue:\n Perform pause/ resume in this state(STOPPING), Audio playback\n does not resume.\n-Fix\n Ensure resume is called in stopping state if frames ready is\n greater than zero.\n\nBug: 12870871\n\nChange-Id: Ib1378c4ee5ce4bea655691e93de0775f7b1d2804\nSigned-off-by: Glenn Kasten \u003cgkasten@google.com\u003e\n"
    },
    {
      "commit": "3ef14ef30359376006a233f6a21a165d4b65a7df",
      "tree": "78947d5e8dee6f3942fdc7891dd40777b21dd7de",
      "parents": [
        "15e5798908ccac14e10c84834eaf08c42931bd06"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:08:51 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:37 2014 -0700"
      },
      "message": "Make error handling more similar for output and capture\n\nAnd simplify error case\n\nChange-Id: I0bb1ec252945d672cc4cef137977b912f1b23d51\n"
    },
    {
      "commit": "05997e21af6c4517f375def6563af4b9ebe95f39",
      "tree": "6a0892e14e34751cd10e11f6f73e92401f540505",
      "parents": [
        "0e0e846f3d86906ff990025981e514d6bcf44d8e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:08:33 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:36 2014 -0700"
      },
      "message": "Whitespace and comments\n\nChange-Id: I99752cca74a459c4746ea4718acb0115439e50bd\n"
    },
    {
      "commit": "e857b65c1d3aa055281cb48f59c9b5eb4a062dd0",
      "tree": "9d0780a2aebbb8839ec74fe16b1b868e6d45e3e9",
      "parents": [
        "ce9be73c7e7f379d68e1a0d0210a6f7b9418269f",
        "3c9130a8a12ce962dc8d22e04243b135b9e98b01"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Mar 07 02:26:36 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Mar 07 02:26:36 2014 +0000"
      },
      "message": "am 3c9130a8: Merge \"Make frameworks/av 64-bit compatible\"\n\n* commit \u00273c9130a8a12ce962dc8d22e04243b135b9e98b01\u0027:\n  Make frameworks/av 64-bit compatible\n"
    },
    {
      "commit": "0504a198d6595e29e58d1d66ae59fac1d662384a",
      "tree": "3fad07457b2212da593c80bd278cb7660ce53d6a",
      "parents": [
        "d384a2c44810ce1b51277cc4ab4c5415ff7de6ee",
        "632c3790523896260dc43fd6cd40a158765cdb15"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Mar 05 20:01:14 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Mar 05 20:01:14 2014 +0000"
      },
      "message": "am 632c3790: am 7c206e5b: am e0cd1051: audioflinger: update track ready condition\n\n* commit \u0027632c3790523896260dc43fd6cd40a158765cdb15\u0027:\n  audioflinger: update track ready condition\n"
    },
    {
      "commit": "e0cd1051ed9fea0629745c29020516ae62298461",
      "tree": "03273a98e8fc21f916bd0de1163913c51171b953",
      "parents": [
        "e010f65e6337267cb15f8894c950a3f64370dd36"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Fri Dec 27 16:09:28 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 04 15:58:25 2014 -0800"
      },
      "message": "audioflinger: update track ready condition\n\nSignal track ready if the track isStopping().\n\nBug: 12423190\nChange-Id: I95e14905df10ebf301e398263478c8ca25d7e2ce\n"
    },
    {
      "commit": "25f4aa83efaa9179e65a20583a6d441de2c3ff3f",
      "tree": "996653f52a07bb6dc99d058943f852f3182ea637",
      "parents": [
        "deca2ae0a7cf8bc54ff3f30b7dc39bbc78b94c0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 10:50:43 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:56:13 2014 -0800"
      },
      "message": "Move handleSyncStartEvent and clearSyncStartEvent to RecordTrack\n\nChange-Id: I611a63e63acf3eb17e2072c1a77b91fe9e62e36a\n"
    },
    {
      "commit": "6dd62fb91d82dedcfa3ab38c02eb0940b4ba932a",
      "tree": "5c463a944686864894c2be528a52df9d275dd221",
      "parents": [
        "f3b785ae6ea135115b54ac58cedc12b444483902"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 05 16:35:58 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:52:35 2014 -0800"
      },
      "message": "Multi-client recording\n\nSupports multiple clients both at native sample rate and with resampling.\n\nChange-Id: Icea55b4fd30751761b7debaa3ce016c79e712d8d\n"
    },
    {
      "commit": "1d6fa7af1288b550faabe4ec2cf98684236723db",
      "tree": "a8801ca9a0925ba1faccf17acea4aa78d71a9d29",
      "parents": [
        "b82a9f105f89d6b3684c9f626918042bd8977912",
        "566be7c33fc56ae4c34168ecbee5316374f7e3c5"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 13:47:53 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 13:53:20 2014 +0000"
      },
      "message": "resolved conflicts for merge of 566be7c3 to master\n\nChange-Id: I7b1cc71057b2bd4f771e7bcf508a8c3abd6017ce\n"
    },
    {
      "commit": "377b2ec9a2885f9b6405b07ba900a9e3f4349c38",
      "tree": "b938e1d75a1beefae86244f287ca22f4a277740d",
      "parents": [
        "cdda7bf4d3ca9cad6979374a18dd5be79ea83d80"
      ],
      "author": {
        "name": "Kévin PETIT",
        "email": "kevin.petit@arm.com",
        "time": "Mon Feb 03 12:35:36 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 11:40:06 2014 +0000"
      },
      "message": "Make frameworks/av 64-bit compatible\n\nContains the necessary changes to make frameworks/av build and work\non a 64-bit machine.\n\nSigned-off-by: Craig Barber \u003ccraig.barber@arm.com\u003e\nSigned-off-by: Kévin PETIT \u003ckevin.petit@arm.com\u003e\nSigned-off-by: Ashok Bhat \u003cashok.bhat@arm.com\u003e\nSigned-off-by: Marcus Oakland \u003cmarcus.oakland@arm.com\u003e\n\nChange-Id: I725feaae50ed8eee25ca2c947cf15aee1f395c43\n"
    },
    {
      "commit": "9601c6efcb2552960d6f125d073525b581c1b7ec",
      "tree": "3f01719f2e687abdb58e0405413766ce25f6f362",
      "parents": [
        "e175d77bb610675ba2f70f24449189995ddeaf5b",
        "b220884bf3129253cc5bc8d030bc475411ea4911"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Feb 10 17:14:09 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 10 17:14:09 2014 +0000"
      },
      "message": "Merge \"Pretty up audioflinger dumpsys\""
    },
    {
      "commit": "b220884bf3129253cc5bc8d030bc475411ea4911",
      "tree": "def105f8d0928679900588536f8b1911c3d179fa",
      "parents": [
        "bbbb1e80f461616cd9814de125f95f5b89cf5870"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Feb 07 14:00:50 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Feb 10 08:01:14 2014 -0800"
      },
      "message": "Pretty up audioflinger dumpsys\n\nChange-Id: I57e44b4c36b99f7149542bbcf9645521c6152dfa\n"
    },
    {
      "commit": "8f762d577f2dcf34357eb8731070ae465649ec9a",
      "tree": "dd74d379fd4067025aae50732e5964904132e903",
      "parents": [
        "bbbb1e80f461616cd9814de125f95f5b89cf5870",
        "4944acb7355b3aa25748fd25945a363a69d65444"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 23:36:33 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 07 23:36:34 2014 +0000"
      },
      "message": "Merge \"Fix whitespace\""
    },
    {
      "commit": "a793625031a3e326a261a0843598c35a5784bbde",
      "tree": "f18a01ac2ead0114a2a46783b3ef79a013fb85e7",
      "parents": [
        "19f420ea68424a608e982d39ab76676a05337685",
        "6e0d67d7b496ce17c0970a4ffd3a6f808860949c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 20:49:21 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 07 20:49:22 2014 +0000"
      },
      "message": "Merge \"Use Format_isValid() and Format_isEqual() instead of direct comparison\""
    }
  ],
  "next": "4944acb7355b3aa25748fd25945a363a69d65444"
}
