)]}'
{
  "log": [
    {
      "commit": "106e8a42038f9e90d5ff97f8ab6f1a42258bde9e",
      "tree": "af631b5e756cf711d5d9d34db2dffe02cf64e7e3",
      "parents": [
        "0dbb356050d0db9e0043dd43045c1864a933332b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 02 13:37:12 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 13 11:38:18 2012 -0700"
      },
      "message": "const methods\n\nChange-Id: I92e32ee16274c032c9d0ce910676be2a7fa52471\n"
    },
    {
      "commit": "ee578c0330319f04a48bccbdb26b53fea0388d04",
      "tree": "883382e0eabdcdff6c04a7df4b50d9cebffaf1c7",
      "parents": [
        "d8f178d613821c3f61a5c5e391eb275339e526a9"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Mon Jul 23 17:05:46 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Aug 08 11:28:15 2012 -0700"
      },
      "message": "AudioFlinger: Better handling for master volume/mute\n\n(cherry picked from commit 93d906837e0e89aa1d9c913ab2b531b809f9bb9e)\n\n\u003e AudioFlinger: Better handling for master volume/mute\n\u003e\n\u003e Changes to address bug 6842827.\n\u003e\n\u003e When a HAL is loaded, cache whether or not the HAL supports\n\u003e set_master_volume/mute in the AudioHwDevice structure.  Store an\n\u003e AudioHwDevice in AudioStream(In|Out) structures instead of just an\n\u003e audio_he_device_t.  This give threads (PlaybackThreads in\n\u003e particular) access to the cached capabilities.\n\u003e\n\u003e When setting master volume/mute, change the system to always set the\n\u003e setting on all HAL which support it and also to set the setting on all\n\u003e PlaybackThreads.  Change PlaybackThreads to apply the setting at the\n\u003e in SW mix stage of the pipeline if its assigned HAL does not support\n\u003e the setting, or to ignore the setting of the assigned HAL does support\n\u003e it.\n\u003e\n\u003e Change-Id: Ia14137a30b4c3ee6f2d7ddcc8cba87bf5eec87f4\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: Icb6bc13764e100a2003eb1dee2231132ab287d98\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "d8f178d613821c3f61a5c5e391eb275339e526a9",
      "tree": "93038d06c70535eeebc364e9f86cedbec074802c",
      "parents": [
        "3478eaa23c19dbbe473be70e8f3cc0c904d2465c"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Fri Jul 20 14:51:35 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Aug 08 11:28:15 2012 -0700"
      },
      "message": "Change audio flinger to user HAL master mute if available\n\n(cherry picked from commit 91de9b56282d126ffb36344266af5fee3cefcfdd)\n\n\u003e Change audio flinger to user HAL master mute if available\n\u003e\n\u003e Hand merge from ics-aah\n\u003e\n\u003e \u003e Change audio flinger to user HAL master mute if available: DO NOT MERGE\n\u003e \u003e\n\u003e \u003e Replicate the pattern used for HAL master volume support to make use\n\u003e \u003e of master mute support if the HAL supports it.  This is part of the\n\u003e \u003e change needed to address bug 6828363.  Because of the divergences\n\u003e \u003e between ICS and master, this change will need to be merged by hand.\n\u003e \u003e\n\u003e \u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\u003e \u003e Change-Id: I6d83be524021d273d093bcb117b8f2fe57c23685\n\u003e\n\u003e Change-Id: I32280582905c969aaec2bb166ec5c61df82d737a\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: I5cd709187221d307fe25c5117ccaadca5f6b197b\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "510a3d6b8018a77683dac466127ffd0af34bef6e",
      "tree": "1f3410b20a4dcbe77dd9b40800bdd569ceaff384",
      "parents": [
        "25f0d7ba1987de61c75f8c68b19de48e0ad9736c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 16 14:24:34 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 01 09:11:11 2012 -0700"
      },
      "message": "Start adding support for multiple record tracks\n\nReplace single mTrack by vector mTracks.\nDestroy record tracks similarly to playback tracks.\nDump all record tracks, in addition to the active record track.\n\nChange-Id: I503f10b51928b6b92698fe1c51a9ddd3215df1f4\n"
    },
    {
      "commit": "0ec23ce0d1ff79566c402bc30df3074f6e25a22b",
      "tree": "8925eca2b9f4b9bccb7fa4d032ab80070179912d",
      "parents": [
        "e4e2a37dbe2a4d923232305549101f779a2e3638"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 12:56:08 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 27 14:54:48 2012 -0700"
      },
      "message": "Clean up start() parameters\n\nDocument where int is used instead of AudioSystem::sync_event_t\n  (probably because of a header file dependency).\nTrackBase::start() and RecordTrack::start() don\u0027t need default parameters.\n\nChange-Id: I82f4a4d078be900f3aa4bd926697e32f5ed68ec8\n"
    },
    {
      "commit": "e4e2a37dbe2a4d923232305549101f779a2e3638",
      "tree": "7038669149e9478745fbb5e05f320cee8fd5cb88",
      "parents": [
        "3dca4c7a5622fc6aa03397d749c4b4c1201cc4f3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 23 12:55:09 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 27 14:49:58 2012 -0700"
      },
      "message": "Extract methods to enter standby and standby mode\n\nAlso move initial standby from to threadLoop to avoid a race condition.\n\nChange-Id: I65afca83c36fb41b983b3b1d3dab35d4029560e3\n"
    },
    {
      "commit": "0a7af18d0308295405491f86603e3d119450aba0",
      "tree": "bed6e2fe6df1d948db29bc84ff5d0a3bee02d6a6",
      "parents": [
        "58e5aa34f01d663654d8bafad65db1dda42161ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 16:09:19 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 25 14:48:11 2012 -0700"
      },
      "message": "Use valueAt instead of editValueAt when possible\n\nChange-Id: I885b169f4b176a6b5c2ca9a534214b4ffff1700e\n"
    },
    {
      "commit": "58e5aa34f01d663654d8bafad65db1dda42161ff",
      "tree": "706a80113457f48feae3eab9f8720bcc3da2b397",
      "parents": [
        "1d491ff06f4b9c90ff24fe953b90d0843eaf1c04"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 20 14:08:14 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 25 14:43:19 2012 -0700"
      },
      "message": "effect_descriptor_t const correctness\n\nChange-Id: Iad008f20d35a18acf500f773900164552fd0c19e\n"
    },
    {
      "commit": "1d491ff06f4b9c90ff24fe953b90d0843eaf1c04",
      "tree": "006faa29a2ad0ca2ea18c8e876c43749d72d138d",
      "parents": [
        "bf5bea96f236adb5eef78c2f414ef82b3602a0f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 16 14:28:13 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 25 14:41:03 2012 -0700"
      },
      "message": "Fix races in AudioRecord stop()\n\nChange-Id: Id0ac1915f57fef4a938c7f90989c1162a8b6c51c\n"
    },
    {
      "commit": "be5f05e0fdfc4e3799653702187861a2afa072ee",
      "tree": "1cc15fea099c579aded967ec174f00307b2517eb",
      "parents": [
        "cf9465b83405a1ec26a164b079d9898c09d87fcd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 18 15:24:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 20 11:08:14 2012 -0700"
      },
      "message": "Internal dump methods return void not status_t\n\nOnly the IAudioFlinger::dump() needs to return a status_t.\n\nChange-Id: Iffeb2a7db4846df850b6b2ed960276f1fd75dba0\n"
    },
    {
      "commit": "bb4350d3b9e9485ae59e084de270f86aecef8066",
      "tree": "2f38f108eb3dd420695cd07cd47a55ea030d51b5",
      "parents": [
        "cb4184c917f88a3c8d70c8bc6b99fc951b11cc37"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 15:56:38 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 19 09:05:12 2012 -0700"
      },
      "message": "Use audio_devices_t more places\n\nChange-Id: Id0ace02ca6f480a6c46e11880acf6cdc66d83184\n"
    },
    {
      "commit": "d96c5724818fb47917bb5e7abe37799735e1ec0e",
      "tree": "e7cc73da27068c8c770e53fe0ed00bf7276aea5f",
      "parents": [
        "dcda3b325f465aa6ec2be11db1c56c8a5e867f33"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 13:44:49 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 16 11:57:11 2012 -0700"
      },
      "message": "Don\u0027t call virtual methods in destructor\n\nThe result of calling virtual methods from a destructor is undefined.\n\nChange-Id: I0fd4a19626e5ae564a60b753315b5f6c4b8d1f2c\n"
    },
    {
      "commit": "1ea6d23396118a9cfe912b7b8a4e6f231e318ea2",
      "tree": "31327ae0fe7ad1e34a3766bf6246c26752704ce7",
      "parents": [
        "68337edf595a0c345ba4b8adcd4f1e541a1d7eb7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 14:31:33 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 13 16:35:52 2012 -0700"
      },
      "message": "Use atomic ops for thread suspend count\n\nThere was a theoretical but unlikely race if two binder threads\nexecuted suspend() or restore() concurrently.  Also added comments.\n\nChange-Id: I0908acc810b83bdd66455b27ca3429de1662a2cd\n"
    },
    {
      "commit": "1879fff068422852c1483dcf8365c2ff0e2fadfc",
      "tree": "f374fae563e2854ce20b4da16e9cae0d883aecd7",
      "parents": [
        "bf04a5d7f287fc712e0ed91849dc85c90c1e182d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 11 15:36:59 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 12 13:43:08 2012 -0700"
      },
      "message": "Add tid parameter to IAudioFlinger::openRecord\n\nNot yet implemented\n\nChange-Id: I35523fb15ad71727ecc9f4bb870f07e4b7397dc4\n"
    },
    {
      "commit": "39c54f68804c1ce5c85ec588f3c2c63447a807b4",
      "tree": "04b272355171e4dbfbc95652c477011264ad1518",
      "parents": [
        "4fe1ec4f40b58abff6cec147aa786cb65698161a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 09:12:23 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 11 09:02:23 2012 -0700"
      },
      "message": "Remove dead code\n\nChange-Id: If22a6c4e572b0734eba0c5a7ce29a2c61c581e5d\n"
    },
    {
      "commit": "04270daf50f0c602d7c57a257a693e68246cbeb7",
      "tree": "bebd6ac579df8b08aca04b61b2292c42c9b6aefc",
      "parents": [
        "254af180475346b6186b49c297f340c9c4817511"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 12:55:49 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 15:51:29 2012 -0700"
      },
      "message": "Record overflow cleanup\n\nAdd comments and rename one method for clarity\n\nChange-Id: I04a9147e46e88a072256c0211b112d52202419e2\n"
    },
    {
      "commit": "254af180475346b6186b49c297f340c9c4817511",
      "tree": "bee0e313aaa97645167e86f4678e513ab38d1c99",
      "parents": [
        "4d2132c866228eaef563e8141ebf06aa25ee9ff7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 14:59:05 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 10:05:31 2012 -0700"
      },
      "message": "Use audio_channel_mask_t more places\n\nUse it in AudioSystem::getOutput(), AudioSystem::getInput(),\nIAudioPolicyService::getOutput(), IAudioPolicyService::getInput(),\nand various other places in AudioFlinger.\n\nNot done: AudioTrack and OutputDescriptor.\n\nChange-Id: I70e83455820bd8f05dafd30c63d636c6a47cd172\n"
    },
    {
      "commit": "2df8f55055fe431a508148cf525df1ba40f03113",
      "tree": "1ab69032f07ee78a7de0df5c64ca801744f0ca15",
      "parents": [
        "a34f8ec169986c5a28600c0decaa4e2db70df8e4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 16:46:23 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 08:38:01 2012 -0700"
      },
      "message": "Add comments on use of volatile for track count\n\nand add acquire load at the read\n\nChange-Id: Ib41a58f5b1f6af87a8bd63d3f77d2ec0e48cb479\n"
    },
    {
      "commit": "a34f8ec169986c5a28600c0decaa4e2db70df8e4",
      "tree": "d3a4830dd528dbef48be7e9f919217d69f91f269",
      "parents": [
        "9f34a36d9cdb9595c288e50ffe00da038bc8abb9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 21 12:57:49 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 08:34:14 2012 -0700"
      },
      "message": "Remove \u0027volatile\u0027 from mMute and add comments\n\nChange-Id: I386ba27b2305a397aba70331c6bf0d35ea727cf6\n"
    },
    {
      "commit": "9f34a36d9cdb9595c288e50ffe00da038bc8abb9",
      "tree": "6b7e7720d4856de8d88b44f5eae3f62993761b2e",
      "parents": [
        "7d6c35bf132a46c0a8a9826491882495fc98bd8c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 16:46:41 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 08:28:31 2012 -0700"
      },
      "message": "Whitespace and indentation\n\nChange-Id: I424052b4ff9218147a5cfc8e6dcd67fe8105d229\n"
    },
    {
      "commit": "6648821933dc06c0b09ab2c8b32135edddcd4291",
      "tree": "7f39b4c3e3fdb1376a6cb3d0f8007bc3eaaf2fda",
      "parents": [
        "94479fd5405642c67efd14cebe722feb9cbe6e77"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 21 12:57:20 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 17:06:27 2012 -0700"
      },
      "message": "AudioFlinger::getBuffer() always returns non-NULL\n\nChange-Id: I543d3db507597cacbfdad5d9ea71732137fe54fb\n"
    },
    {
      "commit": "01542f2704f39956da09ae2840e192dab760091f",
      "tree": "596fdb0f5c6a2e9490db1bc87e4c65d028849ba3",
      "parents": [
        "c1dae24a08b67b98e18e4239d4f3a74d600d353c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 12:46:15 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 12:11:09 2012 -0700"
      },
      "message": "Only write to mDevice once\n\nThis fixes a bug where readers might see intermediate values.\nAlso add comments about how mStandby and mDevice are used.\n\nChange-Id: Idc84e56c21381a45137a2ca5ff9c57d437201869\n"
    },
    {
      "commit": "c1dae24a08b67b98e18e4239d4f3a74d600d353c",
      "tree": "d0923bff8eb16c7b060a37379dc2fc9a298e8554",
      "parents": [
        "2c75ef40330522fb50bbd7a0aa105573355b323c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 13:13:53 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 16:25:07 2012 -0700"
      },
      "message": "Remove debug code HAVE_REQUEST_PRIORITY and SOAKER\n\nChange-Id: I73a2afe72d8acb53e57e6b4e6fb5133e22b7875a\n"
    },
    {
      "commit": "a5f44ebaf58911805b4fb7fb479b19fd89d2e39b",
      "tree": "8221f3963c5be8d22bde7c3afdf98c1654333950",
      "parents": [
        "dd8104cc5367262f0e5f13df4e79f131e8d560bb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 25 11:38:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 03 11:35:41 2012 -0700"
      },
      "message": "audioflinger: fix effect disconnect deadlock\n\nFix possible deadlock when several EffectHandles on the same\nEffectModule are destroyed simultaneously:\n A wp on an EffectHandle should not be promoted to a local sp\nwith ThreadBase mutex held as the EffectHandle destructor can be\ncalled when the sp gets out of scope which will call\nThreadBase::disconnectEffect() and try to acquire the mutex.\n\nUse raw pointers instead of weak pointers for the list of handles\non an EffectModule.\n\nBug 6679606.\n\nChange-Id: Ice8b602fb03a7d363c44ce3dced8a53540d96270\n"
    },
    {
      "commit": "dd8104cc5367262f0e5f13df4e79f131e8d560bb",
      "tree": "46c95f24576ec352d7d5d363606db9a46a44e9c3",
      "parents": [
        "f1da96d8cf60842538e00a9c950cc451f7da2c10"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 12:42:44 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 10:24:45 2012 -0700"
      },
      "message": "Use audio_channel_mask_t more consistently\n\nIn IAudioFlinger::createTrack() and IAudioFlinger::openRecord(),\ndeclare input parameter to use correct type audio_channel_mask_t.\n\nIn IAudioFlinger::getInputBufferSize(), input parameter is now channel mask\ninstead of channel count.\n\nRemove unused IAudioFlinger::channelCount(audio_io_handle_t).\n\nIn AudioRecord::getMinFrameCount() and AudioSystem::getInputBufferSize(),\ninput parameter is channel mask instead of channel count.\n\nChange-Id: Ib2f1c29bea70f016b3cfce83942ba292190ac965\n"
    },
    {
      "commit": "f1da96d8cf60842538e00a9c950cc451f7da2c10",
      "tree": "b64f770259b25809f5fa1820a686f1cafb8de0e1",
      "parents": [
        "415fa7599f48494f99206b8d6e1974abb52c5923"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 16:10:16 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 10:22:13 2012 -0700"
      },
      "message": "Remove longStandbyExit\n\nIt was never set (the assignment was within an \"if\" that was never true).\n\nChange-Id: I01cc68e9df6b190eece621b2aa9858b4361880ce\n"
    },
    {
      "commit": "415fa7599f48494f99206b8d6e1974abb52c5923",
      "tree": "3cfdad6a05f9bece6cefc1bcaffc4f0a81f577c8",
      "parents": [
        "d5903ec1332630f2992a6f0d5ca69d13a185c665"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 16:11:18 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 10:18:11 2012 -0700"
      },
      "message": "Fix uninitialized field EffectModule::mPinned\n\nAlso mark EffectModule::mId and EffectModule::mSessionId const, and\ndocument the initialization of other fields in EffectModule.\n\nChange-Id: Ic1ca008e75e9b5924743ffc35bef80057f3a0669\n"
    },
    {
      "commit": "dbabf8a7dfe3aa8bf0ed169220d2009d5891fef2",
      "tree": "f47fbc6fcbd7bbbf07c13c67496addb69720717b",
      "parents": [
        "a0108697f86d8625eb7ad3f13e422427fe7573ca",
        "651f9e7c972b58a49066081187161268bcf9237a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 01 09:36:38 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jul 01 09:36:38 2012 -0700"
      },
      "message": "am 651f9e7c: am 717e1286: audioflinger: fix auxiliary effect attachment\n\n* commit \u0027651f9e7c972b58a49066081187161268bcf9237a\u0027:\n  audioflinger: fix auxiliary effect attachment\n"
    },
    {
      "commit": "717e128691f083a9469a1d0e363ac6ecd5c65d58",
      "tree": "70761520a17703d543262ebe7778f51a360d7923",
      "parents": [
        "33e28dd3c033641f4db9d1b99c7c88d6d08c61f7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 29 16:36:52 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 29 17:03:53 2012 -0700"
      },
      "message": "audioflinger: fix auxiliary effect attachment\n\nAuxiliary effects (Reverb) are global effects and as such follow\nthe default rule which is to attach them to the output thread that\nhandles music streams by default. This causes a problem when several\nthreads are eligible to handle music streams as tracks can be attached\nto either thread based on criteria unknown when teh effect is created.\n\nThe fix consists in moving the auxiliary effect if necessary when an\nAudioTrack is attached to it and this track is not on the same\noutput thread.\n\nBug 6608561.\n\nChange-Id: Ib32c3cabc731b2046aba728be1771982999c6069\n"
    },
    {
      "commit": "22167855ff9af7b13fda669ca27c67a037a7d585",
      "tree": "173d9cb6b65734e259df2b311a4e3e18956fe49b",
      "parents": [
        "5f12136299918ea30555f3481668ec0dbb775e5f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 20 12:26:32 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 20 12:26:32 2012 -0700"
      },
      "message": "audioflinger: fix setStreamOutput()\n\nAudioFlinger::setStreamOutput() should also work for direct outputs.\nAlso ignore the destination output specified to match the expected\nbehavior which is to invalidate all tracks using the specified stream\ntype so that they can be re created on the correct ouput thread.\n\nDo not send STREAM_CONFIG_CHANGED event wich is ignored by AudioSystem\nanyway since the stream to output cache has been removed.\n\nChange-Id: I13d9d47922923b630dd755717875424c16be4637\n"
    },
    {
      "commit": "c15d6657a17d7cef91f800f40d11760e2e7340af",
      "tree": "c4346cb0fcde7483e42900aecce64df96250889b",
      "parents": [
        "b7acdfb8068bf408ed859dfdd441b4a8722eb12a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 14:52:57 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 11 11:39:54 2012 -0700"
      },
      "message": "Add audio watchdog thread\n\nChange-Id: I4ed62087bd6554179abb8258d2da606050e762c0\n"
    },
    {
      "commit": "28ed2f93324988767b5658eba7c1fa781a275183",
      "tree": "07ba39f61d41aa6ff2af76dc2c9122a102c92059",
      "parents": [
        "a4f7e0e9a0e92a063f1b3a08988cf46e2cf1fa94"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 07 10:17:54 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 08 10:09:22 2012 -0700"
      },
      "message": "Reduce underruns in screen off, esp. with EQ\n\nAdd MonoPipe APIs to specify setpoint.\nUse screen state to configure pipe setpoint.\nFix a long-standing bug where pipe sleep time was excessive,\n  which interacted poorly with governor and low clock frequencies.\n  Now it deducts the elapsed time since last write(),\n  which was significant when there was EQ and low clock frequency.\n\nBug: 6618373\nChange-Id: I6f3b0072c2244aeb033ef0795ad164491a164ff5\n"
    },
    {
      "commit": "f06c2ed50e1db871ae9eb2bd15a196064f8c278c",
      "tree": "a6e809ffab6281359f5c22166113cb2039579f68",
      "parents": [
        "67c0a58e05f4c19d4a6f01fe6f06267d57b49305"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Jun 06 09:52:31 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jun 07 09:16:27 2012 -0700"
      },
      "message": "Take latency and current time into account for visualization\n\nBuffer more data, and return the data that is currently being\noutput from the audio output, to ensure that visualizations are\nsmooth and responsive even when the audio output has a large\nlatency and/or large buffers.\nb/6522728\n\nChange-Id: I401637f01be7600b3c594a55c869036c13b206c0\n"
    },
    {
      "commit": "67c0a58e05f4c19d4a6f01fe6f06267d57b49305",
      "tree": "0bfb89de1a57ad53abbd6314e6352538ab1a6317",
      "parents": [
        "ab9071b8d1b375418eb797c9a790da71de644344"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 01 19:31:12 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 05 12:50:16 2012 -0700"
      },
      "message": "audioflinger: various fixes on direct output\n\nVarious fixes in direct output playback thread implementation:\n- threadLoop_write() was broken for playback threads that do not\nuse a pipe sink.\n- output buffer size calculation was hard coded for stereo.\n- removed software volume that was implemented for PCM stereo\nformat only: the audio HAL has to implement volume if needed\nfor direct outputs.\n\nChange-Id: If211b4489be9af395435707b8cf0388cce1347b2\n"
    },
    {
      "commit": "399930859a75d806ce0ef124ac22025ae4ef0549",
      "tree": "2471b70dedc0bb33f7310de8ae0e5622344c6f82",
      "parents": [
        "1295bb4dcff7b29c75cd23746816df12a871d72c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 13:40:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 04 08:27:25 2012 -0700"
      },
      "message": "State queue dump\n\nBug: 6591648\nChange-Id: Iac75e5ea64e86640b3d890c46a636641b9733c6d\n"
    },
    {
      "commit": "893a05479c96f911d02beb0443da3ed6508143a7",
      "tree": "ba9fba13c28e13b555313231bfb4cbaba39d81b1",
      "parents": [
        "83410a85993ad6f5f0c122036ff0bda42bf1d4f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 10:32:06 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 14:39:20 2012 -0700"
      },
      "message": "Fix fast track leak if out of normal track names\n\nBug: 6580402\nChange-Id: I3ac7f012062c35833147f47ba822eb4bf532a824\n"
    },
    {
      "commit": "91b14c4c144d0cc957a427cffc02ba10d0615677",
      "tree": "dd7c1027319b6783cdc493bf4d37afb2537a2879",
      "parents": [
        "91b0d43a27b3a1cebd75270f953f3fb9fa4f2047"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 30 12:30:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 30 12:38:27 2012 -0700"
      },
      "message": "audioflinger: fix effect problem during underrun\n\nWhen an audio track underruns, the input buffer of the\ncorresponding effect chain (if any) must be cleared, otherwise\naudio from previous mixer run will be fed again to the effect process\nfunction.\n\nBug 6551652.\n\nChange-Id: I5cd02196745f756c85af82d6937e9dc54369b37f\n"
    },
    {
      "commit": "e737cda649acbfa43fc1b74612a83f2fac9aa449",
      "tree": "01ac3aaf0b68473c7e21c3056547b87a54f89f0f",
      "parents": [
        "8d9846c0693b7651b243f0161caa86be506f764a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 22 18:55:44 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 22 19:06:51 2012 -0700"
      },
      "message": "audioflinger: refine latency latency calculation.\n\nThere is an audio pipe between the normal mixer output and the fast\nmixer to cope for scheduling delays and buffer size difference.\nThis pipe depth was not taken into account in latency calculation.\n\nAdding the pipe contribution to the latency significantly improves A/V sync.\n\nBug 6520569.\n\nChange-Id: I5584908e8aa8a02170eb38b22b4370eea800a235\n"
    },
    {
      "commit": "fbae5dae5187aca9d974cbe15ec818e9c6f56705",
      "tree": "101ef33da2a18e0cb1c70a0e1ae085450dc60396",
      "parents": [
        "cd8a36fdc49a823f78d45e8e1a464dc261553b26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 21 09:17:20 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 21 12:36:06 2012 -0700"
      },
      "message": "Keep a copy of most recent audio played\n\nChange-Id: I6b2f97881c39998a2fae9ab79d669af6c0a37e94\n"
    },
    {
      "commit": "88cbea8a918bbaf5e06e48aadd5af5e81d58d232",
      "tree": "add79cd641d5e2ab4be79f49ca63680fa0e86962",
      "parents": [
        "e00e0485b0aa1e432be8c639da0eb5285942777b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 15 07:39:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 17 15:04:31 2012 -0700"
      },
      "message": "Display pipe underrun counters in dumpsys\n\nThe normal mixer writes it\u0027s submix to a pipe, which is read by the fast\nmixer.  Now dumpsys media.audio_flinger display the raw underrun counters\nwhen fast mixer tries to pull from the pipe but doesn\u0027t get enough frames.\n\nChange-Id: I72505f149f9e12802784da654a651d43734e1c79\n"
    },
    {
      "commit": "44a957f06400a338e7af20b3d16c4c4ae22a673c",
      "tree": "505dc33ba379c96f6ef5e07ac28843b1bbab8115",
      "parents": [
        "2986460984580833161bdaabc7f17da1005a8961"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 15 15:26:05 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 15 15:30:03 2012 -0700"
      },
      "message": "Fix static track activity ref counting\n\nWhen a static AudioTrack underruns, it means that playback is over.\nAs apps do not necessarily stop playback explicitly, AudioFlinger\nshould call stopOutput() to decrease activity ref count in\naudio policy manager.\n\nBug 6486311.\n\nChange-Id: I1ea722c443780329ded6310c958b24726e918d16\n"
    },
    {
      "commit": "2986460984580833161bdaabc7f17da1005a8961",
      "tree": "bd8aa210c0faee61dc45e23479e29cfc85f313c2",
      "parents": [
        "dfa29ab13647f22b30b2de34d4830c9e815bf120"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 08 18:57:51 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 14 17:20:12 2012 -0700"
      },
      "message": "Fix issues with synchronous record start.\n\n- Added a timeout in case the trigger event is never fired.\n- Extend AudioRecord obtainBuffer() timeout in case of\nsynchronous start to avoid spurious warning.\n- Make sure that the event is triggered if the track is\ndestroyed.\n- Reject event if the triggering track is in an incompatible state.\n\nAlso fix a problem when restoring a static AudioTrack after\na mediaserver crash.\n\nBug 6449468.\n\nChange-Id: Ib36e11111fb88f73caa31dcb0622792737d57a4b\n"
    },
    {
      "commit": "09474df67278c0cd621b57c4aef1deaec4d8447f",
      "tree": "eafcf9a62df5202c4a0628a9ac9798b7c49dd08b",
      "parents": [
        "d08f48c2ad2941d62b313007955c7145075d562c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 10 14:48:07 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 08:56:45 2012 -0700"
      },
      "message": "Improve underrun handling for fast tracks\n\nMaintain more accurate accounting of type of underrun.\nAutomatically remove track from active list after a series of \"empty\" underruns.\n\nChange-Id: If042bf80e1790dcaaf195c99dc9c0ed9b55382c1\n"
    },
    {
      "commit": "d08f48c2ad2941d62b313007955c7145075d562c",
      "tree": "3cce1d96d82032c977f1f185b8dca8a829b581f6",
      "parents": [
        "94f60e297b9e45fac387cf10b6ce1acc067cb4a1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 01 18:14:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 08:25:39 2012 -0700"
      },
      "message": "Fix stopping process for fast tracks\n\nPreviously, the state of a fast track \"wiggled\" back and forth at the end.\n\nNow it goes through these transitions:\n  active -\u003e stopping_1 -\u003e stopping_2 -\u003e stopped\n\nThis CL is only for fast tracks, and does not change how\nnormal tracks work.\n\nChange-Id: Icc414f2b48c46dda63cfa6373ca22d033dd21cd4\n"
    },
    {
      "commit": "810280460da5000785662f6c5b0c7ff3ee0a4cb3",
      "tree": "e098121453bef74dc47c00bb294db78daeebce19",
      "parents": [
        "6e66e4a9ffcb202beb2bcedb85c7d6f9ff391b4c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 30 18:15:12 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 30 18:15:12 2012 -0700"
      },
      "message": "Temporary fix for both normal tracks \u0026 fast tracks\n\nIf there is at least one active fast track, it forces a mixer\nstatus of ready, which messes up the logic for normal track underruns.\n\nChange-Id: I9de2fcaef090e2c2f99682333af3d3dd618b0d6b\n"
    },
    {
      "commit": "288ed2103d96f3aabd7e6bea3c080ab6db164049",
      "tree": "dec8e7b3a993e86baa8916ba70dcd6b3c053d062",
      "parents": [
        "0c0abd4ad26971b5fba94734137fe0bb1a590ab6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 17:52:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 30 13:00:31 2012 -0700"
      },
      "message": "Fix race condition for non-started fast tracks\n\nThis required re-implementing how fast tracks are considered active.\nNow, they use the same logic as normal tracks, except underrun is ignored.\n\nOther changes:\n - add framesReady() to AudioBufferProvider interface\n - rebased\n - add track underrun counter state to fast mixer dump state\n - move dumpsys header to Track::appendDumpHeader()\n   so it closer to where tracks are dumped\n - display track state in dumpsys as a character code\n - measure and display warmup time and cycles in dumpsys\n - copy in the presentation complete code\n - add ExtendedAudioBufferProvider for framesReady() which returns size_t\n - simplify underrun tracking\n - deferred reset track after stop()\n - add comments\n\nChange-Id: I7db8821bc565230ec76da1f9380fe3fb09735e5b\n"
    },
    {
      "commit": "83faee053cfd4251dbb591b62039f563ffdac399",
      "tree": "ca170f9a6c1a715ecc00ef49fc600aad92a23e11",
      "parents": [
        "209ec37b27a4fb6c92005c91ecf993ec19a3d430"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 27 18:24:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 27 19:00:37 2012 -0700"
      },
      "message": "AudioFlinger: fix stop detection for static tracks\n\nThe end of playback and end of presentation detection was broken for\nstatic AudioTracks (tracks using shared memory buffers passed by client).\n\nThe mixer should not wait for a minimal amount of frames to be available to mix\na static track otherwise the last frames might never be consumed.\n\nA static track should be removed from active list in case of underrun even if not\nstopped().\n\nIssue 6411521.\n\nChange-Id: I66a2c1a77e98149e5049a223a6f04c3b8c5ad11a\n"
    },
    {
      "commit": "da747447c1d4b5205469b4e94485b8769df57a97",
      "tree": "7171032a464dba232449b98c16709e672ae97b82",
      "parents": [
        "940335776b6d4eb91b13c4e56bc20bed3ac0011b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 25 18:53:13 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 26 10:36:28 2012 -0700"
      },
      "message": "AudioFlinger: fix tracks ready for mixing logic.\n\nCommit fec279f5 broke the logic allowing to wait for an application\nto provide frames for mixing in the case of several active tracks.\n\nThis was causing audio gaps when playing music and superposing a\nsound Fx (keyboard clicks...).\n\nIssue 6185007.\n\nChange-Id: Id0fad150d0b615646d6b1387c0de8ca944d228f6\n"
    },
    {
      "commit": "58912562617941964939a4182cda71eaeb153d4b",
      "tree": "f0d9551f41e729540b5c0bc23bd5f0b4682d346e",
      "parents": [
        "a08f041125c7688aa33aef1b229278641ae1c375"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 03 10:45:00 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 23 09:24:28 2012 -0700"
      },
      "message": "AudioFlinger normal mixer uses FastMixer\n\nChange-Id: I3131bb22d2d057e9197a2ebfa6aa1cfaab9e5321\n"
    },
    {
      "commit": "3acbd053c842e76e1a40fc8a0bf62de87eebf00f",
      "tree": "1d6dcc01039a1af770131c6b427efa27a2e5755f",
      "parents": [
        "f853499c6a088ef8506cacbb3ccdffa87e0cec3e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 10:39:56 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Apr 22 14:50:01 2012 -0700"
      },
      "message": "Configure policy of mediaserver threads\n\nChange-Id: Ifd825590ba36996064a458f64453a94b84722cb0\n"
    },
    {
      "commit": "0ca3cf94c0dfc173ad7886ae162c4b67067539f6",
      "tree": "bc156e7822e663626b78ec2ad09ef3970fbb48c5",
      "parents": [
        "ee685f6d19a6cc3b0bf02e69eb5dea11a2aeb601"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 09:24:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 15:04:46 2012 -0700"
      },
      "message": "rename audio policy output flags\n\nChange-Id: I27c46bd1d1b2b5f96b87af7d05b951fef18a1312\n"
    },
    {
      "commit": "1c345196edc61694f29307a1826a64a0d26028dc",
      "tree": "425a9fb3abcd532f061d45d74ddf0a04b88bac3a",
      "parents": [
        "9fbdee13d09447550dd22ae72c2dbabdce7f0a80"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Tue Mar 27 14:00:17 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 10:14:32 2012 -0700"
      },
      "message": "TimedAudio: Track of the number of pending frames.\n\nThis is a manual merge from ics-aah\n\n\u003e TimedAudio: Track of the number of pending frames.\n\u003e\n\u003e Keep track of the number of frames pending in the timed audio queue so\n\u003e we can implement framesReady in O(1) time instead of O(N).  This\n\u003e change partially addresses bug 6020970; the bug will be completely\n\u003e addressed once this change has been up-integrated into master.\n\u003e\n\u003e Change-Id: I599eb15ea1f6d715b97b30e65214fb6fadd169df\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: I6cbbbc3afc8efd066fe94865326ede0c6b3db2bd\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "9fbdee13d09447550dd22ae72c2dbabdce7f0a80",
      "tree": "9568a7d3610f1596b8da38cc921c3782691391cd",
      "parents": [
        "b34364269683363ca54aeed4952937cf37da7e06"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Mon Mar 26 17:51:46 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 10:14:32 2012 -0700"
      },
      "message": "TimedAudio: Fix a cause of audio popping.\n\nThis is a manual merge from ics-aah\n\n\u003e TimedAudio: Fix a cause of audio popping.\n\u003e\n\u003e Fix an issue with buffer lifecycle management which could cause audio\n\u003e pops on timed outputs.  There were two issues at work here.\n\u003e\n\u003e 1) During trim operations for the queued timed audio data, buffers\n\u003e    were being trimmed based on their starting PTS instead of when the\n\u003e    chunk of audio data actually ended.  This means that if you have a\n\u003e    very large chunk of audio data (larger than the mixer lead time),\n\u003e    then a buffer at the head of the queue could be eligible to be\n\u003e    trimmed before its data had been completely mixed into the output\n\u003e    stream, even though the output stream was fully buffered and in no\n\u003e    danger of underflow.\n\u003e 2) The implementation of getNextBuffer and releaseBuffer for timed\n\u003e    audio tracks was not keeping anything like a reference to the data\n\u003e    that it handed out to the mixer.  The original architecture here\n\u003e    seemed to be expecting a ring buffer design, but timed audio tracks\n\u003e    use a packet based design.  Pieces of packets are handed out to the\n\u003e    mixer which then frequently will hold onto that chunk of data\n\u003e    across two mix operations, using the first part of the chunk to\n\u003e    finish a mix buffer and then using the end of the chunk for the\n\u003e    start of the next mix buffer.  If the buffer that the mixer is\n\u003e    holding a piece of got trimmed before the start of the next mix\n\u003e    operation, it would return to its heap and could be filled with who\n\u003e    knows what by the time it actually got mixed.  On debug builds,\n\u003e    they seem to get zero\u0027ed out as they go back to the heap causing\n\u003e    obvious pops in presentation.\n\u003e\n\u003e This change addresses both issues.  Trim operations are now based on\n\u003e ending presentation time for a chunk of audio, not the start.  Also,\n\u003e when the head of the queue is in flight to the mixer, it can no longer\n\u003e be trimmed immediately, merely flagged for trim by the mixer when the\n\u003e mixer finally does call releaseBuffer.\n\u003e\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\u003e Change-Id: Ia1ba08cb9dea35a698723ab2d9bcbf804f1682fe\n\nChange-Id: I2c5e2f0375c410f0de075886aac56ff6317b144c\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\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": "a4c5a550e2a3bc237179b8684e51718e05894492",
      "tree": "be7b6d154763ed772738a0126d10e6317920767d",
      "parents": [
        "1a9ed11a472493cac7f6dfcbfac2064526a493ed"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 29 10:12:40 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 04 08:44:57 2012 -0700"
      },
      "message": "audio policy: load audio hw modules.\n\nAudio HW modules are now loaded upon request from audio policy manager\naccording to the configuration in audio_policy.conf.\nRemoved hard coded HW module loading by AudioFlinger at init time.\nAdded methods to IAudioFlinger and AudioPolicyInterface\nto control the loading of audio HW modules.\nAdded methods to open an output or input stream on a specific hw module.\n\nChange-Id: I361b294ece1a9b56b2fb39cc64259dbb73b804f4\n"
    },
    {
      "commit": "1a9ed11a472493cac7f6dfcbfac2064526a493ed",
      "tree": "5f4a3c6856f294b3c0371afd87df96277215107b",
      "parents": [
        "290ca3a767a974ce9d041e5bcb0c69153f7851d5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 20 18:36:01 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 03 16:53:25 2012 -0700"
      },
      "message": "audio policy: add configuration file\n\nremoved outputs to stream mapping cache in audio system: the output for a\ngiven stream type must always be queried from audio policy manager as the cache\nis not always updated fast enough by audioflinger callback.\n\nremoved AudioFlinger::PlaybackThread::setStreamValid() not used anymore if\nstream to output mapping is not cached.\n\nChange-Id: Ieca720c0b292181f81247259c8a44359bc74c66b\n"
    },
    {
      "commit": "73d227557ba5192735356bacab9f77b44980793b",
      "tree": "7c7f0e72f5ffa5ff5920c35c3ad03b6b821e831f",
      "parents": [
        "2d6486f9112a6f0d23f17eaaad94bac62e16caab"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 13:38:30 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 02 11:26:18 2012 -0700"
      },
      "message": "AudioFlinger track flags and server\u0027s fast policy\n\nChange-Id: I72358c8e6829d173b3e60ced8a8babc089869fac\n"
    },
    {
      "commit": "0bf65bdde04b8e66c998ff37e2b2afafddddfa33",
      "tree": "3d80772f82336a6272ce05b019b09012c0b0b8df",
      "parents": [
        "deeb1282621f3177ad667360b40eef8e4fedb298"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 18:32:53 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 02 11:09:14 2012 -0700"
      },
      "message": "const methods and comments\n\nChange-Id: Ifd16750174fdb15b72507787502b587562ffc99e\n"
    },
    {
      "commit": "a011e35b22f95f558d81dc9c94b68b1465c4661d",
      "tree": "3f8c46c8c7e30f36c3b629174a26bc4ca2a860b2",
      "parents": [
        "b4c0c4b800332fe55c60aa328ece8d849cee3a4d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 29 15:51:43 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 29 19:50:49 2012 -0700"
      },
      "message": "implemented synchronous audio capture\n\nAdded the infrastructure to support the synchronization of playback and\ncapture actions on specific events.\nThe first requirement for this feature is to synchronize the audio capture\nstart with the full rendering of a given audio content.\nThe applications can further be extended to other use cases\n(synchronized playback start...) by adding new synchronization events and\nnew synchronous control methods on player or recorders.\n\nAlso added a method to query the audio session from a ToneGenerator.\n\nChange-Id: I51f1167290d9cafdf2fbcdf9e4785156973af44c\n"
    },
    {
      "commit": "b83d38feeeb88a8a2a6219e1fca2480b5a14fb0d",
      "tree": "7e1392f0427d0300d8140ef0a6c18dc32f393831",
      "parents": [
        "8f7f7ad54c698cb57a2a369cf1ae5b917853917b",
        "a075db4ff9b086ac2885df77bb6da0869293df92"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 26 07:16:37 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 26 07:16:37 2012 -0700"
      },
      "message": "Merge \"IAudioFlinger::createTrack and openRecord flags\""
    },
    {
      "commit": "c5c49398584f2399af905a931e556ed6e0a29cd4",
      "tree": "0da87ace16edf4a3b992ca9a9934d34b73450ebd",
      "parents": [
        "ccf89b54f973f11082150d02ed957f7e967fbc8b",
        "f99590187e2e3f1cf6f093063170edec269cac5d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 08:29:18 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 08:29:18 2012 -0700"
      },
      "message": "Merge \"Clean up Track constructor\""
    },
    {
      "commit": "f99590187e2e3f1cf6f093063170edec269cac5d",
      "tree": "6eebb059b54519d1208ca349e63fc4cf452bc4d5",
      "parents": [
        "6da08fc33642b832d1cde2e46815a5fd67dd0016"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 11:14:37 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 17:15:12 2012 -0700"
      },
      "message": "Clean up Track constructor\n\nThe \u0027thread\u0027 parameter can never be NULL.\nUse constructor initialization list when possible.\nMake more members const.\nOnly put the relevant code under \"if (mCblk !\u003d NULL)\".\nAdd comment about track name leak.\n\nChange-Id: Ib963390a69bed1999638cc982a759edd1d5f4712\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": "a075db4ff9b086ac2885df77bb6da0869293df92",
      "tree": "2496dbf3d7fbb569b843780535bcea450157eb25",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:22:44 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 09:04:23 2012 -0700"
      },
      "message": "IAudioFlinger::createTrack and openRecord flags\n\ncreateTrack and openRecord don\u0027t need the \"old\" flags parameter,\nwhich was either audio_policy_output_t or audio_in_acoustics_t\nshifted left by 16 bits.  But they do need \"new\" flags, which\nare defined by the application use case.  Initially, the only\napplication use case flag is timed output, but others are planned.\n\nFor output, the audio_policy_output_t flags are passed to\nAudioSystem::getOutput, which returns an audio_io_handle_t, and that\nhandle is then passed to createTrack. So createTrack doesn\u0027t need the\nold flags parameter.\n\nFor input, the audio_in_acoustics_t flags are passed to\nAudioSystem::getInput, which returns an audio_io_handle_t, and that\nhandle is then passed to openRecord. So openRecord doesn\u0027t need the\nold flags parameter.\n\nChange-Id: I18a9870911846cca69d420c19fe6a9face2fe8c4\n"
    },
    {
      "commit": "e53b9ead781c36e96d6b6f012ddffc93a3d80f0d",
      "tree": "4bcde0bc9a797851ec1bee4f630c8c4f0735f623",
      "parents": [
        "b87396f9ebabbb7b47683bceca96cbe635a1ca00"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 16:29:55 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 11:09:47 2012 -0700"
      },
      "message": "Whitespace and indentation\n\nFix indentation to be multiple of 4.\nMake it easier to search:\n  sp\u003c not sp \u003c to\n  \"switch (...)\" instead of \"switch(...)\" (also \"if\" and \"while\")\nRemove redundant blank line at start or EOF.\nRemove whitespace at end of line.\nRemove extra blank lines where they don\u0027t add value.\n\nUse git diff -b or -w to verify.\n\nChange-Id: I966b7ba852faa5474be6907fb212f5e267c2874e\n"
    },
    {
      "commit": "73f4bc33e0d458933460250a47c64aa868c05f97",
      "tree": "556b3eb2a31d5a986ec7213dfac598aa821b2091",
      "parents": [
        "470aa50c36089fbe0427557f7cf4464dd26a1c52"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 12:08:48 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 15:14:24 2012 -0700"
      },
      "message": "Inline applyVolume() into threadLoop_mix()\n\nAlso the declaration of applyVolume in PlaybackThread was dead.\n\nChange-Id: I4b1a9848d07d3d7f340baea05b17f667c78df868\n"
    },
    {
      "commit": "470aa50c36089fbe0427557f7cf4464dd26a1c52",
      "tree": "4daa77f30c176aa51be2337d52e21046b04c1f39",
      "parents": [
        "2d6ef93773465cd3e66146fac35050a472c589f7",
        "1998661fdb6b0b5ae103e047e3d653c5da1b99e3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 15:05:51 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 12 15:05:51 2012 -0700"
      },
      "message": "Merge \"Remove unnecessary friend declarations\""
    },
    {
      "commit": "2d6ef93773465cd3e66146fac35050a472c589f7",
      "tree": "2a4a9d42d5911e3f04712560014671ab742465ca",
      "parents": [
        "0643d428cebcfe885ec2777253d45ee6e05da6fe",
        "688aac7675f18bdd7bff13334759e20bc4e6c390"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 15:05:21 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 12 15:05:21 2012 -0700"
      },
      "message": "Merge \"Remove virtual from methods that don\u0027t need it\""
    },
    {
      "commit": "66fcab972e9218d47c58a915f391b2f48a09903a",
      "tree": "f0c7144368a2371c0032dac6e511d0a711296bae",
      "parents": [
        "d64f3a376536a993fe6d81730b8b7b738500435e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 14:59:21 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 08:58:26 2012 -0700"
      },
      "message": "Merge dup code at thread entry and param change\n\nThis CL is mostly just cleanup, but there are a couple of fixes marked\n\"FIX\" below.\n\nMerge the duplicate code that was at the beginning of threadLoop() and\nafter a parameter change.  cacheParameters_l() is now called at entry to\nthreadLoop() and after any parameter change.  It re-calculates all values\nthat are derived from parameters, and caches them in instance variables.\n\nupdateWaitTime_l():\n - FIX activeSleepTime depends on mWaitTimeMs, which was initially set\n   to infinity.  updateWaitTime_l() was not called at entry to\n   threadLoop(), so activeSleepTime was not set correctly before the\n   first parameter change.\n\n - FIX reversed the order of calls after parameter change\n   for the same reason so that updateWaitTime_l() is called before\n   calculating values that are derived from wait time.\n\n - marked it private since now it\u0027s only called from DuplicatingThread\n\nChange-Id: If2607d2ed66c6893d910433e48208a93c41fb7e9\n"
    },
    {
      "commit": "18868c5db2f90309c6d11e5837822135e4a0c0fa",
      "tree": "58c7505f59a1a93ab729fc039aa5cb1eaa49652e",
      "parents": [
        "f2015b625cd6bea86da7401e725332c35b90e7cf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 09:15:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 15:32:22 2012 -0800"
      },
      "message": "Use audio_policy_output_flags_t consistently\n\nThis affects:\n - IAudioFlinger::openOutput\n - AudioTrack::AudioTrack\n - AudioTrack::set\n - apps that call these\n\nChange-Id: I26fb281bac6cb87593d17697bc9cb37a835af205\n"
    },
    {
      "commit": "688aac7675f18bdd7bff13334759e20bc4e6c390",
      "tree": "1c210a88c1cff71f1117b54fc347802ee7bdc390",
      "parents": [
        "083c154162c88a9f63aeaa10a4b52dd454bda9ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 10:30:26 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 12:48:18 2012 -0800"
      },
      "message": "Remove virtual from methods that don\u0027t need it\n\nChange-Id: I30e17e61aae25b036436c0e270313c80c43e5f06\n"
    },
    {
      "commit": "1998661fdb6b0b5ae103e047e3d653c5da1b99e3",
      "tree": "bddc97b4c0bfb6c5367f8189a328ac869a8f2759",
      "parents": [
        "083c154162c88a9f63aeaa10a4b52dd454bda9ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 12:07:30 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 12:18:48 2012 -0800"
      },
      "message": "Remove unnecessary friend declarations\n\nAdd comments to the remaining friends, so we know what is left if we\ndecide to remove them later.\n\nChange-Id: I1de929257dc4700960f77902cda3d303177c72cf\n"
    },
    {
      "commit": "53d76dbe7c55821e89d9da02e7a563f7fb45de87",
      "tree": "3d1b5bcc6724a00ae58939712be4b28d068225c9",
      "parents": [
        "f3c2e3bd65449b413c378219e08c71bf744cfbf3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 12:32:47 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 16:18:57 2012 -0800"
      },
      "message": "Replace hard-coded 3 by FCC_2 to simplify searches\n\nChange-Id: I92881d04e8378307f849fb343071a58d181a68b4\n"
    },
    {
      "commit": "fec279f5a0bfaa2a42e91ab6dfa0282baeee308b",
      "tree": "8ab1678442af7a516a6d12d34c42e2a3d43a7dd6",
      "parents": [
        "3dbe8acdeb2309eab0c22dd1c8d732c7e94d3413"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 07:47:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 07:52:57 2012 -0800"
      },
      "message": "Mixer status cleanup\n\nUse mPrevMixerStatus for DirectOutputThread also.\nRemove the MIXER_CONTINUE logic and use MIXER_IDLE instead.\nRename the field mixerStatus to mMixerStatus.\nRename local variable back to mixerStatus.\n\nChange-Id: I0a8145fc856c6c5ff8b784b6176ef3c4d8eb7408\n"
    },
    {
      "commit": "b071e9bc248865ef87a339044c0c5cbabfac175c",
      "tree": "caa0212392475dcd125d748f2eaf50f11b2b84d8",
      "parents": [
        "b279312a9038b9c5b9b05b31b1b1db86f748efd8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 17:05:59 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 17:05:59 2012 -0800"
      },
      "message": "Cleanup DirectOutputThread::mActiveTrack\n\nRename activeTrack to mActiveTrack.\nRelease the reference earlier, at the end of threadLoop_mix().\nThis allows the field to be made private and to\n  move the declaration from PlaybackThread to DirectOutputThread.\n\nChange-Id: I02be7a254638f7d85e92aaf0002d20ca0092a5c3\n"
    },
    {
      "commit": "b279312a9038b9c5b9b05b31b1b1db86f748efd8",
      "tree": "0ee1b4441fada98495d4430ca5425b60f7187817",
      "parents": [
        "da6dd679c196f1e342ce41ee9839e87309563e13",
        "b81cc8c6f3eec9edb255ea99b6a6f243585b1e38"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 16:08:59 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 07 16:08:59 2012 -0800"
      },
      "message": "Merge \"IAudioFlingerClient::ioConfigChanged param2 const\""
    },
    {
      "commit": "fa26a859bacb597587a8f49acfc3127351fa688c",
      "tree": "9139e6966ad0957fc5d4dd80cbc88f22a3767a17",
      "parents": [
        "a13ad6e84db128eadf23b154d3346f0bb473a5f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:28:04 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 11:04:55 2012 -0800"
      },
      "message": "Isolate references to outputTracks/mOutputTracks\n\nMove all references to DuplicatingThread::outputTracks and\nDuplicatingThread::mOutputTracks from the common threadLoop() into\nvirtual methods.  This allows them to be moved from PlaybackThread to\nDuplicatingThread, and to be marked private.\n\nAlso use vector assignment to copy mOutputTracks to outputTracks.\n\nChange-Id: Ieb1cf1ad36b8a65143e61e6c92a65fb43427e5e2\n"
    },
    {
      "commit": "a13ad6e84db128eadf23b154d3346f0bb473a5f7",
      "tree": "089693e18957e4d6bc0315fa79b0f88f5e3e0dbd",
      "parents": [
        "a3707a280177e934a1e0a15660d9176663b7fc17",
        "d4513b09123deebf8023b73a82d2d46d35806cea"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 10:44:29 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 07 10:44:29 2012 -0800"
      },
      "message": "Merge \"Make applyVolume private to DirectOutputThread\""
    },
    {
      "commit": "d4513b09123deebf8023b73a82d2d46d35806cea",
      "tree": "bff4d188e7d9cbf5b5b542ac555f7b406e1ba46d",
      "parents": [
        "1465f0c3df04c3166155a852a6a5c10069c1fd0a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 15:52:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 10:40:43 2012 -0800"
      },
      "message": "Make applyVolume private to DirectOutputThread\n\nChange-Id: I7ca4a59505857cbd106b6f274c66e9580dead271\n"
    },
    {
      "commit": "a3707a280177e934a1e0a15660d9176663b7fc17",
      "tree": "56d975052ce6d0e50a21a7a7e23139bbf30f9eaa",
      "parents": [
        "1465f0c3df04c3166155a852a6a5c10069c1fd0a",
        "cbc52bfb3b51c81c945b1e35990324bde892829a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 10:38:12 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 07 10:38:12 2012 -0800"
      },
      "message": "Merge \"Add comments about sequence for setting parameters\""
    },
    {
      "commit": "1465f0c3df04c3166155a852a6a5c10069c1fd0a",
      "tree": "e89c51678875afc1d9055550e8f2ef97806b338a",
      "parents": [
        "f8edf68a1e39da273eafe8c85bdbedc26636c4ec"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:23:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 07:28:12 2012 -0800"
      },
      "message": "Merge the calls to prepareTracks_l\n\nChange-Id: I1dd759581333e2908d980180d44db7bf5ed6591d\n"
    },
    {
      "commit": "b81cc8c6f3eec9edb255ea99b6a6f243585b1e38",
      "tree": "a3cad338817394b18b441bbb3f31853bfd9ed4f5",
      "parents": [
        "f8edf68a1e39da273eafe8c85bdbedc26636c4ec"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 01 09:14:51 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 16:43:19 2012 -0800"
      },
      "message": "IAudioFlingerClient::ioConfigChanged param2 const\n\nThe 3rd parameter (param2) to AudioFlingerClient::ioConfigChanged\nis used as an input.  So changed it from void * to const void *.\nIt is then cast to const OutputDescriptor *\nor const audio_stream_type_t * depending on the event.\n\nChange-Id: Ieec0d284f139b74b3389b5ef69c7935a8e5650ee\n"
    },
    {
      "commit": "f8edf68a1e39da273eafe8c85bdbedc26636c4ec",
      "tree": "99cf34fc2caead1b27a828bbf3d762902c9b5440",
      "parents": [
        "92b8360fe9c3174dc0edaaab4b746d8a3d3f831f",
        "012ca6b4f69fb24385025c0e84b8f816525a3032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 16:22:30 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 06 16:22:30 2012 -0800"
      },
      "message": "Merge \"Rename fields of AudioSessionRef\""
    },
    {
      "commit": "cbc52bfb3b51c81c945b1e35990324bde892829a",
      "tree": "240280d717db745f2e46d2688487afe6c55f61e2",
      "parents": [
        "92b8360fe9c3174dc0edaaab4b746d8a3d3f831f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 01 09:21:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 16:18:17 2012 -0800"
      },
      "message": "Add comments about sequence for setting parameters\n\nChange-Id: Iffa59a34c3c47bdc1d3234cdcb4d8ff99c102825\n"
    },
    {
      "commit": "438b036deaf4413503567a75a2861c000d21da5b",
      "tree": "05fe0bad8c24d4e7e95bf20a61bad745a62221e4",
      "parents": [
        "70a1577d42c6e222c98f0245e7b81b0e8bc238f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:24:48 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 12:46:21 2012 -0800"
      },
      "message": "Rename updateWaitTime since a lock is held\n\nChange-Id: I9bb978cbd0debf5b21676467060f72eebafea3e6\n"
    },
    {
      "commit": "012ca6b4f69fb24385025c0e84b8f816525a3032",
      "tree": "707f045a8e82983d1650184a4be92493133a3148",
      "parents": [
        "70a1577d42c6e222c98f0245e7b81b0e8bc238f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:22:01 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:43:55 2012 -0800"
      },
      "message": "Rename fields of AudioSessionRef\n\nChange-Id: I9f2a66094135c4ac6bec2d3e9db3ac5fbf988ede\n"
    },
    {
      "commit": "000f0e39b4d0c88441297a05ab5f8da6832c1640",
      "tree": "7305f3c498bbb3f326df3201074e5e631a1c95a6",
      "parents": [
        "4bce61f407d43b216c288a8d7b26fb5519853dba"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 01 17:10:56 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 05 11:01:10 2012 -0800"
      },
      "message": "threadLoop merge\n\nChange-Id: Id8e6330ac6be76f9c2debba94f856de87e2d98f7\n"
    },
    {
      "commit": "e8286332f3817a8b7cc4cfd8f6450a3913533660",
      "tree": "c783132bbe76feacb35e2c8804349c2c15be6745",
      "parents": [
        "848b6a8a4ccff424e382ce5e1d946da6ede580a0",
        "480b46802bef1371d5caa16ad5454fce04769c57"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 14:59:08 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 29 14:59:08 2012 -0800"
      },
      "message": "Merge \"Shorten thread names\""
    },
    {
      "commit": "3e07470f3b122097cacfe5b85cdb1359279a2f33",
      "tree": "01cd459b03e9384672466c7acdd7e14e9242fcd4",
      "parents": [
        "bc4b08ba67a0245e092aee8f08ba30ef22d421bf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 18:40:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 14:52:54 2012 -0800"
      },
      "message": "Prepare for threadLoop merge - active tracks\n\nContinued work on making the copies of threadLoop more similar:\n - Remove alias for mActiveTracks in MixerThread and DuplicatingThread.\n - Pull in declaration of activeTrack in DirectOutputThread.\n - Remove redundant parameter of prepareTracks_l().\n - Comment prepareTracks_l().\n\nChange-Id: If1087c1902b454acec01ddfdd9f055f0ca7abf04\n"
    },
    {
      "commit": "bc4b08ba67a0245e092aee8f08ba30ef22d421bf",
      "tree": "adbf9c79aee788643f112a82269ccc7addb73494",
      "parents": [
        "91cda8bdf8358a8b977a44e016b60a70bc1a5ee9",
        "d805b718b1fd2d5407ef665c8d4bb42e63dc71a9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 14:44:39 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 29 14:44:39 2012 -0800"
      },
      "message": "Merge \"Update AudioFlinger comments\""
    },
    {
      "commit": "c455fe9727d361076b7cead3efdac2d32a1a1d6d",
      "tree": "10f603fdaeb746bdb00bc43e567751109783db0a",
      "parents": [
        "8b20e9272d2f8d5160494de3212d66a399b3637f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 07:07:30 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 11:36:54 2012 -0800"
      },
      "message": "mSuspend comments and usage\n\nEmphasize that playbackthread::mSuspend is a counter, not a bool\n\nChange-Id: I7188e56814e1c54dbc65e560f3627f138257d644\n"
    },
    {
      "commit": "d805b718b1fd2d5407ef665c8d4bb42e63dc71a9",
      "tree": "941a1104efc261d317b0d3b795b8825a6eed0922",
      "parents": [
        "a3873833d518e032138cf70188b6f33cd7acec3d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 15:42:48 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 07:01:44 2012 -0800"
      },
      "message": "Update AudioFlinger comments\n\nAdd comments to enum mixer_state\nNote side-effect of lockEffectChains_l\nFix a typo\n\nChange-Id: Ibd51678bac2193201cbcbe081ff5664046fbc494\n"
    },
    {
      "commit": "480b46802bef1371d5caa16ad5454fce04769c57",
      "tree": "50bc53de16466d73d177b8f19ff96e8b9774b730",
      "parents": [
        "a3873833d518e032138cf70188b6f33cd7acec3d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 12:30:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 16:38:09 2012 -0800"
      },
      "message": "Shorten thread names\n\nprctl(PR_SET_NAME) limits to 15 characters.  Before we had names like\n\"Binder Thread #\" and the counter was cut off :-( Also remove redundant\n\"thread\" at end of name; it\u0027s always a thread.\n\nChange-Id: I1f99c2730ba0787ed9b59c15914356cddf698e2f\n"
    },
    {
      "commit": "a17c820c556fddf7ddd96b82b3e9874e340ffafd",
      "tree": "410130682b9d03614ce01e3e5af6bb0a2073d25d",
      "parents": [
        "3f791be1032e6c4cc499598dd2be116db6fb33c3",
        "02fe1bf923bbe5789202dbd5810e2c04794562e6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:21:09 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:21:09 2012 -0800"
      },
      "message": "Merge \"AudioFlinger const methods and parameters\""
    },
    {
      "commit": "fadb2c73fce479205432652530663e1e90fd546c",
      "tree": "255d5dc9cdbda67837cbb3a7907ecd797f6b305f",
      "parents": [
        "77f70f7de1977d7b0a9f9c37a25e34db16feb7b4",
        "01c4ebf6b794493898114a502ed36de13137f7e5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:17:47 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:17:47 2012 -0800"
      },
      "message": "Merge \"AudioBufferProvider comments and cleanup\""
    },
    {
      "commit": "843a12d146bd64642bf85a4e56c274246e3893a6",
      "tree": "82aca30fbbcc5c40f41a75dc3205ce983c187059",
      "parents": [
        "acb364073e62acddced517f2edfe0326245b2af9",
        "8abf44d2f2bcd20a2835570efe89d89c19db426a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 13:23:51 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 27 13:23:51 2012 -0800"
      },
      "message": "Merge \"Fix tracking of hardware state for dump\""
    },
    {
      "commit": "02fe1bf923bbe5789202dbd5810e2c04794562e6",
      "tree": "0a3c1634d0e3b36e996a9be60540bf63b226f84e",
      "parents": [
        "37d825e72a6c606553a745da1212590a425996d3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 15:42:17 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:34:43 2012 -0800"
      },
      "message": "AudioFlinger const methods and parameters\n\nChange-Id: I93ec28024005ed23aa141518092a012a4a7c44c5\n"
    },
    {
      "commit": "37d825e72a6c606553a745da1212590a425996d3",
      "tree": "268310fe31b44c0eee84b1d91adfbbaff2103a76",
      "parents": [
        "5ce96d97feafc6989f6141bb2633eae3d87ddf28"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 07:21:48 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:02:24 2012 -0800"
      },
      "message": "Pull out duplicated copies of silent mode check\n\nAlso fix the error handling for the property_get.\n\nThis is part of preparation for the threadLoop() merge.\n\nChange-Id: I6405190ea18146d1271575e1dfe9f279e8f36b17\n"
    },
    {
      "commit": "01c4ebf6b794493898114a502ed36de13137f7e5",
      "tree": "7f663fdad4040a40411e79d837c14e52e11a65b9",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 10:47:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 13:42:13 2012 -0800"
      },
      "message": "AudioBufferProvider comments and cleanup\n\nAdd comments about which methods implement the AudioBufferProvider interface.\n\nSimplified the definition of kInvalidPts.  \u003cstdint.h\u003e is very hard to work\nwith, there seems to be no way to use it reliably to get INT64_MAX without\nhaving a separate source file, which is ugly because it means kInvalidPts\nis not a compile-time constant.  So I just deleted AudioBufferProvider.cpp\nand used a hard-coded constant instead.\n\nAdded a default constructor for Buffer so that the fields aren\u0027t random\n(especially .raw which is used to determine if the buffer is valid).\n\nMake the pts for getNextBuffer default to kInvalidPTS so code that\ndoesn\u0027t need a pts doesn\u0027t have to specify a value.\n\nRename the parameter to AudioMixer::setBufferProvider to make it clearer.\n\nChange-Id: I87e7290884d4ed975b019f62d1ab6ae2bc5065a5\n"
    },
    {
      "commit": "8abf44d2f2bcd20a2835570efe89d89c19db426a",
      "tree": "29fc684b04d18621913145c807c4493f5b607d86",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 14:16:03 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 13:31:26 2012 -0800"
      },
      "message": "Fix tracking of hardware state for dump\n\nAt end of AudioFlinger::onFirstRef(), the hardware status was being left\nin wrong state.  It should be AUDIO_HW_IDLE but was AUDIO_HW_INIT.\n\nmHardwareStatus was being set to AUDIO_HW_OUTPUT_OPEN too early, and so\na return would leave it in the wrong state until next hardware operation.\n\nTake the hardware lock for dev-\u003eget_parameters, and update mHardwareStatus\nbefore and after.\n\nKeep hardware lock only for the duration of the dev-\u003eset_parameters.\n\nRename two constants in enum hardware_call_state to have the prefix\nAUDIO_HW so they follow the naming conventions.\n\nAdd comments.\n\nChange-Id: I6c7450b11f9b13adaeef9cec874333e478a58fc0\n"
    }
  ],
  "next": "5cf034d92d901169ca6e36c90475f40715827fcd"
}
