)]}'
{
  "log": [
    {
      "commit": "bc7f347ff5dc890ad0fa306f58d145e934e31ed4",
      "tree": "0164bf05d87776c3e073a32fba021b041f7a45b1",
      "parents": [
        "ec982d462866b8b985b4ed13a2e99556de094c0d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 01 15:28:29 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 15 19:27:57 2016 -0800"
      },
      "message": "DO NOT MERGE - improve audio effect framwework thread safety\n\n- Reorganize handle effect creation code to make sure the effect engine\nis created with both thread and effect chain mutex held.\n- Reorganize handle disconnect code to make sure the effect engine\nis released with both thread and effect chain mutex held.\n- Protect IEffect interface methods in EffectHande with a Mutex.\n- Only pin effect if the session was acquired first.\n- Do not use strong pointer to EffectModule in EffectHandles:\nonly the EffectChain has a single strong reference to the EffectModule.\n- Check reply size before writing status in EffectHandle::command()\n\nBug: 32707507\nBug: 32095713\n\nChange-Id: Ia1098cba2cd32cc2d1c9dfdff4adc2388dfed80e\n"
    },
    {
      "commit": "eb9487e10294a4e73977f460f30eeaff503acd21",
      "tree": "fdd7dfd6fd2074f9d0684ed9b11dd851dc469d50",
      "parents": [
        "8f0547a954b39d5750488be7e060ebe1ebfdf666"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 22 09:15:17 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 22 12:20:43 2015 -0700"
      },
      "message": "Fix capture overruns at non-primary sample rate\n\nand small buffer size.  Also:\nPull out the magic number \"12 ms\" to a named constant.\nRemove obsolete AudioFlinger::mPrimaryOutputSampleRate.\n\nBug: 22662814\nChange-Id: I261f75a222c4505a84aad2493d251bd2dea59f68\n"
    },
    {
      "commit": "7c1ec5f038e63a5eb8b04434577c25bc23f5f410",
      "tree": "f6b8feda43ba0bb6666171b57318ad3cea48a45e",
      "parents": [
        "54c0659b9efa72d11997c590c4d377c44789c7fd"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 09 14:52:47 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 10 10:58:41 2015 -0700"
      },
      "message": "audio: several fixes in audio routing callbacks\n\n- audio policy:\nForce device change to ensure new audio patch creation\nupon first track activity on a given output.\nFix function device_distinguishes_on_address() which could mistake\nsome output device with remote submix input device.\n\n- audio flinger:\nReduce number of binder calls upon new client registration by only\nsending ioConfigChanged() callbacks to newly registered client.\nFix first patch after output thread creation not triggering an\nioConfigChanged() callback.\n\n-audio system:\nForce client registration upon routing callback installation to force\nnew ioConfigChanged() callback from audio flinger.\n\nBug: 22381136.\n\nChange-Id: Ieb0d9f92f563a40552eb31bc0499c8ac65f78ce4\n"
    },
    {
      "commit": "72e3f39146fce4686bd96f11057c051bea376dfb",
      "tree": "00e43a5392f717a49a3569de3a5bdce9aa7b6a6e",
      "parents": [
        "4a95e69406aa2e9896d865962d6d947ebbdac6fc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 20 14:43:50 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 20 17:35:37 2015 -0700"
      },
      "message": "audio flinger: do not call JAVA services until system is ready\n\nWait for system ready indication form AudioService before enabling\ncalls to scheduling service or power manager.\n\nBug: 11520969.\nChange-Id: I221927394f4a08fd86c9d457e55dd0e07949f0cf\n"
    },
    {
      "commit": "f6870aefc5e31d4220f3778c4e79ff34a61f48ad",
      "tree": "6943c86c7143ffc113d91b8ed7a34d75ab183434",
      "parents": [
        "70c75d8c15707d5eade38fe3e622f8500c29556b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 08 10:50:03 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 08 13:23:51 2015 -0700"
      },
      "message": "audio flinger: fix fuzz test crash\n\nClear output stream pointer in duplicating thread\nwhen the main output to which it is attached is closed.\n\nAlso do not forward master mute and volume commands to\nduplicating threads as this is not applicable.\n\nAlso fix logic in AudioFlinger::primaryPlaybackThread_l()\nthat could accidentally return a duplicating thread.\nThis never happens because the primary thread is always\nfirst in the list.\n\nBug: 20731946.\nChange-Id: Ic8869699836920351b23d09544c50a258d3fb585\n"
    },
    {
      "commit": "9f578d3297782be6de5373e171f3b4af49726709",
      "tree": "d6063a06edf2c17868195472d63869c069dbfbb8",
      "parents": [
        "c8a70d340f0ce610dfb8bd44d833708269484e99",
        "4cb668392ee0433462251afbee109405c6efacc8"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue May 05 15:55:07 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 05 15:55:08 2015 +0000"
      },
      "message": "Merge \"AudioRecord keeps track of UID\" into mnc-dev"
    },
    {
      "commit": "4cb668392ee0433462251afbee109405c6efacc8",
      "tree": "50e324bd1af8951136ec9b7c4a7538e514490e80",
      "parents": [
        "1de1e25cba872bd4c077c2e394f8ca9c70b65856"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri May 01 18:34:17 2015 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue May 05 02:04:33 2015 +0000"
      },
      "message": "AudioRecord keeps track of UID\n\nBug 20832981\n\nChange-Id: If5f3c61fae02d86b9d6fdf411711f854fd56c77d\n"
    },
    {
      "commit": "cc85abcf4ac398dca240db356b8b4db052b415a4",
      "tree": "65f9eccab6b0d9b9f3dcee48e2c44326b0edbef4",
      "parents": [
        "0bbf8b213ad96051357e3ad6d6d2808bfa31a59a",
        "73e26b661af50be2c0a4ff6c9ac85f7347a8b235"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 01 19:10:25 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 01 19:10:26 2015 +0000"
      },
      "message": "Merge \"AudioSystem: refactor audio config cache and callbacks\" into mnc-dev"
    },
    {
      "commit": "73e26b661af50be2c0a4ff6c9ac85f7347a8b235",
      "tree": "7290cb83e5f7df830447fe2badf99c43e0afc020",
      "parents": [
        "054d9d3dea1390294650ac704acb4aa0a0731217"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 27 16:55:58 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 01 11:45:07 2015 -0700"
      },
      "message": "AudioSystem: refactor audio config cache and callbacks\n\nClean up implementation of audio configuration cache and\ncallback events from AudioFlinger:\n\n- Define class AudioIoDescriptor for audio input and output\nconfigurations outside of AudioSystem class.\n- Do not use void * but an AudioIoDescriptor as argument to\naudio config callbacks from AudioFlinger.\n- Remove unused configuration events.\n- Move AudioSystem audio input and output cache from static singletons to\nmembers of AudioFlingerClient subclass.\n\nChange-Id: I67c196c32c09ce2756af0755ee1fe631040c3270\n"
    },
    {
      "commit": "850206ed9ebc6c663a957a656966bce2604dc170",
      "tree": "e7b0bdb5dee5a44524afc0f9c89e4bba878bfbb4",
      "parents": [
        "94ce218596a88cc6d37098cce4e17e68f7405603",
        "054d9d3dea1390294650ac704acb4aa0a0731217"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 01 01:03:59 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 01 01:03:59 2015 +0000"
      },
      "message": "Merge \"PatchPanel: do not use setParameters() internally.\" into mnc-dev"
    },
    {
      "commit": "be71aa29a3c86d2e01cd17839d2a72ab09a1bce5",
      "tree": "ca29cd10f78ff053761eb809c391019180836742",
      "parents": [
        "f62a067a5b21c840c915d36392679346ac0abfd7"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Apr 28 12:06:02 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Apr 29 19:06:41 2015 +0000"
      },
      "message": "Respect the record audio app op - media\n\nChange-Id: I3a97977b6e9a09355e2008f780d22d480fb7308b\n"
    },
    {
      "commit": "054d9d3dea1390294650ac704acb4aa0a0731217",
      "tree": "4d67c48a2cf367d661f1e33a6670cda052a569a3",
      "parents": [
        "f62a067a5b21c840c915d36392679346ac0abfd7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 24 08:48:48 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 28 19:05:19 2015 -0700"
      },
      "message": "PatchPanel: do not use setParameters() internally.\n\nDo not use setParameters() with AUDIO_PARAMETER_STREAM_ROUTING\nwhen communicating the input or output device selected to playback or\nrecord threads, even for HAL version less than 3.0.\nUse createAudioPatch()/releaseAudioPatch() instead.\nThis allows to send more information on the output or input device being\nselected.\n\nAlso fix a regression introduced in L where the output device selection\nwas not communicated to effects on record threads.\n\nChange-Id: I4780ada53241d56694b005c992171e173c3bf8f5\n"
    },
    {
      "commit": "6770c6faa3467c92eabc5ec9b23d60eb556a0d03",
      "tree": "45470127b227dbda5a346bb1902f92f8998c25bb",
      "parents": [
        "73c02e4277b399c2ec1555d32b6ad5df23bb83dc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 07 13:43:36 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 08 15:58:56 2015 -0700"
      },
      "message": "Enable 8 bit and float pcm record formats for AudioFlinger\n\nUpdate sampling rate handling as well.\n\nBug: 19570772\nChange-Id: I872248e64c0578b2e48869a68fee0d51bd0640c3\n"
    },
    {
      "commit": "062e67a26e0553dd142be622821f493df541f0c6",
      "tree": "125d28264adfc5b7bd993bb343569eea63bfb95d",
      "parents": [
        "21b51b61ee52e6aa74d98b138d3dd4f0e17b1441"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Feb 11 13:40:50 2015 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Mar 24 13:24:18 2015 -0700"
      },
      "message": "AudioFlinger: call SPDIF wrapper from AudioFlinger\n\nCreate an interface layer between the AudioFlinger and the HAL\nthat manages the wrapping and format conversion.\n\nRemoved unnecessary includes.\nHandle rate conversion in getRenderPosition().\nTry to open HAL with encoded format before wrapping with SPDIF.\n\nBug: 17566660\nChange-Id: I00ad888ca15ff0f85b85efb8167c7f5ea761a244\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "2f55e7632dfa0dafde58efd8cb2af6593217fd91",
      "tree": "98919a61809f20da6186d3e54537546604d7ff22",
      "parents": [
        "e7d6671c1ab1fea7ab1c4a9ebd1cd8f899c87628"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 05 16:05:08 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 06 09:22:51 2015 -0800"
      },
      "message": "Rename tee sink file name and add prefix to macros\n\nChange-Id: If316b9e32963d9baef8f4382fcc73dc6c4ff684d\n"
    },
    {
      "commit": "e7d6671c1ab1fea7ab1c4a9ebd1cd8f899c87628",
      "tree": "0d55fe4b6aa3009acd3f9253b42d19a3214ed029",
      "parents": [
        "0f5b562737d6b5457aa83a4fdce9c6fb32584d9d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 05 13:46:52 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 06 09:16:44 2015 -0800"
      },
      "message": "Rename formal parameter to match type name\n\nChange-Id: I0761005b751f5c4a4b28729b1820961ff3077afd\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": "3e91b5d11866599e8f33e63fb3b6c1d81ce1a1d2",
      "tree": "44923162a2e46fcd80271fb04975526081a34aac",
      "parents": [
        "ea78b1497eef36b6a3ba783be20615989e87ed08"
      ],
      "author": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Thu Feb 19 10:54:52 2015 -0800"
      },
      "committer": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Thu Feb 19 15:49:36 2015 -0800"
      },
      "message": "Fix for getMicMute in AudioFlinger\n\nPrevious logic will only check for mic state of Primary Hardware\nDevice. Current logic checks state of all devices with valid\nmicrophone input.\nThis is needed for audio_output feature support.\n\nbug: 19439530\nChange-Id: Ibbb92412ac70cf2915bbe8660c04fbaf0ab74171\n"
    },
    {
      "commit": "b187de1ada34a9023c05d020a4592686ba761278",
      "tree": "31dea84d078f6198ce17ca856fcbb76c402f37b6",
      "parents": [
        "64cbdee08a18b25448a5fb0b058d3b83d5630d7f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 30 08:18:15 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 30 08:18:15 2014 -0800"
      },
      "message": "Line length 100\n\nChange-Id: I6c8fe626a3825fa9e139319656d682a57b887c97\n"
    },
    {
      "commit": "a268a817fb9df2a266f06b58680fa4168517c8cd",
      "tree": "0a2d597a6d69559f7e81fcb3838d94b9a44238a2",
      "parents": [
        "a73d8dba2785771302dde66c369dc6cbae3b170b",
        "93118cd96233b682be95a3eb114d88d69c8cc416"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Dec 17 17:49:57 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Dec 17 17:49:57 2014 +0000"
      },
      "message": "am 93118cd9: am 99429b40: am 277c7b8c: Merge \"Fix permission check for audio recording\" into lmp-mr1-dev\n\n* commit \u002793118cd96233b682be95a3eb114d88d69c8cc416\u0027:\n  Fix permission check for audio recording\n"
    },
    {
      "commit": "93118cd96233b682be95a3eb114d88d69c8cc416",
      "tree": "64f81b51b6071954122e612e860d2ed106e48a93",
      "parents": [
        "3af7b7291bcd9b1b30dd11a8bedbdc63cc74b5a9",
        "99429b40411790b85e19c57392bbd292a237c470"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Dec 17 17:43:21 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Dec 17 17:43:21 2014 +0000"
      },
      "message": "am 99429b40: am 277c7b8c: Merge \"Fix permission check for audio recording\" into lmp-mr1-dev\n\n* commit \u002799429b40411790b85e19c57392bbd292a237c470\u0027:\n  Fix permission check for audio recording\n"
    },
    {
      "commit": "97bb33f58d742539f3382583d7978fca71ffa2d5",
      "tree": "be3e26027b66bfc605a45af032fb91de1bdb7c7a",
      "parents": [
        "6e430fbd927b9cc043639eb728ddc921392a60e8"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Dec 12 16:23:43 2014 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Dec 15 18:13:39 2014 -0800"
      },
      "message": "Fix permission check for audio recording\n\nDefine input types covering the different usecases for audio\n  recording, and check the corresponding permissions when\n  starting to record.\nMove the permission check from audio flinger to audio policy,\n  as only the policy has the information to determine which\n  permission to enforce.\nFix missing permission when an application records audio\n  and the audio is injected by an external policy.\n\nBug 18736417\n\nChange-Id: If7ec040502242c990ac8ea464db484339bdce573\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": "72215491c60fbcdb9a2f0be782e24e39cca249c5",
      "tree": "ac366bd0aad25d9575b19f77a75f23518a8810e8",
      "parents": [
        "fd2711ca8c9108d25f18b48b924afd925f41344a",
        "1a475921c0577a4650d1bbe40a85b732d1766939"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 26 12:01:49 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 26 12:01:49 2014 +0000"
      },
      "message": "am 1a475921: am 223fd5c9: audio: new routing strategies and stream types\n\n* commit \u00271a475921c0577a4650d1bbe40a85b732d1766939\u0027:\n  audio: new routing strategies and stream types\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": "77e79a509d19ab50b1867fe3903b5a8fae450591",
      "tree": "881d068bdc54d4835665e48649165f07393caafa",
      "parents": [
        "575174d62b665900203d70a4d410329b8918c2af",
        "e78a27ca9c701aa996eee0e47fa26dd69d80ffcf"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Nov 17 10:50:55 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Nov 17 10:50:55 2014 -0800"
      },
      "message": "resolved conflicts for merge of e78a27ca to lmp-mr1-dev-plus-aosp\n\nChange-Id: If10a9cc17245f95d5e10b1507445abbb4020670e\n"
    },
    {
      "commit": "f888020c6e2735624f2b2a30e72aca24e17b8b4d",
      "tree": "76d92b7a91a4bebd4e84d6afdc2ef4a2e4943df8",
      "parents": [
        "d02641098b16df2fd4cd32b72a30eb6f3b64e12b"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Nov 14 07:58:25 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Nov 17 10:05:07 2014 -0800"
      },
      "message": "Update calls to IInterface::asBinder()\n\nto use the new static version.\n\nChange-Id: Ia7b10eb38ca55b72278bfd33d3bf647f338b4e6a\n\nConflicts:\n\tmedia/libmedia/IAudioFlinger.cpp\n\tmedia/libmedia/IMediaPlayer.cpp\n\tmedia/libstagefright/CameraSource.cpp\n"
    },
    {
      "commit": "06b46062d2f8bc82ca3061a23d197734ae51918b",
      "tree": "3aee1330c3d65579643e50d105da35919ddc295f",
      "parents": [
        "e5a9eb684921b75919b1a7fee97259b0ca48bd47"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Nov 14 07:58:25 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Nov 14 14:01:03 2014 -0800"
      },
      "message": "Update calls to IInterface::asBinder()\n\nto use the new static version.\n\nChange-Id: I89a5988a0ac694ffc04d88cf939e8455bf925d4c\n"
    },
    {
      "commit": "298c4dc7e90cae4873d89098b777d1068a4e35ea",
      "tree": "7dcf27d59c46667f171e8bbeb5dccdbb536b515a",
      "parents": [
        "123a2deac738bc9c3a1cc35cd3dc7f8f91302c36",
        "d202ac37fc1f5f31e180af55cebd22810a80251b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 04 03:27:59 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 04 03:27:59 2014 +0000"
      },
      "message": "am d202ac37: am b7092547: Merge \"remove some restrictions on effect output channels\" into lmp-mr1-dev automerge: ed1e55c\n\n* commit \u0027d202ac37fc1f5f31e180af55cebd22810a80251b\u0027:\n  remove some restrictions on effect output channels\n"
    },
    {
      "commit": "b10352f4bc11ae6f3d93e464074709555ecf9e06",
      "tree": "52187ad264691c11e3d1efc541fe791568a33d69",
      "parents": [
        "b1322c78b035c9f47ebe57a39799d7a0e13bf57f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 03 16:25:39 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 03 16:25:39 2014 -0800"
      },
      "message": "remove some restrictions on effect output channels\n\nDo not prevent from attaching effects to a non stereo\noutput thread, unless the output thread is a mixer thread.\n\nBug: 18157592.\nChange-Id: I6ac3187187a1b8aade7db04ea6dfbc47dacc25c3\n"
    },
    {
      "commit": "2384b55ab31c49fb5babce058237c27ed28ed53e",
      "tree": "8a15e1aff54ab1831d925dd86d9ba33c9cdad223",
      "parents": [
        "9df2742a0dc6eb1e4aea2905487722dc60d537cf",
        "1f4b82a20d75b5aa8d7801d342ac3a9b48fa0863"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Oct 30 10:31:06 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 30 10:31:06 2014 +0000"
      },
      "message": "am 1f4b82a2: am b14e6dc8: Merge \"Always use an address for remote submix\" into lmp-mr1-dev automerge: 6e8212b\n\n* commit \u00271f4b82a20d75b5aa8d7801d342ac3a9b48fa0863\u0027:\n  Always use an address for remote submix\n"
    },
    {
      "commit": "fd4c14883b268a0bc5514da135fe6b7d1ce2071b",
      "tree": "29e4594fffdc70dc7d51a3abd7586a556df1e448",
      "parents": [
        "31551f8dd625b8d40961e141d2913b0073f852ab"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Aug 06 16:02:28 2014 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Oct 27 16:03:09 2014 -0700"
      },
      "message": "Always use an address for remote submix\n\nUsage of remote submix device for audio rerouting (e.g. wifi display)\n didn\u0027t mandate the use of addresses. Use \"0\" as the default address\n when none is specificed.\nIn logs, only use hex format for audio devices\n\nBug 16009464\n\nChange-Id: Ibfb1ce6881eba8b7e34420293b8a7077a6e659e6\n"
    },
    {
      "commit": "152f59b8cff44f74e6416cf309bfd85e0bb7e1db",
      "tree": "8f23d062d2d1afee174859127964ec99412dcc6b",
      "parents": [
        "7140a24c53dac18b7382723e2f89ab4caed220c6",
        "6efbadac3ff5c3ddc194faaba44f1fe63e452c7f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 22 18:20:35 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 22 18:20:35 2014 +0000"
      },
      "message": "am 6efbadac: am b6a89512: am 9d0d5958: Merge \"audioflinger: new HW A/V sync ID allocation flow\" into lmp-mr1-dev\n\n* commit \u00276efbadac3ff5c3ddc194faaba44f1fe63e452c7f\u0027:\n  audioflinger: new HW A/V sync ID allocation flow\n"
    },
    {
      "commit": "fa90e84ed0cb2abdc0e0873a06d10ccf2b3c34f6",
      "tree": "cfb0730e677246729f44e97465edfac2f0fb45ad",
      "parents": [
        "0cfc8f2500bb76d44ad45a723a570835aeff502b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 17 18:12:31 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 22 10:04:14 2014 -0700"
      },
      "message": "audioflinger: new HW A/V sync ID allocation flow\n\nThe HW A/V sync ID is now allocated by the audio HAL before the\noutput stream is created by a call to global get_parameters() with\nkey AUDIO_PARAMETER_HW_AV_SYNC.\n\nWhen the AudioTrack is created, the HW A/V sync ID is communicated\nto the output stream by stream set_parameters() with key\nAUDIO_PARAMETER_STREAM_HW_AV_SYNC.\n\nBug: 17112525.\nChange-Id: Ia8bc6f3bf9f358aa89f3f56ac554e893a19811ad\n"
    },
    {
      "commit": "d89eaddd1544dc9f6665e2578583e8083cac00da",
      "tree": "dc49e13b8a81d56fb33da80212d46a9a37d77d3e",
      "parents": [
        "55b2e0ea6dfa0da2a6fbac9ce2307977c27bc423"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Oct 07 13:28:44 2014 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Oct 08 20:12:45 2014 +0000"
      },
      "message": "Check for duplicate uuids when parsing audio_effects.conf\n\nuuids need to be unique, and things don\u0027t work properly when they\u0027re\nnot.\nAlso fix/enhance/extend the dumpEffectDescriptor() method, and\ninclude a list of effects in audioflinger dumpsys.\n\nChange-Id: I3dfbc5ed0f7272c7809e337f2929212ece047ee4\n"
    },
    {
      "commit": "1b92868010b5c1409692a86f6b27e4a265b64c1a",
      "tree": "aa514a65d23d1bebbceef49cc6b7f2662c7bad76",
      "parents": [
        "d8b03abf1d003e2940a19f0071ea2892689dd10e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 02 19:41:47 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 02 19:41:47 2014 -0700"
      },
      "message": "audioflinger: fix pre processing transfer between record threads.\n\nFix two problems remaining with pre processing effects transfer from\none record thread to the next in case of tear down due to device connection:\n1 - the enabled state of the effects was not communicated to the new HAL\ninput stream.\n2 - the effects saved in orphan chains list were not transfered to the\nnew thread when a AudioRecord was created.\n\nBug: 17757378.\nChange-Id: I0923c98470db3b51154dc89846157780a4c21e86\n"
    },
    {
      "commit": "cf7863ea8d9137aadf6bfd9756eb07ebd1c81b5c",
      "tree": "3030c350f57e8d813a19be08c77c3e53502433f3",
      "parents": [
        "c7b29572d22dff51b5432a7d211875d528406da6",
        "aaa44478a373232d8416657035a9020f9c7aa7c3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 15 18:36:48 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 15 18:36:49 2014 +0000"
      },
      "message": "Merge \"audioflinger: fix pre processing effect leak\" into lmp-dev"
    },
    {
      "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": "2f035f59d1e28728d38d18a7f0f7a9c6e8b0c11b",
      "tree": "790ddf009cc4207fd4faa14bf8aa1dc3a59775cf",
      "parents": [
        "f0b31e6333839972afb2e374f6d8824180d29fc2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Sep 14 12:11:52 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 15 09:10:36 2014 -0700"
      },
      "message": "audioflinger: send mic mute command to all audio HALs\n\nMic mute should be sent to all audio HALs, not\nonly the primary HAL as telephony can use\ncapture devices on other HALs (e.g USB)\n\nBug: 17321604.\nChange-Id: I658f6084d5b5cdc5a70784661d5cea0b6f81c3a9\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": "93c3d41bdb15e39dac0faea9c5b60f1637cd477c",
      "tree": "a0d739ad732f10bc9d4548923c78c590841b14da",
      "parents": [
        "92ce4715315bddd158c7d4028556632f0547e3b9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 01 14:48:35 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 06 00:38:23 2014 +0000"
      },
      "message": "AudioSystem: add API to query audio HW sync source\n\nAdd a method to query from the audio HAL the HW sync\nsource used for a given audio session.\nModify audio policy to select a direct output with HW sync\nwhen requested.\n\nBug: 16132368.\n\nChange-Id: I03038f9188f2d389f8a5fd76a671854013a4513e\n"
    },
    {
      "commit": "44622db93a24219123facbbe14259000f90de728",
      "tree": "e9d4700757e0546ec0f8e76330d1ff5d421374f5",
      "parents": [
        "678792e362c4cd70640934049491d9f21560c63b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 01 19:00:33 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 04 09:48:17 2014 -0700"
      },
      "message": "audio flinger: fix service fuzz test crash\n\nBug: 13744704.\nChange-Id: I572c89f88dcab2b8b612ec6860983306f9f159ab\n"
    },
    {
      "commit": "de3f8392fbf380ba6f09d009b00d7172477389a2",
      "tree": "77687cb28cf7dfb34ebb6317e246b3cad5672b86",
      "parents": [
        "03524dcc1215b2c468f5c8c8abe6f1c26239fd71"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 27 18:38:22 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 28 21:43:16 2014 +0000"
      },
      "message": "rename AudioSystem::newAudioSessionId()\n\nRename AudioSystem::newAudioSessionId() to\nAudioSystem::newAudioUniqueId() as it can be used\nalso for I/O handles.\n\nBug: 12378680.\nChange-Id: I611ea3b5eb57a4b0774437f477ee87dc4ccc2cc2\n"
    },
    {
      "commit": "cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bf",
      "tree": "26824707249d553efaabe2003381b4e9159e199d",
      "parents": [
        "97117153a0d681be70bfa9dc9876541375355c47"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 25 16:20:43 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 28 12:06:00 2014 -0700"
      },
      "message": "AudioFlinger: update openInput() and openOutput()\n\nAdd parameters to openInput() and openOutput(): device address,\ninput source.\nAllow caller to specify a given I/O handle\nGroup parameters in a struct audio_config.\n\nBug: 12378680.\nChange-Id: I7e9af74c0d996561cc13cbee7d9012d2daf33025\n"
    },
    {
      "commit": "9a59276fb465e492138e0576523b54079671e8f4",
      "tree": "e3e51544dc4e641cdfe0b38bfaac530167656eb8",
      "parents": [
        "e93b6b7347a7846c8fd746542364ec11b0cd5124"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jul 21 21:56:01 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jul 24 18:57:27 2014 -0700"
      },
      "message": "Add multichannel capability to AudioFlinger\n\nBut not enabled (kEnableExtendedChannels \u003d\u003d false).\n\nChange-Id: I62f7e31fbd29ad703a9a02f5d1a280b6972dd423\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": "ec40d284218466d8f0e832e7eb88e6ea6c479c88",
      "tree": "46ae774a4f3535d07374bed459b1dcf2bb9d8803",
      "parents": [
        "6e6704c06d61bc356e30c164081e5bcffb37920c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 15 15:31:26 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 17 12:13:07 2014 -0700"
      },
      "message": "Add audio_input_flags_t to IAudioFlinger::openInput\n\nFor backward compatibility, until flags are correctly calculated,\nwe will assume that the request is for a low latency input stream.\n\nChange-Id: I76746834e870df00833dc77cbdaa2edd2ffeec95\n"
    },
    {
      "commit": "da3bd9f12883f8344d2db00ce2fa47511ed9bef6",
      "tree": "a570ee165ca19b3fd27afd543eeca77fa1e8ba52",
      "parents": [
        "efebe3974d4ad5870f957b77450c26a499fc467e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 15 15:34:27 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 15 15:53:19 2014 -0700"
      },
      "message": "Add audio_input_flags_t to HAL open_input_stream\n\nFor backward compatibility, until flags are added to openInput(),\nwe will assume that the request is for a low latency input stream.\n\nChange-Id: I5e6f7e574418917ff1b41b0a47199203c69cb40f\n"
    },
    {
      "commit": "2829edccd7d2bb8244246f316face82b650b8949",
      "tree": "485dbd465bc203b2227c87fe582abeffd1ece08c",
      "parents": [
        "7bad72237b49ac47e77ffe2a89fd26f3d171324c"
      ],
      "author": {
        "name": "aarti jadhav-gaikwad",
        "email": "agaikwad@nvidia.com",
        "time": "Wed Jun 18 15:25:26 2014 +0530"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 11 09:53:16 2014 -0700"
      },
      "message": "stagefright: Pass audio aac sub formats in offloadinfo\n\nPass audio aac sub formats in offloadinfo according to\naac profile. Audio HAL can take decision about offload\nusing DSP capabilities\n\nChange-Id: If269a3654b5d2b09c183212b0646ef03e06f2d8f\n"
    },
    {
      "commit": "5c68f959eaa2e02fed5643c78e281fff42bcc0a2",
      "tree": "c2009db526d2f2d81713f149edf2bc7a7adf41b6",
      "parents": [
        "11fa4012f1c68083abfc21972f3f46da397d2c5c",
        "7df8c0b799d8f52d6386e03313286dbd7d5cdc7c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 07 13:27:01 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 02 20:11:01 2014 +0000"
      },
      "message": "Merge \"IAudioFlinger::openRecord now suggests notificationFrames\""
    },
    {
      "commit": "7df8c0b799d8f52d6386e03313286dbd7d5cdc7c",
      "tree": "e87404b99042b2c21ffcc0c34ac397ae14b4c2d4",
      "parents": [
        "7c6f87856c0880ee39c2107a0fc3c9b41f8c195c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 03 12:23:29 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 03 16:28:41 2014 -0700"
      },
      "message": "IAudioFlinger::openRecord now suggests notificationFrames\n\nChange-Id: I08885cc381d03c522a23289e74f0e1ed46563863\n"
    },
    {
      "commit": "5ba4440c11eb975ec0e104e0af1981838f42f57c",
      "tree": "d925693d3af7691ffdbc46fde146b7e13eb24285",
      "parents": [
        "0d3679e21146bfa497c38842c80ae1f9906a042a",
        "f947dbce4390f2c3c460325d37002a34f09c0b74"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 03 23:37:21 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 02 18:17:00 2014 +0000"
      },
      "message": "Merge \"Remove obsolete IAudioFlinger::channelCount()\""
    },
    {
      "commit": "6146c08f0c3dd8b9e5788063aa433f304a810602",
      "tree": "26c9854fb01a0f9a7f3daf31cbbed99105cc88c3",
      "parents": [
        "3a227969f604d7c6a24a795661a13f70a5f37e1f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 18 11:56:15 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jun 25 13:02:15 2014 -0700"
      },
      "message": "Add enabling variable for extended precision audio\n\nSet AudioFlinger::kEnableExtendedPrecision \u003d true to enable\nextended precision. Enabling will be required for devices (such as\nUSB) which report 24 bit or 32 bit sink formats.\n\nChange-Id: I0dc1d7a4f7607086d7b536ea0e43aef0e696f2ee\n"
    },
    {
      "commit": "4ea00a25cf85877b48ebd1e15a657cfaab29af58",
      "tree": "1f6d698e24a4907d269116d566488874c6a64089",
      "parents": [
        "43466a133984182b250453cea244eb146e83c010"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 02 08:29:22 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 02 11:29:42 2014 -0700"
      },
      "message": "Add mPrimaryOutputSampleRate\n\nChange-Id: I46b527fc3f2b5a5720a74b4f0b9a8f2e0d570b09\n"
    },
    {
      "commit": "f947dbce4390f2c3c460325d37002a34f09c0b74",
      "tree": "5b7de9d1922af62726c5a22dda8b0a4aedd0f75f",
      "parents": [
        "e28456465fca86ed1b8b2225de073cfba64c7c42"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Jun 01 14:25:11 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 02 09:07:34 2014 -0700"
      },
      "message": "Remove obsolete IAudioFlinger::channelCount()\n\nChange-Id: Ie623edae2e795f9155f1f452fe4e6c7217a4a4c8\n"
    },
    {
      "commit": "ecc03733bfd3262ffadef3166e6be23b539c505c",
      "tree": "af2005c71dee57f43f99ce4c8b32245f5b2fc458",
      "parents": [
        "5e49780692b4f23966be89ac32b19c3c1ead4e85",
        "1c333e252cbca3337c1bedbc57a005f3b7d23fdb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 28 15:37:58 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 28 15:37:58 2014 +0000"
      },
      "message": "Merge \"audioflinger: first patch panel implementation.\""
    },
    {
      "commit": "1c333e252cbca3337c1bedbc57a005f3b7d23fdb",
      "tree": "327f985a0db89dad8fc742baf5b198c3b78c429b",
      "parents": [
        "4b123406c10c17852734a1b691bb9ce2a4cb7caf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 20 10:48:17 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 27 10:53:51 2014 -0700"
      },
      "message": "audioflinger: first patch panel implementation.\n\nAdded a new PatchPanel subclass to AudioFlinger\nto handle audio ports and audio patches configuration\nand connection.\nThe first implementation does not add new functionnality.\nAudioPolicyManager uses patch panel interface to control\ndevice routing.\nAudioFlinger:\n- Added PatchPanel class. The first implementation does not\nadd new functionnality. PatchPanel handles routing commands\nfor audio HAL after 3.0 or converts to setParameters for audio\nHALs before 3.0.\n- Added config events to ThreadBase to control synchronized\naudio patch connection.\nAudioPolicyManager:\n- Use PatchPanel API to control device selection isntead of setParameters.\n- New base class AudioPort common to audio device descriptors\nand input output stream profiles. This class is RefBase and groups\nattributes common to audio ports.\n- Use same device selection flow for input as for outputs:\n getNewInputDevice -\u003e getDeviceForInptusiource -\u003e setInputDevice\n\nChange-Id: Idaa5a883b19a45816651c58cac697640dc717cd9\n"
    },
    {
      "commit": "fe1a94e68e173fe4dfe7699112422a94eddacb4e",
      "tree": "a9443f7cb6fb34bc5015cc26fd9257d5d559f7f9",
      "parents": [
        "c62476f0c0c1cf9283a38852bde0a4c9434df712"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 26 16:03:08 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 26 16:13:30 2014 -0700"
      },
      "message": "audioflinger: fix deadlock upon AudioRecord creation error\n\nAudioFlinger:openRecord() should not hold mClientLock when\nreleasing the local reference on AudioRecord as the destructor will\nalso lock mClientLock.\nSame fix for AudioFlinger::createTrack().\nAlso make sure that AudioFlinger::createEffect() holds mClientLock\nwhen clearing local reference to the Client in case of error.\n\nRegression introduced by 021cf9634ab09c0753a40b7c9ef4ba603be5c3da\n\nBug: 15118096.\nChange-Id: Ie961c398c8e0460bca9b95e2ee4ce6859316c275\n"
    },
    {
      "commit": "5806b3533437e3d83208e8e9d6bd74ed304e51ec",
      "tree": "cc9613e8ac7b52dac124f078497227881329de8e",
      "parents": [
        "ce8ae0f62a01cb3a390812db47bb08f29a8aee0d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 22 12:23:26 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 22 14:08:15 2014 -0700"
      },
      "message": "audioflinger: test min HAL version instead of current\n\nChange-Id: Ibce2353b4390329b4c1a453e829178e3986c25a7\n"
    },
    {
      "commit": "87cebadd48710e42474756fc3513df678de045ce",
      "tree": "6f8a07d9ec9b4ebad70367430190a689cb1a5db3",
      "parents": [
        "77a3374a6170fb5f0168169bc4bc3fa9baf318eb",
        "f285c91efbae23783fe94dc5ad19a2560e157685"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 10:14:43 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 10:14:43 2014 -0700"
      },
      "message": "resolved conflicts for merge of f285c91e to master\n\nChange-Id: I4c995e297d09c0854a42142cc57dce8b771acf65\n"
    },
    {
      "commit": "8b5f642eb2364ea7fe46a5b3af51b48b58f12183",
      "tree": "3804f0168793993d3558bcb33970904f45db8949",
      "parents": [
        "85e6e87c41bba51729cee8958a5c30157c8dc674"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 01:22:06 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 01:22:06 2014 -0700"
      },
      "message": "Move frameworks/av from fdprintf to POSIX dprintf.\n\nBug: 11156955\nChange-Id: Ia98cd16b4c1f7be87cf060b7456de4f40896bacb\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": "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": "26d5ff926fa3323b39ae4408bcd29826a9523c9b",
      "tree": "6abb6b28dfeffa2f5c602d350021dd8b4e6bd460",
      "parents": [
        "16821ec9e1619f4edcc87f21ea1537580109b14d",
        "1035194cee4fbd57e35ea15c56e66cd09b63d56e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 09 23:18:47 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 09 23:18:48 2014 +0000"
      },
      "message": "Merge \"audioflinger: refactor thread config events\""
    },
    {
      "commit": "1035194cee4fbd57e35ea15c56e66cd09b63d56e",
      "tree": "d443c6a41767ab240292494155885f65f88d7e76",
      "parents": [
        "d283f68057204fcde95e6c9ba79a59f27ae58fe3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 08 18:49:52 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 09 15:25:49 2014 -0700"
      },
      "message": "audioflinger: refactor thread config events\n\nMerge config events and set parameters messaging mechanism.\n- setting parameters now uses the config event mechanism\n- config event now allow to wait for a condition and synchronize caller\nbinder thread with execution thread and return an execution status.\n- simplify locking mechanism to avoid unlocking the thread\nmutex while processing events.\n\nChange-Id: Ia49cb3e617abec4bacb6c1f9a8cb304c4ed3902e\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": "c4b88a8d0f524666bf0f390075c334d047a104f2",
      "tree": "a2d45172a9d794b8b626ed9acadb656e346b2e9c",
      "parents": [
        "b53fc4ef8da47df8d5f580e8ee6135866ffebc33"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 30 16:54:30 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 02 11:52:56 2014 -0700"
      },
      "message": "Fix bug for direct track with PCM !\u003d 16-bit\n\nThe AUDIO_FORMAT_PCM_8_BIT format was being converted to\nAUDIO_FORMAT_PCM_16_BIT on client side even for direct tracks.\nThat conversion was incorrect; it should only be done for mixed tracks.\n\nAlso remove checks for specific PCM formats in the generic part of\nserver side of createTrack.  Those format checks should only be done by\nthe thread.  This will allow direct tracks for PCM 8-bit, PCM 24-bit, etc.\n\nChange-Id: If5b9fd79f8642ed93e2aeabcaf4809b2ed798978\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": "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": "1490d5142d8d485ea0d56a9974726fb6dff0a62d",
      "tree": "8f3e0673fd986949b0e307e401bbbb832bca0d3f",
      "parents": [
        "afe1ba72551d6bd6e3bee9b77fe7538201ab6193",
        "cf515ab0030cf5e0bef843638af7c989a8f6843a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 28 16:43:59 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 28 16:43:59 2014 +0000"
      },
      "message": "Merge \"Mark the logging heap read-only to media.log service\""
    },
    {
      "commit": "142f519aa1acd5804d111e60d100f170fed28405",
      "tree": "aaffc4a234a4b0a5e719374056edf12eb2333b29",
      "parents": [
        "ecdca392ed40e89a6ef14b86446e952c35497ac4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 17:44:59 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 14:56:54 2014 -0700"
      },
      "message": "Use symbol AUDIO_IO_HANDLE_NONE from \u003csystem/audio.h\u003e\n\nChange-Id: Id6b1aa17558eb73e17f22b8eab6cd02e00a96dff\n"
    },
    {
      "commit": "51beebba9d4989d05831a13bbe5cdf53ecac1bf5",
      "tree": "b2c6af1099ba3c20b8dd08d39f8dcf822303971a",
      "parents": [
        "b8f8d231685afdec472136b45c527a71bfb8bcc4",
        "45faf7e02791993a487d6e038d16ff46395f1975"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 21:14:17 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 26 21:14:17 2014 +0000"
      },
      "message": "Merge \"Use symbol AUDIO_DEVICE_NONE from \u003csystem/audio.h\u003e\""
    },
    {
      "commit": "73ec11738cd4399c55d4905665a14a7c4cd42cbf",
      "tree": "1105d7402857079f44e234ba1ab6ecfa8290a094",
      "parents": [
        "8c7b9fb41585fccb06573252823b929c82a40999",
        "9ea65d0f4a564478343b1a722fae4ce5883670c3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 20:56:04 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 26 20:56:04 2014 +0000"
      },
      "message": "Merge \"Fix uses of KeyedVector\""
    },
    {
      "commit": "45faf7e02791993a487d6e038d16ff46395f1975",
      "tree": "d54ff27f6fd42e670ddebfa993a00b5202fb7633",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 10:23:01 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 17:29:00 2014 -0700"
      },
      "message": "Use symbol AUDIO_DEVICE_NONE from \u003csystem/audio.h\u003e\n\nChange-Id: I61f882c5e7c949bf00d3bfc745ebf3b5e1c42a58\n"
    },
    {
      "commit": "9ea65d0f4a564478343b1a722fae4ce5883670c3",
      "tree": "7e23f994d376d45183eac141e914ddbfd126cdf5",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 10:21:24 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 16:13:00 2014 -0700"
      },
      "message": "Fix uses of KeyedVector\n\nConstructor for AudioFlinger::mAudioHwDevs was missing, and so\nAudioFlinger::findSuitableHwDev_l() could return an undefined pointer\nif a non-0 module wasn\u0027t found.\n\nA KeyedVector of Plain Old Data (POD) element type must specify the\ndefault value in the constructor, or else the default will be undefined.\n\nMinor:\n - Parameter had wrong type in constructor for AudioSystem::gOutputs.\n - Remove obsolete AudioSystem::gStreamOutputMap.\n\nChange-Id: I9841493e018440e559d8b8b0e4e748ba2b2d365b\n"
    },
    {
      "commit": "bcefec31bd1346133052356ffc8d7ac8a5b13fab",
      "tree": "4125808fe2bbae00a8bf93ba260688e2f7c11181",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 12:09:05 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 15:42:35 2014 -0700"
      },
      "message": "Document AudioFlinger::nextUniqueId()\n\nChange-Id: Iafe96f1c10bd85cb23a2553945ca68aa601dc2eb\n"
    },
    {
      "commit": "cf515ab0030cf5e0bef843638af7c989a8f6843a",
      "tree": "9bc764714f1daf1a8c4bb9222eddf3dedb3b0aa4",
      "parents": [
        "b5ea3014b8be9eaa16da0144bd81af6fa514d8e2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 16:01:58 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 18 16:01:50 2014 -0700"
      },
      "message": "Mark the logging heap read-only to media.log service\n\nChange-Id: Ie26a9e7e37c951774c71d2c53886db52dd5479aa\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": "570f633e0b02d1bc25f3312b92e72cc29a40ca38",
      "tree": "3f75613bffba57b64f3bb7abc2f467c13d3f2019",
      "parents": [
        "e848bd9abb3bbbd4c66f9fb9d1442f7663d7ba40"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:01:06 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:37 2014 -0700"
      },
      "message": "Make session ID code similar between output and capture\n\nChange-Id: I873a97d0e36e1a452421df4f749d51e1916797a5\n"
    },
    {
      "commit": "e848bd9abb3bbbd4c66f9fb9d1442f7663d7ba40",
      "tree": "0d1142dca373dbc7d53b5c922ef7ad5f1fa41f05",
      "parents": [
        "c5a17425986b4ce3384e6956762c86018b49c4a0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:00:32 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:37 2014 -0700"
      },
      "message": "Move declarations to where needed\n\nAlso remove unnecessary ALOGV and dead variable inFrameCount\n\nChange-Id: I34547fb0fd2ff142fc60277bedfa4064e7356611\n"
    },
    {
      "commit": "c5a17425986b4ce3384e6956762c86018b49c4a0",
      "tree": "313484677c719c944bc7923b0c3766cba3bef5c6",
      "parents": [
        "c3df838434b37d8400eea2438083cc01a4c1cc71"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 14:59:59 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:36 2014 -0700"
      },
      "message": "Remove name output parameter from createTrack\n\nIt was only used for one log.\nA better solution will be a per-track unique ID.\n\nChange-Id: Ia440e02ae4a5a4019a9a2d08970e1ee93ac4c3a3\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": "0e0e846f3d86906ff990025981e514d6bcf44d8e",
      "tree": "f3293f7c07b80af8cb952b6aa9187e61943d7d4d",
      "parents": [
        "758799cef41fc5495f59eeb6249d02ce9154cde8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:02:40 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:17 2014 -0700"
      },
      "message": "Prepare for additional capture formats\n\nChange-Id: Ib10b004f0029191b33a97671e41b0d86ebfbe0b9\n"
    },
    {
      "commit": "6cbccee701e74fa43a5ea49c15af7dd3267b6699",
      "tree": "90fa3e762bead3f0dca419b14ee992100ba4c454",
      "parents": [
        "525b099ada155d6654300cb2e5d8c1a09f4eb8ba"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Fri Dec 13 15:40:13 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Mar 06 10:44:13 2014 -0800"
      },
      "message": "audioflinger: Fix for a deadlock in track creation\n\nAudioFlinger enters a deadlock (with itself) on trying to free a\nRecordTrack or Track object that failed initialization. Clear this\nbad object from the caller instead.\n\nBug: 12423233\nChange-Id: I926f2beb922a70f6924e593e2bbf1a5b5df85b16\n"
    },
    {
      "commit": "d2304db2fcb5112292105a0949a55986a4c9875f",
      "tree": "fe2723acf4c0eebcc39443769ab8b48840ddb48e",
      "parents": [
        "33ca5cf8826f5fcd9c011e8d336138b62d982f2a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 03 07:40:31 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 28 12:06:05 2014 -0800"
      },
      "message": "Rename setStreamOutput to invalidateStream\n\nAnd simplify by removing the unused I/O handle parameter \u0027output\u0027.\n\nChange-Id: Ie9c4df17a7378066312d4ed8790fda7a9125c95e\n"
    },
    {
      "commit": "53b5d098b7d5d4412b9b9fe08daaf84c56b716e9",
      "tree": "ca7d7dd39481b7d2651495587fbdbf1c1f0e087a",
      "parents": [
        "3d2e09f0221693de08129edd02adf340a44e7a38"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 05 10:00:23 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 27 13:25:35 2014 -0800"
      },
      "message": "Move up AudioFlinger::createTrack and openRecord parameter checks\n\nPerform the basic sample rate, format, and channel masks tests as\nearly as possible.  Now the thread methods only need to do the thread\ntype-specific checks.\n\nChange-Id: I57d8319a228dda0446ca9b3ddcb7c9f67f28238c\n"
    },
    {
      "commit": "d0e0cfa58a35508c14818b88804845194b5d80e1",
      "tree": "c3e8e508c286de28d506fe80285ecde1f992d829",
      "parents": [
        "3a005b3b19b750afe24577ae322aff4602ca2740",
        "f66b42242342017c26eb97de544dae31dd2537ca"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 21 23:13:58 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 21 23:13:58 2014 +0000"
      },
      "message": "Merge \"Make tee sink work again\""
    },
    {
      "commit": "f66b42242342017c26eb97de544dae31dd2537ca",
      "tree": "b993ea0b4b7726176de097093f3311037d1f66b8",
      "parents": [
        "56df9ff31d583ad3eae4f279a3df550273c58e1e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 20 10:23:28 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 21 10:19:25 2014 -0800"
      },
      "message": "Make tee sink work again\n\nIt was broken by this earlier change to NBAIO:\n  \u003e Change-Id: I5eda412648b094358f5eefc38300e9ec8a734cd3\nBut the code was not being compiled, so the error was not caught earlier.\n\nAlso increase the default size of per-track pipe to a reasonable value.\n\nChange-Id: Ica05017e6c6533e1fea9df379a9b204eebed4a1f\n"
    },
    {
      "commit": "8ea16e4b0a7d398d26887c18675b3899de5d779d",
      "tree": "7bb7efa2106401a375cfe8874b6f4bb03dfdfb28",
      "parents": [
        "56df9ff31d583ad3eae4f279a3df550273c58e1e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 20 16:26:11 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 20 16:26:11 2014 -0800"
      },
      "message": "audioflinger: fix race condition in SyncEvent callback\n\nNow that the SyncEvent callback is implemented by the\nRecordTrack instead of the RecordThread, there is a possibility\nthat the callback is called after the track deletion.\n\nSyncEvent callback now uses a weak pointer instead of\na raw pointer as cookie. This allows the callback implementer to\nacquire a strong reference on the object pointed to by the cookie.\n\nBug: 13114128.\nChange-Id: Id61b8f06044ed1e52c6f7e7c666cdede68340de2\n"
    },
    {
      "commit": "4cc0a6a835c806d200ef83ef31fe5bef327c355c",
      "tree": "2ad9fe27444e838f08acbae31d54cf4d1739b4a5",
      "parents": [
        "25f4aa83efaa9179e65a20583a6d441de2c3ff3f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 17 14:31:46 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:57:27 2014 -0800"
      },
      "message": "Multi-client recording continued\n\nRemove mReqChannelCount and mReqSampleRate.\nIncrease number of input frames needed for sample rate converter.\nAdd TODO comments to investigate later.\nFix bugs in sample rate conversion.\n\nChange-Id: I3aa54b862843d518b6e4ece9a7f52fd27d741629\n"
    },
    {
      "commit": "d457c970c8d08519cd77280a90b61ae1e342cfe3",
      "tree": "f0f409db4d834b4d70b2244dd97dfa707496df50",
      "parents": [
        "1d6fa7af1288b550faabe4ec2cf98684236723db"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 11 08:47:07 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 11 12:39:43 2014 -0800"
      },
      "message": "Track pid for each session\n\nso they can be properly freed.\n\nChange-Id: I6f389035bc29e74e7c367c1c6d0252b180f666b3\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": "ec95f0e82a680931e9c7c9011dbbd68d5ab484c8",
      "tree": "f3d3a5d02b466a58454a53a034375a02e0ffe1c3",
      "parents": [
        "8497416c40bae877bc67b0ef30bb41a73af54711",
        "cac3daa6332bf6d1f7d26adc4a9915f3d7992dd9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 10 16:07:14 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 10 16:07:15 2014 +0000"
      },
      "message": "Merge \"Use printf format %#x for audio_format_t in logs\""
    },
    {
      "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": "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\""
    },
    {
      "commit": "cac3daa6332bf6d1f7d26adc4a9915f3d7992dd9",
      "tree": "806b4634036e26630acbed0f0dac907bec5ca7b5",
      "parents": [
        "010c4c8ec50eb04ece15f792c508a3b869749310"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 09:47:14 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 09:52:20 2014 -0800"
      },
      "message": "Use printf format %#x for audio_format_t in logs\n\nChange-Id: I1c611d1037685d52ccc84efe0fccd6413ec938e9\n"
    },
    {
      "commit": "7332c37c459f5f382a9e4105d522d1c5a7f6f0b5",
      "tree": "93b9c7de8edcbc21462b25fb8a443cbc366ede93",
      "parents": [
        "2a16afb8dc056877f34124ba5befe75171de930f",
        "03e9e83c47ab4a518da0a1f36b8f702f59221c95"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 05 00:05:44 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 05 00:05:44 2014 +0000"
      },
      "message": "Merge \"audioflinger: Fix for a deadlock in track creation\""
    },
    {
      "commit": "6e0d67d7b496ce17c0970a4ffd3a6f808860949c",
      "tree": "e9d0c68908bcbbcb3eb5ef28b2b2c0db5488fa39",
      "parents": [
        "cc1e0e807ee9a9f163a4685cbd6efd6ae55849cf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 31 09:41:08 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 03 17:10:57 2014 -0800"
      },
      "message": "Use Format_isValid() and Format_isEqual() instead of direct comparison\n\nChange-Id: Ie87607aa514976947540a77775e6425c4e56e7d9\n"
    }
  ],
  "next": "0f11b51a57bc9062c4fe8af73747319cedabc5d6"
}
