)]}'
{
  "log": [
    {
      "commit": "3a6c90aa0617666d9abc94c02b752d9eb3d64772",
      "tree": "150424841e6732f1d3a1c6df6139f8f307db0d2f",
      "parents": [
        "5e184b0d12f1ec436246a391da8d9355cc21ee08"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 15:07:51 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 31 12:22:09 2014 -0700"
      },
      "message": "Add FIXMEs to createRecord for fast capture\n\nChange-Id: I759be200fae32969212c52a409f46f2e704081e3\n"
    },
    {
      "commit": "010a1a1a552cdaad362cea8a0333b8906402dbcb",
      "tree": "d2f450bd5cecda7ce63e89d9f36b5877933115ad",
      "parents": [
        "e2a9c29f35e0c09782558542fc4cf9823779590e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 13 13:57:33 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 13 13:57:33 2014 -0700"
      },
      "message": "Revert \"Revert \"Convert AudioFlinger mSinkBuffer to flexible format\"\"\n\nThis reverts commit e2a9c29f35e0c09782558542fc4cf9823779590e.\n"
    },
    {
      "commit": "e2a9c29f35e0c09782558542fc4cf9823779590e",
      "tree": "31a860f1236fa1060cd66e375bbab8e9718ed365",
      "parents": [
        "fca092d953e04c7169242200f0ddb914a9f54ea4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 13 10:44:14 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 13 10:46:49 2014 -0700"
      },
      "message": "Revert \"Convert AudioFlinger mSinkBuffer to flexible format\"\n\nThis reverts commit e7e676fd2866fa4898712c4effa9e624e969c182.\n\nBug: 13450717.\nChange-Id: Ib80b0d14428fecce33c62003a1fcf83f71cee03b\n"
    },
    {
      "commit": "e7e676fd2866fa4898712c4effa9e624e969c182",
      "tree": "e34f072392608660e29684f42d43bad6a179ea37",
      "parents": [
        "98ef978df4e928f486d244c4d7f7ad9f13111e98"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 04 16:01:44 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 10 14:20:55 2014 -0700"
      },
      "message": "Convert AudioFlinger mSinkBuffer to flexible format\n\nChange-Id: I618d9c99a5f6f8c8d6a9f4b2d19e82c9ddc3b06e\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "98ef978df4e928f486d244c4d7f7ad9f13111e98",
      "tree": "3ea9f5800c87d0b52ae07fdb6be2b231d827558a",
      "parents": [
        "07c34a59fee02ab0732e84a2e2ff3b928de50ebc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 04 14:46:50 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 10 11:48:49 2014 -0700"
      },
      "message": "Add mEffectBuffer to AudioFlinger\n\nChange-Id: Icf97c50040bc127723d56eb4d2fb6e790a7253d9\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "69aed5f0f4a3be3996d1e78a0473e1a72c1547da",
      "tree": "fd8fcfcc236538dd9ef08f515e628b263933ee66",
      "parents": [
        "25c2dac12114699e90deb1c579cadebce7b91a97"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 25 17:24:40 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 18:45:57 2014 -0800"
      },
      "message": "Add MixerBuffer for accumulation of float audio\n\nPath into and out of MixerBuffer is set up, but not\ncurrently enabled.\n\nChange-Id: I9d50752607d22dd2a3d9cc7e053babf8dfb22958\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "25c2dac12114699e90deb1c579cadebce7b91a97",
      "tree": "bf71e59bf7a5286a0d28fb6ca111decafcf6fc57",
      "parents": [
        "09a5007b17acb49d25cfa386a2e2534d942e8854"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:56:00 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:57:59 2014 -0800"
      },
      "message": "Rename mixBufferSize to mSinkBufferSize in AudioFlinger\n\nChange-Id: I4d1d18d716fa3ad8c0e7cc87f5a2823422f504eb\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "2098f2744cedf2dc3fa36f608aa965a34602e7c0",
      "tree": "901ba9039b8baa3b33c82871e32430decceaac38",
      "parents": [
        "4d3c5bde85c5404d7927a770da90a5c9d09fb6a7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:00:06 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 27 14:22:08 2014 -0800"
      },
      "message": "Rename mMixBuffer to mSinkBuffer in AudioFlinger\n\nChange-Id: I1f55630425b8ce36e9df2aaf64e06a8960b69a47\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\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": "25f4aa83efaa9179e65a20583a6d441de2c3ff3f",
      "tree": "996653f52a07bb6dc99d058943f852f3182ea637",
      "parents": [
        "deca2ae0a7cf8bc54ff3f30b7dc39bbc78b94c0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 10:50:43 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:56:13 2014 -0800"
      },
      "message": "Move handleSyncStartEvent and clearSyncStartEvent to RecordTrack\n\nChange-Id: I611a63e63acf3eb17e2072c1a77b91fe9e62e36a\n"
    },
    {
      "commit": "deca2ae0a7cf8bc54ff3f30b7dc39bbc78b94c0d",
      "tree": "6c49429a735e24799b735c6f5488d67d3321afc2",
      "parents": [
        "6dd62fb91d82dedcfa3ab38c02eb0940b4ba932a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 10:25:56 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:56:13 2014 -0800"
      },
      "message": "Add _l suffix to readInputParameters/OutputParameters\n\nThey are always called while thread mutex is locked,\nor in the thread constructor.\n\nChange-Id: I56df71563a52a5cd6cea6fc0914df993519e1b74\n"
    },
    {
      "commit": "6dd62fb91d82dedcfa3ab38c02eb0940b4ba932a",
      "tree": "5c463a944686864894c2be528a52df9d275dd221",
      "parents": [
        "f3b785ae6ea135115b54ac58cedc12b444483902"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 05 16:35:58 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 18 12:52:35 2014 -0800"
      },
      "message": "Multi-client recording\n\nSupports multiple clients both at native sample rate and with resampling.\n\nChange-Id: Icea55b4fd30751761b7debaa3ce016c79e712d8d\n"
    },
    {
      "commit": "1d6fa7af1288b550faabe4ec2cf98684236723db",
      "tree": "a8801ca9a0925ba1faccf17acea4aa78d71a9d29",
      "parents": [
        "b82a9f105f89d6b3684c9f626918042bd8977912",
        "566be7c33fc56ae4c34168ecbee5316374f7e3c5"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 13:47:53 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 13:53:20 2014 +0000"
      },
      "message": "resolved conflicts for merge of 566be7c3 to master\n\nChange-Id: I7b1cc71057b2bd4f771e7bcf508a8c3abd6017ce\n"
    },
    {
      "commit": "377b2ec9a2885f9b6405b07ba900a9e3f4349c38",
      "tree": "b938e1d75a1beefae86244f287ca22f4a277740d",
      "parents": [
        "cdda7bf4d3ca9cad6979374a18dd5be79ea83d80"
      ],
      "author": {
        "name": "Kévin PETIT",
        "email": "kevin.petit@arm.com",
        "time": "Mon Feb 03 12:35:36 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 11:40:06 2014 +0000"
      },
      "message": "Make frameworks/av 64-bit compatible\n\nContains the necessary changes to make frameworks/av build and work\non a 64-bit machine.\n\nSigned-off-by: Craig Barber \u003ccraig.barber@arm.com\u003e\nSigned-off-by: Kévin PETIT \u003ckevin.petit@arm.com\u003e\nSigned-off-by: Ashok Bhat \u003cashok.bhat@arm.com\u003e\nSigned-off-by: Marcus Oakland \u003cmarcus.oakland@arm.com\u003e\n\nChange-Id: I725feaae50ed8eee25ca2c947cf15aee1f395c43\n"
    },
    {
      "commit": "4944acb7355b3aa25748fd25945a363a69d65444",
      "tree": "009b66c5edcb85e6974ee9462919fd72fba381c5",
      "parents": [
        "f74f213c0cd0612101e00a73704429dac1a92fe3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 08:39:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 11:22:31 2014 -0800"
      },
      "message": "Fix whitespace\n\nChange-Id: I9add0872030a26933f6b6dad1be299154611cc56\n"
    },
    {
      "commit": "f74f213c0cd0612101e00a73704429dac1a92fe3",
      "tree": "fb6e1719072d94be8180d6d3c54929e6e5053a2c",
      "parents": [
        "d9a4783985203c759ddcca784798ef395668fe05",
        "4c6a433d74d5ae8b9bc0557207e3ced43bf34a25"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 07 17:03:39 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 07 17:03:39 2014 +0000"
      },
      "message": "Merge \"AudioFlinger: Offload track transition fix\""
    },
    {
      "commit": "d9a4783985203c759ddcca784798ef395668fe05",
      "tree": "69faaa1bffd16d23216630c04c80ae42a23dba9f",
      "parents": [
        "c9583cba9913682e1c181675c6d0066292fb719d",
        "7844f679be8d94c5cdf017f53754cb68ee2f00da"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 07 17:03:31 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 07 17:03:32 2014 +0000"
      },
      "message": "Merge \"AudioFlinger: Modify flush handling for offload path\""
    },
    {
      "commit": "010c4c8ec50eb04ece15f792c508a3b869749310",
      "tree": "3527006df4e3bca1cb293ef49a3eb22efebae48e",
      "parents": [
        "85f06f640d364490dbf133f55e9d62d7c7c0db11",
        "49debee5bdddd7a1e0742a3ab66d4630bbe25ca2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 16:46:08 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 07 16:46:08 2014 +0000"
      },
      "message": "Merge \"Fix IoConfigEvent constructor initializer list\""
    },
    {
      "commit": "4c6a433d74d5ae8b9bc0557207e3ced43bf34a25",
      "tree": "d0447045cdae870c774e1b1f617916f059eeaf0f",
      "parents": [
        "7844f679be8d94c5cdf017f53754cb68ee2f00da"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Jan 15 12:31:39 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 06 11:49:51 2014 -0800"
      },
      "message": "AudioFlinger: Offload track transition fix\n\nTrigger state changes in OffloadThread on adding a new offload track.\n\nBug: 12530661\nChange-Id: I95b62764c7ac041d470702e86b951f812eb0e70f\n"
    },
    {
      "commit": "7844f679be8d94c5cdf017f53754cb68ee2f00da",
      "tree": "60b91c8d8d95f49d98b1c35110b6f4fe5498cb62",
      "parents": [
        "0f02f265123b7ef2fd6ac09ff70cde26eb5559ad"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Jan 15 12:32:55 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 06 11:48:22 2014 -0800"
      },
      "message": "AudioFlinger: Modify flush handling for offload path\n\nDo not allow an offload track to directly control the offload thread\nbehavior. OffloadThread can check for any pending flush reporting\nby its active tracks and decide to flush the HW or not.\n\nBug: 12530661\nChange-Id: Ib33f023c942f6c091b618004136b153c38a6eef6\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": "49debee5bdddd7a1e0742a3ab66d4630bbe25ca2",
      "tree": "06c99b9e21ed4b55a6a35337b9b214bf975bfa7f",
      "parents": [
        "0520e05f9083cf13fa7062629bc6606f4b39f08a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 31 16:54:54 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 03 07:41:50 2014 -0800"
      },
      "message": "Fix IoConfigEvent constructor initializer list\n\nFortunately this bug never showed up, because the parameter\nfield has not been used yet.\n\nChange-Id: I2b36e2b7e1dcc2039c494fc5ea4994d262435aac\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": "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": "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": "2b806406ac1ec680b6fe3aaa84c54bdc4e43ad8d",
      "tree": "b442aec39d3318a85e4eda692ced7fbc877df128",
      "parents": [
        "f10ffec18f930d92e1abe9200d60e746831841a7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 16:37:38 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 20 17:52:28 2013 -0800"
      },
      "message": "Change mActiveTrack to mActiveTracks vector\n\nThe size of mActiveTracks is still limited to 1 for now.\n\nChange-Id: Ia6b06b25d8c4709f087110ae29c589999407a2a2\n"
    },
    {
      "commit": "731076cc7857fe322eed018569a2a67f6eac0e54",
      "tree": "1aa3b6cdcd6fde4ac68d632eb0d94b2f3e3a4307",
      "parents": [
        "b4213a1252c23115f3fac77101adb33a9c6b9423",
        "06d6254823b8f7a46690369e57b5f149c94c9f65"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 13:13:41 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 15 13:13:41 2013 -0800"
      },
      "message": "am 06d62548: am d7e59228: audioflinger: do not use raw pointer for tracks\n\n* commit \u002706d6254823b8f7a46690369e57b5f149c94c9f65\u0027:\n  audioflinger: do not use raw pointer for tracks\n"
    },
    {
      "commit": "d7e59228caad3867794d847f6bf163c6495e9506",
      "tree": "f09784ce425a6928c56a932101752b63b21d8f44",
      "parents": [
        "7dae71d606ded1dbc2aa9733c3d98ffac57988f2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 12:02:28 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 12:11:39 2013 -0800"
      },
      "message": "audioflinger: do not use raw pointer for tracks\n\nCommit 9da3d95 surfaced a problem caused by the use of a raw\npointer to a track in offload thread implementation.\n\nPointers to tracks should always be weak or strong pointers.\n\nBug: 11708529.\nChange-Id: Ic48632532d186c9be8261f73cefdf824b9fbbd2b\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": "93e471f620454f7de73d190521568b1e25879767",
      "tree": "42b6c50f27f85233ba0967619ce8a6eeebe11f3f",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 19 08:40:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 04 15:48:55 2013 -0800"
      },
      "message": "Rename standby methods\n\nThreadBase::standby() returns the value of mStandby.\n\nRecordThread::standby() \"overrode\" ThreadBase::standby(), but with a\ndifferent meaning and no return value.  This meant you couldn\u0027t\naccess the parent\u0027s class definition within RecordThread.\n\nThis could be confusing, so this CL renames RecordThread::standby()\nto standbyIfNotAlreadyInStandby().\n\nChange-Id: I9196ee12701dd2dccdfaed922af2d7b8e8774676\n"
    },
    {
      "commit": "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d",
      "tree": "cc3ae62392a01c054b61af9ef606245854090394",
      "parents": [
        "1dfca7775f0b8352a0fd6cfed1e70075e5fa4e75",
        "7f8f758506a95d6fe5c0e52aa7b5ef82fb18861a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Oct 28 17:18:53 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 28 17:18:53 2013 -0700"
      },
      "message": "am 7f8f7585: am fd477974: AudioFlinger: more fixes for offload audio lost\n\n* commit \u00277f8f758506a95d6fe5c0e52aa7b5ef82fb18861a\u0027:\n  AudioFlinger: more fixes for offload audio lost\n"
    },
    {
      "commit": "fd4779740ec3e9e865d5514464df26d015354388",
      "tree": "11e6523dd9d2d04b6e0d3ea742968c6988646e2c",
      "parents": [
        "9cae217050aa1347d4ac5053c305754879e3f97f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 25 18:10:40 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Oct 28 14:17:22 2013 -0700"
      },
      "message": "AudioFlinger: more fixes for offload audio lost\n\nmStandby being false was not a reliable indication that\nsomething had been written to audio HAL.\n\nConsidering the last track in mActiveTracks vector as the\nlatest activated track was wrong as this is a SortedVector.\n\nBug: 11247103.\nChange-Id: I397d011c5afcdd779def3fe25aaae7669a472cfc\n"
    },
    {
      "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": "6a7327f110b86613e6e8c7de105c49803acacc1d",
      "tree": "d1d175d63235d698e88ab4b3e24881b5654b70cf",
      "parents": [
        "9138d32050411c04cc45c25094352cf8b6e01df9",
        "6edd8ca5b7e3d169db4314d2b994bc9d48e9e082"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 18 13:03:34 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 18 13:03:34 2013 -0700"
      },
      "message": "am 6edd8ca5: am 6a51d7ed: audioflinger: fix track terminated before playing\n\n* commit \u00276edd8ca5b7e3d169db4314d2b994bc9d48e9e082\u0027:\n  audioflinger: fix track terminated before playing\n"
    },
    {
      "commit": "6a51d7ed7062536ccc892c8850a34ed55cbc8d5c",
      "tree": "95746546a67c27a04a0e5bd82f9760d80ad5f0d9",
      "parents": [
        "dedc7b0fa23c21b525dc8abb572bb8161ad66a9b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 17 18:59:26 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 17 18:59:26 2013 -0700"
      },
      "message": "audioflinger: fix track terminated before playing\n\nWhen a track is terminated before any audio was written,\nwe should not send a drain request to the HAL. The drain\nwill be ignored and we will wait the async callback for ever.\n\nAlso fix a potential deadlock by not deleting a track with the\nthread mutex held: mPreviousTrack changed from a sp to a raw pointer.\n\nBug: 11247103.\nChange-Id: I0a4b47b099204c7c326d45d700234ab8f72d8eae\n"
    },
    {
      "commit": "3278eed31fcf82045ac00dcd549dda5270c88971",
      "tree": "b5a5423ca7a4464afb8f4182dc22b72dcb7c1917",
      "parents": [
        "d5ce2091c7e11c4d869f11f22d8a38a1aedcf3ad",
        "8580679e1780617d978d28a43e932314b86608ce"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Oct 15 05:05:01 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 15 05:05:01 2013 -0700"
      },
      "message": "am 8580679e: am 014e7fa2: Make Audio wakelock names less unique.\n\n* commit \u00278580679e1780617d978d28a43e932314b86608ce\u0027:\n  Make Audio wakelock names less unique.\n"
    },
    {
      "commit": "014e7fa2e90827d911c37bb0ce4d2e10e14d0bb3",
      "tree": "1eebc29942794f1688fde67b9056803b8194355a",
      "parents": [
        "b3cb72a17d9a472883e9e2faa18b42eac533fe99"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Oct 14 15:03:38 2013 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Oct 14 17:29:57 2013 +0100"
      },
      "message": "Make Audio wakelock names less unique.\n\nThese wakelocks now show up in the client process, where they\nmight cause wakelock overflows if AudioFlinger threads die often.\n\nThe client process should be agnostic of audio flinger threading,\nso don\u0027t make the wakelock names rely on audioflinger thread names.\n\nWakelock names now depend only on the audio flinger thread type, and\nnot the ID itself.\n\nbug: 11200551\n\nChange-Id: Ia1f71b569cb7502d617b77596abc245f461a6ec0\n"
    },
    {
      "commit": "5918e0cb64200f64632595f7aea6062c65d43353",
      "tree": "510acab52ad88f9772fd072235993a01f8332023",
      "parents": [
        "02627597fc4951e16b9002601e4cf3b1cc234c4b",
        "b5677882cf9a34bd3f2daf76d10951282ea9b083"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 04 11:08:26 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 04 11:08:26 2013 -0700"
      },
      "message": "am b5677882: am 8097068d: Merge \"Better recording wake lock accounting\" into klp-dev\n\n* commit \u0027b5677882cf9a34bd3f2daf76d10951282ea9b083\u0027:\n  Better recording wake lock accounting\n"
    },
    {
      "commit": "e14a5d6d2cc91dd2fc09ffdf7aa670b37da0795d",
      "tree": "ab8d3ea087c653c632068af36e443c5c3609cfe4",
      "parents": [
        "3d97e23fcd78f752443cb6c30a1ee39f49f1f987"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 03 08:51:24 2013 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 03 13:54:53 2013 -0700"
      },
      "message": "Better recording wake lock accounting\n\nCount wake lock use against the app that initiated the recording,\nnot against the media server.\n\nb/10985160\n\nChange-Id: Iae6e6c030b7f1c6081d9c79725d6990f60dadaaa\n"
    },
    {
      "commit": "a6c7d98033c161592a062c61eaa6b7fd635e3006",
      "tree": "ac0e06b5c5da9daad30aef9de4ff25dac7478c79",
      "parents": [
        "aceceea5e0d5772353e6049f51cc29084b76ead1",
        "0adc67dfc5cedb211c36f06849681a60a32f5805"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 30 14:12:28 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 30 14:12:28 2013 -0700"
      },
      "message": "am 0adc67df: Merge \"audioflinger: fix crash when starting offload thread\" into klp-dev\n\n* commit \u00270adc67dfc5cedb211c36f06849681a60a32f5805\u0027:\n  audioflinger: fix crash when starting offload thread\n"
    },
    {
      "commit": "4de95592980dba88a35b3dc8f3fd045588387a4f",
      "tree": "e871e1ad9318cdd21fe82eb6f44f687f366d1c60",
      "parents": [
        "1802399c7c4d8557922688f246df292703f417f1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 26 15:28:21 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 26 15:56:43 2013 -0700"
      },
      "message": "audioflinger: fix crash when starting offload thread\n\nPassing a sp to parent thread to AsyncCallbackThread() constructor\ncauses a strong reference to be acquired on the OffloadThread inside\nits constructor which causes an early launch of the thread loop\nwith unpredictable consequences.\n\nPass a wp to parent thread instead.\n\nAlso move the creation of the AsyncCallbackThread to\nreadOutputParameters() where mUseAsyncWrite is initialized which\nmakes more sense.\n\nAlso change the type of AsyncCallbackThread parent thread to PlaybackThread\ninstead of OffloadThread to allow a broder use of non blocking write which\nin theory is not limited to audio offload use case.\n\nBug: 8174034.\nChange-Id: I4b093b022030cd4f5eb8b8e477333e91098a6549\n"
    },
    {
      "commit": "0230a2a8a413076a138db4c4e1dea018104fd5e2",
      "tree": "1d78509ed7b005fe0bc3a998c8eda13a93f65876",
      "parents": [
        "d2b80a1fb90cb4dc3f569e716af0279c1e1ea72d",
        "c6bed216e3a759a855ac4b9b743fbaed2d5929c1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 11:22:17 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 20 11:22:17 2013 -0700"
      },
      "message": "am c6bed216: am a3b97ad2: Merge \"audioflinger: implement getTimestamp() for offloaded tracks\" into klp-dev\n\n* commit \u0027c6bed216e3a759a855ac4b9b743fbaed2d5929c1\u0027:\n  audioflinger: implement getTimestamp() for offloaded tracks\n"
    },
    {
      "commit": "d2b80a1fb90cb4dc3f569e716af0279c1e1ea72d",
      "tree": "9094262e799f5ff66acd45a0bae59a7de863349c",
      "parents": [
        "bd1be321f7d3626305c1c6d0b006768b5130fedd",
        "ce3e7cb0bd09e7861d417b7d45c1e5921f10a93f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 11:20:56 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 20 11:20:56 2013 -0700"
      },
      "message": "am ce3e7cb0: am fbb2609f: Merge \"audioflinger: fix lost offload thread resume event\" into klp-dev\n\n* commit \u0027ce3e7cb0bd09e7861d417b7d45c1e5921f10a93f\u0027:\n  audioflinger: fix lost offload thread resume event\n"
    },
    {
      "commit": "a3b97ad288e6808c54c6275eaac1bd53108d8f11",
      "tree": "eb4ee28ecd01cf4a4548004e8a2d9154ce0f2c73",
      "parents": [
        "fbb2609f132f23a983d376dec9ae6bfebfcacc4c",
        "accc147666bfd37fc8b4ef745f18a8c751555ec2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 16:56:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 20 16:56:34 2013 +0000"
      },
      "message": "Merge \"audioflinger: implement getTimestamp() for offloaded tracks\" into klp-dev"
    },
    {
      "commit": "accc147666bfd37fc8b4ef745f18a8c751555ec2",
      "tree": "a091aa566ed09e8efe881a16e3806ee4169de3f0",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 09:36:34 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 09:36:34 2013 -0700"
      },
      "message": "audioflinger: implement getTimestamp() for offloaded tracks\n\nBug: 9587132.\nChange-Id: Ie9d5f4cca96306d08bc9a2dbd6edd8953096702d\n"
    },
    {
      "commit": "ede6c3b8b1147bc425f7b923882f559a513fe23b",
      "tree": "ac3986f0521aa4a5af705299ab423ec9d5e98bfa",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 19 14:37:46 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 19 15:53:20 2013 -0700"
      },
      "message": "audioflinger: fix lost offload thread resume event\n\nIt was possible that a resume request signaled by addTrack_l()\nwhile waiting for an async write callback is lost. This is because\nmSignalPending was not set and waitingAsyncCallback_l() would pause the\nthread loop before executing prepareTracks_l().\n\nThe fix consists in using signal_l() method to wake the thread\nloop o that mSignalPending is set.\n\nAlso make sure that sleepTime is reset to 0 when resuming to make sure\nthat we write any remaining bytes to the HAL.\n\nBug: 10810347.\n\nChange-Id: If9a3b22cc3b9e6eb384a56c48c40e6258d0896ad\n"
    },
    {
      "commit": "bfc4214079875f0dc8c349e8c475d1813c234e67",
      "tree": "7f8695357953e7d7c143c262f14645406f724e2d",
      "parents": [
        "0f096cfb8b478e2035bbdc0efb0322103b1f392e",
        "99b84e8b013a6e0b926693067b00e82cfbe2ca4f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 06 13:33:01 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 06 13:33:01 2013 -0700"
      },
      "message": "am 99b84e8b: am 3b4529e0: audioflinger: remove async write race conditions\n\n* commit \u002799b84e8b013a6e0b926693067b00e82cfbe2ca4f\u0027:\n  audioflinger: remove async write race conditions\n"
    },
    {
      "commit": "3b4529e03c5fc7a44c22f9091ad15a269bfca3a8",
      "tree": "552d810348dc2ffd6018e58970a4cbbb39eceb5e",
      "parents": [
        "60c60df7db278d2fa5c90b0fa14f99a61d50272b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 05 18:09:19 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 06 18:09:03 2013 +0000"
      },
      "message": "audioflinger: remove async write race conditions\n\nRemove possible race conditions between async callback\nthread and offload thread when clearing and setting the\ndraining and write blocked flags.\n\nBug: 8174034.\nChange-Id: I7af10491f39dc0e7d7414862a9d8e763daa2e2b7\n"
    },
    {
      "commit": "f557872b594d15599bdb65efd91eb5adeb1d0840",
      "tree": "8df16a0c49bac71163035d11562e06bcc12a2490",
      "parents": [
        "30c296c153447f5c2bb5251928bf4d3c4e28e552",
        "908d3c09ca7f2ccb280aa5dc8d876099ff9a9d0f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 17:12:45 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 29 17:12:45 2013 -0700"
      },
      "message": "am 908d3c09: am 51ec03c2: Merge \"Implement Track::getTimestamp()\" into klp-dev\n\n* commit \u0027908d3c09ca7f2ccb280aa5dc8d876099ff9a9d0f\u0027:\n  Implement Track::getTimestamp()\n"
    },
    {
      "commit": "bd096fd9d8e5fc0e62f98807f4818a06f70d0812",
      "tree": "8ff27bce9f34e4bdd0f8e233494a24efef475a7d",
      "parents": [
        "573d80a8f463f648a515fc0975bf83951b272993"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 13:53:56 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:59:31 2013 -0700"
      },
      "message": "Implement Track::getTimestamp()\n\nusing a new timestamp latch in PlaybackThread, and\nAudioTrackServerProxy::framesReleased() which returns mServer.\n\nChange-Id: I1ebfba968c773faaab95648c272fd3ebd74718d6\n"
    },
    {
      "commit": "f777331418a86cd9fd709af898ef24a69967aeb4",
      "tree": "81b985eeffa164abe2155053d75c7a9f07fd3efb",
      "parents": [
        "c527a7c2b1bfd26e8f3086e1b653d56e521379d9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 13 16:00:42 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 14 17:18:59 2013 -0700"
      },
      "message": "Add ThreadBase::processConfigEvents_l()\n\nChange-Id: I6bcdc212a984c52ab98b0b0744943b4ecc1e1542\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": "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": "e92db4bdb575d897d6bbd5086761fa9387393c83",
      "tree": "05d3fd3203ceb9542ce5deacb5522177a9a2bf1f",
      "parents": [
        "412494b1711d18d7a3be2bb6022814c8ac46f473",
        "cf04c2cb8e031acc03c1c91cb1ccab15098c89b6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 18:45:02 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 12 18:45:02 2013 +0000"
      },
      "message": "Merge \"Pull up readyToRun into ThreadBase\""
    },
    {
      "commit": "b0e6b967c290c905c4c696df4a8ac9e9d591928b",
      "tree": "79a36e1b212adcdd6c52307f76e161c22b9aadec",
      "parents": [
        "14575a203b93cd5988738913b8589e5a7271a945",
        "c1fac191069774c7bfcb062edbb821ea56e7dbc0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 12 17:44:53 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 12 17:44:54 2013 +0000"
      },
      "message": "Merge \"Simplify the code that allocates mMixBuffer by removing mAllocMixBuffer\""
    },
    {
      "commit": "f874f1375d758c8a7a84572a94371fbd4085f0df",
      "tree": "c0e04f9c8414788c6f55d61bbf256cf92d29123e",
      "parents": [
        "2c03d0a2b741310c47d5f625cbdec4a4e4a0778e",
        "70949c47fbae3f836d15f040551d7631be3ed7c2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 08 16:47:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 08 16:47:17 2013 +0000"
      },
      "message": "Merge \"Pull up mBufferSize from RecordThread to ThreadBase\""
    },
    {
      "commit": "cf04c2cb8e031acc03c1c91cb1ccab15098c89b6",
      "tree": "0ca5546e422ad11837bd6db746d0411a7136a816",
      "parents": [
        "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 07:41:16 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 09:08:28 2013 -0700"
      },
      "message": "Pull up readyToRun into ThreadBase\n\nChange-Id: Ib150afd72c3b35d83599a61664e89302a8feb4b5\n"
    },
    {
      "commit": "c1fac191069774c7bfcb062edbb821ea56e7dbc0",
      "tree": "d3b0d0065f3797041fedb4c1ae5122d29098a711",
      "parents": [
        "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 07:41:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 09:01:11 2013 -0700"
      },
      "message": "Simplify the code that allocates mMixBuffer by removing mAllocMixBuffer\n\nChange-Id: I5ac41210251789a034d760309c50fe018f2442ce\n"
    },
    {
      "commit": "70949c47fbae3f836d15f040551d7631be3ed7c2",
      "tree": "4bed0b2a693f915ca1d92233664dec9d49e20e5a",
      "parents": [
        "77baebfe89c99415a0ee4c2ea87bfd8a0f9e51f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 07:40:12 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 06 08:48:29 2013 -0700"
      },
      "message": "Pull up mBufferSize from RecordThread to ThreadBase\n\nNow both playback and record threads have a HAL buffer size for fast\ntracks, and a potentially larger-sized buffer for normal tracks.\n\nChange-Id: I6f57b85ecece3cbd4e9e64b8c41c3352f7656912\n"
    },
    {
      "commit": "90e58b1fefc8caf70b34301a92bc86179580b6fc",
      "tree": "c3413197c464b11a3ea8ca846443cc7b15326582",
      "parents": [
        "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:16:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordThread::createRecordTrack_l use flags for fast tracks\n\nLook at client\u0027s request for a fast track in the flags parameter,\nand check whether the request can be satisfied.\n\nChange-Id: I65ddaeb1b85670fe9066076f638bfed0cda01c0d\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": "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": "548efc94813c1dec6e8cf6c085ae41ccb04827f1",
      "tree": "620319f408aa2fc988373767cd382572bf32f3a3",
      "parents": [
        "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 29 08:48:51 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Rename RecordThread::mInputBytes to the more generic mBufferSize\n\nThis prepares for using it in PlaybackThreads later\n\nChange-Id: Id90a92aa6372e4b69914b0008cef07296ca5d6a3\n"
    },
    {
      "commit": "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128",
      "tree": "064801660f69f98c8ed48db753902ac141d6bc32",
      "parents": [
        "2314e90eb8de63a7058297817125b94c1eac8019"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:37:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Move members from ThreadBase to PlaybackThread\n\nMove mNormalFrameCount and frameCountHAL(), since they\u0027re not used by\nrecord threads.  Also comment which fields are updated by readParameters().\n\nChange-Id: I5fc0a8a89cc637976f22d49271a5a3e136dab4e1\n"
    },
    {
      "commit": "f6ed423af92a56ef54bba23eba883b1f21448b54",
      "tree": "bad2f734e3191cbfa3c72bdeadcd88f5015e6ba8",
      "parents": [
        "2eeca1f8e18106d118f7268cb9d8597539685c5c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:16:27 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 12:43:12 2013 -0700"
      },
      "message": "Treat mChannelCount as uint32_t consistently\n\nmChannelCount was 8-, 16-, or 32-bits\n\nChange-Id: I2cc2fedf3e33144e5c8bbd9894763282d9217f63\n"
    },
    {
      "commit": "afbbc6c5f6bc470d504dcf24ceb3ac21d57fb78d",
      "tree": "6fc44421938fc9a08c232580f581b89f95259ed3",
      "parents": [
        "420ea49539d23ab305a7b33c0854a7a475493dd4",
        "a8356f663014e7d4c27869629af83d8bb3441e19"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 14:27:55 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 14:27:56 2013 +0000"
      },
      "message": "Merge \"Simplify RecordTrack::stop()\""
    },
    {
      "commit": "a8356f663014e7d4c27869629af83d8bb3441e19",
      "tree": "af015d8d690aaf239b940d0ca65576bd795719c9",
      "parents": [
        "fc38a2e0268b5e531db2975c3a81462a3593c861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:37:52 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:44:51 2013 -0700"
      },
      "message": "Simplify RecordTrack::stop()\n\nChange-Id: Ib959c1e9dc9544d12277ce11bea445118b2e0521\n"
    },
    {
      "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": "c6ae3c8a261794fd4445e4e152d1ada074a3f92f",
      "tree": "c8f6493eb0a0f6af812ea5909096cf91818fce05",
      "parents": [
        "ee5e8d3e8dc61f8fb1fa725278d63802074c10c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 09:08:51 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:38:58 2013 -0700"
      },
      "message": "Fix theoretical memory leak in mConfigEvents\n\nChange-Id: I137f70676c8919661e716c33e0dd9c25c2b6285c\n"
    },
    {
      "commit": "fb1fdc9d6603aa228362e7349451f6455c9849c2",
      "tree": "1caac6c881db81bcfedb596b292ce62ecbaf6a2c",
      "parents": [
        "551ababe67ce31778000d52958e53e1c56e1a294"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:03:19 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:08:15 2013 -0700"
      },
      "message": "Add comments\n\nChange-Id: Ifbf3a46a4183c8abc0feee1c588953ab10303cc1\n"
    },
    {
      "commit": "bf04b5860182d8f4130dcb5d6d88ee68a58c99cd",
      "tree": "b68876a589e063ce86f7e24f6e5aff918995f6e2",
      "parents": [
        "ea2839f133b989b770cc5f093aca4754e5523599",
        "ab7d72f0804fbb7e91ad9d2a16f826d97e20e5d0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Mar 02 00:04:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 02 00:04:35 2013 +0000"
      },
      "message": "Merge \"media.log cleanup\" into jb-mr2-dev"
    },
    {
      "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": "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": "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": "ecd9389c8712aedeb2a79823ea0e4fb842684269",
      "tree": "32635746bbb3c6f4b4297754d0d388fae41c6574",
      "parents": [
        "3051df27261e9952c0e642dec548515250e85f6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 12 20:43:58 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 12 20:43:58 2013 +0000"
      },
      "message": "Revert \"Temporary additional logging to investigate bug\"\n\nThis reverts commit 3051df27261e9952c0e642dec548515250e85f6a\n\nChange-Id: I8bf5c3e91b65bd20de26f480c367c2854b62373c\n"
    },
    {
      "commit": "3051df27261e9952c0e642dec548515250e85f6a",
      "tree": "848a1795333131b9fac0c7be0b791f7f69a330d4",
      "parents": [
        "272ab546940054ad7991bef4b3a36f15175721cd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 12 12:12:42 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 12 12:40:18 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\nBug: 6490974\nChange-Id: I4c030f171343fe4b483eae0ddea4427118d8d4b1\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": "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": "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"
    }
  ]
}
