)]}'
{
  "log": [
    {
      "commit": "5241b8cacee86e17223695190959f4752910680f",
      "tree": "7294f55179540aaf0c3050839d5193bb98c0cb3c",
      "parents": [
        "63c0ce7ab7bd99d51414dcb4f765bc6faabf367d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 04 20:43:10 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 04 20:43:10 2014 -0700"
      },
      "message": "Remove unused TwoTrack process mode from AudioMixer\n\nLegacy code that has not been hooked up.\n\nChange-Id: Ic01a4eddfa1020089d5bc42f58b6a4697698c27a\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": "e93b6b7347a7846c8fd746542364ec11b0cd5124",
      "tree": "d5498ae539ae460d4153026be9714129fc45a21f",
      "parents": [
        "81e50d0c782cc18eab4ef40ecd6c7f36df50fea5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jul 17 21:30:53 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jul 24 18:40:33 2014 -0700"
      },
      "message": "Add multichannel capability to AudioMixer\n\ntests/test-mixer updated to handle multichannel.\nNew mixer path is still disabled (kUseNewMixer \u003d false).\nSubsequent CL will enable multichannel capability.\n\nChange-Id: I71dafa94cc1d9af567c285e0ded7c5c94e3ff926\n"
    },
    {
      "commit": "a08810b2feafeec88870c7c1f01efc39ee8e0d78",
      "tree": "6c33f28c0c637f0d67530058493f653e453a131b",
      "parents": [
        "34803d594232af5604d893eff7ee40bb57d459a4"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jul 16 21:53:43 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jul 18 20:34:02 2014 -0700"
      },
      "message": "Add RemixBufferProvider to AudioMixer\n\nThis is used to convert between channel masks for input AudioTrack\ndata.\n\nChange-Id: Iedffaeccb99c7053992152e7b1cb6b2d33b12eef\n"
    },
    {
      "commit": "34803d594232af5604d893eff7ee40bb57d459a4",
      "tree": "13991635bf72797e6ff00a3ec739b465af53614d",
      "parents": [
        "1b2fdcb005f9fbe5ad465cec46ec5992b718b5e3"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jul 16 21:41:35 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jul 18 18:05:19 2014 -0700"
      },
      "message": "Update DownmixerBufferProvider to use CopyBufferProvider\n\nChange-Id: I6b1a8755a1e6c29b916662fd376e9509cda5df55\n"
    },
    {
      "commit": "1b2fdcb005f9fbe5ad465cec46ec5992b718b5e3",
      "tree": "af0ac40d490c649b1c3a13ba0c5c9a22e1890c6b",
      "parents": [
        "91be1fbc424035e70688e60306b755893e0fb0ae"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jul 16 17:44:34 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jul 18 17:56:04 2014 -0700"
      },
      "message": "Add CopyBufferProvider class for AudioMixer\n\nAudioMixer::ReformatBufferProvider now uses it as a base class.\n\nFix ReformatBufferProvider object leak.\n\nChange-Id: If196f844eaaa124a173ffa27afe88098023c2ff9\n"
    },
    {
      "commit": "5e58b0abe5b6c8f5bd96a8f78bbeeeb4d3892020",
      "tree": "975ed02efce4eaefcf5b0ceb5f33d212542a33a6",
      "parents": [
        "72d039f007722c92ee5ea7ffd03ece19d2781103"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 23 19:07:29 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jul 08 21:09:13 2014 -0700"
      },
      "message": "Add floating point volume handling to AudioMixer\n\nUse floating point volume in AudioMixer mixing when floating\npoint input is used with the new mixer engine.\nAudioResampler is updated to take floating point volume to match.\nBoth legacy integer and floating point mixer engines work.\n\nFor now, integer volume is used when the new mixer engine\nruns in integer input mode, for backward compatibility with\nthe legacy mixer.  The new mixer engine will generally run in\nfloating point input mode. When the legacy path is removed,\nthe integer volumes will be removed.\n\nChange-Id: I79e80c292ae7c8b8bdd0aa371a1b2c3a1b618290\n"
    },
    {
      "commit": "296b741e8eb38e749e3202182f703a2e30ee5f1f",
      "tree": "7924f384f8e3ef4f063993e8721c67eb466cf58a",
      "parents": [
        "f92f22becdf7fce1f55d5ebd80ac2caa2ad55602"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jun 17 15:25:47 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 30 16:35:59 2014 -0700"
      },
      "message": "Add new AudioMixer processing hooks\n\nThis change adds new process and thread hooks for\nmulti-format handling.\nIt is enabled by setting kUseNewMixer \u003d true.\n\nChange-Id: I262a3d2e4411f8cef7370a497b77a34eb55f1f86\n"
    },
    {
      "commit": "6be494077f8d7970f3a88129c5d139c5a0c88f6d",
      "tree": "8c77f163bd84e808693832666d29b42f73361fc5",
      "parents": [
        "97ae82408469286426d8dc57a361350f74e24a8b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 30 10:42:03 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 30 17:07:44 2014 -0700"
      },
      "message": "Change parameter type for volume to float in AudioMixer\n\nChange-Id: I4da1505ce852505f86f8e5b87f60e8edceeb30e0\n"
    },
    {
      "commit": "97ae82408469286426d8dc57a361350f74e24a8b",
      "tree": "09d2ac62b57d06d0d100ce5bc93fb8a05a27398d",
      "parents": [
        "5866a3b9689035580c31f1a02037b8176d7508a7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 30 10:35:47 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 30 16:44:32 2014 -0700"
      },
      "message": "Rename UNITY_GAIN to UNITY_GAIN_INT in AudioMixer\n\nChange-Id: Ic040311305026f0b4c4280a5b3bef7a447ac1da3\n"
    },
    {
      "commit": "018d324dc599c5f4238a4cd631baac47c28d59fe",
      "tree": "3c45f7d16bb23590c06eae6fa59852882c16f897",
      "parents": [
        "1a83b736737e7f625371093519ff7a10b05e0c63",
        "ef7c7fbd0e3fb36af14cd7d39f64c949031516a5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 27 18:32:15 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 27 18:32:15 2014 +0000"
      },
      "message": "Merge \"Add multiple format capability to AudioMixer\""
    },
    {
      "commit": "ef7c7fbd0e3fb36af14cd7d39f64c949031516a5",
      "tree": "94f9ef7ecba0cfdbfae659013923d261ccf19e40",
      "parents": [
        "e8a1ced4da17dc6c07803dc2af8060f62a8389c1"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon May 12 16:51:41 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 23 22:11:16 2014 -0700"
      },
      "message": "Add multiple format capability to AudioMixer\n\nChange-Id: I04ac1cafd90b6ed652f8d51888ad07576678f0bc\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "c62476f0c0c1cf9283a38852bde0a4c9434df712",
      "tree": "6249b263dba1e91017e9debfe4c2e8f79b1be2c7",
      "parents": [
        "7a470c375c2cef8b186fbadd9915b30e5d757453",
        "e8a1ced4da17dc6c07803dc2af8060f62a8389c1"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 23 23:51:17 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 23 23:51:17 2014 +0000"
      },
      "message": "Merge \"Add format parameter to getTrackName() and track_t\""
    },
    {
      "commit": "e8a1ced4da17dc6c07803dc2af8060f62a8389c1",
      "tree": "eadb47a0d9349451773ef55adaa60317e1dbafad",
      "parents": [
        "68112fc4f77ab8c4a744782f78e9792afe0cbfc1"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 09 15:02:21 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon May 19 12:27:46 2014 -0700"
      },
      "message": "Add format parameter to getTrackName() and track_t\n\nChange-Id: Ia152a839014e235fbfb656104c15d7c1b456d02e\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "c56f3426099a3cf2d07ccff8886050c7fbce140f",
      "tree": "9e486a809f9d500a70fd26c4e1d2596ded190dbe",
      "parents": [
        "7c96d53a65085f42ac2b6d416cbc16fd36ed72ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 21 17:53:17 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 19 09:46:25 2014 -0700"
      },
      "message": "Pass stereo gains as packed minifloat\n\nThis will allow (eventually) a greater dynamic range for gains.\nHowever there are still a few remaining places in effects and mixer\nthat will also need to be changed in order to get the full benefit.\n\nAlso fixes a minor bug: was not checking for NaN in AudioTrack C++.\n\nChange-Id: I63bce9e82e0a61546d8ff475fb94bcb700d99c96\n"
    },
    {
      "commit": "788207057ed4b8df4719ed8089f376ef52de9ca1",
      "tree": "63659b6151de243ea608add08c3f5d2963c1bd3e",
      "parents": [
        "7ed1873acbf43280c5afe51833c3d628fe34e258"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 28 16:23:02 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Mar 01 04:20:18 2014 +0000"
      },
      "message": "Rename mSinkFormat to mMixerFormat for AudioMixer::track_t\n\nAudioMixer::SINK_FORMAT also changes to AudioMixer::MIXER_FORMAT\n\nChange-Id: Ic3f8be77d2c75c082c4fd140bc907e30c304d285\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "a1ab7cc8611c83427b57f6d4d4ce7aad9d1c0330",
      "tree": "8a519f604c7d5f0369ffaa6f9fb268c1906bfb68",
      "parents": [
        "56df9ff31d583ad3eae4f279a3df550273c58e1e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Feb 24 19:26:52 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 26 16:01:08 2014 -0800"
      },
      "message": "Add Track Sink Format to AudioMixer\n\nTrack Sink Format now allows both AUDIO_FORMAT_PCM_FLOAT and\nAUDIO_FORMAT_PCM_16_BIT (default).  The float case is not\nenabled now.\n\nChange-Id: Ibee70cab4725c8bc9905e49f1f9a9c2448f76e00\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "01d3acba9de861cb2b718338e787cff3566fc5ec",
      "tree": "597410f74cf8cc6e3103a5f6b209c3f40cd388c6",
      "parents": [
        "ec95f0e82a680931e9c7c9011dbbd68d5ab484c8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 06 08:24:07 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 10 08:22:42 2014 -0800"
      },
      "message": "Fix clang warnings in AudioFlinger\n\nChange-Id: I0fa61025c979709ad7d655bc717df5f194b6089e\n"
    },
    {
      "commit": "d6fadf0479b489b09b764070974d8a59855ede64",
      "tree": "239aa64bd7cdc0e69b1ad8e1ef85be7e09176a56",
      "parents": [
        "8f32537d028231abed103c68705bc5d07cedf919"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 30 14:37:29 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 06 14:49:46 2013 -0800"
      },
      "message": "Simplify track \u0027needs\u0027 bits\n\nUse more standard coding convention for bit masks,\nand add a FIXME about max channel count.\n\nChange-Id: I856784016703417ee480b92ae73757c472f9cf95\n"
    },
    {
      "commit": "49c34acbef91800930b0fe561e0787145a10cfcc",
      "tree": "53e636df1a5868bbea112ec3bd36e19862208adf",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 30 14:37:01 2013 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Nov 06 18:05:09 2013 +0000"
      },
      "message": "Fix race condition in initializing downmix\n\nThe code that initializes downmix GUID searches for an effect of\nthe right type.  If two or more AudioMixers are created, there is a\npossibility that the GUID will temporarily have the wrong value.\n\nNow the initialization is only done once, regardless of how many\nAudioMixers there are.\n\nOther minor changes:\n - use naming convention of leading \u0027s\u0027 for static member variables\n - log message for no downmix effect is now a warning instead of an error,\n   since it is not an error until there is actual content to downmix\n   without a downmix effect\n\nChange-Id: I33ab0e51cf9d24ecaf8ae868883736b0772178c4\n"
    },
    {
      "commit": "ab7d72f0804fbb7e91ad9d2a16f826d97e20e5d0",
      "tree": "9eda6276ab70724dcc98e56f7ca16afeb70ff079",
      "parents": [
        "3605ab3c02516e4123c39062de301bacc8ea8d9f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 27 09:05:28 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 01 15:36:26 2013 -0800"
      },
      "message": "media.log cleanup\n\nRemove almost all of the specific logs, but leave the media.log\nlogging infrastructure in place for the next time we need it.\n\nRe-apply a few good changes that were reverted earlier:\n - check logf format vs. argument list compatibility\n - distinguish potentially modified and actually modified tracks in FastMixer\n - fix benign bug where sq-\u003eend() was called more than once\n - fix a build warning\n\nBug: 6490974\nChange-Id: I02d3e83646c738acaebb415bd0d6b548638b4ef5\n"
    },
    {
      "commit": "7f5d335f7b4caecd0dfb8f1085f352f1d2da5d2e",
      "tree": "dda17a3e4149815397c7bef198e64bc81dee3552",
      "parents": [
        "32584a7d672864b20ab8b83a3cb23c1858e908b7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 15 23:55:04 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 15 23:55:04 2013 +0000"
      },
      "message": "Revert \"Temporary additional logging to investigate bug\"\n\nThis reverts commit 32584a7d672864b20ab8b83a3cb23c1858e908b7\n\nChange-Id: I9dc680578b955b1af462eeb7a49d61a0d45eb81b\n"
    },
    {
      "commit": "32584a7d672864b20ab8b83a3cb23c1858e908b7",
      "tree": "87a3d8c3b801d13ceee09abab5048aef46e65332",
      "parents": [
        "ab89ac209fd1c3b0a2227168a48d7f3ae9bc43f3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 13 14:46:45 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 15 15:44:50 2013 -0800"
      },
      "message": "Temporary additional logging to investigate bug\n\nThe bug appears related to continuing to use an invalid buffer provider\nin fast mixer after track destruction, so focus the added logs in that area.\n\nAlso includes a bug fix: was calling log in an unsafe place\nnear Threads.cpp AudioFlinger::PlaybackThread::createTrack_l line 1250.\n\nDetails:\n - include caller pid or client pid where appropriate\n - increase log buffer size\n - log mFastIndex when AudioMixer sees an invalid bufferProvider.\n - log both potentially modified and actually modified tracks in FastMixer.\n - fix benign bug where sq-\u003eend() was called more than once.\n - log StateQueue push() call and return.\n - increase StateQueue size from 4 to 8 entries\n - log mixer-\u003eenable(), bufferProvider, and currentTrackMask\n - log buffer provider addresses\n - increase fast mixer log buffer again\n - check logf format vs. argument list compatibility\n - add logging to AudioMixer\n - add checking of magic field in AudioMixer to detect overwrites\n - add bool AudioMixer::enabled()\n - increase log buffer sizes yet again\n - enable assertion checking without ALOGV\n - improve a few log messages\n - check for corruption in more places\n - log in all the process hooks\n - add new mixer APIs so we can check for corruption of mixer state\n - fix a build warning\n\nBug: 6490974\nChange-Id: Ib0c4a73dcf606ef9bd898313b3b40ef61ab42f51\n"
    },
    {
      "commit": "e186b51e0a9834b287d7a509e960eaf1b688db75",
      "tree": "82b017a4c77a82fca62571eccaa3723ee93738d1",
      "parents": [
        "639482c24c911b125398b31883ba6d55faebe28b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 14 23:57:02 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 14 23:57:02 2013 +0000"
      },
      "message": "Revert \"Temporary additional logging to investigate bug\"\n\nThis reverts commit 639482c24c911b125398b31883ba6d55faebe28b\n\nChange-Id: I11f2829072ab11e18b0663024f27bf31192f1d39\n"
    },
    {
      "commit": "639482c24c911b125398b31883ba6d55faebe28b",
      "tree": "698e25baf47d4e6a10663d21ca86c3a0702fe606",
      "parents": [
        "085205bd23c3604c1b792c3046fdae0a489c04be"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 13 14:46:45 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 14 14:35:29 2013 -0800"
      },
      "message": "Temporary additional logging to investigate bug\n\nThe bug appears related to continuing to use an invalid buffer provider\nin fast mixer after track destruction, so focus the added logs in that area.\n\nAlso includes a bug fix: was calling log in an unsafe place\nnear Threads.cpp AudioFlinger::PlaybackThread::createTrack_l line 1250.\n\nDetails:\n - include caller pid or client pid where appropriate\n - increase log buffer size\n - log mFastIndex when AudioMixer sees an invalid bufferProvider.\n - log both potentially modified and actually modified tracks in FastMixer.\n - fix benign bug where sq-\u003eend() was called more than once.\n - log StateQueue push() call and return.\n - increase StateQueue size from 4 to 8 entries\n - log mixer-\u003eenable(), bufferProvider, and currentTrackMask\n - log buffer provider addresses\n - increase fast mixer log buffer again\n - check logf format vs. argument list compatibility\n - add logging to AudioMixer\n - add checking of magic field in AudioMixer to detect overwrites\n - add bool AudioMixer::enabled()\n\nBug: 6490974\nChange-Id: I1f3f18aa62d9fbd35bc32285b669f5ba40efe28e\n"
    },
    {
      "commit": "51eb3965caa8ba135bcdd8ffb7a2024a042ecdc0",
      "tree": "0444520a23aa61553f9cf8bb67ee0f8127096b6a",
      "parents": [
        "0ddd56316262ac74a95e9edb595697c163136d6d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 14 00:02:36 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 14 00:02:36 2013 +0000"
      },
      "message": "Revert \"Temporary additional logging to investigate bug\"\n\nThis reverts commit 0ddd56316262ac74a95e9edb595697c163136d6d\n\nChange-Id: I180a928af6f5a38d15a5efe44cd1fe927b5d961c\n"
    },
    {
      "commit": "0ddd56316262ac74a95e9edb595697c163136d6d",
      "tree": "2ed313557a019eeba286e27a3f4ce2e0a45fba17",
      "parents": [
        "cd27b0798f6abb34e464acc7c7e97e066cd3c6c7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 13 14:46:45 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 13 14:51:50 2013 -0800"
      },
      "message": "Temporary additional logging to investigate bug\n\nThe bug appears related to continuing to use an invalid buffer provider\nin fast mixer after track destruction, so focus the added logs in that area.\n\nAlso includes a bug fix: was calling log in an unsafe place\nnear Threads.cpp AudioFlinger::PlaybackThread::createTrack_l line 1250.\n\nDetails:\n - include caller pid or client pid where appropriate\n - increase log buffer size\n - log mFastIndex when AudioMixer sees an invalid bufferProvider.\n - log both potentially modified and actually modified tracks in FastMixer.\n - fix benign bug where sq-\u003eend() was called more than once.\n - log StateQueue push() call and return.\n\nBug: 6490974\nChange-Id: Iee7c8f40e20b6000cd8286c0ec6a14fff4a37af1\n"
    },
    {
      "commit": "85ab62c4b433df3f1a9826bed1c9bec07a86c750",
      "tree": "0c5443a20824924cb7403f4cabfee84062489793",
      "parents": [
        "5fe6138bd839297a1eed16885102b3bdfc98c040"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 01 11:11:38 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 01 12:19:25 2012 -0700"
      },
      "message": "Line length 100\n\nChange-Id: Ib28fd7b9ce951a6933f006e7f8812ba617625530\n"
    },
    {
      "commit": "599fabc596687efa4b71b8f3ebbb957c7cae0c72",
      "tree": "4fa21abc3355a8ac8d4c91a6e101d76bb3c17b80",
      "parents": [
        "692c3e54c63aaaf7e9ef4d89761f98975bd34f33"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 12:33:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 26 15:50:45 2012 -0700"
      },
      "message": "Document AudioMixer hard-coded limits\n\nChange-Id: I83ea8bed375f251260945db788bdb5f280dba12d\n"
    },
    {
      "commit": "d06e132358d44f02c22527b4f463df1f58da9216",
      "tree": "26cd7f3324f6c50726ed0377f3137e38f316aab3",
      "parents": [
        "4b2247510410ef71718199ea028ace8609e92fdd"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Sep 12 15:47:07 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Sep 12 15:49:56 2012 -0700"
      },
      "message": "Communicate audio session ID to downmixer\n\nThe audio downmixer effect might need the audio session Id, pass it\n from the track creation in AudioFlinger to the downmix effect\n creation in AudioMixer.\n\nChange-Id: I836873eebd6711f1048fce81cd2eb29b94f0ad0c\n"
    },
    {
      "commit": "e0c87269b94e5b24de8e9577ba32070b24e83582",
      "tree": "e17f5543a594ebf30b1c1b590b689252ae7785e1",
      "parents": [
        "4657e56e0b0e9672fa2bde3c692ad4a58cf9b133",
        "c9beb01c800e6326051aee52a00659288c25c6eb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 15:09:19 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 30 15:09:19 2012 -0700"
      },
      "message": "am c9beb01c: am b9cba9b7: Merge \"Move libnbaio out of AudioFlinger\" into jb-mr1-dev\n\n* commit \u0027c9beb01c800e6326051aee52a00659288c25c6eb\u0027:\n  Move libnbaio out of AudioFlinger\n"
    },
    {
      "commit": "2dd4bdd715f586d4d30cf90cc6fc2bbfbce60fe0",
      "tree": "d0f594b402b6d2a4de89386c30c3db4adab89894",
      "parents": [
        "0a24726a64ba1c50aa6ee1610de2d80602d49fe6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 29 11:10:32 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 10:53:37 2012 -0700"
      },
      "message": "Move libnbaio out of AudioFlinger\n\nlibnbaio is now a separate shared library from AudioFlinger, rather\nthan a static library used only by AudioFlinger.\n\nAudioBufferProvider interface is now also independent of AudioFlinger,\nmoved to include/media/\n\nChange-Id: I9bb62ffbc38d42a38b0af76e66da5e9ab1e0e21b\n"
    },
    {
      "commit": "52008f821a5202502a82a8ba2c024e69bd336350",
      "tree": "5daaddaa46d47bec27af0bc5350f414452710b00",
      "parents": [
        "0a7af18d0308295405491f86603e3d119450aba0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Mar 18 09:34:41 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 25 18:49:08 2012 -0700"
      },
      "message": "Share local time frequency for all tracks \u0026 mixers\n\nChange-Id: I5e6f0e371f728a5225c2fa6f778c109449d33602\n"
    },
    {
      "commit": "9bd23229fdec1657398abc682ccccfce1c95f8aa",
      "tree": "5a6790d8f19a3249b28a8b8da9e68e3a14bbde36",
      "parents": [
        "0ca3cf94c0dfc173ad7886ae162c4b67067539f6"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Apr 16 13:43:48 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Apr 18 17:40:48 2012 -0700"
      },
      "message": "Fix multichannel downmix pause bug on video player\n\nPausing a video player will cause the track audio mixer to be\n disabled, which causes the downmixer to be deleted. When reenabled,\n the track channel mask hasn\u0027t changed but the downmixer is there\n anymore.\nFixed by:\n- instanciating a downmixer when the AudioMixer track\n gets initialized (in getTrackName(), now taking a channel mask\n as input), and deleted when in deleteTrackName().\n- when the channel changes on a track, check whether it\n needs a downmixer or not. Preparing a track for downmix\n automatically removes the old downmixer if there was one.\n\nAlso: initialize the track downmixerBufferProvider field\n when AudioMixer is instanciated, so we can safely call\n delete on it in AudioMixer\u0027s destructor, in case\n deleteTrackName() wasn\u0027t called before the mixer was\n destroyed.\n\nChange-Id: I589b0781cda5b3c82f85b561c52b08546cac21f8\n"
    },
    {
      "commit": "4e2293f29f2e719af1245d365747ea06d074b345",
      "tree": "d07878412ffeca6ccd4e7e4bbbc0b4fb68370a59",
      "parents": [
        "99a80e10f2d0e88c0509a298bdd1df0308b55a7b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 12 09:39:07 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 16 17:43:58 2012 -0700"
      },
      "message": "AudioMixer new cmd: remove sample rate converter\n\nAdd a new command REMOVE to remove any sample rate converter\n   on a track, without having to delete the track name.\nAdd comments.\nRemove some dead code.\nFix whitespace and comparison to NULL.\n\nChange-Id: Id55a23ab5ee673189e99675b4e6fa5df7b617987\n"
    },
    {
      "commit": "7d5b26230a179cd7bcc01f6578cd80d8c15a92a5",
      "tree": "563086c1185e0e54770d8c60c8eec1aefdddb89f",
      "parents": [
        "4b75a9c8b93a90749bc5d22912ad0d96c12f4ecf"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Apr 04 18:54:36 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Apr 09 11:27:14 2012 -0700"
      },
      "message": "AudioMixer uses downmix effect for multichannel content\n\nIn the AudioMixer structure associated with each track, add an object\n  that acts as the buffer provider when the track has more than two\n  channels of input in the mixer. This object, DownmixerBufferProvider,\n  gets audio from the actual buffer provider of the track, and applies\n  a downmix effect on it.\nThe downmix effect is created and configured when the track gets\n  created in AudioFlinger, which causes AudioMixer::getTrackName()\n  to be called with the new track\u0027s channel mask. It is released\n  when the track is disabled in the mixer.\n\nChange-Id: I05281ed5f61bef663a8af7ca7d5ceac3517c82db\n"
    },
    {
      "commit": "ccf89b54f973f11082150d02ed957f7e967fbc8b",
      "tree": "b3446119a9b6c03dcca98d1d9ee31a83adb8acad",
      "parents": [
        "63c1faa8dea7feb90255d31ef2a133d8f2818844",
        "5c94b6c7689a335e26a86e8a0d04b56dc627738e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 08:19:04 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 08:19:04 2012 -0700"
      },
      "message": "Merge \"AudioMixer can be configured for fewer max tracks\""
    },
    {
      "commit": "5c94b6c7689a335e26a86e8a0d04b56dc627738e",
      "tree": "05dcb7c6007c923a4f3ef04371e62834940a66b0",
      "parents": [
        "6da08fc33642b832d1cde2e46815a5fd67dd0016"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 17:01:29 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 17:27:10 2012 -0700"
      },
      "message": "AudioMixer can be configured for fewer max tracks\n\nChange-Id: I371b17cef071d083eecf35cd3627a3adff907a33\n"
    },
    {
      "commit": "17a736c3e1d062d7fc916329eb32aef8935614af",
      "tree": "7fb73e48de8641ce6ad7b65fb4204bc60cd3e5f0",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 08:52:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 14:12:01 2012 -0700"
      },
      "message": "Update comments\n\nChange-Id: I327663a020670d0a72ff57bd0b682e2ce0528650\n"
    },
    {
      "commit": "3b81acab52b7140c1b8b20be2d67be3e221637e7",
      "tree": "0b225360603f19ba2f60fb1cf7a616dfe51d99b1",
      "parents": [
        "1b094ee8f7fe7eca65bf3d2f983ba95eef6db93d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 15:26:23 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:41:56 2012 -0800"
      },
      "message": "Remove bit fields to improve performance\n\nuint16_t enabled is (mostly) changed to bool in a separate CL\n\nChange-Id: Ied9f8c034b2479cee9a8778cee7b8ff92ae75b7b\n"
    },
    {
      "commit": "a111792f1314479c649d1d44c30c2caf70c00c2a",
      "tree": "f67b5f32a61a259f292b7d0d992f31b8e2ff857c",
      "parents": [
        "761defc341c5ce9019a42919c441f035f665ec0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 26 10:53:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:39:07 2012 -0800"
      },
      "message": "Simplify code\n\nUse DefaultKeyedVector::valueFor to avoid extra test\nMake local variables as local as possible\nNo double parentheses\nNo typedef for single use\nNo parentheses around indirect function call\nNo AudioFlinger:: prefix when not needed\nRemove unnecessary casts\nRemove block with only one line\n\nSaves 128 bytes\n\nChange-Id: I3a87430eeb01b81e7b81a1c38f6fdd3274ec48f3\n"
    },
    {
      "commit": "4ff14bae91075eb274eb1c2975982358946e7e63",
      "tree": "e9e54fddb9832d30b69c2a11c9ed2884397f2f95",
      "parents": [
        "951bd8d1ad9581a414e171ad8605a9515d0ad667"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Feb 08 16:37:41 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:11 2012 -0800"
      },
      "message": "Upintegrate Audio Flinger changes from ICS_AAH\n\nBring in changes to audio flinger made to support timed audio tracks\nand HW master volume control.\n\nChange-Id: Ide52d48809bdbed13acf35fd59b24637e35064ae\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "99e53b86eebb605b70dd7591b89bf61a9414ed0e",
      "tree": "8939550ada02fe21121550a83952ebf7638c0dac",
      "parents": [
        "6dbc1359f778575d09d6da722b060a6d72c2e7c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 08:59:58 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:17:59 2012 -0800"
      },
      "message": "Update comments\n\nWe no longer put the filename at start of file.\n\nChange-Id: Ic435b159a23105681e3d4a6cb1ac097bc853302e\n"
    },
    {
      "commit": "63d2daed17ab749baa80bc808fb5083b688b771b",
      "tree": "735cfc77d2082c044816fe367f33401fd5b472c7",
      "parents": [
        "4f9b0c54011eb8fd2ccfb393c2dcd51cd07800e0",
        "c59c004a3a6042c0990d71179f88eee2ce781e3c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:39:39 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:39:39 2012 -0800"
      },
      "message": "Merge \"AudioFlinger methods const and inline\""
    },
    {
      "commit": "c59c004a3a6042c0990d71179f88eee2ce781e3c",
      "tree": "68e0c9bb6d5bb10a1a8263ebefbb5601946702ee",
      "parents": [
        "787bae0578fbaab6219ebf23494866b224d01438"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 14:06:11 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 15:25:24 2012 -0800"
      },
      "message": "AudioFlinger methods const and inline\n\nThis saves 1063 bytes and probably improves performance.\n\nChange-Id: I11cf0dfd925fbaec75e3d1b806852a538eae5518\n"
    },
    {
      "commit": "c19e22450e6e3d07594c935c7a9522e85e909e82",
      "tree": "2a81eb366d10425b83b6bbf9997d9c8813515ea1",
      "parents": [
        "787bae0578fbaab6219ebf23494866b224d01438"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 30 14:54:39 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 14:42:43 2012 -0800"
      },
      "message": "Use virtual destructors\n\nIt turns out to be just a comment, as all except AudioMixer are RefBase.\n\nThere are only a few performance-sensitive cases where it\u0027s worth thinking\nabout whether you need a virtual destructor, and the headache usually\noutweighs the benefit.\n\nChange-Id: I716292f9556ec17c29ce8c76ac8ae602cb496533\n"
    },
    {
      "commit": "5f29ca38b71506ad7c7cb9925efbddf588e9655b",
      "tree": "e67bef8a10e8705ebe0f43fbf49d27764a362040",
      "parents": [
        "25b248eb52a0a16adaef6b79c9d92cb88b9a2bc2",
        "54c3b66444ebfb9f2265ee70ac3b76ccefa0506a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 09 11:59:17 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 09 11:59:17 2012 -0800"
      },
      "message": "Merge \"By convention const goes before the type specifier\""
    },
    {
      "commit": "54c3b66444ebfb9f2265ee70ac3b76ccefa0506a",
      "tree": "2ae6ae86501101399d639f2a1227742c120e7ac8",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 07:46:30 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 08:00:59 2012 -0800"
      },
      "message": "By convention const goes before the type specifier\n\nChange-Id: I70203abd6a6f54e5bd9f1412800cc01212157e58\n"
    },
    {
      "commit": "88592eccaf6afcddd5f985955be92fe25205c680",
      "tree": "5a1795bd7aefe20d332f7388d8cddcadc3df841a",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef",
        "9c56d4ae6212c21ce5fd71ed534eb195983a07c1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 08:20:10 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 05 08:20:10 2012 -0800"
      },
      "message": "Merge \"Remove the notion of \"active track\" from mixer\""
    },
    {
      "commit": "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef",
      "tree": "1979692770dd902d0aa7e8c0760e496e13539e5c",
      "parents": [
        "7ab41c9f773ba599646f1b0d00955c1be80f92fd",
        "f6b1678f8f508b447155a81b44e214475ab634a8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 07:38:29 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 05 07:38:29 2012 -0800"
      },
      "message": "Merge \"Use the standard CC_LIKELY and CC_UNLIKELY macros\""
    },
    {
      "commit": "f6b1678f8f508b447155a81b44e214475ab634a8",
      "tree": "dabe2858dfed9133c6a270cd6b86877a9d3588b1",
      "parents": [
        "94023fa6744e24f26f0aba1699ec278649bd66df"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 09:51:17 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 07:33:45 2012 -0800"
      },
      "message": "Use the standard CC_LIKELY and CC_UNLIKELY macros\n\nSeveral source files privately defined macros LIKELY and UNLIKELY in terms\nof __builtin_expect. But \u003ccutils/compiler.h\u003e already has CC_LIKELY and\nCC_UNLIKELY which are intended for this purpose.  So rename the private\nuses to use the standard names.\n\nIn addition, AudioFlinger was relying on the macro expanding to extra ( ).\n\nChange-Id: I2494e087a0c0cac0ac998335f5e9c8ad02955873\n"
    },
    {
      "commit": "7ab41c9f773ba599646f1b0d00955c1be80f92fd",
      "tree": "02a8e0276a550d6748b64e6b4e165dd562712859",
      "parents": [
        "b8a805261bf0282e992d3608035e47d05a898710",
        "fe0698f9d44ca923ff1ba528f2c42019937ea5e2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 04 17:39:12 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 04 17:39:12 2012 -0800"
      },
      "message": "resolved conflicts for merge of 1a4b9939 to master\n\nChange-Id: I0c910d391a38a916d8431f7d1f5b82e39e1a66c2\n"
    },
    {
      "commit": "071ccd5a9702500f3f7d62ef881300914926184d",
      "tree": "2ffdfd9dbc064aa3d2a9b229f87b679220ef4f79",
      "parents": [
        "69aac3e6cd68e8c305a41b2677123db7662efd4b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 22 16:08:41 2011 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 22 16:08:41 2011 -0800"
      },
      "message": "audioflinger: fix clicks on 48kHz audio.\n\nThe calculation done in prepareTracks_l() for the minimum amount\noff frames needed to mix one output buffer had 2 issues:\n- the additional sample needed for interpolation was not included\n- the fact that the resampler does not acknowledge the frames consumed\nimmediately after each mixing round but only once all frames requested have been used\nwas not taken into account.\nThus the number of frames available in track buffer could be considered sufficient although\nit was not and the resampler would abort producing a short silence perceived as a click.\n\nIssue 5727099.\n\nChange-Id: I7419847a7474c7d9f9170bedd0a636132262142c\n"
    },
    {
      "commit": "9c56d4ae6212c21ce5fd71ed534eb195983a07c1",
      "tree": "417c958c4fd243f4edb7bc765f4dc1e709456ddc",
      "parents": [
        "bbaf8673f1d1dd79d1b7f474ca7111da58e84aff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 19 15:06:39 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 20 16:29:21 2011 -0800"
      },
      "message": "Remove the notion of \"active track\" from mixer\n\nThis is a first step towards making the mixer more object-oriented.\n\nChange-Id: Ifd445d0e471023a7f5c82e934736ffc95ba1b05b\n"
    },
    {
      "commit": "12d9702773c8a3242a44dd6528126c9ff0dade43",
      "tree": "a0184b1a6a55a924143411129a4cd13d9dbcaa08",
      "parents": [
        "bbaf8673f1d1dd79d1b7f474ca7111da58e84aff",
        "81a028fef62bcadf13fc8550067a3d29c918b3ca"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 20 10:29:49 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 20 10:29:49 2011 -0800"
      },
      "message": "Merge \"Remove dead code\""
    },
    {
      "commit": "81a028fef62bcadf13fc8550067a3d29c918b3ca",
      "tree": "9d2c12b20abcf5e1aad3522678e685b173db776b",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 09:53:12 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 19 15:55:47 2011 -0800"
      },
      "message": "Remove dead code\n\nChange-Id: Icf23f7f90fdeb660f4015f22cf239e6d05f5d03c\n"
    },
    {
      "commit": "f602a5f7f29e694a7da4c143737b74501c00477d",
      "tree": "c7edef89cc88918b8cb04168253664470de77036",
      "parents": [
        "d1e672acd8fa1af899f85ee2321327237028adf8",
        "bf71f1e7948406492376c6cbd5e6a30c8cb670e4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 15:10:36 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 15:10:36 2011 -0800"
      },
      "message": "Merge \"Use constants for 2 and 32\""
    },
    {
      "commit": "d1e672acd8fa1af899f85ee2321327237028adf8",
      "tree": "bdcc71f510c339222d386c07a0e40121f1ab15b9",
      "parents": [
        "b92bc47a05925c29efef0d66711b6d3f17f406e7",
        "3b21c50ef95fe4e7ac3426ca14b365749e66ff08"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 15:02:30 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 15:02:30 2011 -0800"
      },
      "message": "Merge \"Extract out audio DSP code to utility library\""
    },
    {
      "commit": "bf71f1e7948406492376c6cbd5e6a30c8cb670e4",
      "tree": "077a8a894c95655353bd5ffec7c4c93f1d36b9be",
      "parents": [
        "b92bc47a05925c29efef0d66711b6d3f17f406e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 13 11:52:35 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 14:55:05 2011 -0800"
      },
      "message": "Use constants for 2 and 32\n\nChange-Id: If820dfd58b6df258570750610a07af99598d9e53\n"
    },
    {
      "commit": "788040c5189bbdaf567ce4b29ffd1db08ea1020c",
      "tree": "75cf254063bf823fd2e5ff6c3504ecc2c37bb488",
      "parents": [
        "154a7fbda9b704bc1d23b6f17573016ebb5989be"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 05 08:19:00 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 13:28:33 2011 -0800"
      },
      "message": "Use switch in AudioMixer::setParameter\n\nReplace series of if/then/elses by easier-to-read switch.  Also return\nvoid instead of status_t, since callers weren\u0027t checking it. Assert on\nbad input parameters.\n\nChange-Id: Ie1f0a297977b28501d20e1af819afed9b4750616\n"
    },
    {
      "commit": "3b21c50ef95fe4e7ac3426ca14b365749e66ff08",
      "tree": "e3f9a8d6ab695bd1d4d494fbf1b9d80bcc25585c",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 09:52:39 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 11:42:03 2011 -0800"
      },
      "message": "Extract out audio DSP code to utility library\n\nChange-Id: Ib8ce72028a7ea30e82baa518e381370e820ebbd0\n"
    },
    {
      "commit": "6d4bf6eda04888144ec59cba4816a2cbb79b9e5c",
      "tree": "213424db0d71f1de94ea2789d272595287664bf6",
      "parents": [
        "b87c068727a15a3d3f0bfdcb758c76a097f5e869",
        "fba380a0b2c62684ce4272a05165965bae29d6a1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 07:30:14 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 07:30:14 2011 -0800"
      },
      "message": "Merge \"setActiveTrack and setBufferProvider can\u0027t fail\""
    },
    {
      "commit": "b87c068727a15a3d3f0bfdcb758c76a097f5e869",
      "tree": "49768247c538c838564c4546bc55cb3df572b56f",
      "parents": [
        "255adceb85bc23de61fb138ddb474852514b3b33",
        "1c48c3c61970527b97892ab6a2daae8eaac26964"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 07:29:57 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 07:29:57 2011 -0800"
      },
      "message": "Merge \"Simplify enable/disable mixing\""
    },
    {
      "commit": "fba380a0b2c62684ce4272a05165965bae29d6a1",
      "tree": "d0a89a2c45aa09a838c5f93108a3be8f5a80d4e5",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 15:46:46 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 15:55:51 2011 -0800"
      },
      "message": "setActiveTrack and setBufferProvider can\u0027t fail\n\nReturn void, not status_t, from setActiveTrack and setBufferProvider.\n\nThese methods returned status_t, but the callers never checked the\nreturn value.  Since these aren\u0027t externally visible APIs, they now\nreturn void, and assert on bad input parameters.\n\nChange-Id: I530ed29484596ae41e8659826ca425149c51c2a1\n"
    },
    {
      "commit": "1c48c3c61970527b97892ab6a2daae8eaac26964",
      "tree": "24fed87db69fcce3fb6f3b01bb72501445102c04",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 14:54:01 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 15:00:28 2011 -0800"
      },
      "message": "Simplify enable/disable mixing\n\nThe MIXING enum isn\u0027t needed, and now returns void instead of status_t.\n\nChange-Id: Ibe4ec24081d75ad4ab78b9c7191fc9077959c4e9\n"
    },
    {
      "commit": "362c4e697d8e9c034e964ac7b40227e054491547",
      "tree": "dde3ca3f11e00cc82f1b6a6bd7ebe7b1c24421c5",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 10:28:06 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 14:38:26 2011 -0800"
      },
      "message": "Audio C++ comments\n\nChange-Id: I84906ebb9dfcfa5b96b287d18364b407f02a30c1\n"
    },
    {
      "commit": "0d255b2d9061ba31f13ada3fc0f7e51916407176",
      "tree": "4df26e48710542386bddab7a0d1cbfa5d6835ac0",
      "parents": [
        "65580f9adf6c4d98449ad0716488f9fe3869aa5a"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue May 24 15:53:33 2011 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jun 01 10:55:29 2011 -0700"
      },
      "message": "Use channel mask instead of channel count for track creation\n\nRecord and playback objects (resp AudioRecord and AudioTrack)\nare created using a channel mask, but this information is lost\nin the mixer because only the channel count is known to\nAudioFlinger. A channel count can always be derived from a\nchannel mask.\n\nThe change consists in:\n- disambiguiting variable names for channel masks and counts\n- passing the mask information from the client to AudioFlinger\n and the mixer.\n- when using the DIRECT ouput, only verifying the format of\n the track is compatible with the output\u0027s for PCM.\n\nChange-Id: I50d87bfb7d7afcabdf5f12d4ab75ef3a54132c0e\n"
    },
    {
      "commit": "243f5f91755c01614a8cafe90b0806396e22d553",
      "tree": "d6f4e9f1593f468967f75a82f21d8058a93c5ed1",
      "parents": [
        "8ddeebb93cb41e7a8e9fe763afb6c6016b21fa61"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 28 16:52:51 2011 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 28 16:52:51 2011 -0800"
      },
      "message": "Fix issue 3479042.\n\nThe problem is that when an AudioRecord using the resampler is restarted,\nthe resampler state is not reset (as there is no reset function in the resampler).\nThe consequence is that the first time the record thread loop runs, it calls the resampler\nwhich consumes the remaining data in the input buffer and when this buffer is released\nthe input index is incremented over the limit.\n\nThe fix consists in implementing a reset function in the resampler.\n\nA similar problem was also present for playback but unoticed because the track buffer is always\ndrained by the mixer when a track stops. The only problem for playback was that the initial\nphase fraction was wrong when restarting a track after stop (it was correct after a pause).\n\nChange-Id: Ifc2585d685f4402d29f4afc63f6efd1d69265de3\n"
    },
    {
      "commit": "65ab47156e1c7dfcd8cc4266253a5ff30219e7f0",
      "tree": "da088916c7cadadcddf47467f20cc8b0b6ff7f41",
      "parents": [
        "98fe12aba55e8b8bb14b23c4c3cdba9a99a9753c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 14 17:59:35 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 14 17:59:35 2010 -0700"
      },
      "message": "move native services under services/\n\nmoved surfaceflinger, audioflinger, cameraservice\n\nall native services should now reside in this location.\n\nChange-Id: Iee42b83dd2a94c3bf5107ab0895fe2dfcd5337a8\n"
    }
  ]
}
