)]}'
{
  "log": [
    {
      "commit": "fe3156ec6fd9fa57dde913fd8567530d095a6550",
      "tree": "2c4b8250d0089a7d9f396d40005f4fefd95f46f3",
      "parents": [
        "66765846726c02db16a0f024f2217990a90802c0"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Sep 10 18:58:27 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Sep 10 18:58:27 2012 -0700"
      },
      "message": "Communicate audio session ID to downmixer\n\nThe audio downmixer effect might need the audio session Id, pass it\n from the track creation in AudioFlinger to the downmix effect\n creation in AudioMixer.\n\nChange-Id: I5e29540542ae89cf4a0cdb537b3e67f04442a20a\n"
    },
    {
      "commit": "fcfc61da927e98d18cdcb53da8fa0a8a32ee1422",
      "tree": "7dd8aadcffc35c98504f35d69fe467c0a8e8f397",
      "parents": [
        "7edbacf24e60c01e2d3b10715ec8f9cc2f55c11a",
        "ff4c64d6b1b58494a1b15f1a664e5c421d095d15"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Aug 10 12:44:02 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 10 12:44:02 2012 -0700"
      },
      "message": "am ff4c64d6: am c64a1787: Merge \"Fix initialization of audio mixer track resources for MIPS.\"\n\n* commit \u0027ff4c64d6b1b58494a1b15f1a664e5c421d095d15\u0027:\n  Fix initialization of audio mixer track resources for MIPS.\n"
    },
    {
      "commit": "3c0a0e8541846427db0587c2fffb90f60ee680b0",
      "tree": "5ec5cfb29970fe635f34145ba9642f96fd91e9b7",
      "parents": [
        "ffd99cb795c92caee7f4bd0b26af9ae37b100fc3"
      ],
      "author": {
        "name": "Paul Lind",
        "email": "plind@mips.com",
        "time": "Wed Aug 01 18:49:49 2012 -0700"
      },
      "committer": {
        "name": "Paul Lind",
        "email": "plind@mips.com",
        "time": "Wed Aug 01 18:49:49 2012 -0700"
      },
      "message": "Fix initialization of audio mixer track resources for MIPS.\n\nThe value 1 \u003c\u003c 32 (maxNumTracks defaults to 32) is surprisingly not defined\nin C, and differs on MIPS than the other arch.\n\nTherefore the track resources were not initialized properly, resulting\nin failure to play any audio.\n\nThe fix allows the mConfiguredNames bitmask to be correctly set to all\n1\u0027s in the 32-track case, for all arch.\n\nChange-Id: Ied3e1305952e9567602e2cd76c5ef3acb0809ee0\nSigned-off-by: Paul Lind \u003cplind@mips.com\u003e\n"
    },
    {
      "commit": "254af180475346b6186b49c297f340c9c4817511",
      "tree": "bee0e313aaa97645167e86f4678e513ab38d1c99",
      "parents": [
        "4d2132c866228eaef563e8141ebf06aa25ee9ff7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 14:59:05 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 10:05:31 2012 -0700"
      },
      "message": "Use audio_channel_mask_t more places\n\nUse it in AudioSystem::getOutput(), AudioSystem::getInput(),\nIAudioPolicyService::getOutput(), IAudioPolicyService::getInput(),\nand various other places in AudioFlinger.\n\nNot done: AudioTrack and OutputDescriptor.\n\nChange-Id: I70e83455820bd8f05dafd30c63d636c6a47cd172\n"
    },
    {
      "commit": "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": "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": "4e2293f29f2e719af1245d365747ea06d074b345",
      "tree": "d07878412ffeca6ccd4e7e4bbbc0b4fb68370a59",
      "parents": [
        "99a80e10f2d0e88c0509a298bdd1df0308b55a7b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 12 09:39:07 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 16 17:43:58 2012 -0700"
      },
      "message": "AudioMixer new cmd: remove sample rate converter\n\nAdd a new command REMOVE to remove any sample rate converter\n   on a track, without having to delete the track name.\nAdd comments.\nRemove some dead code.\nFix whitespace and comparison to NULL.\n\nChange-Id: Id55a23ab5ee673189e99675b4e6fa5df7b617987\n"
    },
    {
      "commit": "a5e821439996de6005b2fa36b3bdd31f003ce23f",
      "tree": "04520106c0140dfeae4baff583749bf250e7b81f",
      "parents": [
        "a98db787397633155fd71b06ecaa765a7ad20cf2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 13:47:17 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 14:31:24 2012 -0700"
      },
      "message": "AudioMixer: fix crash in destructor\n\nCommit deeb1282 made that track-\u003eresampler is only set to NULL when\ngetTrackName() is called. It remains uninitialized for all unused tracks\ncausing a crash when deleted by Audiomixer destructor.\n\nIssue 6309441.\n\nChange-Id: I49451387a6afe81299b8368ef206524df32f74c4\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": "deeb1282621f3177ad667360b40eef8e4fedb298",
      "tree": "595d49e01dc93258bc061052f103e45e2811b129",
      "parents": [
        "a1472d9883e35edd280201c8be3191695007dfd4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Mar 25 11:59:31 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Apr 01 14:57:33 2012 -0700"
      },
      "message": "AudioMixer default track parameters\n\nMove the default initialization of track parameters from the AudioMixer\nconstructor to getTrackName().  This fixes a bug where the defaults were\nonly valid the first time a name was allocated.\n\nAlso added a switch case for parameter FORMAT.\n\nChange-Id: I07abd3aaf7f4efe9825a761d2bc662aaee2c6db0\n"
    },
    {
      "commit": "ccf89b54f973f11082150d02ed957f7e967fbc8b",
      "tree": "b3446119a9b6c03dcca98d1d9ee31a83adb8acad",
      "parents": [
        "63c1faa8dea7feb90255d31ef2a133d8f2818844",
        "5c94b6c7689a335e26a86e8a0d04b56dc627738e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 08:19:04 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 08:19:04 2012 -0700"
      },
      "message": "Merge \"AudioMixer can be configured for fewer max tracks\""
    },
    {
      "commit": "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": "5c94b6c7689a335e26a86e8a0d04b56dc627738e",
      "tree": "05dcb7c6007c923a4f3ef04371e62834940a66b0",
      "parents": [
        "6da08fc33642b832d1cde2e46815a5fd67dd0016"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 17:01:29 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 17:27:10 2012 -0700"
      },
      "message": "AudioMixer can be configured for fewer max tracks\n\nChange-Id: I371b17cef071d083eecf35cd3627a3adff907a33\n"
    },
    {
      "commit": "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": "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": "01c4ebf6b794493898114a502ed36de13137f7e5",
      "tree": "7f663fdad4040a40411e79d837c14e52e11a65b9",
      "parents": [
        "d6fd85a157ce2054b2304e6d171fa87ae09c363d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 22 10:47:35 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 24 13:42:13 2012 -0800"
      },
      "message": "AudioBufferProvider comments and cleanup\n\nAdd comments about which methods implement the AudioBufferProvider interface.\n\nSimplified the definition of kInvalidPts.  \u003cstdint.h\u003e is very hard to work\nwith, there seems to be no way to use it reliably to get INT64_MAX without\nhaving a separate source file, which is ugly because it means kInvalidPts\nis not a compile-time constant.  So I just deleted AudioBufferProvider.cpp\nand used a hard-coded constant instead.\n\nAdded a default constructor for Buffer so that the fields aren\u0027t random\n(especially .raw which is used to determine if the buffer is valid).\n\nMake the pts for getNextBuffer default to kInvalidPTS so code that\ndoesn\u0027t need a pts doesn\u0027t have to specify a value.\n\nRename the parameter to AudioMixer::setBufferProvider to make it clearer.\n\nChange-Id: I87e7290884d4ed975b019f62d1ab6ae2bc5065a5\n"
    },
    {
      "commit": "3b81acab52b7140c1b8b20be2d67be3e221637e7",
      "tree": "0b225360603f19ba2f60fb1cf7a616dfe51d99b1",
      "parents": [
        "1b094ee8f7fe7eca65bf3d2f983ba95eef6db93d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 15:26:23 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:41:56 2012 -0800"
      },
      "message": "Remove bit fields to improve performance\n\nuint16_t enabled is (mostly) changed to bool in a separate CL\n\nChange-Id: Ied9f8c034b2479cee9a8778cee7b8ff92ae75b7b\n"
    },
    {
      "commit": "a111792f1314479c649d1d44c30c2caf70c00c2a",
      "tree": "f67b5f32a61a259f292b7d0d992f31b8e2ff857c",
      "parents": [
        "761defc341c5ce9019a42919c441f035f665ec0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 26 10:53:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 17 09:39:07 2012 -0800"
      },
      "message": "Simplify code\n\nUse DefaultKeyedVector::valueFor to avoid extra test\nMake local variables as local as possible\nNo double parentheses\nNo typedef for single use\nNo parentheses around indirect function call\nNo AudioFlinger:: prefix when not needed\nRemove unnecessary casts\nRemove block with only one line\n\nSaves 128 bytes\n\nChange-Id: I3a87430eeb01b81e7b81a1c38f6fdd3274ec48f3\n"
    },
    {
      "commit": "4ff14bae91075eb274eb1c2975982358946e7e63",
      "tree": "e9e54fddb9832d30b69c2a11c9ed2884397f2f95",
      "parents": [
        "951bd8d1ad9581a414e171ad8605a9515d0ad667"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Feb 08 16:37:41 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:11 2012 -0800"
      },
      "message": "Upintegrate Audio Flinger changes from ICS_AAH\n\nBring in changes to audio flinger made to support timed audio tracks\nand HW master volume control.\n\nChange-Id: Ide52d48809bdbed13acf35fd59b24637e35064ae\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "99e53b86eebb605b70dd7591b89bf61a9414ed0e",
      "tree": "8939550ada02fe21121550a83952ebf7638c0dac",
      "parents": [
        "6dbc1359f778575d09d6da722b060a6d72c2e7c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 08:59:58 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:17:59 2012 -0800"
      },
      "message": "Update comments\n\nWe no longer put the filename at start of file.\n\nChange-Id: Ic435b159a23105681e3d4a6cb1ac097bc853302e\n"
    },
    {
      "commit": "63d2daed17ab749baa80bc808fb5083b688b771b",
      "tree": "735cfc77d2082c044816fe367f33401fd5b472c7",
      "parents": [
        "4f9b0c54011eb8fd2ccfb393c2dcd51cd07800e0",
        "c59c004a3a6042c0990d71179f88eee2ce781e3c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:39:39 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:39:39 2012 -0800"
      },
      "message": "Merge \"AudioFlinger methods const and inline\""
    },
    {
      "commit": "4c340c6521b634f159d2d6bc4e9359226fd8edf8",
      "tree": "7cfdf3bedccd84f751909ee5866871576250f274",
      "parents": [
        "787bae0578fbaab6219ebf23494866b224d01438"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 12:33:54 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 15:36:47 2012 -0800"
      },
      "message": "Use bool instead of int\n\nThe .h is not modified to avoid increasing data size.\n\nChange-Id: Ide4a821a5b16424ffa03471dfff98dc3e9b5f751\n"
    },
    {
      "commit": "c59c004a3a6042c0990d71179f88eee2ce781e3c",
      "tree": "68e0c9bb6d5bb10a1a8263ebefbb5601946702ee",
      "parents": [
        "787bae0578fbaab6219ebf23494866b224d01438"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 14:06:11 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 15:25:24 2012 -0800"
      },
      "message": "AudioFlinger methods const and inline\n\nThis saves 1063 bytes and probably improves performance.\n\nChange-Id: I11cf0dfd925fbaec75e3d1b806852a538eae5518\n"
    },
    {
      "commit": "a0d68338a88c2ddb4502f95017b546d603ef1ec7",
      "tree": "f052125f4720fde00179d41d4ee04e02934052e4",
      "parents": [
        "87f155d6655b2d3b27e69281a29e85c6407e4d26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 16:47:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 07:57:01 2012 -0800"
      },
      "message": "Use NULL not 0 for raw pointers\n\nUse if (p !\u003d NULL) instead of if (ptr)\n\nChange-Id: Iaec3413a59ccbf233c98fcd918cc7d70ac5da9fa\n"
    },
    {
      "commit": "84afa3b51ac48f84ed62489529ce78cba7fca00e",
      "tree": "ee9ba57cdc17668c9362b70f6bfbfcbd40a253ad",
      "parents": [
        "5c0ad10b14ec2287f90f95912d98e66eef006e2a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 25 15:28:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 07:37:14 2012 -0800"
      },
      "message": "Constructor initialization and const fields\n\nIn constructors, initialize member fields in the initialization list\nrather than constructor body where possible.  This allows more fields\nto be const, provided they are never modified.\n\nAlso initialize POD fields in constructor, unless it\u0027s obvious they\ndon\u0027t need to be initialized.  In that case, put a comment instead.\n\nRemove explicit clear() in destructors on fields that are now const.\n\nGive AudioSessionRef a default constructor, so it\u0027s immutable fields can\nbe marked const.\n\nAdd comment about ~TrackBase() trick.\n\nInitialize fields in declaration order to make it easier to confirm that\nall fields are set.\n\nMove initialization of mHardwareStatus from onFirstRef() to constructor.\n\nUse NULL not 0 to initialize raw pointers in initialization list.\n\nRename field mClient to mAudioFlingerClient, and getter from client()\nto audioFlingerClient().\n\nChange-Id: Ib36cf6ed32f3cd19003f40a5d84046eb4c122052\n"
    },
    {
      "commit": "e9dd0176933d6233916c84e18f3e8c0d644ca05d",
      "tree": "456651a5f40cbd404d39abb20604817324926db3",
      "parents": [
        "fd267d7cf640225bb57f0ed1af44efc153275f6d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 18:08:45 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 18:08:45 2012 -0800"
      },
      "message": "Unconditional delete\n\nDon\u0027t check that pointer is non-NULL before delete.\n\nDon\u0027t leave deleted member fields non-NULL, except in a destructor,\nsince it could be misleading in a dump or debugger. (mRsmpOutBuffer)\n\nChange-Id: Ic0492a6b752f74a67f4c96dfb89ca2de4e69eecf\n"
    },
    {
      "commit": "02b2d2dddc9be339cf7647d4ead53cecd1c51038",
      "tree": "4a743ee6a972a2d35b2cb4a9f73234bd31dc8440",
      "parents": [
        "c1dc1cb1d1eaf84e88669f1a5f22579a0d9237c2",
        "f9a27779634ce3a01e5957f234cd04eba74fa07f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 10:01:34 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 11 10:01:34 2012 -0800"
      },
      "message": "Merge \"Fix build warning\""
    },
    {
      "commit": "5f29ca38b71506ad7c7cb9925efbddf588e9655b",
      "tree": "e67bef8a10e8705ebe0f43fbf49d27764a362040",
      "parents": [
        "25b248eb52a0a16adaef6b79c9d92cb88b9a2bc2",
        "54c3b66444ebfb9f2265ee70ac3b76ccefa0506a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 09 11:59:17 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 09 11:59:17 2012 -0800"
      },
      "message": "Merge \"By convention const goes before the type specifier\""
    },
    {
      "commit": "879bc64e43d62f2690c77a3282cef2e45d1b76e9",
      "tree": "40952192d397dcff30df01558c68c11ef675cb7f",
      "parents": [
        "5c7b3bcc88e2b472f1f7b416d89222714b96a567",
        "98dd542ffcd3424b1da58bd273c0c1ff5b8c8960"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 09 10:25:00 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 09 10:25:00 2012 -0800"
      },
      "message": "Merge \"Replace loop by __builtin_ctz\""
    },
    {
      "commit": "29357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47",
      "tree": "3bdafe4b02fe36f6ee29c3170f0b0d2799bebf86",
      "parents": [
        "d709ca9c6a0fa1c8f40cbe624a119398643c5087"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Sun Jan 08 13:19:13 2012 +0000"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\n"
    },
    {
      "commit": "54c3b66444ebfb9f2265ee70ac3b76ccefa0506a",
      "tree": "2ae6ae86501101399d639f2a1227742c120e7ac8",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 07:46:30 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 08:00:59 2012 -0800"
      },
      "message": "By convention const goes before the type specifier\n\nChange-Id: I70203abd6a6f54e5bd9f1412800cc01212157e58\n"
    },
    {
      "commit": "f9a27779634ce3a01e5957f234cd04eba74fa07f",
      "tree": "d22f89179467963dc03ae1aa900c539c3c1e9d1c",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 07:47:26 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 06 07:49:34 2012 -0800"
      },
      "message": "Fix build warning\n\nChange-Id: Ic99608d0c14ed56c02f036e0bbaaae1b16bab8ba\n"
    },
    {
      "commit": "5ff1dd576bb93c45b44088a51544a18fc43ebf58",
      "tree": "c002dcda87f08329197b01395539bd25f10ca737",
      "parents": [
        "8a08dcc0a5de19a904e77d5f31bed3dff9a59890"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Jan 05 23:22:43 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 10:07:54 2012 +0000"
      },
      "message": "Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157065\n\nBug: 5449033\nChange-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69\n"
    },
    {
      "commit": "98dd542ffcd3424b1da58bd273c0c1ff5b8c8960",
      "tree": "e3bc2deb104359535cb71f9f728cfb197298cda6",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 14:38:29 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 15:31:19 2012 -0800"
      },
      "message": "Replace loop by __builtin_ctz\n\nUsing the builtin is faster on some platforms, for example on ARM it\u0027s\n19 instructions instead of 13, and is O(1) instead of O(n).  Of course,\ntrack creation is an inherently slow operation, so this doesn\u0027t matter\nmuch now.  But if we add support for virtual tracks, then physical tracks\nwill be allocated/freed more frequently.  Also just on principle ...\n\nChange-Id: I3f590934092bd7a1869cbedbc7357928aa5cc8ff\n"
    },
    {
      "commit": "88592eccaf6afcddd5f985955be92fe25205c680",
      "tree": "5a1795bd7aefe20d332f7388d8cddcadc3df841a",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef",
        "9c56d4ae6212c21ce5fd71ed534eb195983a07c1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 08:20:10 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 05 08:20:10 2012 -0800"
      },
      "message": "Merge \"Remove the notion of \"active track\" from mixer\""
    },
    {
      "commit": "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef",
      "tree": "1979692770dd902d0aa7e8c0760e496e13539e5c",
      "parents": [
        "7ab41c9f773ba599646f1b0d00955c1be80f92fd",
        "f6b1678f8f508b447155a81b44e214475ab634a8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 07:38:29 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 05 07:38:29 2012 -0800"
      },
      "message": "Merge \"Use the standard CC_LIKELY and CC_UNLIKELY macros\""
    },
    {
      "commit": "f6b1678f8f508b447155a81b44e214475ab634a8",
      "tree": "dabe2858dfed9133c6a270cd6b86877a9d3588b1",
      "parents": [
        "94023fa6744e24f26f0aba1699ec278649bd66df"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 09:51:17 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 07:33:45 2012 -0800"
      },
      "message": "Use the standard CC_LIKELY and CC_UNLIKELY macros\n\nSeveral source files privately defined macros LIKELY and UNLIKELY in terms\nof __builtin_expect. But \u003ccutils/compiler.h\u003e already has CC_LIKELY and\nCC_UNLIKELY which are intended for this purpose.  So rename the private\nuses to use the standard names.\n\nIn addition, AudioFlinger was relying on the macro expanding to extra ( ).\n\nChange-Id: I2494e087a0c0cac0ac998335f5e9c8ad02955873\n"
    },
    {
      "commit": "7ab41c9f773ba599646f1b0d00955c1be80f92fd",
      "tree": "02a8e0276a550d6748b64e6b4e165dd562712859",
      "parents": [
        "b8a805261bf0282e992d3608035e47d05a898710",
        "fe0698f9d44ca923ff1ba528f2c42019937ea5e2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 04 17:39:12 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jan 04 17:39:12 2012 -0800"
      },
      "message": "resolved conflicts for merge of 1a4b9939 to master\n\nChange-Id: I0c910d391a38a916d8431f7d1f5b82e39e1a66c2\n"
    },
    {
      "commit": "b8a805261bf0282e992d3608035e47d05a898710",
      "tree": "7a43908b8e936ac1f30eef0542b40d667c47aa23",
      "parents": [
        "94023fa6744e24f26f0aba1699ec278649bd66df"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Jan 03 22:38:27 2012 +0000"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "071ccd5a9702500f3f7d62ef881300914926184d",
      "tree": "2ffdfd9dbc064aa3d2a9b229f87b679220ef4f79",
      "parents": [
        "69aac3e6cd68e8c305a41b2677123db7662efd4b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 22 16:08:41 2011 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 22 16:08:41 2011 -0800"
      },
      "message": "audioflinger: fix clicks on 48kHz audio.\n\nThe calculation done in prepareTracks_l() for the minimum amount\noff frames needed to mix one output buffer had 2 issues:\n- the additional sample needed for interpolation was not included\n- the fact that the resampler does not acknowledge the frames consumed\nimmediately after each mixing round but only once all frames requested have been used\nwas not taken into account.\nThus the number of frames available in track buffer could be considered sufficient although\nit was not and the resampler would abort producing a short silence perceived as a click.\n\nIssue 5727099.\n\nChange-Id: I7419847a7474c7d9f9170bedd0a636132262142c\n"
    },
    {
      "commit": "9c56d4ae6212c21ce5fd71ed534eb195983a07c1",
      "tree": "417c958c4fd243f4edb7bc765f4dc1e709456ddc",
      "parents": [
        "bbaf8673f1d1dd79d1b7f474ca7111da58e84aff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 19 15:06:39 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 20 16:29:21 2011 -0800"
      },
      "message": "Remove the notion of \"active track\" from mixer\n\nThis is a first step towards making the mixer more object-oriented.\n\nChange-Id: Ifd445d0e471023a7f5c82e934736ffc95ba1b05b\n"
    },
    {
      "commit": "12d9702773c8a3242a44dd6528126c9ff0dade43",
      "tree": "a0184b1a6a55a924143411129a4cd13d9dbcaa08",
      "parents": [
        "bbaf8673f1d1dd79d1b7f474ca7111da58e84aff",
        "81a028fef62bcadf13fc8550067a3d29c918b3ca"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 20 10:29:49 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 20 10:29:49 2011 -0800"
      },
      "message": "Merge \"Remove dead code\""
    },
    {
      "commit": "81a028fef62bcadf13fc8550067a3d29c918b3ca",
      "tree": "9d2c12b20abcf5e1aad3522678e685b173db776b",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 09:53:12 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 19 15:55:47 2011 -0800"
      },
      "message": "Remove dead code\n\nChange-Id: Icf23f7f90fdeb660f4015f22cf239e6d05f5d03c\n"
    },
    {
      "commit": "f602a5f7f29e694a7da4c143737b74501c00477d",
      "tree": "c7edef89cc88918b8cb04168253664470de77036",
      "parents": [
        "d1e672acd8fa1af899f85ee2321327237028adf8",
        "bf71f1e7948406492376c6cbd5e6a30c8cb670e4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 15:10:36 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 15:10:36 2011 -0800"
      },
      "message": "Merge \"Use constants for 2 and 32\""
    },
    {
      "commit": "d1e672acd8fa1af899f85ee2321327237028adf8",
      "tree": "bdcc71f510c339222d386c07a0e40121f1ab15b9",
      "parents": [
        "b92bc47a05925c29efef0d66711b6d3f17f406e7",
        "3b21c50ef95fe4e7ac3426ca14b365749e66ff08"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 15:02:30 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 15:02:30 2011 -0800"
      },
      "message": "Merge \"Extract out audio DSP code to utility library\""
    },
    {
      "commit": "bf71f1e7948406492376c6cbd5e6a30c8cb670e4",
      "tree": "077a8a894c95655353bd5ffec7c4c93f1d36b9be",
      "parents": [
        "b92bc47a05925c29efef0d66711b6d3f17f406e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 13 11:52:35 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 14:55:05 2011 -0800"
      },
      "message": "Use constants for 2 and 32\n\nChange-Id: If820dfd58b6df258570750610a07af99598d9e53\n"
    },
    {
      "commit": "b92bc47a05925c29efef0d66711b6d3f17f406e7",
      "tree": "2e953cde5bf4b7ca0bc45cdf33cc78044660309f",
      "parents": [
        "237a624f674800d2300806b115eee8c9bb7db033",
        "788040c5189bbdaf567ce4b29ffd1db08ea1020c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 13:31:33 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 13:31:33 2011 -0800"
      },
      "message": "Merge \"Use switch in AudioMixer::setParameter\""
    },
    {
      "commit": "788040c5189bbdaf567ce4b29ffd1db08ea1020c",
      "tree": "75cf254063bf823fd2e5ff6c3504ecc2c37bb488",
      "parents": [
        "154a7fbda9b704bc1d23b6f17573016ebb5989be"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 05 08:19:00 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 13:28:33 2011 -0800"
      },
      "message": "Use switch in AudioMixer::setParameter\n\nReplace series of if/then/elses by easier-to-read switch.  Also return\nvoid instead of status_t, since callers weren\u0027t checking it. Assert on\nbad input parameters.\n\nChange-Id: Ie1f0a297977b28501d20e1af819afed9b4750616\n"
    },
    {
      "commit": "237a624f674800d2300806b115eee8c9bb7db033",
      "tree": "edf7370358ef705903fe8ba8abfb7f0103d76ed5",
      "parents": [
        "154a7fbda9b704bc1d23b6f17573016ebb5989be"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 15:32:27 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 13:22:41 2011 -0800"
      },
      "message": "deleteTrackName now asserts on bad input parameter\n\nThis is safe, as the input parameter is always track-\u003ename(),\nwhich must be valid.\n\nChange-Id: Iea8ea3a5706c27026335526ba8851030d00681f8\n"
    },
    {
      "commit": "3b21c50ef95fe4e7ac3426ca14b365749e66ff08",
      "tree": "e3f9a8d6ab695bd1d4d494fbf1b9d80bcc25585c",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 09:52:39 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 11:42:03 2011 -0800"
      },
      "message": "Extract out audio DSP code to utility library\n\nChange-Id: Ib8ce72028a7ea30e82baa518e381370e820ebbd0\n"
    },
    {
      "commit": "6d4bf6eda04888144ec59cba4816a2cbb79b9e5c",
      "tree": "213424db0d71f1de94ea2789d272595287664bf6",
      "parents": [
        "b87c068727a15a3d3f0bfdcb758c76a097f5e869",
        "fba380a0b2c62684ce4272a05165965bae29d6a1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 07:30:14 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 07:30:14 2011 -0800"
      },
      "message": "Merge \"setActiveTrack and setBufferProvider can\u0027t fail\""
    },
    {
      "commit": "b87c068727a15a3d3f0bfdcb758c76a097f5e869",
      "tree": "49768247c538c838564c4546bc55cb3df572b56f",
      "parents": [
        "255adceb85bc23de61fb138ddb474852514b3b33",
        "1c48c3c61970527b97892ab6a2daae8eaac26964"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 16 07:29:57 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 07:29:57 2011 -0800"
      },
      "message": "Merge \"Simplify enable/disable mixing\""
    },
    {
      "commit": "26fa039c3752eaaf74d1be53d9795f48e9f43de3",
      "tree": "cb76ba4c46c218fec35f88e47a963c93e0bb175b",
      "parents": [
        "2a8ce907a57f30ffa336a024e09752794d08ec1a",
        "e0feee3da22beeffbd9357540e265f13b2119cbb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 16:16:55 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 15 16:16:55 2011 -0800"
      },
      "message": "Merge \"Use NULL not 0 for pointers\""
    },
    {
      "commit": "fba380a0b2c62684ce4272a05165965bae29d6a1",
      "tree": "d0a89a2c45aa09a838c5f93108a3be8f5a80d4e5",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 15:46:46 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 15:55:51 2011 -0800"
      },
      "message": "setActiveTrack and setBufferProvider can\u0027t fail\n\nReturn void, not status_t, from setActiveTrack and setBufferProvider.\n\nThese methods returned status_t, but the callers never checked the\nreturn value.  Since these aren\u0027t externally visible APIs, they now\nreturn void, and assert on bad input parameters.\n\nChange-Id: I530ed29484596ae41e8659826ca425149c51c2a1\n"
    },
    {
      "commit": "1c48c3c61970527b97892ab6a2daae8eaac26964",
      "tree": "24fed87db69fcce3fb6f3b01bb72501445102c04",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 14:54:01 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 15:00:28 2011 -0800"
      },
      "message": "Simplify enable/disable mixing\n\nThe MIXING enum isn\u0027t needed, and now returns void instead of status_t.\n\nChange-Id: Ibe4ec24081d75ad4ab78b9c7191fc9077959c4e9\n"
    },
    {
      "commit": "e0feee3da22beeffbd9357540e265f13b2119cbb",
      "tree": "6b4d02fc40687bbc8b463acd659e147d084f0883",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 13 11:53:26 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 09:18:17 2011 -0800"
      },
      "message": "Use NULL not 0 for pointers\n\nChange-Id: Iab3f9abbdab617dc5a599e657ec46a0b0a002eef\n"
    },
    {
      "commit": "42968939dfce0954d6540011199045ec4ed7de80",
      "tree": "0e297b59294db0688bab53cad567bb235f3ec4df",
      "parents": [
        "a06a9a50b37d60e9c43c9de9f8ea3a8649cd5691",
        "c5ac4cb3a5124860ccfc7e4ff66251c55a5595ca"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 17:35:36 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 14 17:35:36 2011 -0800"
      },
      "message": "Merge \"Fix indentation and whitespace\""
    },
    {
      "commit": "0cfd8231e4c489392809bf44c174315df2690145",
      "tree": "37cf11873d8a71cd563fbe933dc7daab85406283",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 13 11:58:23 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 17:25:28 2011 -0800"
      },
      "message": "AudioMixer uninitialized simple fields\n\nChange-Id: I47e3849f048d4d990c9634f9c8a2ca2de0339e93\n"
    },
    {
      "commit": "c5ac4cb3a5124860ccfc7e4ff66251c55a5595ca",
      "tree": "8b5320023ea729a043b00157e5ba528b4276e700",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 12 09:05:55 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 16:54:05 2011 -0800"
      },
      "message": "Fix indentation and whitespace\n\nUse git diff -w to verify.\n\nChange-Id: Ib65be0a1ecf65d6cad516110604e3855bf68a638\n"
    },
    {
      "commit": "3856b090cd04ba5dd4a59a12430ed724d5995909",
      "tree": "a24e4c98fa6049fd8085826be838000f9a67e39b",
      "parents": [
        "1d2acaffde56ad79e6e96f228d7857863462397c"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Oct 20 11:56:00 2011 +0100"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Oct 26 09:57:54 2011 +0100"
      },
      "message": "Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/143865\n\nBug: 5449033\nChange-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a\n"
    },
    {
      "commit": "0d255b2d9061ba31f13ada3fc0f7e51916407176",
      "tree": "4df26e48710542386bddab7a0d1cbfa5d6835ac0",
      "parents": [
        "65580f9adf6c4d98449ad0716488f9fe3869aa5a"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue May 24 15:53:33 2011 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jun 01 10:55:29 2011 -0700"
      },
      "message": "Use channel mask instead of channel count for track creation\n\nRecord and playback objects (resp AudioRecord and AudioTrack)\nare created using a channel mask, but this information is lost\nin the mixer because only the channel count is known to\nAudioFlinger. A channel count can always be derived from a\nchannel mask.\n\nThe change consists in:\n- disambiguiting variable names for channel masks and counts\n- passing the mask information from the client to AudioFlinger\n and the mixer.\n- when using the DIRECT ouput, only verifying the format of\n the track is compatible with the output\u0027s for PCM.\n\nChange-Id: I50d87bfb7d7afcabdf5f12d4ab75ef3a54132c0e\n"
    },
    {
      "commit": "243f5f91755c01614a8cafe90b0806396e22d553",
      "tree": "d6f4e9f1593f468967f75a82f21d8058a93c5ed1",
      "parents": [
        "8ddeebb93cb41e7a8e9fe763afb6c6016b21fa61"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 28 16:52:51 2011 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 28 16:52:51 2011 -0800"
      },
      "message": "Fix issue 3479042.\n\nThe problem is that when an AudioRecord using the resampler is restarted,\nthe resampler state is not reset (as there is no reset function in the resampler).\nThe consequence is that the first time the record thread loop runs, it calls the resampler\nwhich consumes the remaining data in the input buffer and when this buffer is released\nthe input index is incremented over the limit.\n\nThe fix consists in implementing a reset function in the resampler.\n\nA similar problem was also present for playback but unoticed because the track buffer is always\ndrained by the mixer when a track stops. The only problem for playback was that the initial\nphase fraction was wrong when restarting a track after stop (it was correct after a pause).\n\nChange-Id: Ifc2585d685f4402d29f4afc63f6efd1d69265de3\n"
    },
    {
      "commit": "2151d7b8c2dd77c9887691db30396937be778141",
      "tree": "d2e10de09bc049edf1d0568a392855dfd765c3d0",
      "parents": [
        "13e05b3f569965d97ec7d7f65e4cd46c6a22c23d"
      ],
      "author": {
        "name": "Yuuhi Yamaguchi",
        "email": "yuuhi.x.yamaguchi@sonyericsson.com",
        "time": "Fri Feb 04 15:24:34 2011 +0100"
      },
      "committer": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonyericsson.com",
        "time": "Fri Feb 04 15:24:34 2011 +0100"
      },
      "message": "Initialize resampling buffer per track.\n\nWhen resampling too short sound, AudioMixer uses previous\ntracks buffer. So we re-initialize the temporary buffer per\nloop to avoid it.\n\nChange-Id: I55a59a3b14faa8445e09c450478fe79cef704760\n"
    },
    {
      "commit": "65ab47156e1c7dfcd8cc4266253a5ff30219e7f0",
      "tree": "da088916c7cadadcddf47467f20cc8b0b6ff7f41",
      "parents": [
        "98fe12aba55e8b8bb14b23c4c3cdba9a99a9753c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 14 17:59:35 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 14 17:59:35 2010 -0700"
      },
      "message": "move native services under services/\n\nmoved surfaceflinger, audioflinger, cameraservice\n\nall native services should now reside in this location.\n\nChange-Id: Iee42b83dd2a94c3bf5107ab0895fe2dfcd5337a8\n"
    }
  ]
}
