)]}'
{
  "log": [
    {
      "commit": "0c937b4946fae178447d9f8d29200fa2798c05f9",
      "tree": "b5c507e70c853037602d4e898b75c2d307ae2c4d",
      "parents": [
        "57f87026a30f3e461f6a804e94b6dab7b385f3ca",
        "eb16bb5dcecf430bfec1c2a4bd15851c83b9c3cc"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 05 22:48:11 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Mar 05 22:48:11 2014 +0000"
      },
      "message": "am eb16bb5d: am 7028a2c8: am 7e92abea: audioflinger: fix offload write buffer offset\n\n* commit \u0027eb16bb5dcecf430bfec1c2a4bd15851c83b9c3cc\u0027:\n  audioflinger: fix offload write buffer offset\n"
    },
    {
      "commit": "7028a2c8106ee5a22db88da5dad581820ee07254",
      "tree": "afcb2b29c856c84809893e5dda8a68f68054ed75",
      "parents": [
        "6b2604259c12ee28b49f26ab2adac96eefe30934",
        "7e92abeafb184e8a34213d7149592e95a72601b0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 05 22:41:53 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Mar 05 22:41:53 2014 +0000"
      },
      "message": "am 7e92abea: audioflinger: fix offload write buffer offset\n\n* commit \u00277e92abeafb184e8a34213d7149592e95a72601b0\u0027:\n  audioflinger: fix offload write buffer offset\n"
    },
    {
      "commit": "7e92abeafb184e8a34213d7149592e95a72601b0",
      "tree": "09ec6f7fdfdc0b9564660f134bd6a460a4480d85",
      "parents": [
        "85b3013e06e8fe7802fe6259ecac80261e834332"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 09:29:56 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 05 12:12:01 2014 -0800"
      },
      "message": "audioflinger: fix offload write buffer offset\n\nFix current audio HAL write buffer offset calculation\nwhich assumes that the frame size is a multiple of 2.\n\u0027\nBug: 12823725.\n\nChange-Id: I0195ed5cfef225a6f114e7dd405a02680bb7254e\n"
    },
    {
      "commit": "d384a2c44810ce1b51277cc4ab4c5415ff7de6ee",
      "tree": "c020402fdf9734df5c77b93058b841d9c501a4ef",
      "parents": [
        "3cd7a13a7926e210bd8dff65d6f43a257f5235e5",
        "4f9e38c60cc79407a8b2966b3b9780a3e395b017"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Mar 05 20:01:11 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Mar 05 20:01:11 2014 +0000"
      },
      "message": "am 4f9e38c6: am 21e81bca: am e010f65e: audioflinger: Fix for a deadlock in track creation\n\n* commit \u00274f9e38c60cc79407a8b2966b3b9780a3e395b017\u0027:\n  audioflinger: Fix for a deadlock in track creation\n"
    },
    {
      "commit": "21e81bca4d1e6f7d1ccac61b65da7c7a4a121064",
      "tree": "25ed8460e9719f09063932ecd1297bc7f99c3b0c",
      "parents": [
        "571596564f4b818b8e89c4bbe824e557e8e00075",
        "e010f65e6337267cb15f8894c950a3f64370dd36"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Mar 05 01:24:09 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Mar 05 01:24:09 2014 +0000"
      },
      "message": "am e010f65e: audioflinger: Fix for a deadlock in track creation\n\n* commit \u0027e010f65e6337267cb15f8894c950a3f64370dd36\u0027:\n  audioflinger: Fix for a deadlock in track creation\n"
    },
    {
      "commit": "50c3157c5a3e0617be77716beff1ae8801d8a72f",
      "tree": "7b550f2609351c85fc70658220f14e3a5737288e",
      "parents": [
        "e0cd1051ed9fea0629745c29020516ae62298461"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Tue Dec 03 21:26:02 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 04 16:03:12 2014 -0800"
      },
      "message": "audioflinger: check for condition before waiting\n\nAsyncCallbackThread must check for any condition that\nwas already been satisfied before waiting.\n\nBug: 11824817\nChange-Id: I04683a1f355de4f440106cab47fd916aa39d5e35\n"
    },
    {
      "commit": "e010f65e6337267cb15f8894c950a3f64370dd36",
      "tree": "e631dc8a6690f18c6b977272404abe1df70cc30c",
      "parents": [
        "a4f24ff9b239300b4bb2098c1413c0a60edc2d7e"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Fri Dec 13 15:40:13 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 04 15:36:20 2014 -0800"
      },
      "message": "audioflinger: Fix for a deadlock in track creation\n\nAudioFlinger enters a deadlock (with itself) on trying to free a\nRecordTrack or Track object that failed initialization. Clear this\nbad object from the caller instead.\n\nBug: 12423233\nChange-Id: I926f2beb922a70f6924e593e2bbf1a5b5df85b16\n"
    },
    {
      "commit": "377b2ec9a2885f9b6405b07ba900a9e3f4349c38",
      "tree": "b938e1d75a1beefae86244f287ca22f4a277740d",
      "parents": [
        "cdda7bf4d3ca9cad6979374a18dd5be79ea83d80"
      ],
      "author": {
        "name": "Kévin PETIT",
        "email": "kevin.petit@arm.com",
        "time": "Mon Feb 03 12:35:36 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 11:40:06 2014 +0000"
      },
      "message": "Make frameworks/av 64-bit compatible\n\nContains the necessary changes to make frameworks/av build and work\non a 64-bit machine.\n\nSigned-off-by: Craig Barber \u003ccraig.barber@arm.com\u003e\nSigned-off-by: Kévin PETIT \u003ckevin.petit@arm.com\u003e\nSigned-off-by: Ashok Bhat \u003cashok.bhat@arm.com\u003e\nSigned-off-by: Marcus Oakland \u003cmarcus.oakland@arm.com\u003e\n\nChange-Id: I725feaae50ed8eee25ca2c947cf15aee1f395c43\n"
    },
    {
      "commit": "3ce28aa3cb5262775180a8b423cfb4a5670ebc59",
      "tree": "c033ef7bb7e98903661266d30f22259d12f5bc43",
      "parents": [
        "398f21348e5100289f6e5be30c8b5257fa04aaf9"
      ],
      "author": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Wed Feb 05 19:49:05 2014 +0200"
      },
      "committer": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Wed Feb 05 19:56:50 2014 +0200"
      },
      "message": "AudioFlinger: Remove code for supporting resampling in fast tracks\n\nThis isn\u0027t used at the moment.\n\nChange-Id: I4e0fb2af5f7d959dbafd5ddb7defa1c6b8e8636a\n"
    },
    {
      "commit": "398f21348e5100289f6e5be30c8b5257fa04aaf9",
      "tree": "26fb40e2808e33bcad41a36d263bc26b02f5c62c",
      "parents": [
        "c4eef29af4e306319d8741e0c3ade1ede9a0a2b5"
      ],
      "author": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Fri Jan 31 13:30:15 2014 +0200"
      },
      "committer": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Fri Jan 31 13:30:15 2014 +0200"
      },
      "message": "AudioTrack: Never try to use the fast path if resampling is required\n\nUnless AudioFlinger was built with FAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE\nenabled, AudioFlinger would deny using the fast path (and internally\nfall back to the normal codepath) when it realized that resampling\nwas required. Since the buffer size calculations within AudioFlinger\ndon\u0027t take resampling into account properly (see the calculation\nbelow \"AUDIO_OUTPUT_FLAG_FAST denied\" in audioflinger/Threads.cpp,\njust below the hunk that this patch changes), make sure AudioTrack\ndoesn\u0027t try to use the fast path if resampling is required.\n\nThis removes the possibility to enable\nFAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE in AudioFlinger since it\nAudioTrack now won\u0027t even try to use the fast path for content\nthat requires resampling, regardless of the AudioFlinger configuration.\n\nChange-Id: Icf0f8ad50bf0fdb84657f518c0120aa0535f23f9\n"
    },
    {
      "commit": "745e9a8283b56c7772ee7d72383a3f2e012e1ef9",
      "tree": "281cab68618b85ac31ccb6c3a436229d9d81a1ce",
      "parents": [
        "1bf0eecd2ec6a3b3e29ad2c91bcefda76abef2fe"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 20 17:36:01 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 30 19:37:52 2014 +0000"
      },
      "message": "audioflinger: fix static track end detection\n\nIf a static track is not a fast track,\nprepareTracks_l() must rely on framesReady() to\ndetect end of buffer and remove the track from the active\ntrack list.\nFailing to do so results in the track staying active but\nnot processed by the mixer because in underrun. This leaves the\nmix buffer content uninitialized and causes the effect process\nfunction to accumulate its output onto undefined data.\n\nBug: 12013676.\nChange-Id: Iad72c921fa18d34811abf7d1073890c093a27725\n"
    },
    {
      "commit": "c95616357a911e5c1c55873492b05ebfa3cf1894",
      "tree": "fa56f9fbc01da9bfca3814af80c63e7857bfa2fd",
      "parents": [
        "645e43977d3aabc5addab022d772accc32fd5bdc"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Tue Dec 03 21:26:02 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 17 22:05:51 2013 +0000"
      },
      "message": "audioflinger: check for condition before waiting\n\nAsyncCallbackThread must check for any condition that\nhas already been satisfied before waiting.\n\nBug: 11824817\nChange-Id: Ic8c2090d521ecd6a30b76ee75635258d35eb1eff\n"
    },
    {
      "commit": "a67c76538fff102cd44b2f38dd073df5f2a33605",
      "tree": "da803da6b3053b23ad6c5ebbd33fd7667e2697b3",
      "parents": [
        "a0e1c3918dd1356445df98e89dab6be2c8a78da3",
        "b5fed68bcdd6f44424c9e4d12bfe9a3ff51bd62e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 17 16:26:41 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 17 16:26:41 2013 +0000"
      },
      "message": "Merge \"Increase kFastTrackMultiplier from 1 to 2\""
    },
    {
      "commit": "b5fed68bcdd6f44424c9e4d12bfe9a3ff51bd62e",
      "tree": "12cac79b78992586c8f8da4f618a020f40d92441",
      "parents": [
        "92630351d265a61faae2dfe006a8bb330283aa7b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 03 09:06:43 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Wed Dec 04 17:12:42 2013 -0800"
      },
      "message": "Increase kFastTrackMultiplier from 1 to 2\n\nChange-Id: I158f147295eebcea96e4047d7618069bc48bdd7d\n"
    },
    {
      "commit": "d7e59228caad3867794d847f6bf163c6495e9506",
      "tree": "f09784ce425a6928c56a932101752b63b21d8f44",
      "parents": [
        "7dae71d606ded1dbc2aa9733c3d98ffac57988f2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 12:02:28 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 15 12:11:39 2013 -0800"
      },
      "message": "audioflinger: do not use raw pointer for tracks\n\nCommit 9da3d95 surfaced a problem caused by the use of a raw\npointer to a track in offload thread implementation.\n\nPointers to tracks should always be weak or strong pointers.\n\nBug: 11708529.\nChange-Id: Ic48632532d186c9be8261f73cefdf824b9fbbd2b\n"
    },
    {
      "commit": "9da3d9573a18ffe08365557c706cf52f09118d1c",
      "tree": "c30511f753f1b49d5519ba5249316b12f33bb29a",
      "parents": [
        "1b9f9b134e732a48198e51f16424f330cbf03143"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 19:25:43 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 19:32:36 2013 -0800"
      },
      "message": "audioflinger: fix offload track transition\n\nMake sure that when transitioning from one active\noffloaded track to the next we flush DSP content\nif both tracks are not on the same audio session.\nThis happens when switching between two applications\nplaying the same type of content (e.g MP3, stereo, 44.1).\nIn this case, we reuse the same output thread because the track\nformats are compatible.\n\nBug: 11247103.\nChange-Id: I2b9031591149adeb70766da5e0d21ff2933a37e8\n"
    },
    {
      "commit": "1b9f9b134e732a48198e51f16424f330cbf03143",
      "tree": "b51c0fd76cd949c420404ce221eae0ce9fad597e",
      "parents": [
        "22990fe1ee3531e84dbadb7ff9ffd68d5bbe9060"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 19:10:17 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 12 19:10:17 2013 -0800"
      },
      "message": "audioflinger: fix offload resume after drain\n\nWhen pausing and resuming during the drain,\nthe drain sequence number shuold not be modified\notherwise the drain callback will be ignored.\nThis causes failure to notify end of stream to audio\nplayer and transition to next song.\n\nBug: 11247103.\nChange-Id: I2a35c5cc3fd6aa667cdd257f9e9cc8715cef5159\n"
    },
    {
      "commit": "a23f17ac334ff20a11ee63dd177cb1080e44c483",
      "tree": "e15dc095de74afc97fc509aa855cedf010df6c1e",
      "parents": [
        "5c7ffaed6f04b844c2e4e2024bfb0203ac2233dd"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 05 18:22:08 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 05 18:22:08 2013 -0800"
      },
      "message": "audioflinger: fix direct output underrun\n\nUnderruns on tracks handled by a direct or offloaded\nthreads were not properly reported to the applications\ncausing a failure to automatically recover.\n\nBug: 11535001.\nChange-Id: I7a8696b4d646f78b16710addfe7c108d0dd0038d\n"
    },
    {
      "commit": "2c3740f01acca69c3e0bcc5e01bb0edc51b6777f",
      "tree": "fafcc00b076ae05c67b4cd0d3cd7de406b418c09",
      "parents": [
        "fd4779740ec3e9e865d5514464df26d015354388"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 30 16:57:06 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 30 16:57:06 2013 -0700"
      },
      "message": "AudioFlinger: fix duplicating thread standby.\n\nCommit fd47797 fixing issue 11247103 introduced a regression\nwhere the duplicating thread does not exit standby state as\nexpected. This in turn prevents the tracks sending audio to\nother threads to complete their activity cycle normally.\n\nThe fix conists in clearing mStandby state also in the specialized\nthreadLoop_write() method of DuplicatingThread subclass.\n\nBug: 11451415.\nChange-Id: Ie8a92c819a56a2834ea25fa70a8b7b2125721775\n"
    },
    {
      "commit": "fd4779740ec3e9e865d5514464df26d015354388",
      "tree": "11e6523dd9d2d04b6e0d3ea742968c6988646e2c",
      "parents": [
        "9cae217050aa1347d4ac5053c305754879e3f97f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 25 18:10:40 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Oct 28 14:17:22 2013 -0700"
      },
      "message": "AudioFlinger: more fixes for offload audio lost\n\nmStandby being false was not a reliable indication that\nsomething had been written to audio HAL.\n\nConsidering the last track in mActiveTracks vector as the\nlatest activated track was wrong as this is a SortedVector.\n\nBug: 11247103.\nChange-Id: I397d011c5afcdd779def3fe25aaae7669a472cfc\n"
    },
    {
      "commit": "9cae217050aa1347d4ac5053c305754879e3f97f",
      "tree": "dff82f277cba8f34af39eaeeb00adec01bbda26c",
      "parents": [
        "be567be3f92026f5964c1c9ecce00e30bb7df412"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 14 14:12:05 2013 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 14:06:03 2013 -0700"
      },
      "message": "Assign blame for playback wakelocks.\n\nSet a work source for the playback wakelock, so that playback is\ncounted against the requesting app instead of the media server.\n\nCherrypicked from master.\n\nb/9464621\n\nChange-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31\n"
    },
    {
      "commit": "6a51d7ed7062536ccc892c8850a34ed55cbc8d5c",
      "tree": "95746546a67c27a04a0e5bd82f9760d80ad5f0d9",
      "parents": [
        "dedc7b0fa23c21b525dc8abb572bb8161ad66a9b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 17 18:59:26 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 17 18:59:26 2013 -0700"
      },
      "message": "audioflinger: fix track terminated before playing\n\nWhen a track is terminated before any audio was written,\nwe should not send a drain request to the HAL. The drain\nwill be ignored and we will wait the async callback for ever.\n\nAlso fix a potential deadlock by not deleting a track with the\nthread mutex held: mPreviousTrack changed from a sp to a raw pointer.\n\nBug: 11247103.\nChange-Id: I0a4b47b099204c7c326d45d700234ab8f72d8eae\n"
    },
    {
      "commit": "014e7fa2e90827d911c37bb0ce4d2e10e14d0bb3",
      "tree": "1eebc29942794f1688fde67b9056803b8194355a",
      "parents": [
        "b3cb72a17d9a472883e9e2faa18b42eac533fe99"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Oct 14 15:03:38 2013 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Oct 14 17:29:57 2013 +0100"
      },
      "message": "Make Audio wakelock names less unique.\n\nThese wakelocks now show up in the client process, where they\nmight cause wakelock overflows if AudioFlinger threads die often.\n\nThe client process should be agnostic of audio flinger threading,\nso don\u0027t make the wakelock names rely on audioflinger thread names.\n\nWakelock names now depend only on the audio flinger thread type, and\nnot the ID itself.\n\nbug: 11200551\n\nChange-Id: Ia1f71b569cb7502d617b77596abc245f461a6ec0\n"
    },
    {
      "commit": "fee4ce338d78eeb58af1f66831ead53322d3859e",
      "tree": "f90931a7c5c4628b0e8e47976d68a9d586802b53",
      "parents": [
        "ea0fadeb5d81ef3cb7f9db458c9033d628bdb86a",
        "e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 07 16:16:06 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 07 16:16:06 2013 +0000"
      },
      "message": "Merge \"Cleanup openRecord error handling\" into klp-dev"
    },
    {
      "commit": "ea0fadeb5d81ef3cb7f9db458c9033d628bdb86a",
      "tree": "1650f71cf339cd9d561377e239e2a12f7b08cffc",
      "parents": [
        "026c5b07fefd36e0e2dd7035c2898d0e28596d0f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 04 16:23:48 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 04 16:37:07 2013 -0700"
      },
      "message": "audioflinger: offload: fix pause/flush/resume\n\nIf a pause/flush/resume sequence is fast enough, resume is received while\nwe are still in PAUSING state in which case it is a NOP. If this happens,\nflush is still forwarded to the audio HAL but is not preceeded by a pause\nwhich can cause problems to the audio DSP.\nIt is necessary to preserve the flush as this sequence is typical to a seek.\n\nThe fix consists in forcing a pause/resume when a flush request must be\nexecuted and the audio HAL has not been paused previously.\n\nBug: 11081559.\nChange-Id: Ib84ed26d503a61c05933b923ec556b10cedfe140\n"
    },
    {
      "commit": "547789d25dc6bd6561553bcf6b384fb0d4fee834",
      "tree": "767ae4b24b4fc71cc547cfa16898f5299d26a6cc",
      "parents": [
        "7bab024867996bec6dc4e3e31ed4570da9afbc25"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 04 11:46:55 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 04 11:46:55 2013 -0700"
      },
      "message": "audioflinger: fix wake lock acquisition check\n\nCommit e14a5d6 introduced a bug in ThreadBase::acquireWakeLock() where\nthe wake lock acquisition return code is not initialized before\nbeing checked causing the wake lock token to be sometines not set\nand potential failure to release the wake lock later.\n\nBug: 10985160.\nChange-Id: Iffd40e773ae3bcfec3c148a844d5dbebbf474eaf\n"
    },
    {
      "commit": "8097068de97c0cdab8150931f290edbd5b3721e5",
      "tree": "953f68c84ab80ca4f899e88081768d81dd31c93e",
      "parents": [
        "580ed263a6ea6c766f9f715e101340c7fe26ab75",
        "e14a5d6d2cc91dd2fc09ffdf7aa670b37da0795d"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 03 21:15:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 03 21:15:05 2013 +0000"
      },
      "message": "Merge \"Better recording wake lock accounting\" into klp-dev"
    },
    {
      "commit": "e14a5d6d2cc91dd2fc09ffdf7aa670b37da0795d",
      "tree": "ab8d3ea087c653c632068af36e443c5c3609cfe4",
      "parents": [
        "3d97e23fcd78f752443cb6c30a1ee39f49f1f987"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 03 08:51:24 2013 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 03 13:54:53 2013 -0700"
      },
      "message": "Better recording wake lock accounting\n\nCount wake lock use against the app that initiated the recording,\nnot against the media server.\n\nb/10985160\n\nChange-Id: Iae6e6c030b7f1c6081d9c79725d6990f60dadaaa\n"
    },
    {
      "commit": "59fe010bcc072597852454a2ec53d7b0a2002a3b",
      "tree": "b6b42e04a89ead77c9ecd9635a328686a8bb9863",
      "parents": [
        "5d6d86a4d102704f49b9235eaf282c428d7100b6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 27 18:48:26 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 30 12:05:38 2013 -0700"
      },
      "message": "fix volume and effect enable delay on offloaded tracks\n\nVolume: add a method to wake up the mediaserver playback\nthread when a volume command is received on an offloaded track.\n\nEffects: call effect chain process on offloaded playback threads\nasynchronously from writes to allow effect state updates while\nwaiting for async write callback.\n\nBug: 10796540.\n\nChange-Id: Id2747ae88783575d1d7ffd6fc86fbd054ab2c739\n"
    },
    {
      "commit": "4de95592980dba88a35b3dc8f3fd045588387a4f",
      "tree": "e871e1ad9318cdd21fe82eb6f44f687f366d1c60",
      "parents": [
        "1802399c7c4d8557922688f246df292703f417f1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 26 15:28:21 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 26 15:56:43 2013 -0700"
      },
      "message": "audioflinger: fix crash when starting offload thread\n\nPassing a sp to parent thread to AsyncCallbackThread() constructor\ncauses a strong reference to be acquired on the OffloadThread inside\nits constructor which causes an early launch of the thread loop\nwith unpredictable consequences.\n\nPass a wp to parent thread instead.\n\nAlso move the creation of the AsyncCallbackThread to\nreadOutputParameters() where mUseAsyncWrite is initialized which\nmakes more sense.\n\nAlso change the type of AsyncCallbackThread parent thread to PlaybackThread\ninstead of OffloadThread to allow a broder use of non blocking write which\nin theory is not limited to audio offload use case.\n\nBug: 8174034.\nChange-Id: I4b093b022030cd4f5eb8b8e477333e91098a6549\n"
    },
    {
      "commit": "e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f",
      "tree": "4de6f04ad4abc14bb0e777bcb02863196c59e34b",
      "parents": [
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 11:52:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 12:12:47 2013 -0700"
      },
      "message": "Cleanup openRecord error handling\n\nBug: 10888816\nChange-Id: I84897dd7d30b370640b54e928f230604b873cb68\n"
    },
    {
      "commit": "664539d25180ab8f77e0521533ea2821cf28985f",
      "tree": "19b1c2a62d44ac7199249825aec131c70f6801ca",
      "parents": [
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 18:24:31 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 18:33:25 2013 -0700"
      },
      "message": "audioflinger: fix ro.audio.silent in offload again\n\nCommit 1abbdb4 was not working 100% of the times because\nit is possible that the offload thread loop never sleeps\nafter being created in which case the property is never read.\n\nThe loop now reads the property once when starting.\n\nBug: 10899309.\nChange-Id: I2e2ca332f2d7086e59d65f6010378c4d9618ba9e\n"
    },
    {
      "commit": "a3b97ad288e6808c54c6275eaac1bd53108d8f11",
      "tree": "eb4ee28ecd01cf4a4548004e8a2d9154ce0f2c73",
      "parents": [
        "fbb2609f132f23a983d376dec9ae6bfebfcacc4c",
        "accc147666bfd37fc8b4ef745f18a8c751555ec2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 16:56:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 20 16:56:34 2013 +0000"
      },
      "message": "Merge \"audioflinger: implement getTimestamp() for offloaded tracks\" into klp-dev"
    },
    {
      "commit": "accc147666bfd37fc8b4ef745f18a8c751555ec2",
      "tree": "a091aa566ed09e8efe881a16e3806ee4169de3f0",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 09:36:34 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 09:36:34 2013 -0700"
      },
      "message": "audioflinger: implement getTimestamp() for offloaded tracks\n\nBug: 9587132.\nChange-Id: Ie9d5f4cca96306d08bc9a2dbd6edd8953096702d\n"
    },
    {
      "commit": "ede6c3b8b1147bc425f7b923882f559a513fe23b",
      "tree": "ac3986f0521aa4a5af705299ab423ec9d5e98bfa",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 19 14:37:46 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 19 15:53:20 2013 -0700"
      },
      "message": "audioflinger: fix lost offload thread resume event\n\nIt was possible that a resume request signaled by addTrack_l()\nwhile waiting for an async write callback is lost. This is because\nmSignalPending was not set and waitingAsyncCallback_l() would pause the\nthread loop before executing prepareTracks_l().\n\nThe fix consists in using signal_l() method to wake the thread\nloop o that mSignalPending is set.\n\nAlso make sure that sleepTime is reset to 0 when resuming to make sure\nthat we write any remaining bytes to the HAL.\n\nBug: 10810347.\n\nChange-Id: If9a3b22cc3b9e6eb384a56c48c40e6258d0896ad\n"
    },
    {
      "commit": "5baf2af52cd186633b7173196c1e4a4cd3435f22",
      "tree": "9c6752456812c4a927574a71e1d2ec2495ff6ce3",
      "parents": [
        "9a98b6de791aeb130192df10744f5b35f8b6ef1a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 12 17:37:00 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 18 11:52:40 2013 -0700"
      },
      "message": "more support for audio effect offload\n\nOffloading of audio effects is now enabled for offloaded\noutput threads. If an effect not supporting offload is enabled,\nthe AudioTrack is invalidated so that it can be recreated in PCM\nmode.\n\nFix some issues in effect proxy related to handling of effect\ncommands to offloaded and non offloaded effects.\n\nAlso fixed a bug on capture index in software Visualizer effect.\n\nBug: 8174034.\n\nChange-Id: Ib23d3c2d5a652361b0aaec7faee09102f2b18fce\n"
    },
    {
      "commit": "7f91e5e09cf3bd8068894b2e54cbdaac70bf53a0",
      "tree": "d780b615c9e2ea42c5449ebfeb870b3c7bee7eb9",
      "parents": [
        "d4dadf23dd2dd8acd514d60d84475954070340b8",
        "1abbdb4429479975718421c4fef3f79ce7c820e3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Sep 14 00:07:28 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Sep 14 00:07:29 2013 +0000"
      },
      "message": "Merge \"audioflinger: fix ro.audio.silent in offload mode\" into klp-dev"
    },
    {
      "commit": "1abbdb4429479975718421c4fef3f79ce7c820e3",
      "tree": "ac73fe0a2f36b66d9c33f22dd09ac76730beefce",
      "parents": [
        "99bf6267f0a4e2c3153be49ced59ae164d55ea6d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 13 17:00:08 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 13 17:00:08 2013 -0700"
      },
      "message": "audioflinger: fix ro.audio.silent in offload mode\n\nChange-Id: I5a1a79000d53146689b0a198cc5419c36509703f\n"
    },
    {
      "commit": "972a173d7d1de1a3b5a617aae3e2abb6e05ae02d",
      "tree": "f506c9ef80a8a31bfd58a254617fdecb26dbbcf5",
      "parents": [
        "99bf6267f0a4e2c3153be49ced59ae164d55ea6d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 04 09:42:59 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 13 12:14:07 2013 -0700"
      },
      "message": "audioflinger: longer offload thread standby delay\n\n- Increase offloaded output thread standby delay to 1 second\nto allow transition between tracks with going to stanby\nif reusing the same audio track (gapless)\n\n- Make sure pause/flush/resume sequence is sent to the HAL\nin the right order\n\n- Fix format display in track dump\n\nBug: 8174034.\nChange-Id: I43ef6f8fdbf7427e4eff6cc2d0665d7d1463ea8a\n"
    },
    {
      "commit": "9a54bc27876acd5d8be5b1fc3dc46701fe76fbb3",
      "tree": "15f25097fc7fc2548d41a29c94c22710472f01ca",
      "parents": [
        "84b7fb0c88ddd05ed7c148c82fe1691040a9404d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 09 09:08:44 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 10 14:39:28 2013 -0700"
      },
      "message": "audioflinger: add HOTWORD audio source.\n\nHOTWORD is a special capture audio source that uses\nthe same audio tuning as VOICE_RECOGNITION but allows an\nactive capture to be preempted.\n\nBug: 10640877.\n\nChange-Id: Iea09a11cbcdbacc8d434e5230e7559dcd1b44ac0\n"
    },
    {
      "commit": "3b4529e03c5fc7a44c22f9091ad15a269bfca3a8",
      "tree": "552d810348dc2ffd6018e58970a4cbbb39eceb5e",
      "parents": [
        "60c60df7db278d2fa5c90b0fa14f99a61d50272b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 05 18:09:19 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 06 18:09:03 2013 +0000"
      },
      "message": "audioflinger: remove async write race conditions\n\nRemove possible race conditions between async callback\nthread and offload thread when clearing and setting the\ndraining and write blocked flags.\n\nBug: 8174034.\nChange-Id: I7af10491f39dc0e7d7414862a9d8e763daa2e2b7\n"
    },
    {
      "commit": "767094dd98b01baf21de2ad09c27b3c98776cf73",
      "tree": "57b1a9c3b3d794bac2e1922b314046f02df18e7e",
      "parents": [
        "e45a767e13fe3396185c9d378a70f7f11eb881d0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 13:51:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 11:24:02 2013 -0700"
      },
      "message": "Add NBAIO_Sink::getTimestamp()\n\nwith a real implementation in AudioStreamOutSink\nfor dummy implementation initially in MonoPipe.\n\nUse in AudioFlinger::PlaybackThread::threadLoop_write()\nto keep the input to the timestamp latch up-to-date.\n\nChange-Id: I10ef277991b63bb43d55d6f3df75116ef32246cd\n"
    },
    {
      "commit": "6bf9ae20b3bd2dbb8f2e89ee167a6785222301cf",
      "tree": "4075a75b4c805011df36d78b015edf6180d649df",
      "parents": [
        "d656a4be3c3b6bc249b06599c2b02c2863d2c47f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 30 15:12:37 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 30 15:12:37 2013 -0700"
      },
      "message": "audioflinger: offloaded tracks flush/pause order\n\nMake sure that a flush received after a pause is forwarded\nto the HAL after the pause.\n\nChange-Id: Ib3221f70c59f8b3dbbac20b23104f6b779b75be0\n"
    },
    {
      "commit": "bd096fd9d8e5fc0e62f98807f4818a06f70d0812",
      "tree": "8ff27bce9f34e4bdd0f8e233494a24efef475a7d",
      "parents": [
        "573d80a8f463f648a515fc0975bf83951b272993"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 13:53:56 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:59:31 2013 -0700"
      },
      "message": "Implement Track::getTimestamp()\n\nusing a new timestamp latch in PlaybackThread, and\nAudioTrackServerProxy::framesReleased() which returns mServer.\n\nChange-Id: I1ebfba968c773faaab95648c272fd3ebd74718d6\n"
    },
    {
      "commit": "90e58b1fefc8caf70b34301a92bc86179580b6fc",
      "tree": "c3413197c464b11a3ea8ca846443cc7b15326582",
      "parents": [
        "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:16:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordThread::createRecordTrack_l use flags for fast tracks\n\nLook at client\u0027s request for a fast track in the flags parameter,\nand check whether the request can be satisfied.\n\nChange-Id: I65ddaeb1b85670fe9066076f638bfed0cda01c0d\n"
    },
    {
      "commit": "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2",
      "tree": "a467af6f181bff45e8c1e47284ebbc4d6d3ccead",
      "parents": [
        "eeca32671896739e84050da5992d5f151a1629de"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:14:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordTrack::createRecordTrack_l flags are in/out\n\nThe flags are currently unused, but will be used for requesting a fast\ntrack.  Making flags in/out will allow reporting back up to client that\nthe request is denied.\n\nChange-Id: Ifbee57da3632ce130551065a426577fb97b1a68d\n"
    },
    {
      "commit": "f36dbfe3d517e9311be0a4d0fd6658380690e84c",
      "tree": "65768073d7fd288eac6c28f1283589d65fe0cbad",
      "parents": [
        "1a3739169becc850999c3c06db402541119a428c",
        "82aaf94a5b18939e4d790bbc752031f3070704a3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:14:01 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 02 16:14:01 2013 +0000"
      },
      "message": "Merge \"Report underruns for fast tracks also\""
    },
    {
      "commit": "1a3739169becc850999c3c06db402541119a428c",
      "tree": "84762cba8a976b67dca741e8cad5adb2486f0c71",
      "parents": [
        "c5f8c3e5502f3c220fdbb54573608f3b3bd47517",
        "6d4d879037a495f9a4276a6996d1845594ce9090"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Aug 01 12:47:14 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 01 12:47:14 2013 -0700"
      },
      "message": "am 6d4d8790: am b687ff9f: Merge \"Fix mismatched delete/new couple\"\n\n* commit \u00276d4d879037a495f9a4276a6996d1845594ce9090\u0027:\n  Fix mismatched delete/new couple\n"
    },
    {
      "commit": "82aaf94a5b18939e4d790bbc752031f3070704a3",
      "tree": "4e39e32d0ccde726548afcbd81e253d5e316b295",
      "parents": [
        "b08ab81bab9e8cd2e3a7fff02725a387070fd078"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:05:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 09:15:00 2013 -0700"
      },
      "message": "Report underruns for fast tracks also\n\nThis fixes a regression that was introduced earlier\nby commit 9f80dd223d83d9bb9077fb6baee056cee4eaf7e5\ncalled \"New control block for AudioTrack and AudioRecord\".\nThat commit broke underrun reporting for fast tracks.\n\nAlso remove Track::mUnderrunCount, which counted the number of underrun\nevents, and was only used by dumpsys media.audio_flinger.\n\nNow dumpsys media.audio_flinger reports the number of underrun frames,\n\nIsolated underrun-related control block accesses via the proxy, so that\nthe server is not directly poking around in the control block.\n\nThe new proxy APIs are AudioTrackServerProxy::getUnderrunFrames() and\nAudioTrackServerProxy::tallyUnderrunFrames().  getUnderrunFrames() returns\na rolling counter for streaming tracks, or zero for static buffer tracks\nwhich never underrun, but do a kind of \u0027pause\u0027 at end of buffer.\ntallyUnderrunFrames() increments the counter by a specified number of frames.\n\nChange-Id: Ib31fd73eb17cbb23888ce3af8ff29f471f5bd5a2\n"
    },
    {
      "commit": "b08ab81bab9e8cd2e3a7fff02725a387070fd078",
      "tree": "ca39f5da6fd5d654a71472143ee4718855f576d6",
      "parents": [
        "4d74828fc0f6c13d49a36147a4250bcfa8ad0a47",
        "34af02647b387a252fb02bab8e2cb9f7bd9c8abb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 22:40:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 22:40:16 2013 +0000"
      },
      "message": "Merge \"Add resampler comments and fix a typo\""
    },
    {
      "commit": "34af02647b387a252fb02bab8e2cb9f7bd9c8abb",
      "tree": "2e2e6f24d984884746c91704fb054e00e38e5ff0",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 11:52:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 12:01:03 2013 -0700"
      },
      "message": "Add resampler comments and fix a typo\n\nChange-Id: Ie071673875f663de4212eed4a4dff89d51a5a915\n"
    },
    {
      "commit": "96f60d8f04432a1ed503b3e24d5736d28c63c9a2",
      "tree": "083f6224327e0965a925076b3e1aec5636598203",
      "parents": [
        "97252bb0e40a5a9b41f020163393cf6c5da10b7e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 10:21:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:40:17 2013 -0700"
      },
      "message": "Rename control block flags to mFlags\n\nChange-Id: I7b6d31e24531954ab1ecdf3ed56c19433700bd89\n"
    },
    {
      "commit": "97252bb0e40a5a9b41f020163393cf6c5da10b7e",
      "tree": "2730f01323e31639eb85736a20ad0e0cf867876e",
      "parents": [
        "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
        "291bb6d8947c5b0c062f0895d623c529259bfa39"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "message": "Merge \"AudioRecord and HAL input stream must be 16-bit PCM only\""
    },
    {
      "commit": "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
      "tree": "997cd41de1adb829c194f56cf29eb02945666b94",
      "parents": [
        "eced2daaa6c91a3731eef978ce65c6ec319c5e6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 09:45:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:24:03 2013 -0700"
      },
      "message": "Rename control block server to mServer and add comments\n\nChange-Id: Ieabd91acee92d0e84e66fbd358df5282b856306e\n"
    },
    {
      "commit": "a30e75897934da2ce7b1b03bcb4b58e139d3e81e",
      "tree": "78a398fee8ff72494debd7284ce0b43115412ad0",
      "parents": [
        "fa319e6d918b84f93fb5457af5d1cca6421ac517",
        "9fdcb0a9497ca290bcf364b10868587b6bde3a34"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 14:36:19 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 14:36:20 2013 +0000"
      },
      "message": "Merge \"Fix theoretical race using TrackBase::sampleRate()\""
    },
    {
      "commit": "eb144bbbd0b18427562b0d7db5b38e11f9484739",
      "tree": "c9ca9b64b648eef884e088f55c3693c0ddbc9c40",
      "parents": [
        "1bb59258458350af518170558120783bc2f9e61d"
      ],
      "author": {
        "name": "Andrei V. FOMITCHEV",
        "email": "andreix.fomitchev@intel.com",
        "time": "Tue Oct 09 11:33:25 2012 +0200"
      },
      "committer": {
        "name": "David Wagner",
        "email": "david.wagner@intel.com",
        "time": "Tue Jul 30 14:42:08 2013 +0200"
      },
      "message": "Fix mismatched delete/new couple\n\nIn RecordThread::readInputParameters(), mRsmpInBuffer is allocated\nwith new[] and should be freed with delete[] instead of delete.\n\nThis error has been found by valgrind.\n\nChange-Id: I2f947abb658a21a7d1e61eebb99270cb37d2d147\nSigned-off-by: Andrei V. FOMITCHEV \u003candreix.fomitchev@intel.com\u003e\nSigned-off-by: David Wagner \u003cdavid.wagner@intel.com\u003e\nSigned-off-by: Jack Ren \u003cjack.ren@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n"
    },
    {
      "commit": "fa319e6d918b84f93fb5457af5d1cca6421ac517",
      "tree": "2ccff564a324d72c8bd5d872a220f56b26431203",
      "parents": [
        "548efc94813c1dec6e8cf6c085ae41ccb04827f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:17:38 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:20:47 2013 -0700"
      },
      "message": "Remove CC_LIKELY and CC_UNLIKELY where not needed\n\nOnly keep them in performance-sensitive code\n\nChange-Id: Ib257ddd7bc39ce9896997ffae008c524ac743d01\n"
    },
    {
      "commit": "548efc94813c1dec6e8cf6c085ae41ccb04827f1",
      "tree": "620319f408aa2fc988373767cd382572bf32f3a3",
      "parents": [
        "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 29 08:48:51 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Rename RecordThread::mInputBytes to the more generic mBufferSize\n\nThis prepares for using it in PlaybackThreads later\n\nChange-Id: Id90a92aa6372e4b69914b0008cef07296ca5d6a3\n"
    },
    {
      "commit": "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128",
      "tree": "064801660f69f98c8ed48db753902ac141d6bc32",
      "parents": [
        "2314e90eb8de63a7058297817125b94c1eac8019"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:37:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Move members from ThreadBase to PlaybackThread\n\nMove mNormalFrameCount and frameCountHAL(), since they\u0027re not used by\nrecord threads.  Also comment which fields are updated by readParameters().\n\nChange-Id: I5fc0a8a89cc637976f22d49271a5a3e136dab4e1\n"
    },
    {
      "commit": "7f249fa9bcb64da324d19f551943fac7686d221c",
      "tree": "76cc14be9525f53fbf910c00884ebe4b5c9988c9",
      "parents": [
        "ae4b5f93444802632d71ec34373842e6f5febbaa",
        "fad226abd12435dbcd232f7de396f1a097b2bd5f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 21:13:08 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 21:13:14 2013 +0000"
      },
      "message": "Merge \"Use standard name and type for channel mask\""
    },
    {
      "commit": "175f8338e67aae6d0ca420b8f45a5f7cab4394d5",
      "tree": "cea9a9e0eb01e11f87ceb30dbdfdff293ac26513",
      "parents": [
        "5be847c22e7cec35a8b342338541fe1472bfd1a0",
        "d8ea699dc8e7dac58bb32e9cdb31b0758da25817"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 20:24:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 20:24:16 2013 +0000"
      },
      "message": "Merge \"Simplify getParameters()\""
    },
    {
      "commit": "f6ed423af92a56ef54bba23eba883b1f21448b54",
      "tree": "bad2f734e3191cbfa3c72bdeadcd88f5015e6ba8",
      "parents": [
        "2eeca1f8e18106d118f7268cb9d8597539685c5c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:16:27 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 12:43:12 2013 -0700"
      },
      "message": "Treat mChannelCount as uint32_t consistently\n\nmChannelCount was 8-, 16-, or 32-bits\n\nChange-Id: I2cc2fedf3e33144e5c8bbd9894763282d9217f63\n"
    },
    {
      "commit": "2eeca1f8e18106d118f7268cb9d8597539685c5c",
      "tree": "28b2c665c838d4e78265c74c284694f85a77a579",
      "parents": [
        "b59c1ad726b8bdf441f373d0bdc612539769334a",
        "34542acfa25c6413c87a94b6f7cc315a0c496277"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "message": "Merge \"Move local variable declarations to point of first use\""
    },
    {
      "commit": "b283374cbf79dc5a36f1eef0015d7baf8881792e",
      "tree": "b2f1680b6c3c3094a50176e234f8f8ca424f0058",
      "parents": [
        "bd4c4fbb3b073e48963185d11a15da1fa18d2e54",
        "9e8fcbcd8efa51d70d1207ff57bfbfe31324287a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:06:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:06:18 2013 +0000"
      },
      "message": "Merge \"Move delete AudioMixer closer to point of re-allocation\""
    },
    {
      "commit": "afbbc6c5f6bc470d504dcf24ceb3ac21d57fb78d",
      "tree": "6fc44421938fc9a08c232580f581b89f95259ed3",
      "parents": [
        "420ea49539d23ab305a7b33c0854a7a475493dd4",
        "a8356f663014e7d4c27869629af83d8bb3441e19"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 14:27:55 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 14:27:56 2013 +0000"
      },
      "message": "Merge \"Simplify RecordTrack::stop()\""
    },
    {
      "commit": "422801c5e9b795105f28e639c4bed5ee3f4e56f3",
      "tree": "b01bec728cec33edab05f66d8fa2a88fc5533f16",
      "parents": [
        "94ea60f975c3eb7ce6d2a4430538a42a5fc3babd",
        "7fc97ba08e2850f3f16db704b78ce78e3dbe1ff0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 26 21:33:40 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 26 21:33:41 2013 +0000"
      },
      "message": "Merge \"HAL stream format for mixer output threads must be stereo 16-bit PCM\""
    },
    {
      "commit": "a8356f663014e7d4c27869629af83d8bb3441e19",
      "tree": "af015d8d690aaf239b940d0ca65576bd795719c9",
      "parents": [
        "fc38a2e0268b5e531db2975c3a81462a3593c861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:37:52 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:44:51 2013 -0700"
      },
      "message": "Simplify RecordTrack::stop()\n\nChange-Id: Ib959c1e9dc9544d12277ce11bea445118b2e0521\n"
    },
    {
      "commit": "bfb1b832079bbb9426f72f3863199a54aefd02da",
      "tree": "5007d22456776dc77d124be84bcfe8bc4152bbb2",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 07 09:53:42 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "AudioFlinger: offload playback, non-blocking write\n\n- Added specialized playback thread class for offload playback,\nderived from directoutput thread.\nThis thread type handles specific state transitions for offloaded\ntracks and offloading commands (pause/resume/drain/flush..) to audio HAL.\nAs opposed to other threads, does not go to standby if the track is paused.\n\n- Added support for asynchronous write and drain operations at audio HAL.\nUse a thread to handle async callback events from HAL: this avoids locking\nplayback thread mutex when executing the callback and cause deadlocks when\ncalling audio HAL functions with the playback thread mutex locked.\n\n- Better accouting for track activity: call start/stop and release Output\nmethods in audio policy manager when tracks are actually added and removed\nfrom the active tracks list.\nAdded a command thread in audio policy service to handle stop/release commands\nasynchronously and avoid deadlocks with playback thread.\n\n- Track terminated status is not a state anymore. This condition is othogonal\nto state to permitted state transitions while terminated.\n\nChange-Id: Id157f4b3277620568d8eace7535d9186602564de\n"
    },
    {
      "commit": "9e8fcbcd8efa51d70d1207ff57bfbfe31324287a",
      "tree": "43dae12b292fcfe0ab9ed12c57f26a170b16b807",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 10:09:11 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 12:50:26 2013 -0700"
      },
      "message": "Move delete AudioMixer closer to point of re-allocation\n\nNo need to delete AudioMixer before readOutputParameters\n\nChange-Id: Icafa785c9021bbe8d985e4f9527f8fc8c5e62622\n"
    },
    {
      "commit": "7fc97ba08e2850f3f16db704b78ce78e3dbe1ff0",
      "tree": "ada9fda1321150cc75295eece5f7f82e35f0c9f3",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:18:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 12:22:18 2013 -0700"
      },
      "message": "HAL stream format for mixer output threads must be stereo 16-bit PCM\n\nDirect and tunnel output threads can support various HAL stream formats,\nincluded encoded.  But currently there are stereo 16-bit PCM assumptions\nin several places for mixer and duplicating output threads:\n - mMixBuffer and mixBuffer()\n - AudioMixer including resampler\n - FastMixer\u0027s mixBuffer\n - effects\n - NBAIO_Format\n - anywhere FCC_2 is used\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces stereo 16-bit\nPCM in mixer and duplicating threads at the place where the HAL format\nis read.  It was already being checked in checkForNewParameters_l(),\nbut not in readOutputParameters().\n\nChange-Id: Ibe344cc922743da234299097aa1bb1f54795cc9b\n"
    },
    {
      "commit": "d8ea699dc8e7dac58bb32e9cdb31b0758da25817",
      "tree": "6610e00d5fe1cc23c316ed0b0663ec06dede82db",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 14:17:15 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:31:38 2013 -0700"
      },
      "message": "Simplify getParameters()\n\nChange-Id: Iedfeca3cd477d023c350d6d4e6eed874ee467a32\n"
    },
    {
      "commit": "34542acfa25c6413c87a94b6f7cc315a0c496277",
      "tree": "8fdb43eabdcceca8291966fe88d9c37a3864beee",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 11:29:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:21:55 2013 -0700"
      },
      "message": "Move local variable declarations to point of first use\n\nChange-Id: Ideb83dea2c3002651c34fa646753cba598e29e93\n"
    },
    {
      "commit": "fad226abd12435dbcd232f7de396f1a097b2bd5f",
      "tree": "4e5214f8f5b142239a9583e79032b70330fa7c8e",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:19:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 17:49:04 2013 -0700"
      },
      "message": "Use standard name and type for channel mask\n\nFormer name \u0027channels\u0027 was ambiguous with respect to channel count.\n\nChange-Id: I716f792d95a7e0c787d27514ad6e93dbcef8a415\n"
    },
    {
      "commit": "291bb6d8947c5b0c062f0895d623c529259bfa39",
      "tree": "aa527f282bf3523c3692f086e4e088e8e21aa69c",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:23:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 16:03:05 2013 -0700"
      },
      "message": "AudioRecord and HAL input stream must be 16-bit PCM only\n\nCurrently there are 16-bit PCM assumptions in several places for capture:\n - resampler API\n - mRsmpInBuffer and mRsmpOutBuffer\n - RecordThread::threadLoop upmix, downmix, and resampling\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces 16-bit PCM in both\nclient and server at all places where a format is checked.\n\nChange-Id: I08b0570bff626ad0d341804825a72c14e61b4233\n"
    },
    {
      "commit": "4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61",
      "tree": "c7ed5d9b71f919bf664dd0cb6cbdd1c3de2f9241",
      "parents": [
        "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 14:45:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Use AudioSystem::setLowRamDevice() to configure memory\n\nBug: 9798886\nChange-Id: I9321e3f369f1ed9429ae222e3926ebdeb012b8b0\n"
    },
    {
      "commit": "153b9fe667e6e78e0218ff0159353097428c7657",
      "tree": "360a76911071e362a94af32ccf67ce9619629708",
      "parents": [
        "20f4754b7e687d3718a0a0a585f2c9ac22e2567d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 11:23:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Make AudioFlinger::instantiate() more resilient when called from separate module\n\nBug: 8834855\nChange-Id: I4cd842cdfb09d2aaaaab9df9ac3bec6179709bd3\n"
    },
    {
      "commit": "c6ae3c8a261794fd4445e4e152d1ada074a3f92f",
      "tree": "c8f6493eb0a0f6af812ea5909096cf91818fce05",
      "parents": [
        "ee5e8d3e8dc61f8fb1fa725278d63802074c10c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 09:08:51 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:38:58 2013 -0700"
      },
      "message": "Fix theoretical memory leak in mConfigEvents\n\nChange-Id: I137f70676c8919661e716c33e0dd9c25c2b6285c\n"
    },
    {
      "commit": "1ab85ec401801ef9a9184650d0f5a1639b45eeb9",
      "tree": "c3a39f141461642c3ac3c7f1370ca679d08d80e6",
      "parents": [
        "8f13428cb29a9b610a9e9a0f5fea437cd2d3f032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 31 09:18:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 02 13:43:24 2013 -0700"
      },
      "message": "Include what is needed\n\nRemove old includes.\nHeader files only include other header files that they directly need themselves.\n\nChange-Id: Ic471386808d9f42ea19ccbd59cb50a5f83a89dd0\n"
    },
    {
      "commit": "9fdcb0a9497ca290bcf364b10868587b6bde3a34",
      "tree": "95292e5a21adb17ca3d40b0eec8590aab93bb557",
      "parents": [
        "7919fa2c33b1fa7f5e49b2188d671bfe519c231e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 16:11:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 16:11:36 2013 -0700"
      },
      "message": "Fix theoretical race using TrackBase::sampleRate()\n\nIn two places we assumed that TrackBase::sampleRate() would return the\nsame value when it is called twice in the same function.  This is not\nguaranteed; sampleRate() reads from the control block so the return\nvalue could change.  To fix this, only call sampleRate() once and cache\nthe return value to get a consistent value.\n\nThis was only a theoretical race.  In MixerThread::prepareTracks_l()\nit would have no bad effect.  In TimedTrack::getNextBuffer() it could\ncause a real problem, but we don\u0027t currently support dynamic sample rate\nratios for timed tracks.\n\nChange-Id: I8e5c33f0121fc058d1e70c2ab5e9135397d3e0b7\n"
    },
    {
      "commit": "9f80dd223d83d9bb9077fb6baee056cee4eaf7e5",
      "tree": "79f19f80ebb7978e9bab16e1d9b835849c735592",
      "parents": [
        "9fef8d453b15a91a2b748faac2bfaff713bcf1e1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 18 15:57:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 12 14:33:10 2013 -0700"
      },
      "message": "New control block for AudioTrack and AudioRecord\n\nMain differences between old and new control block:\n - removes the mutex, which was a potential source of priority inversion\n - circular indices into shared buffer, which is now always a power-of-2 size\n\nChange-Id: I4e9b7fa99858b488ac98a441fa70e31dbba1b865\n"
    },
    {
      "commit": "fe9a901a445633e70073b1b91fca3af34d8e8132",
      "tree": "41236b49070c051fb562c5919b827440cc53f610",
      "parents": [
        "d8af57f8c2715dd06f49f6003afa2f41437fefa3",
        "bb35be24239f05f59715960a93cd491a4cd3b4d6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 12 08:47:34 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 12 08:47:34 2013 -0700"
      },
      "message": "am bb35be24: am 7be48189: Merge \"audioflinger: fix effects on direct output threads\" into jb-mr2-dev\n\n* commit \u0027bb35be24239f05f59715960a93cd491a4cd3b4d6\u0027:\n  audioflinger: fix effects on direct output threads\n"
    },
    {
      "commit": "d0107bcd44fe608b0c00a8843d19fb6356c4cb69",
      "tree": "ed820c80ced11b73b1ed88899c182b83b186429f",
      "parents": [
        "ba696bbff88d5627beaa0be95be78ba30138983d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:38:48 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 11 14:57:08 2013 -0700"
      },
      "message": "audioflinger: fix effects on direct output threads\n\nPlaybackThread::addTrack_l() uses the assumption that\neffects are attached to a track only if the track accumulation\nbuffer is different from the mixer thread output buffer.\nThis is not true for direct output threads where only one track is active\nan only one buffer is needed.\nThis assumption is an optimization to avoid checking for effect chains with\nthe same session ID each time a track is processed. The optimization\nis not key if only one track is attached to the thread which is the case for\ndirect outputs.\n\nCurrent code fails to increment the active track count in the effect chain\non direct output threads when a track is started thus making the effect\nframework clear the mix buffer and produce silence each time the mixer runs.\n\nThe fix consists in removing the optimization described above.\n\nBug: 9324989.\n\nChange-Id: Id7a6337450ed90d326299c2ce9fc02f4b9e2fa6f\n"
    },
    {
      "commit": "04b035e3ccbf2919e4447c66e6483c11f2889f01",
      "tree": "14d7677a26472c1a8900065caf25654492e78045",
      "parents": [
        "5aefa7b60e4567d789de22068a09f339e88d37d6",
        "d3a5b48a1bc4f5d6ff4472f54f909abaadd5fa39"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 07 08:59:12 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 07 08:59:12 2013 -0700"
      },
      "message": "am d3a5b48a: am 18b46679: Merge \"AudioFlinger: do not cache audio device when 0.\" into jb-mr2-dev\n\n* commit \u0027d3a5b48a1bc4f5d6ff4472f54f909abaadd5fa39\u0027:\n  AudioFlinger: do not cache audio device when 0.\n"
    },
    {
      "commit": "7e1139c0377b6806942fb2a043737b3b9cf0ae91",
      "tree": "4058659d99edb14cb95a7b7265db54eb8c6ef867",
      "parents": [
        "62a8f67f33faf19d0ff815672dd19bb71dd0d650"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 06 18:29:01 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 06 18:33:08 2013 -0700"
      },
      "message": "AudioFlinger: do not cache audio device when 0.\n\nAudioFlinger should not cache the audio device\npassed to the audio HAL when it is AUDIO_DEVICE_NONE\nbut keep previous valid selection instead.\n\nBug: 9323399.\nChange-Id: I6f9480e55a21be4115453e6a5eebc5cf2536c476\n"
    },
    {
      "commit": "7c027248e1a4ccd5b22bc4deafb03e2d87ac8f38",
      "tree": "ed6b92a79faa533f7c1156836f00b9dcaec8834d",
      "parents": [
        "8bae43ae86b9942892980c3c01bff5c812b1db7f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 26 14:43:16 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 30 13:40:56 2013 -0700"
      },
      "message": "Consistent whitespace\n\nChange-Id: I118cce68d3b777f9ec9b6bfb70367496422a40f2\n"
    },
    {
      "commit": "61d404efeaaf3ea1b615c160b843ac9f274d0018",
      "tree": "d22a48bed9c849d4b256655aba484a6dd6b542c9",
      "parents": [
        "2a00d1fa9948603d5283fed3152291dab1adcb59"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 20 11:22:20 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 20 16:50:22 2013 -0700"
      },
      "message": "Update to supply correct name for new power manager app ops.\n\nChange-Id: Ia686319509d98a4f467479ea494e8a54f2c1e238\n"
    },
    {
      "commit": "f8197a6a9d9363cb52bb8a2c15c0e5a52064355e",
      "tree": "efad34614c9d7e77ed830768279005004376bbb2",
      "parents": [
        "1e25b79b28e578c43607faf100dcaf4cf068f05a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 12:39:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 14:18:18 2013 -0700"
      },
      "message": "Remove timing jitter during startup of audio\n\nThis fixes a regression introduced recently, that increased timing jitter\nduring the startup of the FastMixer and AudioTrack callback threads.\n\nThe regression was to make requestPriority() asynchronous as a way to\navoid an apparent priority inversion in system_server.  This means that\nthe target thread could run briefly with the initial priority, before\nthe new priority takes effect.\n\nThis change removes the startup jitter for FastMixer, by making the\nrequestPriority() synchronous again for that case.  It doesn\u0027t matter\nthat this restores the priority inversion involving normal mixer thread,\nbecause it happens during startup of both threads.\n\nThe change also removes the startup jitter for the AudioTrack callback\nthread, by having the target thread check whether the requestPriority()\nhas completed yet.  If not, the target thread blocks with a timeout\nuntil the priority boost finishes.\n\nFinally, we now log an error message if the expected priority boost\ndoesn\u0027t happen.\n\nBug: 8698989\nChange-Id: Id590e9a274b70ec1ba85b44a585ee37a22e41cbc\n"
    },
    {
      "commit": "a07f17ca46db04c9d5d9e7d6b2878db59ca2b9ea",
      "tree": "5f35039b1b7ed7518280e9a436536600a5aac5c9",
      "parents": [
        "5e43772296d7c5b8faf4b0ce4efe68778729bc74"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 12:39:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 14:18:18 2013 -0700"
      },
      "message": "Remove timing jitter during startup of audio\n\nThis fixes a regression introduced recently, that increased timing jitter\nduring the startup of the FastMixer and AudioTrack callback threads.\n\nThe regression was to make requestPriority() asynchronous as a way to\navoid an apparent priority inversion in system_server.  This means that\nthe target thread could run briefly with the initial priority, before\nthe new priority takes effect.\n\nThis change removes the startup jitter for FastMixer, by making the\nrequestPriority() synchronous again for that case.  It doesn\u0027t matter\nthat this restores the priority inversion involving normal mixer thread,\nbecause it happens during startup of both threads.\n\nThe change also removes the startup jitter for the AudioTrack callback\nthread, by having the target thread check whether the requestPriority()\nhas completed yet.  If not, the target thread blocks with a timeout\nuntil the priority boost finishes.\n\nFinally, we now log an error message if the expected priority boost\ndoesn\u0027t happen.\n\nBug: 8698989\nChange-Id: Id590e9a274b70ec1ba85b44a585ee37a22e41cbc\n"
    },
    {
      "commit": "7fd54ff906c69400727fc8e90118a8a0429d7ab2",
      "tree": "025b4ee5d9eeb5937fb645c88e9831637555d068",
      "parents": [
        "8344844311b852ea7321e914642bd9e57e0d5fb0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 03 17:27:56 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 04 14:29:56 2013 -0700"
      },
      "message": "audioflinger: multiple tracks on direct output\n\nFix problems when multiple tracks exist on a direct output\nthread:  when multiple tracks are active, continue to update all\ntrack states but only take into account the last track started\nfor audio HAL volume and mixer state control.\n\nBug 8388941\n\nChange-Id: I57e6757286f41651dda99b11a5449e431812431b\n"
    },
    {
      "commit": "d595b7c858c481a07745674ce2d8a6690e980e74",
      "tree": "d53fe81f7e976b4fbb0b537354243599fc7e57c3",
      "parents": [
        "a9cbef06acb2a422474cbf292debc1f31fcf9c44"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 03 17:27:56 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 04 14:29:56 2013 -0700"
      },
      "message": "audioflinger: multiple tracks on direct output\n\nFix problems when multiple tracks exist on a direct output\nthread:  when multiple tracks are active, continue to update all\ntrack states but only take into account the last track started\nfor audio HAL volume and mixer state control.\n\nBug 8388941\n\nChange-Id: I57e6757286f41651dda99b11a5449e431812431b\n"
    },
    {
      "commit": "a265845ecafe06c9668ce7ac67636657f4bedf86",
      "tree": "ae75ddb56a1aa950221e8961c0d2718958b61987",
      "parents": [
        "10774e144b3c99afad9a5070ccf50fdb12b5fb4e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 11:32:32 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 04 12:58:21 2013 -0800"
      },
      "message": "Miscellaneous cleanup\n\nAbbreviation framesReady to fRdy for new systrace.\nPut inline const on one line.\nUse local copy of mState in state.\nImprove logging.\nLine length 100.\n\nChange-Id: I8201c3ce0e53fd464fd33d02544e52c342d40b68\n"
    },
    {
      "commit": "c9b2e20f7c9a71e07ef398152709c76079decbcd",
      "tree": "7e3cbee883fbe1462e24a31b8b4af5a5911e8276",
      "parents": [
        "bf04b5860182d8f4130dcb5d6d88ee68a58c99cd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 11:32:32 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 04 12:58:21 2013 -0800"
      },
      "message": "Miscellaneous cleanup\n\nAbbreviation framesReady to fRdy for new systrace.\nPut inline const on one line.\nUse local copy of mState in state.\nImprove logging.\nLine length 100.\n\nChange-Id: I8201c3ce0e53fd464fd33d02544e52c342d40b68\n"
    },
    {
      "commit": "10774e144b3c99afad9a5070ccf50fdb12b5fb4e",
      "tree": "9eaa08524904389bcbaa9c2fb4b1db34f53c79d6",
      "parents": [
        "551bb75ae1bec8db8577febcf6faaa35a37947dc",
        "d3c4b134a87b96227b90b9ec052d8a6e9880bbdf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Mar 02 00:04:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 02 00:04:35 2013 +0000"
      },
      "message": "Merge \"media.log cleanup\" into jb-mr2-dev"
    },
    {
      "commit": "bf04b5860182d8f4130dcb5d6d88ee68a58c99cd",
      "tree": "b68876a589e063ce86f7e24f6e5aff918995f6e2",
      "parents": [
        "ea2839f133b989b770cc5f093aca4754e5523599",
        "ab7d72f0804fbb7e91ad9d2a16f826d97e20e5d0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Mar 02 00:04:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 02 00:04:35 2013 +0000"
      },
      "message": "Merge \"media.log cleanup\" into jb-mr2-dev"
    },
    {
      "commit": "d3c4b134a87b96227b90b9ec052d8a6e9880bbdf",
      "tree": "869a985fd6a51da99de24bd5a3ace41421c0a7a3",
      "parents": [
        "358538ce26ee651f6b5cff9f7432a5321386710d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 27 09:05:28 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 01 15:36:26 2013 -0800"
      },
      "message": "media.log cleanup\n\nRemove almost all of the specific logs, but leave the media.log\nlogging infrastructure in place for the next time we need it.\n\nRe-apply a few good changes that were reverted earlier:\n - check logf format vs. argument list compatibility\n - distinguish potentially modified and actually modified tracks in FastMixer\n - fix benign bug where sq-\u003eend() was called more than once\n - fix a build warning\n\nBug: 6490974\nChange-Id: I02d3e83646c738acaebb415bd0d6b548638b4ef5\n"
    },
    {
      "commit": "ab7d72f0804fbb7e91ad9d2a16f826d97e20e5d0",
      "tree": "9eda6276ab70724dcc98e56f7ca16afeb70ff079",
      "parents": [
        "3605ab3c02516e4123c39062de301bacc8ea8d9f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 27 09:05:28 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 01 15:36:26 2013 -0800"
      },
      "message": "media.log cleanup\n\nRemove almost all of the specific logs, but leave the media.log\nlogging infrastructure in place for the next time we need it.\n\nRe-apply a few good changes that were reverted earlier:\n - check logf format vs. argument list compatibility\n - distinguish potentially modified and actually modified tracks in FastMixer\n - fix benign bug where sq-\u003eend() was called more than once\n - fix a build warning\n\nBug: 6490974\nChange-Id: I02d3e83646c738acaebb415bd0d6b548638b4ef5\n"
    },
    {
      "commit": "dd0bda0c47871d4964b5035a096c7c8c27fa7469",
      "tree": "fc9f45ab9ef280f0d84a32a6d5b116b0cd40be69",
      "parents": [
        "48af7e8dd40883d6154e7029d9500072b551b5fa"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 09:20:22 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 11:36:38 2013 -0800"
      },
      "message": "Remove tee sink debugging at compile time\n\nBug: 8223560\nChange-Id: Iddbfb06c45d43d9f20bb428215dd4094931e19a7\n"
    },
    {
      "commit": "46909e7eb074ce1b95b8a411eb71154f53f84f77",
      "tree": "a0b31a2590a604b0e2c7a6a133bba067dadfad5e",
      "parents": [
        "ceb388d6c03c38b96dc41c0ea4804b749aa077c4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 09:20:22 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 11:36:38 2013 -0800"
      },
      "message": "Remove tee sink debugging at compile time\n\nBug: 8223560\nChange-Id: Iddbfb06c45d43d9f20bb428215dd4094931e19a7\n"
    },
    {
      "commit": "dd4abb5177b8d94cd30a787d4ce336d5110c185c",
      "tree": "3c8241b21bc14d7cf3191566e4ce79cd03cd3457",
      "parents": [
        "ee9cc423e2551ffbacfd226b8627737beabaec99"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 10 12:31:01 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 22 16:50:36 2013 -0800"
      },
      "message": "Update tee sink\n\nImplement rotation to reduce long-term storage use.\nImplement optional per-track tee.\nDynamically enable at runtime based on property, instead of at compile-time.\nDynamic frame count not yet implemented.\n\nBug: 8223560\nChange-Id: I3706443c6ec0cb0c6656dc288715a02ad5fea63a\n"
    },
    {
      "commit": "da6ef1320d0161b1640dc84d7a9c5a25860c3619",
      "tree": "86b24f64ed0bd55de10deb193290009687886192",
      "parents": [
        "99c2f923f6b04efffe949d1daf9cb7148e3cc201"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 10 12:31:01 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 22 16:50:36 2013 -0800"
      },
      "message": "Update tee sink\n\nImplement rotation to reduce long-term storage use.\nImplement optional per-track tee.\nDynamically enable at runtime based on property, instead of at compile-time.\nDynamic frame count not yet implemented.\n\nBug: 8223560\nChange-Id: I3706443c6ec0cb0c6656dc288715a02ad5fea63a\n"
    }
  ],
  "next": "5f6f3764989601d3b3ee65beaf1447d2a6b5f284"
}
