)]}'
{
  "log": [
    {
      "commit": "4adcede0dc54a85c31abaf139921aebd7a072d8e",
      "tree": "329681d4effaa4c3795d9567cb2279ae873758bb",
      "parents": [
        "09474df67278c0cd621b57c4aef1deaec4d8447f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 12:26:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 12:28:12 2012 -0700"
      },
      "message": "Reduce video frame drop rate\n\nThe video playback engine depends on having relatively precise audio\nprogress updates for its A/V sync and frame drop calculations.  For small\naudio HAL buffer sizes, this was not a problem, but when the HAL buffer\nsize was \u003e 12 ms, the normal mix buffer size became \u003e 24 ms and this\nthen caused video problems.  The new formula tries to keep the normal\nmix buffer size within a closer tolerance of 20 ms to 24 ms.\n\nAlso use consistent term: multiplier instead of multiple.\n\nBug: 6479613\nChange-Id: I903bad74461908e8c8f0a61e99ab5e24d5c44433\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": "808e7d16504cbe5b28bb88c31afb2542ab488965",
      "tree": "599b15f2754300fe2bcb5e0d6630220f45fb960f",
      "parents": [
        "bb9d731bc2b5759f72f6d382834e431a0389cf07"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 11 19:44:09 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat May 12 10:21:08 2012 -0700"
      },
      "message": "AudioFlinger: fix global effects suspend logic\n\nAudio effects on the output mix should not be suspended when effects\non the output stage (post processing) are enabled.\n\nChange-Id: I2e1c08fa9358ea3cbaec68856738d504b1be54e4\n"
    },
    {
      "commit": "d8e6fd35ec2b59ee7d873daf1f1d9d348221c7bc",
      "tree": "c5c5a16ca2990abee1a0e0e90d006e9437d3f3ce",
      "parents": [
        "c3798d7e97cb11076310f06163417c0631cce04e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 07 11:07:57 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 10 14:20:52 2012 -0700"
      },
      "message": "Use audio tag for system tracing\n\nDisabled by default; uncomment ATRACE_TAG to enable\n\nChange-Id: I99af894022a859ee5644bd853cfd8a48e4735ff9\n"
    },
    {
      "commit": "e213c86d36414a8fc75e37c52999522fe09c7328",
      "tree": "77532fadc80029d620e5109a2e14c1b5b73f5990",
      "parents": [
        "fc52dd88e4d2f433feba5d5aaff1880659d46319"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 13:46:15 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 07 11:41:08 2012 -0700"
      },
      "message": "dumpsys fCnt and flags\n\nPreviously displayed TrackBase::mFrameCount but not control block frameCount.\nNow displays both.\n\nAlso display the track flags in control block.\n\nChange-Id: Ie53781d4784633d78b6f928d69ebd494d8f110ec\n"
    },
    {
      "commit": "31dfd1db7a4d2228d9642008af6f3dd744368eb6",
      "tree": "5182b898a5f21161ea879c4fe173f91d54366fd7",
      "parents": [
        "2409e4337b1e5968cbf75a839778f849266b64d9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 01 11:07:08 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 01 11:07:48 2012 -0700"
      },
      "message": "Disable fast track log spam\n\nexcept for \"denied by client\" and \"denied by server\"\n\nChange-Id: I133ab747933729cc1f386813ee06ece055bdb294\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": "300a2ee9327c05fbf9d3a5fd595b558097c7c5e8",
      "tree": "72c0932bffeede46c71ab2f7e5354039bdf2e160",
      "parents": [
        "9a025a922c1fed5cb5d1956a55b7f69ad259abb3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 13:47:36 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Apr 27 14:45:18 2012 -0700"
      },
      "message": "Fast mixer configuration\n\nAdd compile-time option for when to use fast mixer.\n\nDouble HAL frame count for fast tracks due to SRC, and make the normal\nframe count multiplier an even number for compatibility.  Sample rate\nconversion can result in underruns if the HAL frame count is used as is,\ndue to jitter.\n\nChange-Id: Ia1f8da1b8ac247d9807acfce3c318161db000905\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": "e0fa467e1150c65a7b1b1ed904c579b40f97c9df",
      "tree": "44ae1e182fd15695fccf5d1f396f99edc7942ee5",
      "parents": [
        "e370bb62b89d2f2980f519392010ea08a24c558e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 24 14:35:14 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 18:41:32 2012 -0700"
      },
      "message": "Move frame count calculations for fast tracks\n\nFor fast tracks: move the default and minimum frame count calculations\nfrom client to server.  If accepted, the default and minimum frame count\nis the fast mixer (HAL) frame count.  If denied, the default and minimum\nframe count is the same as it currently is for normal tracks.\n\nFor normal tracks: there is no change yet, preserve legacy behavior for\nnow but add a FIXME to change this later.\n\nBug fix: the test for buffer alignment matches channelCount was wrong.\n\nBug fix: check for 8-bit data in shared memory, which isn\u0027t supported.\n\nOptimizations:\n - in set(), only call AudioSystem::getOutputSamplingRate() when needed\n - in createTrack_l(), only call AudioSystem::getSamplingRate() and\n   AudioSystem::getFrameCount() when needed\n\nChange-Id: I79d2fe507db1a8f7bb094c71da8a129951dbb82f\n"
    },
    {
      "commit": "1dc28b794587be22c90a97070d928f94586db638",
      "tree": "81fc99726926ceb84a331350434beb2666695cf1",
      "parents": [
        "9e786c78898d738b1cb21cd8bdfcc49dbcacfce6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 24 10:01:03 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 24 10:52:04 2012 -0700"
      },
      "message": "Use scheduling policy service\n\nChange-Id: I3c09da1dc0de5039d0c15ce7fb2bc373fa398712\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": "c95cfbb87d0ac5e773037019a96bfc29972d4b4e",
      "tree": "016435873185a80476d7ab1f3dae8696b2c04ebb",
      "parents": [
        "8d314b709fdd81bb64bdaa8d72a0b19c355cefb9"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 11:53:11 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Fri Apr 20 10:09:25 2012 -0700"
      },
      "message": "TimedAudioTrack: Optimize the queue trim operation.\n\nHand merge from ics-aah\n\n\u003e TimedAudioTrack: Optimize the queue trim operation.\n\u003e\n\u003e Don\u0027t perform the end PTS calculation for each buffer during trimming.\n\u003e Instead, only calculate the ending PTS of a buffer if there is no next\n\u003e buffer in the queue.  This optimization assumes that the buffers being\n\u003e queued are in monotonic media time order (a fair assumption for now)\n\u003e and that the timestamps in the audio are contiguous (not a requirement\n\u003e for this API, but a reality of how it is being used right now).\n\u003e\n\u003e In the case where the audio is discontinuous on purpose, it is\n\u003e that this optimization will cause the system hold one extra buffer\n\u003e which it could have safely trimmed.  It should not be much of an issue\n\u003e since in real life the audio is almost always contiguous, and as long\n\u003e as the media clock is running and the mixer is mixing, the buffer will\n\u003e be used up and discard as part of the normal flow anyway.\n\u003e\n\u003e Change-Id: I00061e85ee7d5651fcf80751646c7d7415894a14\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: I0054b58e1389fa005aa990cb5710caf4af7b706a\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "8d314b709fdd81bb64bdaa8d72a0b19c355cefb9",
      "tree": "e76be79a37ce2a3985bc0361c28d794136624b3e",
      "parents": [
        "21e8c50bd13ebe44f3088e26c9c6df0e163c469c"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 19 12:08:17 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Fri Apr 20 10:09:25 2012 -0700"
      },
      "message": "TimedAudioTrack: Fix continuity threshold handling.\n\nHand merge from ics-aah\n\n\u003e TimedAudioTrack: Fix continuity threshold handling.\n\u003e\n\u003e Fix issues with continuity threshold handling; notably\n\u003e + If the steady-state continuity threshold is exceeded, be sure to\n\u003e   clear the on-time flag.  Failure to do this will result in the\n\u003e   system picking a new mix point which simply satisfies the\n\u003e   steady-state continuity threshold instead of the startup threshold.\n\u003e   Since we are putting a discontinuity in presentation anyway, we\n\u003e   really want to pick a perfect point, not just an OK point.\n\u003e + Tighten the steady-state continuity threshold.  It was currently set\n\u003e   to 100mSec which is enormous.  4mSec (the new setting) is much more\n\u003e   appropriate.  On systems with a VCXO (like tungsten) this should\n\u003e   never be wrong by more than a sample.  If TimedAudioTracks are ever\n\u003e   to be used on VCXO-less systems, this threshold should probably be a\n\u003e   a parameter configurable by applications on a track by track basis\n\u003e   so they can make the tradeoff between allowed error and frequency of\n\u003e   disruptive corrections.\n\u003e + Reset the on-time flag if the mixer provides no PTS during a mix\n\u003e   operation.  This makes for a convenient way for the HAL to reset\n\u003e   timed tracks when it makes changes for delay compensation across\n\u003e   multiple outputs.\n\u003e\n\u003e Change-Id: I2cb23de5a3d1f75618abc1c8ab903db883837aa8\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: Ibd28c9d290494b0b19eb01caf2d9bfdef606a9b4\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "9bd23229fdec1657398abc682ccccfce1c95f8aa",
      "tree": "5a6790d8f19a3249b28a8b8da9e68e3a14bbde36",
      "parents": [
        "0ca3cf94c0dfc173ad7886ae162c4b67067539f6"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Apr 16 13:43:48 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Apr 18 17:40:48 2012 -0700"
      },
      "message": "Fix multichannel downmix pause bug on video player\n\nPausing a video player will cause the track audio mixer to be\n disabled, which causes the downmixer to be deleted. When reenabled,\n the track channel mask hasn\u0027t changed but the downmixer is there\n anymore.\nFixed by:\n- instanciating a downmixer when the AudioMixer track\n gets initialized (in getTrackName(), now taking a channel mask\n as input), and deleted when in deleteTrackName().\n- when the channel changes on a track, check whether it\n needs a downmixer or not. Preparing a track for downmix\n automatically removes the old downmixer if there was one.\n\nAlso: initialize the track downmixerBufferProvider field\n when AudioMixer is instanciated, so we can safely call\n delete on it in AudioMixer\u0027s destructor, in case\n deleteTrackName() wasn\u0027t called before the mixer was\n destroyed.\n\nChange-Id: I589b0781cda5b3c82f85b561c52b08546cac21f8\n"
    },
    {
      "commit": "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": "acb86cccbd9d245439a04cef0bcefa589addaa4c",
      "tree": "597fe66a314f3bc8a4c1746f9d9bbff0a8bd1067",
      "parents": [
        "97b5d0d5b5ef766eb5dd680d05a5d199662d4ae0"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Apr 16 12:43:57 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Apr 18 09:29:45 2012 -0700"
      },
      "message": "Configure the resampler with the correct channel count when downmixing\n\nWhen a track needs to be downmixed and resampled, it gets downmixed\n first before being resampled. Therefore the resampler needs to\n be configured with the channel count of the output of the downmixer\n instead of that of the track.\nRemoved frame size checks that don\u0027t apply anymore now that we support\n frame sizes that are not powers of 2 (e.g. 12 for 5.1 16bits), and\n changed test performed for every buffer during playback into an\n assert.\n\nChange-Id: Ia220f00ee382f4f7848b661c58555bdca664e194\n"
    },
    {
      "commit": "f7ffb8bf0a58037f0bc9662c5275005a4e539948",
      "tree": "686df49dd97aed806b48b6ca3bba90cfc27d1ab7",
      "parents": [
        "4835705370584f6904c80afebcc6e8b9fdb110a5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Apr 14 09:06:57 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 17 16:02:22 2012 -0700"
      },
      "message": "audioflinger: update to new audio HAL.\n\nUpdated audio flinger to new function prototypes\nfor open_output_stream() and open_input_stream().\n\nCheck audio hw device version when loading a module and\nreject devices with a version different from current one.\n\nChange-Id: I9d4c81a1f59a15db78b3989417c2a411c638fe88\n"
    },
    {
      "commit": "b388e531613730572067e193b6b66afb5d042233",
      "tree": "e84e7e8d25a909390498236462a90c241dc3c236",
      "parents": [
        "fbe308d428e42fe249ec317f76e3d11feb3264d5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Apr 14 13:32:48 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Apr 14 13:32:48 2012 -0700"
      },
      "message": "Fix ALOG_ASSERT in AudioFlinger\n\nFix broken ALOG_ASSERT in updateFramesPendingAfterTrim_l() introduced by\ncommit 1c345196.\n\nChange-Id: Ie1b2653069283f23ff0367f2628828e37fb0749c\n"
    },
    {
      "commit": "d3030da2ac3c0ebb8b7bdf38418263caf405b863",
      "tree": "d968ad7f783793049510b4badfee39fc066b1147",
      "parents": [
        "1c345196edc61694f29307a1826a64a0d26028dc"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 11:56:36 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Apr 12 11:56:36 2012 -0700"
      },
      "message": "Fix the build\n\nforgot to upload final fixup during merge.  sry about that\n\nChange-Id: I2ddd2c08d8efa83c0a8d1e378ae4c28686145154\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": "3f9c84c0a5af83fceb8669390e2d71b75ec7b550",
      "tree": "12f049ef754cdd81c720dbfbed8adfca0808f073",
      "parents": [
        "2d531e1b5865d61d5ca25d77d53017b1ad180efa"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 03 15:36:53 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 11 12:17:59 2012 -0700"
      },
      "message": "audio pre processing: test code for dual mic\n\nAdded functional test code to validate effect API for\nmulti mic simplementations.\n\nAlso fixed warning in AudioFlinger.\n\nChange-Id: I07be4d2e4d17791d3626c804ba3e9f87ff26d05a\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": "a1472d9883e35edd280201c8be3191695007dfd4",
      "tree": "22d33eed0e95560b5fe989ace6a2e0f53aff3790",
      "parents": [
        "40a1da57d21bbc883630e7a854a279685fe1fa61"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Mar 30 14:36:54 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Mar 30 21:21:36 2012 -0700"
      },
      "message": "Make AudioTrack/AudioRecord handle more than 2^32 frames\n\nb/6160363\nChange-Id: I471815012c6a113ec2c4dd7676e8fa288a70bc76\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": "63c1faa8dea7feb90255d31ef2a133d8f2818844",
      "tree": "973c66b51e7e85b6ea753b5643f7d99c66d82dde",
      "parents": [
        "7153494670bdac8b650cb10b8b1838651e0ca418",
        "17a736c3e1d062d7fc916329eb32aef8935614af"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 07:24:21 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 07:24:21 2012 -0700"
      },
      "message": "Merge \"Update comments\""
    },
    {
      "commit": "7153494670bdac8b650cb10b8b1838651e0ca418",
      "tree": "94c6c21f7100bdb9aefc82bb0c6d77482742a455",
      "parents": [
        "a26ff6f22f4e86d09514c2819237bd9748455018",
        "ea7939a079b3600cab955760839b021326f8cfc3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 07:22:40 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 07:22:40 2012 -0700"
      },
      "message": "Merge \"Whitespace\""
    },
    {
      "commit": "a26ff6f22f4e86d09514c2819237bd9748455018",
      "tree": "e50bf0801eeb218e579448016aa69c548b1c0187",
      "parents": [
        "903626bd3cf03920f2ca8ce8ce5cca2874d5e02d",
        "a03567676e8766828ff970b87e13bc4c97b23473"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 07:21:21 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 07:21:21 2012 -0700"
      },
      "message": "Merge \"new doesn\u0027t fail on Android\""
    },
    {
      "commit": "9a5f413a21b320fea0607e653bc75b1a4f0e7a2e",
      "tree": "4e423f1d508eb65b0df732ba6776316c0597e299",
      "parents": [
        "65b5a46b4387e064d1bfb2ae9e8a1aa523b20f41",
        "f607e2e488ad0438bf6d4a4cd841ba1f902206c7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 20 19:35:53 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Mar 20 19:35:53 2012 -0700"
      },
      "message": "am a48285c4: am 165ee4c5: am 14958e21: Merge \"audioflinger: fix issue with camcorder and A2DP\" into ics-mr1\n\n* commit \u0027a48285c4f22ffc43f1771ebd1ff35dcec48db2c7\u0027:\n  audioflinger: fix issue with camcorder and A2DP\n"
    },
    {
      "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": "ea7939a079b3600cab955760839b021326f8cfc3",
      "tree": "570fb56838735a46a28e28a4f083d763f758ea24",
      "parents": [
        "eb76ff27c13386eb5a2dad73b1a8366f80eb0ff7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 12:56:26 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 17:53:33 2012 -0700"
      },
      "message": "Whitespace\n\nFix indentation, and add blank lines in key places for clarity\n\nChange-Id: I57a0a8142394f83203161aa9b8aa9276abf3ed7c\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": "a03567676e8766828ff970b87e13bc4c97b23473",
      "tree": "0bb2f382b1ee44d8c38d5dadf0b45d7962889836",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 10:38:51 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 10:50:57 2012 -0700"
      },
      "message": "new doesn\u0027t fail on Android\n\nChange-Id: I5079a3bf31097dd0807b2d806d5f8d3cff2077ab\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": "9d7b4c074205609271f61e1a4741ac0c524a1795",
      "tree": "c33b192e00e226495066be24aa9df36212378d72",
      "parents": [
        "7d372bd9a6dd7c2174519a8c575011109a949ebb",
        "4ade00863737a82bb41f289a6a40893ceefca43e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 19 08:34:56 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Mar 19 08:34:56 2012 -0700"
      },
      "message": "am 14958e21: Merge \"audioflinger: fix issue with camcorder and A2DP\" into ics-mr1\n\n* commit \u002714958e21c12f922d7501d32c3bec05109eb342d5\u0027:\n  audioflinger: fix issue with camcorder and A2DP\n"
    },
    {
      "commit": "89d94e79dad032fb18ddc655e6068e4231d3f0aa",
      "tree": "efb718faffa2573a33f203cadfa99f180dbf170c",
      "parents": [
        "083644fee99d23491554484301943e6a7daf262b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 16 20:37:59 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 16 20:37:59 2012 -0700"
      },
      "message": "audioflinger: fix issue with camcorder and A2DP\n\nSome audio HALs do not support well a device selection of 0 (no device)\nreceived on an input stream.\n\nThis can happen because of a problem in the audioflinger code that handles\nthe forwarding of the output device selection to the record thread for use by\nthe pre processing modules that need it. If the output device is 0 (meaning\nno op, which happens when stopping playback over A2DP) audioflinger could not\ndetect it was an output device selection and would forward it to the input\nstream (see AudioFlinger::setParameters() and RecordThread::checkForNewParameters_l().\n\nIssue 6179641.\n\nChange-Id: Idae534521866538e0d12ba259a2834f402a922e2\n"
    },
    {
      "commit": "dfaf549e3e310bc22444f4404b19f4907b24c286",
      "tree": "645d0b309dc35779259bf948ec26d9b6205a828c",
      "parents": [
        "3b229ed97c0dfc85a8cf881341e29e595e0edea7",
        "190a46f7c84e160386610c0c4cecb9767fb5503b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 16:28:38 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 14 16:28:38 2012 -0700"
      },
      "message": "Merge \"AudioFlinger playback thread CPU measurement in Hz\""
    },
    {
      "commit": "190a46f7c84e160386610c0c4cecb9767fb5503b",
      "tree": "f3e534d11f6444178b04442a94b2dfdefea7c7dd",
      "parents": [
        "e53b9ead781c36e96d6b6f012ddffc93a3d80f0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:27:10 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 16:03:01 2012 -0700"
      },
      "message": "AudioFlinger playback thread CPU measurement in Hz\n\nLog statistics on CPU usage in Hz in addition to wall clock time\n\nUse CPU statistics for all playback threads, not just MIXER\n(but they are disabled by default by a compile-time debug macro).\n\nThreadCpuUsage library:\n - Move statistics out of the library and leave that up to the caller\n - Add API to determine a CPU\u0027s frequency\n\nChange-Id: Ia1011123146e641fcf210ef26e78ae2b4d3b64ad\n"
    },
    {
      "commit": "3b229ed97c0dfc85a8cf881341e29e595e0edea7",
      "tree": "7e0fce33031b6f1c312c8e2bed8a42bfafc5643f",
      "parents": [
        "7734b0297330ab45c114c3d129152b14ffeb26cd",
        "612bbb57c59397a540e96f06bdd16e437a583af5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 14 15:30:05 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 14 15:30:05 2012 -0700"
      },
      "message": "Merge \"audioflinger: more info in dumpsys\""
    },
    {
      "commit": "612bbb57c59397a540e96f06bdd16e437a583af5",
      "tree": "9f8a71b42b3e7cfea724a73035cc41c856fa852d",
      "parents": [
        "27e52c70cf02ee5f7f6b49df80674c5fbf8a7a2e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 14 15:03:26 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 14 15:04:54 2012 -0700"
      },
      "message": "audioflinger: more info in dumpsys\n\nAdded TID and io handle to AudioFlinger threads dump.\n\nChange-Id: Ib1a856f3bad55c73e4c395b5e59d57435f4b9a4c\n"
    },
    {
      "commit": "d3cee2f0f649c01e1153d593cbe723887b8e0ba0",
      "tree": "f8cd7dbe368775e022fb139895a8a35c0c7b95d2",
      "parents": [
        "e53b9ead781c36e96d6b6f012ddffc93a3d80f0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 17:55:35 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 17:55:35 2012 -0700"
      },
      "message": "Break circular dependency on media player service\n\nBug: 6165157\nChange-Id: I3c85bbcaf31f3cb9a009e273f7b6284015eb3bd8\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": "fd83fbf5ead098070bae674b20e6f87f45ab5d4c",
      "tree": "943a0945c076afc9536c3ddf96c50475bf9d519e",
      "parents": [
        "aa4397f07c43bd83bc3100b749401dc3d15e7622",
        "5798d4ebf236357a4b13246f40e52b90a34d09a4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 07:16:44 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 13 07:16:44 2012 -0700"
      },
      "message": "Merge \"Clean up assertion checks\""
    },
    {
      "commit": "aa4397f07c43bd83bc3100b749401dc3d15e7622",
      "tree": "44ec13ce56037243854454b25072fcc06e63972b",
      "parents": [
        "73f4bc33e0d458933460250a47c64aa868c05f97"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 18:13:59 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 18:13:59 2012 -0700"
      },
      "message": "Fix bug where mMixerStatus was set to IDLE\n\nChange-Id: I55df1738fb7ba17ba6caeea6a17557526eac17a7\n"
    },
    {
      "commit": "5798d4ebf236357a4b13246f40e52b90a34d09a4",
      "tree": "b9cb82b889bee3c6b32bfa2d2870bd88034b0fdd",
      "parents": [
        "73f4bc33e0d458933460250a47c64aa868c05f97"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 08 12:18:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 15:56:50 2012 -0700"
      },
      "message": "Clean up assertion checks\n\nUse ALOG_ASSERT instead of assert.\nUse compile-time asserts where appropriate.\nFix typo in an ALOGV.\n\nChange-Id: I58f1c1ffc14319a022c88b5a88b8d0368660da8b\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": "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": "d69549665d412f1f6ebad48ad8cd05133ada8728",
      "tree": "2cb31ad125c38af908d483acaf50d52e9aaf9ef8",
      "parents": [
        "887c5d2ac34d81bde66dadbd7b2ff07501744778",
        "53d76dbe7c55821e89d9da02e7a563f7fb45de87"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 13:44:14 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 09 13:44:14 2012 -0800"
      },
      "message": "Merge \"Replace hard-coded 3 by FCC_2 to simplify searches\""
    },
    {
      "commit": "083c154162c88a9f63aeaa10a4b52dd454bda9ff",
      "tree": "8301c82a13fbab347ca6057972fff30c1f685fed",
      "parents": [
        "b3dfcf483a96816fe2e949dd86fed26e52ad7404",
        "639dbee79140956c43926344c23af765f6e0c9a5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 07:19:43 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 09 07:19:43 2012 -0800"
      },
      "message": "Merge \"Don\u0027t ask policy manager about invalid stream type\""
    },
    {
      "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": "639dbee79140956c43926344c23af765f6e0c9a5",
      "tree": "9ae31c1e9a1da475fdc9e0522eaf64da28af62d5",
      "parents": [
        "b279312a9038b9c5b9b05b31b1b1db86f748efd8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 12:26:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 16:36:23 2012 -0800"
      },
      "message": "Don\u0027t ask policy manager about invalid stream type\n\nChange-Id: If50fbff9d34045d1398984da48da7e6428a74491\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": "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": "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": "92b8360fe9c3174dc0edaaab4b746d8a3d3f831f",
      "tree": "d1b2c2d59685479ff449726cdd626b5fd0e353ce",
      "parents": [
        "7d010baec6d5514b938b90545ff447366ddf1158",
        "952eeb27682a9b2ddfa761f24b6eb5e18fe5d814"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 15:23:58 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 06 15:23:58 2012 -0800"
      },
      "message": "Merge \"Fix indentation for re-organized code\""
    },
    {
      "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": "952eeb27682a9b2ddfa761f24b6eb5e18fe5d814",
      "tree": "2f3f23aa5201ab9d0611be216a5470d58a1bf4d6",
      "parents": [
        "70a1577d42c6e222c98f0245e7b81b0e8bc238f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:30:57 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 12:14:54 2012 -0800"
      },
      "message": "Fix indentation for re-organized code\n\nChange-Id: I63471cebdbd095b7ad4e481611b785f9b02c7941\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": "91cda8bdf8358a8b977a44e016b60a70bc1a5ee9",
      "tree": "2b120cdb61f9eba624fef617910a899d48018109",
      "parents": [
        "c455fe9727d361076b7cead3efdac2d32a1a1d6d",
        "73ca0f5837d5448f7a5eb159a09cd0ebe82b4de9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 14:43:19 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 29 14:43:19 2012 -0800"
      },
      "message": "Merge \"Pull in declaration of effectChains to inner block\""
    },
    {
      "commit": "73ca0f5837d5448f7a5eb159a09cd0ebe82b4de9",
      "tree": "c998f3102cf0b63133726cd80f051901b4a2be15",
      "parents": [
        "8b20e9272d2f8d5160494de3212d66a399b3637f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 07:56:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 11:49:50 2012 -0800"
      },
      "message": "Pull in declaration of effectChains to inner block\n\nChange-Id: I09eacf72124942abd604132b9f4e774b1236fcf3\n"
    },
    {
      "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": "688a64030834ea2f52cc9765676ddf6aa34df767",
      "tree": "dbe70440330e69300fab019f9b90585e025e5c10",
      "parents": [
        "a3873833d518e032138cf70188b6f33cd7acec3d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 07:57:06 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 29 09:38:15 2012 -0800"
      },
      "message": "Mark similar and different sections in threadLoop\n\nMost of these comments will be removed after the threadLoop merge.\n\nNote: the trivial change in assignments to mixBufferSize, and the\ncomments about \"tracks to remove\" is to make them all identical.\n\nChange-Id: I3b1a33a7f2cd12ad557a1986bb71f6171161974a\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": "a3873833d518e032138cf70188b6f33cd7acec3d",
      "tree": "2a51dc4f5028548e2217d079c595f925af7968ac",
      "parents": [
        "3e9c3a1d34960cd258f294d31135ab6bf76179d5",
        "04743e99e71c0da012508c7119f414027654ee94"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:23:42 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:23:42 2012 -0800"
      },
      "message": "Merge \"Unlock effect chains in the middle of two if\u0027s\""
    },
    {
      "commit": "3e9c3a1d34960cd258f294d31135ab6bf76179d5",
      "tree": "c4fdfd452a5249202c38bdd5fa06acc94af31402",
      "parents": [
        "a17c820c556fddf7ddd96b82b3e9874e340ffafd",
        "a3b09254d44cd8d66ec947abe547538c4cfeaa89"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:21:51 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:21:51 2012 -0800"
      },
      "message": "Merge \"Simplify removeNotificationClient\""
    },
    {
      "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": "cfbd62616ab2b12f0fee603658f04e5827cc7f8f",
      "tree": "0f3328716fdd788e603a52cc7e8cf80550a406bf",
      "parents": [
        "fadb2c73fce479205432652530663e1e90fd546c",
        "b6b740629c9f11535086e744465bada03f26df11"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 07:18:27 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 07:18:27 2012 -0800"
      },
      "message": "Merge \"Fix theoretical race condition in addOutputTrack\""
    },
    {
      "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": "e628d515888baadba75442128678e747e930ed58",
      "tree": "008e72b199be7b6fa0d86f308edb183df3851fe1",
      "parents": [
        "d3cee0b1f77baa4fb7a049eb757e9f5006890726",
        "c0b52836d07f823732f0ff98ca5ca9d7f5730cb8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 07:24:46 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 27 07:24:46 2012 -0800"
      },
      "message": "Merge \"Make threadLoop() logs identical\""
    },
    {
      "commit": "d3cee0b1f77baa4fb7a049eb757e9f5006890726",
      "tree": "6692b5674e5c0285cc28aa2d2753a0c787e0a9cb",
      "parents": [
        "1843df5b4f8f8f8394a96bcaeb5836d720ae9cf5",
        "5d4eeeaf76ebe177b43e87b2a9df5e55e39021f0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 07:21:00 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 27 07:21:00 2012 -0800"
      },
      "message": "Merge \"Move declaration of mixerStatus to inner block\""
    },
    {
      "commit": "a3b09254d44cd8d66ec947abe547538c4cfeaa89",
      "tree": "9a21a4b2b34e264d71f4a44262e5f555ce9513d6",
      "parents": [
        "37d825e72a6c606553a745da1212590a425996d3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 09:19:01 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 17:00:30 2012 -0800"
      },
      "message": "Simplify removeNotificationClient\n\nNo need to check for presence of item before removing\n(but we do lose the log of the previous value).\n\nChange-Id: I2838430824de5f257f2ee15db0c22b1920c67d08\n"
    },
    {
      "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": "c0b52836d07f823732f0ff98ca5ca9d7f5730cb8",
      "tree": "458884704d091098a8b44fceab1c5d9daa0e362d",
      "parents": [
        "37d825e72a6c606553a745da1212590a425996d3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 11:18:09 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:26:07 2012 -0800"
      },
      "message": "Make threadLoop() logs identical\n\nChange the wording of the logs in the various copies of threadLoop()\nto be identical.  This will make it easier to merge them soon.\n\nChange-Id: Idfa181e437738712c784dc7f746cac79f83d2931\n"
    },
    {
      "commit": "5d4eeeaf76ebe177b43e87b2a9df5e55e39021f0",
      "tree": "f27b737f2e5dad2ac6c04ae0294f121a47210aec",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 07:25:40 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 16:14:46 2012 -0800"
      },
      "message": "Move declaration of mixerStatus to inner block\n\nmixerStatus was being declared (and initialized) too early,\nwhich also resulted in a duplicate initialization.  Moved\nthe declaration into the block where it is actually used.\n\nChange-Id: Ifdcfefe362a5efe3493dd616cdb44645c6f9aed5\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": "04743e99e71c0da012508c7119f414027654ee94",
      "tree": "01efb09ba3b56687256ad81564092c7f92d9186f",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 11:20:09 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 15:55:08 2012 -0800"
      },
      "message": "Unlock effect chains in the middle of two if\u0027s\n\nAs part of the upcoming threadLoop() merge, this CL makes it clearer\nwhat are the similar and different parts before and after unlocking\neffect chains.\n\nIn each threadLoop(), the old code was:\n\n    if (sleepTime \u003d\u003d 0) {\n        // A\n        unlockEffectChains(effectChains);\n        // B\n    } else {\n        unlockEffectChains(effectChains);\n        // C\n    }\n\nThe new code is:\n\n    if (sleepTime \u003d\u003d 0) {\n        // A\n    }\n    unlockEffectChains(effectChains);\n    if (sleepTime \u003d\u003d 0) {\n        // B\n    } else {\n        // C\n    }\n\nAlso this is slightly slower by one \"if\", it has the advantage of making\nit much more obvious about what is done before and after the unlock,\nand also to see the similarities and differences among the various\ncopies of threadLoop().\n\nChange-Id: I7bf4369d2dcb072573ec43b7e52c637f0097dc00\n"
    },
    {
      "commit": "5ce96d97feafc6989f6141bb2633eae3d87ddf28",
      "tree": "4a38a92123c13a19107d0b73d8ec877f50e87011",
      "parents": [
        "7fb5e8832f582ec515550696e9dabc3a8d9de14d",
        "83efdd0fc08cd5aedf50b45741a8a87be8dc4b41"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 14:25:15 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 24 14:25:15 2012 -0800"
      },
      "message": "Merge \"Pull CPU statistics code out of threadLoop()\""
    },
    {
      "commit": "b6b740629c9f11535086e744465bada03f26df11",
      "tree": "7561f2281d6fbe6b59a71470b1432e8f90e80391",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 14:12:20 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 14:20:29 2012 -0800"
      },
      "message": "Fix theoretical race condition in addOutputTrack\n\nThis is not a real race, because addOutputTrack was only called in two\nplaces, and in both places there could be no other threads referencing\nthe DuplicatingThread instance.\n\nThose two places are:\n - the DuplicatingThread constructor, which is of course safe\n - openDuplicateOutput - this is safe because it\u0027s called immediately\n   after the new DuplicatingThread, and there are no sp\u003c\u003e either in the\n   constructor or here which could cause onFirstRef() to do Thread::run().\n\nBut for safety in case addOutputTrack is ever called somewhere else,\nor there are sp\u003c\u003e created earlier, it is safer to take the thread lock.\n\nChange-Id: I1502d014fa37ec5dbf4bf40d3e2884af311cd5e9\n"
    },
    {
      "commit": "83efdd0fc08cd5aedf50b45741a8a87be8dc4b41",
      "tree": "7e87220c4ea29345be9fd7a6c041bf58dc9f816f",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 07:21:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 13:56:12 2012 -0800"
      },
      "message": "Pull CPU statistics code out of threadLoop()\n\nThis is to prepare for the threadLoop() merge\n\nChange-Id: I118c7d5c6b011b5d5b95ec7d63fb03feb166a9cf\n"
    }
  ],
  "next": "01c4ebf6b794493898114a502ed36de13137f7e5"
}
