)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "0f11b51a57bc9062c4fe8af73747319cedabc5d6",
      "tree": "3a9156d700b18a53f856ac8ae51a44604af36fe1",
      "parents": [
        "0520e05f9083cf13fa7062629bc6606f4b39f08a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 31 16:18:54 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 03 07:48:43 2014 -0800"
      },
      "message": "Fix unused parameter warnings in audio\n\nChange-Id: I665ba3358dd9502f0adec70d486e7bf8a2e1b0fe\n"
    },
    {
      "commit": "03e9e83c47ab4a518da0a1f36b8f702f59221c95",
      "tree": "6a30fab83e374a28995a02112856be02defbeb7a",
      "parents": [
        "9be49c915852b592a881be3905658e4fc698749d"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Fri Dec 13 15:40:13 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 30 09:21:12 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": "f0002d142e6d24c5438600b2c259679de710f8ac",
      "tree": "20e5013fa14f2d5339868c1b08396f7b852a2123",
      "parents": [
        "c69b91ceae6255e41c5413796fb0ed4f7af45b15",
        "74935e44734c1ec235c2b6677db3e0dbefa5ddb8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 24 16:13:50 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 24 16:13:51 2014 +0000"
      },
      "message": "Merge \"Replace control block frameCount_ by explicit in/out parameter\""
    },
    {
      "commit": "0ce5ca5e113d58cbcb7cb48615d6dbbf3fbe7c66",
      "tree": "b5f59ae15e5f5ea59a171f7677e2a8403361f80a",
      "parents": [
        "d0b33f63a9364364a827e77da26b112edf3c4d6e",
        "0cde076ddb283c84c3801a2df4cc3df99bd1577f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 19:15:57 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 17 19:15:57 2014 +0000"
      },
      "message": "Merge \"Cleanup createTrack error handling\""
    },
    {
      "commit": "0cde076ddb283c84c3801a2df4cc3df99bd1577f",
      "tree": "9f1d49f9fc52a5cedea8e0bd14555a70ab5772b0",
      "parents": [
        "a238b9b43a2b8dac60e0fd8700daa6cd4f644547"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 15:06:36 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 17:01:04 2014 -0800"
      },
      "message": "Cleanup createTrack error handling\n\nSimilar to cleanup done earlier for openRecord in this CL:\n    \u003e Change-Id: I84897dd7d30b370640b54e928f230604b873cb68\n\nBug: 10888816\nChange-Id: I804a47f898e0319a60a9bd58906bbb037e45cc25\n"
    },
    {
      "commit": "5f972c031d4061f4f037c9fda1ea4bd9b6a756cd",
      "tree": "f70d82aa480a0cbe854395362aba76fbb58315dc",
      "parents": [
        "5b27ccd67c845aa20a12a1fb58339e7e81e3d536"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 09:59:31 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 14 18:12:46 2014 -0800"
      },
      "message": "AudioRecord::getInputFramesLost() cleanup\n\nFixed bug that if the binder call failed (for example if the\nIAudioFlinger binder is dead), then getInputFramesLost was returning\ngarbage.  Now it correctly returns zero, which is the error value for\nthis method.\n\nThe type declarations for getInputFramesLost were inconsistent:\na mixture of unsigned int, size_t, and uint32_t.  Now it returns uint32_t\neverywhere, which is what the underlying HAL API returns.\n\nAdded a FIXME about the side effect behavior.  This will need review\nfor multi-client.\n\nChange-Id: Ifa2e117a87dbd0c1f2c892a31d1c3dd919bf1a0a\n"
    },
    {
      "commit": "aea7ea06394bcb155972d82055d4ea59962e4051",
      "tree": "dd806ad4f77dc62e4fbd0b88022ee5b8b2403802",
      "parents": [
        "bd72d22097f78f5bd668b223bc8c94e351311e31"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 09:25:47 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 20 12:30:29 2013 -0800"
      },
      "message": "Use AUDIO_SESSION_ALLOCATE instead of 0\n\nAlso fix a couple of places where we were using AUDIO_SESSION_OUTPUT_MIX,\nwhich happens to also be equal to 0, but has a different meaning.\n\nChange-Id: I90e39be3b89f5021a96d9e3b8d10929013ca977f\n"
    },
    {
      "commit": "74935e44734c1ec235c2b6677db3e0dbefa5ddb8",
      "tree": "dc7bc2c9f496097e95ff36440fcd79886517ba53",
      "parents": [
        "bd72d22097f78f5bd668b223bc8c94e351311e31"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 19 08:56:45 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 20 08:40:55 2013 -0800"
      },
      "message": "Replace control block frameCount_ by explicit in/out parameter\n\nin IAudioFlinger::createTrack and IAudioFlinger::openRecord\n\nChange-Id: I09c644c80e92c8e744b1b99055988a2588b2a83d\n"
    },
    {
      "commit": "481fb67a595f23c5b7f5be84b06db9b84a41a42f",
      "tree": "095712959d22a6fdfaa101c262ccad183576cb6d",
      "parents": [
        "84acd489b93e04bea7aab06d8abb024eef2576fd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 30 14:39:28 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 05 13:47:07 2013 -0800"
      },
      "message": "Add RecordThread media.log and deferred deallocation\n\nThis change allows a media.log buffer for RecordThread.\n\nUnlike playback threads which stick around forever, the RecordThread comes\nand goes for every capture session.  This means that the media.log buffer\nfor a RecordThread would disappear too, and so was useless.  Now when a\nthread exits, it\u0027s associated media.log buffer is just marked for deferred\ndeallocation.  It is only actually freed when the memory is needed.\n\nOther changes:\n - Fix bug in unregistering comparison, it was comparing the wrong pointers\n - Increased size of log area so we can log for RecordThread also\n\nChange-Id: If45d4c03a793b86390a0112ec3acc5d41b2e3635\n"
    },
    {
      "commit": "663c2247b71086e30bfd3192979d1dd7f15c539e",
      "tree": "caedda5629d70de2fcab7506a81852e6c62ea473",
      "parents": [
        "30ff92cba19c5acd747631365db1e1084e45ab34"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 11:52:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 14:17:01 2013 -0800"
      },
      "message": "Consistent error checking for sp\u003cIMemory\u003e and pointer()\n\nThere have been concerns that an sp\u003cIMemory\u003e could be non-0, but the\nassociated pointer() still be NULL.  There are rumors this may happen\nwhen a non-0 sp\u003cIMemory\u003e is passed in by client but the shared memory cannot\nbe re-mapped into mediaserver.\n\nThere\u0027s also evidence in the early (2009/03/03) pre-git code of checking\npointer() for NULL, after a local allocate() returned a non-0 sp\u003cIMemory\u003e.\nIt\u0027s not clear if this is \"cargo cult\" paranoia, or if there was a\ngenuine reason for the check.\n\nIn any case, we now consistently check pointer() for sp\u003cIMemory\u003e\ninput parameters in createTrack() and queueTimedBuffer().\n\nWe also check after successful allocate().  If allocate() returns a\nnon-0 sp\u003c\u003e but NULL pointer(), then treat it as if the allocate() had\nreturned 0.\n\nChange-Id: I3013ac5766b493d443ecef71711ec861076a623e\n"
    },
    {
      "commit": "8594843c15b4722ced39436fe9e64f3e57e7ace4",
      "tree": "9d8e4dcf8cf31ee119abe0872223a416e6418ec0",
      "parents": [
        "d8a1de6204829b0379bbd13042f1450bdb203f2b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 12:09:05 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 08 11:55:36 2013 -0800"
      },
      "message": "Pull HAL reads out of RecordThread resample\n\nPreviously, the resample was indirectly calling HAL read\nfrom within the BufferProvider\u0027s getNextBuffer.  Now the HAL\nread is done ahead of time into a circular buffer,\nand the getNextBuffer just reads out of that memory.\n\nThis change will permit some future planned features.\n\nAlso removed the mono to mono resampling optimization,\nas that optimization will no longer be valid in the future.\n\nChange-Id: I59f5016a2df91078d697c37a7dec2d9d9f44542e\n"
    },
    {
      "commit": "1fc6cb5be26734938b3999e6bf4ce0e625e7d284",
      "tree": "ceca20e265134ebd5158b56d9341301ffd4242cc",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d",
        "ce275b7dd20e3d4781a46126c753e6eb998e6c0f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Oct 29 18:20:38 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 29 18:20:38 2013 -0700"
      },
      "message": "am ce275b7d: am 1c594b63: Merge \"audioflinger: enable effects after registration if needed\" into klp-dev\n\n* commit \u0027ce275b7dd20e3d4781a46126c753e6eb998e6c0f\u0027:\n  audioflinger: enable effects after registration if needed\n"
    },
    {
      "commit": "1c594b637df26499ce1dae2db34f2b3290efd838",
      "tree": "0d231e939a18d3f28f1e19658a7b7ed2e61ed1fb",
      "parents": [
        "fd4779740ec3e9e865d5514464df26d015354388",
        "d72b7c0180ee83fc3754629ed68fc5887a125c4c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 30 01:13:52 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Oct 30 01:13:52 2013 +0000"
      },
      "message": "Merge \"audioflinger: enable effects after registration if needed\" into klp-dev"
    },
    {
      "commit": "9cae217050aa1347d4ac5053c305754879e3f97f",
      "tree": "dff82f277cba8f34af39eaeeb00adec01bbda26c",
      "parents": [
        "be567be3f92026f5964c1c9ecce00e30bb7df412"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 14 14:12:05 2013 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 14:06:03 2013 -0700"
      },
      "message": "Assign blame for playback wakelocks.\n\nSet a work source for the playback wakelock, so that playback is\ncounted against the requesting app instead of the media server.\n\nCherrypicked from master.\n\nb/9464621\n\nChange-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31\n"
    },
    {
      "commit": "462fd2fa9eef642b0574aa7409de0bde3fec8d43",
      "tree": "65446a138d197f062bf199480b96cca4df560fcf",
      "parents": [
        "f7d89bd79d170be3b299717ac11aff62909314c5"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 14 14:12:05 2013 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 11:13:17 2013 -0700"
      },
      "message": "Assign blame for playback wakelocks.\n\nSet a work source for the playback wakelock, so that playback is\ncounted against the requesting app instead of the media server.\n\nChange-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31\n"
    },
    {
      "commit": "d72b7c0180ee83fc3754629ed68fc5887a125c4c",
      "tree": "9c6bef31eaca96d7420a65fcdd2438666c5668dd",
      "parents": [
        "15ad2470b2f2ac34473eb568b606ad75e8e63ac6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Oct 12 16:17:46 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Oct 12 16:37:00 2013 -0700"
      },
      "message": "audioflinger: enable effects after registration if needed\n\nThis fixes a bug where effects were not properly reenabled after\nbeing moved from one playback thread to another. The effect\nis enabled but the audio policy manager sees it as disabled.\n\nBug: 11181933.\nChange-Id: I19cac7acbaf61c546e667fd85ed7d4eda1c716d8\n"
    },
    {
      "commit": "35295078ab59c8c5d143a54d5a55557c3ca62c51",
      "tree": "ebe936c19f0de4024fa1982fcd286a803bc3b951",
      "parents": [
        "61f58c0c8d02970ea6d94ff816c54bf606f755b7",
        "9a7d11f07dc19327892915f0bfecce758d2f4098"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 07 09:27:06 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 07 09:31:15 2013 -0700"
      },
      "message": "resolved conflicts for merge of 9a7d11f0 to master\n\nChange-Id: Ie4d101185a93d37ec280f608813ad62a077a584e\n"
    },
    {
      "commit": "fee4ce338d78eeb58af1f66831ead53322d3859e",
      "tree": "f90931a7c5c4628b0e8e47976d68a9d586802b53",
      "parents": [
        "ea0fadeb5d81ef3cb7f9db458c9033d628bdb86a",
        "e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 07 16:16:06 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 07 16:16:06 2013 +0000"
      },
      "message": "Merge \"Cleanup openRecord error handling\" into klp-dev"
    },
    {
      "commit": "62dbe93f7743061e97fc3299386a2f887ca748cf",
      "tree": "178fc59b511fbcb940276a0b1470adffbf6012b8",
      "parents": [
        "34a8e85cbf5fc713af3bed9eb08212b477f4b03e",
        "4e141a4f1303767f70ea983925ec01b034fe667b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 25 13:10:30 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 25 13:10:30 2013 -0700"
      },
      "message": "am 4e141a4f: am 1802399c: Merge \"fix deadlock in audioflinger::createEffect()\" into klp-dev\n\n* commit \u00274e141a4f1303767f70ea983925ec01b034fe667b\u0027:\n  fix deadlock in audioflinger::createEffect()\n"
    },
    {
      "commit": "eb3c337a3d6c74ec857dfc8be7eeafe634614bcd",
      "tree": "7ade01c31e70ffeadf88fc60b2144faa47f9c49f",
      "parents": [
        "d2ac3144e201398340cc5b9bb36e5efe39edd9eb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 25 12:25:29 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 25 12:44:00 2013 -0700"
      },
      "message": "fix deadlock in audioflinger::createEffect()\n\ncommit 5baf2af5 introduced a regression by calling\ngetOutputForEffect() with AudioFLinger main mutex locked.\nThe locking order must always be AudioPolicyService mutex then\nAudioFlinger then ThreadBase mutex.\n\nBug: 10916796.\nChange-Id: Ide34a2d84dbb06dbb35abd0640d91b01b0ac4d40\n"
    },
    {
      "commit": "e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f",
      "tree": "4de6f04ad4abc14bb0e777bcb02863196c59e34b",
      "parents": [
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 11:52:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 12:12:47 2013 -0700"
      },
      "message": "Cleanup openRecord error handling\n\nBug: 10888816\nChange-Id: I84897dd7d30b370640b54e928f230604b873cb68\n"
    },
    {
      "commit": "d7e076589dc5298d7a78cb683159723b7eb08d7f",
      "tree": "0cfcb461203a0ba4261dbf21b8ef1343ded37836",
      "parents": [
        "dc8cae8c118e4aef4ef1f7b2c6f79becc1df4a05",
        "87fb4f30077e7bcf78e65cf25fe95bd58238bad1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 19 08:34:52 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 19 08:34:52 2013 -0700"
      },
      "message": "am 87fb4f30: am d1b28d41: audioflniger: fix leaked audiosession references\n\n* commit \u002787fb4f30077e7bcf78e65cf25fe95bd58238bad1\u0027:\n  audioflniger: fix leaked audiosession references\n"
    },
    {
      "commit": "d1b28d41dbda203ffb420ba2e36cbe736b163ff8",
      "tree": "8515326721a76081b458cce1329e13b7252d2fbe",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 18 18:47:13 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 18 19:00:22 2013 -0700"
      },
      "message": "audioflniger: fix leaked audiosession references\n\nacquireAudioSessionId() should not create session references\nif the caller is not listed in the known notification clients.\nIt happens when the MediaPlayer or AudioTrack is created by the\nmediaserver on behalf of a client (e.g CameraService). In this case\nreleaseAudioSessionId() can be called from a different pid and\nthe session reference will not be removed.\nAlso we will not be able to remove the reference if the client\nprocess dies.\n\nBug: 10606426.\nChange-Id: Ibb5e27518daeb484a2e66302e4c6221cbaca5b70\n"
    },
    {
      "commit": "dc8cae8c118e4aef4ef1f7b2c6f79becc1df4a05",
      "tree": "ea0f76bad13db737ca85146367304b3397a111a3",
      "parents": [
        "b81332964f2f3fb83f056b539a4eeea245bb7999",
        "bf5e23979a03da96ce1d63126c480103232f174b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 18 14:26:49 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 18 14:26:49 2013 -0700"
      },
      "message": "am bf5e2397: am 5baf2af5: more support for audio effect offload\n\n* commit \u0027bf5e23979a03da96ce1d63126c480103232f174b\u0027:\n  more support for audio effect offload\n"
    },
    {
      "commit": "5baf2af52cd186633b7173196c1e4a4cd3435f22",
      "tree": "9c6752456812c4a927574a71e1d2ec2495ff6ce3",
      "parents": [
        "9a98b6de791aeb130192df10744f5b35f8b6ef1a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 12 17:37:00 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 18 11:52:40 2013 -0700"
      },
      "message": "more support for audio effect offload\n\nOffloading of audio effects is now enabled for offloaded\noutput threads. If an effect not supporting offload is enabled,\nthe AudioTrack is invalidated so that it can be recreated in PCM\nmode.\n\nFix some issues in effect proxy related to handling of effect\ncommands to offloaded and non offloaded effects.\n\nAlso fixed a bug on capture index in software Visualizer effect.\n\nBug: 8174034.\n\nChange-Id: Ib23d3c2d5a652361b0aaec7faee09102f2b18fce\n"
    },
    {
      "commit": "8136cfae9c22ae8ff42eec9ed751833dda605444",
      "tree": "b6e71058c48bcdd37046ddfa60e3da80b5cc1015",
      "parents": [
        "a041f2fce87fa7a0926365d8e8fbc66019ac0661",
        "8a910716892d17a2ac62c7e9884af0e9d75b26bc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 09 14:29:08 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 09 14:29:08 2013 -0700"
      },
      "message": "am 8a910716: am 6ca83fad: Merge \"audioflinger: no effects on offloaded tracks\" into klp-dev\n\n* commit \u00278a910716892d17a2ac62c7e9884af0e9d75b26bc\u0027:\n  audioflinger: no effects on offloaded tracks\n"
    },
    {
      "commit": "813e2a74853bde19e37d878c596a044b3f299efc",
      "tree": "b95aa8b59f49b4348b2112047ee80e572637d706",
      "parents": [
        "84b7fb0c88ddd05ed7c148c82fe1691040a9404d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Aug 31 12:59:48 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 09 09:09:21 2013 -0700"
      },
      "message": "audioflinger: no effects on offloaded tracks\n\nInvalidate offloaded tracks when an effect is enabled\nso that the track is recreated in PCM mode and the effect\ncan be applied.\nThis is temporary until effect offloading is implemented.\n\nBug: 8174034.\n\nChange-Id: I77b8b54a10db6cb8334be76d863ea7e720eaad09\n"
    },
    {
      "commit": "61bd7a0281ffecb99b27bff63334c559df7357e6",
      "tree": "7dabc579d3c5bcc03136fdffb50970321eef0e8e",
      "parents": [
        "ca50e46baee42120a631b67243f7c3acb911e307",
        "0541b3bb40fa23e97e0a4599463b6afc0e271939"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Aug 19 17:08:09 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Aug 19 17:08:09 2013 -0700"
      },
      "message": "am 0541b3bb: am c8b226f4: Merge \"Enforce permission for recording from remote submix.\" into klp-dev\n\n* commit \u00270541b3bb40fa23e97e0a4599463b6afc0e271939\u0027:\n  Enforce permission for recording from remote submix.\n"
    },
    {
      "commit": "893a5642871114fca3b2a00c6ff8e5699ce3e3ed",
      "tree": "d34721dfd133e8a79a4ff32ee8e8d2d83ef24031",
      "parents": [
        "7fb865653293e665f48b31e791ca124e98c7d257"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 16 20:19:26 2013 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 16 20:21:07 2013 -0700"
      },
      "message": "Enforce permission for recording from remote submix.\n\nBug: 10265163\nChange-Id: I2395036bac6e10baeaf6ea4bc3093bd9dd98742d\n"
    },
    {
      "commit": "3255095af6677caeeebf81c8891ce8db745617ff",
      "tree": "376e23fcb3425e63b984cbfa6e7b8939c0b040b6",
      "parents": [
        "6e2ebe97f2ad0a21907f20f9ee644c4eacbb7a40"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 10:45:10 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:56:00 2013 -0700"
      },
      "message": "Move local variable declarations to point of first use\n\nChange-Id: Ia0fc4b099a3cf8bb5b67b287e7687e9dc9691e0e\n"
    },
    {
      "commit": "6e2ebe97f2ad0a21907f20f9ee644c4eacbb7a40",
      "tree": "ea9d525f25620253ea86f434452bc37fbad73f76",
      "parents": [
        "e198c360d5e75a9b2097844c495c10902e7e8500"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:14:51 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:55:59 2013 -0700"
      },
      "message": "Use curly braces in \u0027if\u0027 to make it easier to add logs\n\nChange-Id: I58b33fefdd8bf703647414157a99a3223be3531c\n"
    },
    {
      "commit": "e198c360d5e75a9b2097844c495c10902e7e8500",
      "tree": "be6884fcddb31fb8feda454e38b00053ccac7bf1",
      "parents": [
        "2fc14730e4697a6f456b4631549c9981f6b0b115"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:13:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:55:52 2013 -0700"
      },
      "message": "Whitespace\n\nChange-Id: Id3ccc183a03421330d0498faaa62a45915cdc3d6\n"
    },
    {
      "commit": "2fc14730e4697a6f456b4631549c9981f6b0b115",
      "tree": "0f48a06513b295104f8c085a971fcbdf3feca1fe",
      "parents": [
        "c0029a8551d65929cbf51a55bd3bae3342a1f2fe"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 14:58:14 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 09:24:18 2013 -0700"
      },
      "message": "Comments\n\nChange-Id: I56f82904cb3855bad6f33ad1ff4ddf66a61c5720\n"
    },
    {
      "commit": "030033342a6ea17003e6af38a56c7edc6d2ead01",
      "tree": "342168125e3c97f01af88dfe133f99c7f71d7e3d",
      "parents": [
        "9156ef3e11b68cc4b6d3cea77f1f63673855a6d1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 15:40:54 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 16:35:25 2013 -0700"
      },
      "message": "Clean up error handling in createTrack and openRecord\n\nOutside callers now use initCheck() to determine whether a TrackBase\nhas been created successfully, instead of relying on internal knowledge.\n\nPreviously, callers needed to know that a TrackBase was only valid if it\u0027s\ngetCbk() !\u003d 0.  For a Track (playback), they needed to know to also check\nthe track\u0027s name (track index).  Now, outsiders can just call initCheck().\n\nOther changes:\n - Return a 0 reference if track creation fails\n - Remove a dead line of code in AudioFlinger::openRecord\n\nChange-Id: If374924a3f6fd27906f625aa83dd0a1e3f506e00\n"
    },
    {
      "commit": "9156ef3e11b68cc4b6d3cea77f1f63673855a6d1",
      "tree": "700dbc7c88d9ea46944cf9c35de4997195a4e724",
      "parents": [
        "e51a70ab6326715f614c737de1e8ea1941057b3b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 15:39:08 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 16:26:12 2013 -0700"
      },
      "message": "Status pointer passed by caller is always non-NULL\n\nin createTrack, openRecord, createEffect, createTrack_l,\ncreateRecordTrack_l, and createEffect_l.\n\nChange-Id: I2e459e4de9c78145f4d496e6abf289479a2f0941\n"
    },
    {
      "commit": "309f7abb3c170ba764e67e9b6fed31fb442e9953",
      "tree": "745c10c2db038f0e549a6c97a5e5abd5bf3de137",
      "parents": [
        "3a6d5ded7187ae324532a60b03532c33d607e282",
        "937098b9b564a779ff1c8c2d9e60769ee5c69810"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 09 15:20:32 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 09 15:20:32 2013 +0000"
      },
      "message": "Merge \"Use 0 for sp\u003c\u003e, NULL for raw pointers\""
    },
    {
      "commit": "3a6d5ded7187ae324532a60b03532c33d607e282",
      "tree": "cc35999a6033af71465d1c6064be32e9c3e71d84",
      "parents": [
        "5e078add4022360d18328ec41eee75703e8c424c",
        "f506e9495f2b2123b3bec7d42ec8ef13c6213ee8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 09 15:11:07 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 09 15:11:07 2013 +0000"
      },
      "message": "Merge \"Rename reqChannels to reqChannelMask\""
    },
    {
      "commit": "937098b9b564a779ff1c8c2d9e60769ee5c69810",
      "tree": "687e9fee2acde8204b60e3221234b992b311fb12",
      "parents": [
        "5279e3e1187e4da0fed4349d29ea548f52e95f95"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 11:19:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 14:04:56 2013 -0700"
      },
      "message": "Use 0 for sp\u003c\u003e, NULL for raw pointers\n\nChange-Id: Ia0595afdc41e1dec428d7a3db73558b54c417bf3\n"
    },
    {
      "commit": "fb872cc6f77f6d74011fab703b3edd7023c736cb",
      "tree": "da47692b3a543e644728e6e8a66d35802a8086b3",
      "parents": [
        "230c5bde2779c618b26edc73443280b2d9371c70"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 10:45:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 11:09:33 2013 -0700"
      },
      "message": "memset audio_config to zero\n\nPer guideline in hardware/libhardware/include/hardware/audio.h,\n\"You should memset() the entire structure to zero before use to\nensure forward compatibility.\"\n\nChange-Id: I2bce70ef6ea4b070668bd9cbc54bfe20a60111aa\n"
    },
    {
      "commit": "f506e9495f2b2123b3bec7d42ec8ef13c6213ee8",
      "tree": "60220524a2b03015a3e53d1968ffcfb92e869195",
      "parents": [
        "5279e3e1187e4da0fed4349d29ea548f52e95f95"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 10:49:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 11:06:05 2013 -0700"
      },
      "message": "Rename reqChannels to reqChannelMask\n\nThis avoids potential ambiguity with channel count.\n\nChange-Id: I0db82efc4c14dd8189d65a1db29809a085acf528\n"
    },
    {
      "commit": "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2",
      "tree": "a467af6f181bff45e8c1e47284ebbc4d6d3ccead",
      "parents": [
        "eeca32671896739e84050da5992d5f151a1629de"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:14:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordTrack::createRecordTrack_l flags are in/out\n\nThe flags are currently unused, but will be used for requesting a fast\ntrack.  Making flags in/out will allow reporting back up to client that\nthe request is denied.\n\nChange-Id: Ifbee57da3632ce130551065a426577fb97b1a68d\n"
    },
    {
      "commit": "eeca32671896739e84050da5992d5f151a1629de",
      "tree": "d611c0a426354e80345956c945e9381e6137209b",
      "parents": [
        "27f7b2a8fe899565487d8a326676a5f7d0a05a37"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:12:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "IAudioFlinger::openRecord track_flags_t flags is in/out\n\nThis will allow AudioFlinger to tell client it is denying a request.\n\nChange-Id: Iff2be3ad6636371bbda9c9899a283c94620c1f06\n"
    },
    {
      "commit": "b08ab81bab9e8cd2e3a7fff02725a387070fd078",
      "tree": "ca39f5da6fd5d654a71472143ee4718855f576d6",
      "parents": [
        "4d74828fc0f6c13d49a36147a4250bcfa8ad0a47",
        "34af02647b387a252fb02bab8e2cb9f7bd9c8abb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 22:40:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 22:40:16 2013 +0000"
      },
      "message": "Merge \"Add resampler comments and fix a typo\""
    },
    {
      "commit": "34af02647b387a252fb02bab8e2cb9f7bd9c8abb",
      "tree": "2e2e6f24d984884746c91704fb054e00e38e5ff0",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 11:52:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 12:01:03 2013 -0700"
      },
      "message": "Add resampler comments and fix a typo\n\nChange-Id: Ie071673875f663de4212eed4a4dff89d51a5a915\n"
    },
    {
      "commit": "d054c32443a493513ab63529b0c8b1aca290278c",
      "tree": "fc68ba259ded1dd4960bee2938a9bcc7c599c9a3",
      "parents": [
        "96f60d8f04432a1ed503b3e24d5736d28c63c9a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 12:59:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:50:48 2013 -0700"
      },
      "message": "Move control block mName to createTrack() output\n\nThis is part of a series of CLs to clean up the shared memory\ncontrol block, by removing any fields that don\u0027t have to be there.\n\nChange-Id: I6e51003a1293b6800258c31b22cff2eba42162e7\n"
    },
    {
      "commit": "97252bb0e40a5a9b41f020163393cf6c5da10b7e",
      "tree": "2730f01323e31639eb85736a20ad0e0cf867876e",
      "parents": [
        "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
        "291bb6d8947c5b0c062f0895d623c529259bfa39"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "message": "Merge \"AudioRecord and HAL input stream must be 16-bit PCM only\""
    },
    {
      "commit": "fa319e6d918b84f93fb5457af5d1cca6421ac517",
      "tree": "2ccff564a324d72c8bd5d872a220f56b26431203",
      "parents": [
        "548efc94813c1dec6e8cf6c085ae41ccb04827f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:17:38 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:20:47 2013 -0700"
      },
      "message": "Remove CC_LIKELY and CC_UNLIKELY where not needed\n\nOnly keep them in performance-sensitive code\n\nChange-Id: Ib257ddd7bc39ce9896997ffae008c524ac743d01\n"
    },
    {
      "commit": "2eeca1f8e18106d118f7268cb9d8597539685c5c",
      "tree": "28b2c665c838d4e78265c74c284694f85a77a579",
      "parents": [
        "b59c1ad726b8bdf441f373d0bdc612539769334a",
        "34542acfa25c6413c87a94b6f7cc315a0c496277"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "message": "Merge \"Move local variable declarations to point of first use\""
    },
    {
      "commit": "bfb1b832079bbb9426f72f3863199a54aefd02da",
      "tree": "5007d22456776dc77d124be84bcfe8bc4152bbb2",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 07 09:53:42 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "AudioFlinger: offload playback, non-blocking write\n\n- Added specialized playback thread class for offload playback,\nderived from directoutput thread.\nThis thread type handles specific state transitions for offloaded\ntracks and offloading commands (pause/resume/drain/flush..) to audio HAL.\nAs opposed to other threads, does not go to standby if the track is paused.\n\n- Added support for asynchronous write and drain operations at audio HAL.\nUse a thread to handle async callback events from HAL: this avoids locking\nplayback thread mutex when executing the callback and cause deadlocks when\ncalling audio HAL functions with the playback thread mutex locked.\n\n- Better accouting for track activity: call start/stop and release Output\nmethods in audio policy manager when tracks are actually added and removed\nfrom the active tracks list.\nAdded a command thread in audio policy service to handle stop/release commands\nasynchronously and avoid deadlocks with playback thread.\n\n- Track terminated status is not a state anymore. This condition is othogonal\nto state to permitted state transitions while terminated.\n\nChange-Id: Id157f4b3277620568d8eace7535d9186602564de\n"
    },
    {
      "commit": "34542acfa25c6413c87a94b6f7cc315a0c496277",
      "tree": "8fdb43eabdcceca8291966fe88d9c37a3864beee",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 11:29:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:21:55 2013 -0700"
      },
      "message": "Move local variable declarations to point of first use\n\nChange-Id: Ideb83dea2c3002651c34fa646753cba598e29e93\n"
    },
    {
      "commit": "291bb6d8947c5b0c062f0895d623c529259bfa39",
      "tree": "aa527f282bf3523c3692f086e4e088e8e21aa69c",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:23:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 16:03:05 2013 -0700"
      },
      "message": "AudioRecord and HAL input stream must be 16-bit PCM only\n\nCurrently there are 16-bit PCM assumptions in several places for capture:\n - resampler API\n - mRsmpInBuffer and mRsmpOutBuffer\n - RecordThread::threadLoop upmix, downmix, and resampling\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces 16-bit PCM in both\nclient and server at all places where a format is checked.\n\nChange-Id: I08b0570bff626ad0d341804825a72c14e61b4233\n"
    },
    {
      "commit": "4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61",
      "tree": "c7ed5d9b71f919bf664dd0cb6cbdd1c3de2f9241",
      "parents": [
        "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 14:45:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Use AudioSystem::setLowRamDevice() to configure memory\n\nBug: 9798886\nChange-Id: I9321e3f369f1ed9429ae222e3926ebdeb012b8b0\n"
    },
    {
      "commit": "153b9fe667e6e78e0218ff0159353097428c7657",
      "tree": "360a76911071e362a94af32ccf67ce9619629708",
      "parents": [
        "20f4754b7e687d3718a0a0a585f2c9ac22e2567d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 11:23:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Make AudioFlinger::instantiate() more resilient when called from separate module\n\nBug: 8834855\nChange-Id: I4cd842cdfb09d2aaaaab9df9ac3bec6179709bd3\n"
    },
    {
      "commit": "1ab85ec401801ef9a9184650d0f5a1639b45eeb9",
      "tree": "c3a39f141461642c3ac3c7f1370ca679d08d80e6",
      "parents": [
        "8f13428cb29a9b610a9e9a0f5fea437cd2d3f032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 31 09:18:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 02 13:43:24 2013 -0700"
      },
      "message": "Include what is needed\n\nRemove old includes.\nHeader files only include other header files that they directly need themselves.\n\nChange-Id: Ic471386808d9f42ea19ccbd59cb50a5f83a89dd0\n"
    },
    {
      "commit": "ad3af3305f024bcbbd55c894a4995e449498e1ba",
      "tree": "2e242d4c49cce9faefc28665c6ee63a2a5da170c",
      "parents": [
        "7919fa2c33b1fa7f5e49b2188d671bfe519c231e"
      ],
      "author": {
        "name": "Richard Fitzgerald",
        "email": "rf@opensource.wolfsonmicro.com",
        "time": "Mon Mar 25 16:54:37 2013 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 27 17:16:24 2013 -0700"
      },
      "message": "Public API changes for audio offload support.\n\nNOTE: this does _not_ include all private member variables added\nto classes as part of offload support. Only public/protected functions\nand stubs functions/variables needed to make the changes buildable.\n\n- isOffloadSupported() added to audio policy service\n    A stub implementation is required to build, this always returns false\n- setParameters() added to IAudioTrack\n    A stub implementation is required to build, this always returns\n    INVALID_OPERATION\n\n- CBlk flag for stream end\n\n- Change AudioSystem::getRenderPosition() to take an audio_output_t\n    so caller can specify which output to query\n\n- Add AudioSystem::isOffloadSupported()\n    This is fully implemented down to the AudioFlinger function\n    AudioPolicyServer::isOffloadSupported() which is just a stub\n    that always returns false.\n\n- Add EVENT_STREAM_END to AudioTrack interface.\n    STREAM_END is used to signal when the hardware has actually finished\n    playing all the data it was sent.\n\n- Add event type enumeration to media player interface AudioSink callbacks\n    so that the same callback can be used to handle multiple types of\n    event. For offloaded tracks we also have to handle STREAM_END and\n    TEAR_DOWN events\n\n- Pass audio_offload_info_t to various functions used for opening outputs,\n    tracks and audio players. This passes additional information about the\n    compressed stream down to the HAL when using offload.\n    For publicly-available APIs this is an optional parameter (for some of\n    the internal and low-level APIs around the HAL interface it is mandatory)\n\n- Add getParameters() and setParameters() API to AudioTrack\n    Currently dummy implementations.\n\n- Change AudioPlayer contructor so that it takes a set of bitflags defining what\n    options are required. This replaces the original bool which only specified\n    whether to use deep buffering.\n\n- Changes to StageFright class definition related to handling tearing-down of\n    an offloaded track when we need to switch back to software decode\n\n- Define new StageFright utility functions used for offloaded tracks\n    Currently dummy implementations.\n\n- AudioFlinger changes to use extended audio_config_t.\n    Fills in audio_offload_info_t member if this info is passed in when\n    opening an output.\n\n- libvideoeditor changes required to add the new event type parameter\n    to AudioSink callback functions\n\n- libmediaplayerservice changes required to add the new event type parameter\n    to AudioSink callback functions\n\nChange-Id: I3ab41138aa1083d81fe83b886a9b1021ec7320f1\nSigned-off-by: Richard Fitzgerald \u003crf@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Eric Laurent \u003celaurent@google.com\u003e\n"
    },
    {
      "commit": "7c027248e1a4ccd5b22bc4deafb03e2d87ac8f38",
      "tree": "ed6b92a79faa533f7c1156836f00b9dcaec8834d",
      "parents": [
        "8bae43ae86b9942892980c3c01bff5c812b1db7f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 26 14:43:16 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 30 13:40:56 2013 -0700"
      },
      "message": "Consistent whitespace\n\nChange-Id: I118cce68d3b777f9ec9b6bfb70367496422a40f2\n"
    },
    {
      "commit": "949a926cadbc961fbb649c91d76d7aee8ea4d7bd",
      "tree": "e90ad4773399fb206886eb236919fa78d7670cd2",
      "parents": [
        "64595e6727c478d3d80c7babbecdb470398f8c42"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 16 12:35:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 18 16:25:14 2013 -0700"
      },
      "message": "Use correct pid when running under test harness\n\nThis is a partial fix which addresses one of the root causes of this bug,\nbut only when running under test harness.  It has no effect otherwise.\n\nBug: 8598539\nChange-Id: I87444daef1d76b17544f331e651ba1c87893c381\n"
    },
    {
      "commit": "c9b2e20f7c9a71e07ef398152709c76079decbcd",
      "tree": "7e3cbee883fbe1462e24a31b8b4af5a5911e8276",
      "parents": [
        "bf04b5860182d8f4130dcb5d6d88ee68a58c99cd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 11:32:32 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 04 12:58:21 2013 -0800"
      },
      "message": "Miscellaneous cleanup\n\nAbbreviation framesReady to fRdy for new systrace.\nPut inline const on one line.\nUse local copy of mState in state.\nImprove logging.\nLine length 100.\n\nChange-Id: I8201c3ce0e53fd464fd33d02544e52c342d40b68\n"
    },
    {
      "commit": "46909e7eb074ce1b95b8a411eb71154f53f84f77",
      "tree": "a0b31a2590a604b0e2c7a6a133bba067dadfad5e",
      "parents": [
        "ceb388d6c03c38b96dc41c0ea4804b749aa077c4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 09:20:22 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 11:36:38 2013 -0800"
      },
      "message": "Remove tee sink debugging at compile time\n\nBug: 8223560\nChange-Id: Iddbfb06c45d43d9f20bb428215dd4094931e19a7\n"
    },
    {
      "commit": "da6ef1320d0161b1640dc84d7a9c5a25860c3619",
      "tree": "86b24f64ed0bd55de10deb193290009687886192",
      "parents": [
        "99c2f923f6b04efffe949d1daf9cb7148e3cc201"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 10 12:31:01 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 22 16:50:36 2013 -0800"
      },
      "message": "Update tee sink\n\nImplement rotation to reduce long-term storage use.\nImplement optional per-track tee.\nDynamically enable at runtime based on property, instead of at compile-time.\nDynamic frame count not yet implemented.\n\nBug: 8223560\nChange-Id: I3706443c6ec0cb0c6656dc288715a02ad5fea63a\n"
    },
    {
      "commit": "59686720182dcaa1a1a4757964df38c16f1a5246",
      "tree": "83c8de9fcaf2149d9a41be8ea866cec2ee2d0f4f",
      "parents": [
        "685ef09bcaf5de6abf2064d552296f70eaec6761",
        "d3922f72601d82c6fc067a98916fda0bd1291c5f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 04 17:05:30 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 04 17:05:30 2013 +0000"
      },
      "message": "Merge \"AudioFlinger: fix RecordThread initial device\""
    },
    {
      "commit": "685ef09bcaf5de6abf2064d552296f70eaec6761",
      "tree": "c288fb67ba3ec8bb3367c3fd905f038f9e87a400",
      "parents": [
        "08aa0bc912696ba22c10a3429b51b04c21c02944"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 04 08:15:34 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 04 08:15:34 2013 -0800"
      },
      "message": "Fix crash when destroying a DuplicatingThread\n\nBug: 8121343\nChange-Id: I9b1fc56c753e465e8a08916022e52db6c3a36906\n"
    },
    {
      "commit": "d3922f72601d82c6fc067a98916fda0bd1291c5f",
      "tree": "65611e81a91807c46758ae234a802cdb7c72c3e2",
      "parents": [
        "2a330d6cbb25f0cdd6208aeee53b4a3b88dae3b0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 01 17:57:04 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 01 17:57:04 2013 -0800"
      },
      "message": "AudioFlinger: fix RecordThread initial device\n\nA regression was introduced when the audio device enums where\nmodified for a 32 bit representation: the device passed when\nconstructing a RecordThread was still the concatenation of input\ndevice and output device bit fields on one 32 bit value which\nis not possible anymore.\n\nThe fix consists in modifying the RecordThread constructor to accept\nseparate values for input and output devices.\n\nChange-Id: I81fb5f4718428b54251e65d74b86e198ce15193e\n"
    },
    {
      "commit": "9e58b552f51b00b3b674102876bd6c77ef3da806",
      "tree": "7b01e1d9f788cbfb49a4c4fa8699334f630ea89a",
      "parents": [
        "a416756864e2c7750d59d967ec2185532fa5c2e0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 18 15:09:48 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 31 16:40:24 2013 -0800"
      },
      "message": "AudioFlinger uses media.log service for logging\n\nChange-Id: Ia0f8204334f6b233f644d897762a18c95d936b4b\n"
    },
    {
      "commit": "8d6cc842e8d525405c68e57fdf3bc5da0b4d7e87",
      "tree": "d3296fc4f886ae058cb353cec79576b7e4428897",
      "parents": [
        "53bc0a2fc54330534330118edd5c393f39eff8ab"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 11:06:53 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 18 16:16:30 2012 -0800"
      },
      "message": "Remove unnecessary parameter\n\nJust get the parameter on server side\n\nChange-Id: I433a63104dbb257e0d862be2ab61847cb36d1c15\n"
    },
    {
      "commit": "81784c37c61b09289654b979567a42bf73cd2b12",
      "tree": "a0a3fa9225bea006c2e037a337b43bf4ba7c0743",
      "parents": [
        "4d9cef6c007afd195a8f36d35d46b359bf909331"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 19 14:55:58 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 19 19:35:38 2012 -0800"
      },
      "message": "AudioFlinger files reorganization\n\nAudioflinger.cpp and Audioflinger.h files must be split to\nimprove readability and maintainability.\n\nThis CL splits the files as follows:\n\nAudioFlinger.cpp split into:\n- AudioFlinger.cpp: implementation of IAudioflinger interface and global methods\n- AFThreads.cpp: implementation of ThreadBase, PlaybackThread, MixerThread,\nDuplicatingThread, DirectOutputThread and RecordThread.\n- AFTracks.cpp: implementation of TrackBase, Track, TimedTrack, OutputTrack,\nRecordTrack, TrackHandle and RecordHandle.\n- AFEffects.cpp: implementation of EffectModule, EffectChain and EffectHandle.\n\nAudioFlinger.h is modified by inline inclusion of header files containing\nthe declaration of complex inner classes:\n- AFThreads.h: ThreadBase, PlaybackThread, MixerThread, DuplicatingThread,\nDirectOutputThread and RecordThread\n- AFEffects.h: EffectModule, EffectChain and EffectHandle\n\nAFThreads.h includes the follownig headers inline:\n- AFTrackBase.h: TrackBase\n- AFPlaybackTracks: Track, TimedTrack, OutputTrack\n- AFRecordTracks: RecordTrack\n\nChange-Id: I512ebc3a51813ab7a4afccc9a538b18125165c4c\n"
    }
  ],
  "next": "a42ff007a17d63df22c60dd5e5fd811ee45ca1b3"
}
