)]}'
{
  "log": [
    {
      "commit": "35436ad21902edf83e3c1307b45b38d13137d31c",
      "tree": "6cdec82451a9b68ead54cdf7dd7f9a7498a571f2",
      "parents": [
        "3326dffb07bc7cb724cae31923a122321ff5bb1a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 15 14:13:16 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 16 13:31:11 2012 -0800"
      },
      "message": "Static AudioTrack plays twice initially\n\nBug: 7528721\nChange-Id: I10bc16a26f33dba6572b730a170cb3bf00e68e30\n"
    },
    {
      "commit": "126c910f48a1e1b7a8044157d95f774d5e142316",
      "tree": "7c56b9ad56ac16e1fc095cc4903f1ea7f271e988",
      "parents": [
        "569661450b446f957f58b6690bff30f94542b737"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 18 15:51:31 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 18 16:54:00 2012 -0700"
      },
      "message": "Remove active track when thread goes to standby\n\nBug: 7369232\nChange-Id: I7ff9f525dad4be0aef562a53015b06ee7d3d50f1\n"
    },
    {
      "commit": "115b87ecf6182698b54055288d0f8710308b324d",
      "tree": "59588554a539124b69c0f99290ad88d053ca6b57",
      "parents": [
        "6ebb67493075ecc817207bc0ca0305cde64b5c3b"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Oct 16 10:29:01 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Oct 16 11:00:11 2012 -0700"
      },
      "message": "Fix track estimation for presentation complete\n\nAudio tracks were not using the right latency estimation for\n signalling the completion of their presetation. This caused\n the synchronization mechanism between playback and record to be\n off, and a synchronized recording would contain some of the audio\n that was meant to be over once recording would start.\nUse the playback thread\u0027s latency reporting which takes the audio\n pipe into account.\n\nBug 7237669\n\nChange-Id: I23a907a53ad0b0d68d246789ec595a77a79fced5\n"
    },
    {
      "commit": "02e5dbb025bf164f0b273f01a114ddc497798823",
      "tree": "b300f58fd59db71f26aba84f6d8603bdc965b868",
      "parents": [
        "6756203ec80f7640f743d8cc9d8799302d9513b6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Sep 27 13:49:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Sep 30 13:13:11 2012 -0700"
      },
      "message": "Disable audio watchdog\n\nIt\u0027s not critical, and is wasting power\n\nBug: 7241714\nChange-Id: I6ad4375f0000c92529688723dbe0ff0caa809c5d\n"
    },
    {
      "commit": "2fa114de80a5f6afd2055054a163c6d7e2ef71bc",
      "tree": "d899700feaafc73126d80a4e0c7f9dab75d6c2c8",
      "parents": [
        "9bb6e65def86afb36a03643c50456e646cdf98a8"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 28 14:49:39 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Sun Sep 30 11:11:26 2012 -0700"
      },
      "message": "bug 7253033 clean up before closing an output\n\nAn output can only be closed if there is no lock contention that\n prevents ThreadBase::exit() from being blocked. If an output\n device is waiting for an operation to complete (here a write\n in the remote_submix module, because the pipe is full), signal\n the module that it\u0027s entering the \"exiting\" state.\n\nChange-Id: I8248add60da543e90c25a4c809866cdb26255651\n"
    },
    {
      "commit": "52013e7ad02bd22b19a64bdccaa953c7b4b4d448",
      "tree": "68c0baa1e4d15d5fed04fb49a56660d08db3a216",
      "parents": [
        "4c6db4ce1e2760682d1c9e66448dbb39bb5d14d8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 26 08:34:10 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 26 08:55:08 2012 -0700"
      },
      "message": "Revert \"Don\u0027t wait for presentation complete if terminated\"\n\nThis reverts commit 44cda3a4e7ca3de0db9cb49145def3803b03ebb4\n\nChange-Id: I7fd29b77690dab057ac966a42fb198b2772f092c\n"
    },
    {
      "commit": "4c6db4ce1e2760682d1c9e66448dbb39bb5d14d8",
      "tree": "a8ffad6bc9f78c05eefc85cbfdb782eb40b50b4b",
      "parents": [
        "64f935ebeae38828b3704e93fa5e7113f7839110"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 24 11:27:18 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 25 17:13:18 2012 -0700"
      },
      "message": "Implement android.media.AudioManager.getProperty()\n\nBug: 6635041\nChange-Id: I3386a4a6c226bc4eceaf65556119e4fb15f73224\n"
    },
    {
      "commit": "67d8ac3a8b49b114366684cd6310493423581056",
      "tree": "2e44b42fa993f87681218453705dc0b67da25c24",
      "parents": [
        "2eddc1d2f99fb280786e30ec91f3c5df78556166"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 24 15:02:17 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 25 09:40:00 2012 -0700"
      },
      "message": "audioflinger: improve record start and thread exit\n\nUse broadcast() instead of signal() on the\nthread wake up condition when starting record or requesting thread\nexit to make sure that if another thread is waiting for the same\ncondition (e.g binder thread calling setParameters()) the mixer\nthread will be woken up.\n\nBug 7184317.\n\nChange-Id: I3154a4509ca7af6ffae5236e522b0fab8e75ed06\n"
    },
    {
      "commit": "6090a17389fc86ec6d7b16b358c540fa6627923f",
      "tree": "8bd80fc89227fe62dcea06391b4e6c4395073866",
      "parents": [
        "4bf45909bcccb46acac61c155edd031e85b9dc12"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Sep 23 15:20:50 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Sep 23 15:20:50 2012 -0700"
      },
      "message": "fix end of track presentation on suspended output\n\nThe code detecting the end of an audio track presentation before\nremoving it from the active track list is based on the\ncount of audio frames sent to audio HAL. When an output stream\nis suspended (e.g. A2DP when SCO is active), this count does not\nchange and a track in stopped state will never be removed from\nactive track list causing the mixer thread to never release\nthe wake lock.\n\nThe fix consists in incrementing the audio HAL frame count even\nif the output is suspended.\n\nAlso fix a problem in getRenderPosition() when the output is suspended.\n\nBug 7167534.\n\nChange-Id: I3be836cbbea29b65dc087199cac6a1cd84c0a41d\n"
    },
    {
      "commit": "ef6be0bb71c08db7e9e9274d70edffb95f0da25f",
      "tree": "feda8b0cdaa60a4845f6f6a311c3ddbb4c9811a6",
      "parents": [
        "89b4470bc926c4b5de59deaff2b6a4993ab6cab7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 13 11:18:23 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 13 17:03:00 2012 -0700"
      },
      "message": "audioflinger: send priority request from a thread\n\nWhen creating a fast AudioTrack, a request is sent to SchedulingPolicyService\nto elevate the requesting thread priority. This generates a binder\ncall into system_server process and to a JAVA service via JNI.\nIf the thread from which the track was created is in the system_server\nprocess and does not have the \"can call java\" attribute, a crash occurs because\nthe binder optimization reuses the same thread to process the returning binder\ncall and no JNI env is present.\n\nThe fix consists in sending the priority change request from the AudioFlinger\nmixer thread, not from the binder thread.\n\nThis also reverts the workaround in commit 73431968\n\nBug 7126707.\n\nChange-Id: I3347adf71ffbb56ed8436506d4357eab693078a3\n"
    },
    {
      "commit": "89b4470bc926c4b5de59deaff2b6a4993ab6cab7",
      "tree": "be8150e982c53419fdb3d5ca2047fcdc344877c4",
      "parents": [
        "ae4b97ac25c1a1a5846731962c246c9811fb041f"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Sep 13 11:44:00 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Sep 13 12:02:15 2012 -0700"
      },
      "message": "Handle audio HAL returning 0 bytes in record thread\n\nEnter standby when HAL returns an error, but also consider 0 bytes\n  returned as NOT_ENOUGH_DATA.\n\nChange-Id: Ica83142310e9c176f936e0440571a6034cbc575f\n"
    },
    {
      "commit": "607364600e4f6ef8bebec8958e16e7fb0bcb7d25",
      "tree": "dd7c19507d39379c06116e54c6e2de979ef90956",
      "parents": [
        "71ea9f024c3943160110d9aa15b082b66516f72e"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Sep 12 18:48:33 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Sep 12 19:40:30 2012 -0700"
      },
      "message": "Don\u0027t deadlock on AudioRecord start when reads return 0\n\nWhen calling start() on an AudioRecord with a HAL that\n returns 0 on a read() operation, the start blocking\n condition was never unblocked.\nAdd a boolean to track the first read operation so the returned\n number of bytes (mBytesRead) is only evaluated after that\n first read.\n\nChange-Id: I8c735a00d48cd6a0da467ccdf75d3616b38f6afa\n"
    },
    {
      "commit": "cff7137411e737dfb783013c23841ccb335e5f5b",
      "tree": "08b899f1ab738d7e0ed11716ff7b786440a4cd8a",
      "parents": [
        "d6de933cfcc088d7c80e26bcca4d3b20b1573225"
      ],
      "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": "8895925e38d2521607fd2010f3f3b14ecd15962c",
      "tree": "19c97b89d39488f3d60fdc64eb953cda601a6823",
      "parents": [
        "741b47db87db45dad47d115ffcc67553184ffbe3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 28 14:26:53 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 07 10:32:00 2012 -0700"
      },
      "message": "audioflinger: changes for new audio devices enums\n\nThe ThreadBase class now has a separate member for input\nand output devices (mInDevice, mOutDevice).\n\nOnly query get_supported_devices() from audio HAL if the function\nis exposed and if the audio policy manager did not specify the\naudio module to open.\n\nAlso fixed bug in AEC preprocessing that would reset\nto default output device when an input device was given.\n\nChange-Id: I19d4d06aeb920b068e3ef31e6e6be6345ce5d67a\n"
    },
    {
      "commit": "2e9b0f24e7089fb23356871b2fdce771c2dae852",
      "tree": "33e7d13c8564168cde0c68ebbe82a99e7dd80373",
      "parents": [
        "314079efa77c07255b2a2794eba470fccd1541fb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 31 17:44:06 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 31 18:44:28 2012 -0700"
      },
      "message": "AudioFlinger: send audio source to audio effects\n\nAdded support for EFFECT_CMD_SET_AUDIO_SOURCE audio effect\ncommand to inform preprocessings of current audio source\nselection for capture.\n\nChange-Id: Ib2418a9aa8114e8457fe828ecd43b230ed86cdd6\n"
    },
    {
      "commit": "2662ac9220c9e07cd343e78bf3a0c21ca3e4ffd1",
      "tree": "35ef8577dcf4d7b411a4944654ee01d7a544f1ee",
      "parents": [
        "18910b47dfaba1b9ef830687ad19b0db764c944e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 30 10:59:30 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 15:31:00 2012 -0700"
      },
      "message": "Update audio comments\n\nChange-Id: Ie7504d0ddb252f7e4d4f99ed0b44cfc7b1049816\n"
    },
    {
      "commit": "7f7d27eb0ee5dc7b0f52dd2c89791d14bfe82f29",
      "tree": "2dbe613d3b8eb996496eb8d8b8e2f89d439b78e4",
      "parents": [
        "f351faed1f54aac8a06b6685dc77a7764d7cf543"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 02 16:37:07 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 15:18:16 2012 -0700"
      },
      "message": "Remove dead code\n\nRecordThread::isValidSyncEvent() returns false, so most of\nRecordThread::setSyncEvent() is never executed.\n\nChange-Id: I0cf848beb46a367a45126d2df3073c5afa2ca59c\n"
    },
    {
      "commit": "fc7992bd8220824f1404c0c54ac516d9e28b58c2",
      "tree": "972da8ca10068930ebb465a72c76be69a0ca6a79",
      "parents": [
        "6db33a9272da8f011be1c51675220b81655fd470"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 29 11:10:32 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 10:53:37 2012 -0700"
      },
      "message": "Move libnbaio out of AudioFlinger\n\nlibnbaio is now a separate shared library from AudioFlinger, rather\nthan a static library used only by AudioFlinger.\n\nAudioBufferProvider interface is now also independent of AudioFlinger,\nmoved to include/media/\n\nChange-Id: I9bb62ffbc38d42a38b0af76e66da5e9ab1e0e21b\n"
    },
    {
      "commit": "106e8a42038f9e90d5ff97f8ab6f1a42258bde9e",
      "tree": "af631b5e756cf711d5d9d34db2dffe02cf64e7e3",
      "parents": [
        "0dbb356050d0db9e0043dd43045c1864a933332b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 02 13:37:12 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 13 11:38:18 2012 -0700"
      },
      "message": "const methods\n\nChange-Id: I92e32ee16274c032c9d0ce910676be2a7fa52471\n"
    },
    {
      "commit": "0dbb356050d0db9e0043dd43045c1864a933332b",
      "tree": "4fe3b2ab60f96691faaaf50f163c92946954e6de",
      "parents": [
        "d23eedca9b5a1812891c05d89850ab7ee707040d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 02 16:36:50 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 13 11:35:47 2012 -0700"
      },
      "message": "Simplify AudioFlinger::PlaybackThread::isValidSyncEvent()\n\nChange-Id: I3e4af69b929d4ca04afaac26c7e41c89fce25b9c\n"
    },
    {
      "commit": "d23eedca9b5a1812891c05d89850ab7ee707040d",
      "tree": "9f0c4309ded6a390c49bbe70590ea568a7167307",
      "parents": [
        "a959904968f1d300fe86334bf5099ae2dc39ee28"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 02 13:35:47 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 13 11:31:55 2012 -0700"
      },
      "message": "Discard setSyncEvent() return value\n\nsetSyncEvent() returns a status_t which is sometimes ignored.\nEmphasize this is intentional by casting to void.\n\nChange-Id: Ic614988347cba36bd2504d7ad321594a355b0d9d\n"
    },
    {
      "commit": "3ed292031dc50c56110cdadb1e3778117e3be76a",
      "tree": "7aee0b1a5f518733eebcca574807d4de62066c06",
      "parents": [
        "0d27c65ddb5c968baa6db0c26e80f5c451bc52bc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 07 15:24:44 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 09 15:34:46 2012 -0700"
      },
      "message": "Replace hard-coded \"2\" by a constant and comment\n\nBug: 6679403\nChange-Id: I6c2701f9afedc26540dfad0b4e23348bbc4cb01a\n"
    },
    {
      "commit": "2c3b2da3049627264b7c6b449a1622f002210f03",
      "tree": "f99fadbfef22ff3b7709a505623371c22e39566c",
      "parents": [
        "ee578c0330319f04a48bccbdb26b53fea0388d04"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Aug 02 17:08:54 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Aug 08 11:28:15 2012 -0700"
      },
      "message": "AudioFlinger: fix timed audio\n\n(cherry picked from commit e20ac92c564a2f4e8123885807abdf0a78de0dd7)\n\n\u003e AudioFlinger: fix timed audio\n\u003e\n\u003e Addresses Bug 6900517.\n\u003e\n\u003e Finish up support for timed audio in the new FastMixer world.  Pay special\n\u003e attention to remaining lock-less and voluntary yield free on the FastMixer\n\u003e thread.  This fixes audio playback for Q on JB.\n\u003e\n\u003e Change-Id: Iaf815e58a1b1d0a0190051794bec8dc5c9231785\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: I9bd687acc345a05867af48e71116690fdb0ce1b5\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "ee578c0330319f04a48bccbdb26b53fea0388d04",
      "tree": "883382e0eabdcdff6c04a7df4b50d9cebffaf1c7",
      "parents": [
        "d8f178d613821c3f61a5c5e391eb275339e526a9"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Mon Jul 23 17:05:46 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Aug 08 11:28:15 2012 -0700"
      },
      "message": "AudioFlinger: Better handling for master volume/mute\n\n(cherry picked from commit 93d906837e0e89aa1d9c913ab2b531b809f9bb9e)\n\n\u003e AudioFlinger: Better handling for master volume/mute\n\u003e\n\u003e Changes to address bug 6842827.\n\u003e\n\u003e When a HAL is loaded, cache whether or not the HAL supports\n\u003e set_master_volume/mute in the AudioHwDevice structure.  Store an\n\u003e AudioHwDevice in AudioStream(In|Out) structures instead of just an\n\u003e audio_he_device_t.  This give threads (PlaybackThreads in\n\u003e particular) access to the cached capabilities.\n\u003e\n\u003e When setting master volume/mute, change the system to always set the\n\u003e setting on all HAL which support it and also to set the setting on all\n\u003e PlaybackThreads.  Change PlaybackThreads to apply the setting at the\n\u003e in SW mix stage of the pipeline if its assigned HAL does not support\n\u003e the setting, or to ignore the setting of the assigned HAL does support\n\u003e it.\n\u003e\n\u003e Change-Id: Ia14137a30b4c3ee6f2d7ddcc8cba87bf5eec87f4\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: Icb6bc13764e100a2003eb1dee2231132ab287d98\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "d8f178d613821c3f61a5c5e391eb275339e526a9",
      "tree": "93038d06c70535eeebc364e9f86cedbec074802c",
      "parents": [
        "3478eaa23c19dbbe473be70e8f3cc0c904d2465c"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Fri Jul 20 14:51:35 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Aug 08 11:28:15 2012 -0700"
      },
      "message": "Change audio flinger to user HAL master mute if available\n\n(cherry picked from commit 91de9b56282d126ffb36344266af5fee3cefcfdd)\n\n\u003e Change audio flinger to user HAL master mute if available\n\u003e\n\u003e Hand merge from ics-aah\n\u003e\n\u003e \u003e Change audio flinger to user HAL master mute if available: DO NOT MERGE\n\u003e \u003e\n\u003e \u003e Replicate the pattern used for HAL master volume support to make use\n\u003e \u003e of master mute support if the HAL supports it.  This is part of the\n\u003e \u003e change needed to address bug 6828363.  Because of the divergences\n\u003e \u003e between ICS and master, this change will need to be merged by hand.\n\u003e \u003e\n\u003e \u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\u003e \u003e Change-Id: I6d83be524021d273d093bcb117b8f2fe57c23685\n\u003e\n\u003e Change-Id: I32280582905c969aaec2bb166ec5c61df82d737a\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: I5cd709187221d307fe25c5117ccaadca5f6b197b\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "44cda3a4e7ca3de0db9cb49145def3803b03ebb4",
      "tree": "2ed0b1d13971820bd5dcd80ece0f7ab05150e2a8",
      "parents": [
        "3788a393bbcadebf38ac01ef9b2ecc46f07db011"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 01 09:40:18 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 01 10:46:10 2012 -0700"
      },
      "message": "Don\u0027t wait for presentation complete if terminated\n\nChange-Id: Ia04cf6c620693457dca87b4ffea5dd0fe71efdce\n"
    },
    {
      "commit": "510a3d6b8018a77683dac466127ffd0af34bef6e",
      "tree": "1f3410b20a4dcbe77dd9b40800bdd569ceaff384",
      "parents": [
        "25f0d7ba1987de61c75f8c68b19de48e0ad9736c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 16 14:24:34 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 01 09:11:11 2012 -0700"
      },
      "message": "Start adding support for multiple record tracks\n\nReplace single mTrack by vector mTracks.\nDestroy record tracks similarly to playback tracks.\nDump all record tracks, in addition to the active record track.\n\nChange-Id: I503f10b51928b6b92698fe1c51a9ddd3215df1f4\n"
    },
    {
      "commit": "0ec23ce0d1ff79566c402bc30df3074f6e25a22b",
      "tree": "8925eca2b9f4b9bccb7fa4d032ab80070179912d",
      "parents": [
        "e4e2a37dbe2a4d923232305549101f779a2e3638"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 12:56:08 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 27 14:54:48 2012 -0700"
      },
      "message": "Clean up start() parameters\n\nDocument where int is used instead of AudioSystem::sync_event_t\n  (probably because of a header file dependency).\nTrackBase::start() and RecordTrack::start() don\u0027t need default parameters.\n\nChange-Id: I82f4a4d078be900f3aa4bd926697e32f5ed68ec8\n"
    },
    {
      "commit": "e4e2a37dbe2a4d923232305549101f779a2e3638",
      "tree": "7038669149e9478745fbb5e05f320cee8fd5cb88",
      "parents": [
        "3dca4c7a5622fc6aa03397d749c4b4c1201cc4f3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 23 12:55:09 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 27 14:49:58 2012 -0700"
      },
      "message": "Extract methods to enter standby and standby mode\n\nAlso move initial standby from to threadLoop to avoid a race condition.\n\nChange-Id: I65afca83c36fb41b983b3b1d3dab35d4029560e3\n"
    },
    {
      "commit": "0a7af18d0308295405491f86603e3d119450aba0",
      "tree": "bed6e2fe6df1d948db29bc84ff5d0a3bee02d6a6",
      "parents": [
        "58e5aa34f01d663654d8bafad65db1dda42161ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 16:09:19 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 25 14:48:11 2012 -0700"
      },
      "message": "Use valueAt instead of editValueAt when possible\n\nChange-Id: I885b169f4b176a6b5c2ca9a534214b4ffff1700e\n"
    },
    {
      "commit": "1d491ff06f4b9c90ff24fe953b90d0843eaf1c04",
      "tree": "006faa29a2ad0ca2ea18c8e876c43749d72d138d",
      "parents": [
        "bf5bea96f236adb5eef78c2f414ef82b3602a0f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 16 14:28:13 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 25 14:41:03 2012 -0700"
      },
      "message": "Fix races in AudioRecord stop()\n\nChange-Id: Id0ac1915f57fef4a938c7f90989c1162a8b6c51c\n"
    },
    {
      "commit": "69d799679c8c0308e42057e7b5ad63a7ae806480",
      "tree": "fd433daeb23326b7818031fcca0f8b87f77dbc3e",
      "parents": [
        "f1b3ee26cafc80900bae681bddf47446a6a3733f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 19 14:02:22 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 23 10:56:34 2012 -0700"
      },
      "message": "Use upmix/downmix utility routines\n\nChange-Id: I9ae2ec938fb695ec576ea008a42205325af7bbf1\n"
    },
    {
      "commit": "e65c89113232d070dd9153c54ca19301bca7a162",
      "tree": "09997cb32d82da8d2549044a95eb31c8c35cf39d",
      "parents": [
        "76da2635edbe0e6d023c665d5c344a3b7e070d73"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 20 15:57:23 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 20 15:57:23 2012 -0700"
      },
      "message": "fix audio effect not destroyed when needed.\n\ncommit a5f44eba contained an error which made that audio effect\nmodules where not destroyed but left in the destroyed state\nrendering them unuseable after being released.\n\nBug 6805168.\n\nChange-Id: Ia4e683b3c970ffd01846c482fde73d799ff219de\n"
    },
    {
      "commit": "33e6e35b03a726e35203e97550f32154c91d5f13",
      "tree": "2648568f97f1b3f13335a044d267caa15d1d4e78",
      "parents": [
        "cd2d61016527bf48bd2e9a920bb3fdbb875eb3e4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 16 15:56:57 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 20 12:33:33 2012 -0700"
      },
      "message": "Miscellaneous audio record fixes\n\nCall AudioSystem::stopInput() if exitPending() after wait() returns.\n\nAcquire lock before clearing mActiveThread.\n\nChange-Id: Ia55e4c4b3accc65ad5479cbdc094fd919152af9f\n"
    },
    {
      "commit": "cd2d61016527bf48bd2e9a920bb3fdbb875eb3e4",
      "tree": "17db61cdcaeda8479f9f523c7689727a5b979470",
      "parents": [
        "a08412711b3266d336134b16a45e98baa8d11b9d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 18 16:49:32 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 20 12:27:12 2012 -0700"
      },
      "message": "Use constructor to initialize instead of memcpy\n\nAlso don\u0027t check for thread parameter as it\u0027s always non-NULL\n\nChange-Id: Id23ded1370556ef3f76f81f5f0c6fa644bcba681\n"
    },
    {
      "commit": "be5f05e0fdfc4e3799653702187861a2afa072ee",
      "tree": "1cc15fea099c579aded967ec174f00307b2517eb",
      "parents": [
        "cf9465b83405a1ec26a164b079d9898c09d87fcd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 18 15:24:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 20 11:08:14 2012 -0700"
      },
      "message": "Internal dump methods return void not status_t\n\nOnly the IAudioFlinger::dump() needs to return a status_t.\n\nChange-Id: Iffeb2a7db4846df850b6b2ed960276f1fd75dba0\n"
    },
    {
      "commit": "5ad92f620fbbb6a8281f10169a23d38e3601e07a",
      "tree": "c7b3d9ada1999b57f72e02e1e63ad062260d18f1",
      "parents": [
        "bb4350d3b9e9485ae59e084de270f86aecef8066"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 19 10:02:15 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 19 10:02:15 2012 -0700"
      },
      "message": "Revert 94479fd5405642c67efd14cebe722feb9cbe6e77\n\nChange-Id: I5ca78d5462badf541868785b2ba2e3f6d0cf492a\n"
    },
    {
      "commit": "bb4350d3b9e9485ae59e084de270f86aecef8066",
      "tree": "2f38f108eb3dd420695cd07cd47a55ea030d51b5",
      "parents": [
        "cb4184c917f88a3c8d70c8bc6b99fc951b11cc37"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 15:56:38 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 19 09:05:12 2012 -0700"
      },
      "message": "Use audio_devices_t more places\n\nChange-Id: Id0ace02ca6f480a6c46e11880acf6cdc66d83184\n"
    },
    {
      "commit": "a189a6883ee55cf62da1d7bf5bf5a8ab501938a4",
      "tree": "7ab4133c0ce507e289baacf76d745de27f9e8136",
      "parents": [
        "28b76b334f92a15a2be3cc9e2f7d229a3275d1ac"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 20 12:16:30 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 17 11:35:16 2012 -0700"
      },
      "message": "Use struct assignment instead of explicit memcpy\n\nfor POD structs effect_descriptor_t and effect_config_t\n\nChange-Id: Ib2fc47f85fb65ed91b0abb1f87217c49b5eb571d\n"
    },
    {
      "commit": "fd4e20c226eca185fc789de761beae64855bfbbb",
      "tree": "7f752ff15fa1f70181281b5dad8c7c987c559b60",
      "parents": [
        "d96c5724818fb47917bb5e7abe37799735e1ec0e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 04 11:51:12 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 16 16:49:01 2012 -0700"
      },
      "message": "Run audio at priorities 2 and 3 above kernel 1\n\nAlso run the watchdog at same priority as the fast mixer.\nrequestPriority() originally used only the caller\u0027s pid to decide which\ncgroup to assign, but in the future it might look at the priority also.\nSo it\u0027s safer to use same priority as the fast mixer to be sure we\nrun in the same cgroup.\n\nBug: 6461925\nChange-Id: Ia59c93e4b22dacbb6746bfa6ad491be7b72f2b8d\n"
    },
    {
      "commit": "d96c5724818fb47917bb5e7abe37799735e1ec0e",
      "tree": "e7cc73da27068c8c770e53fe0ed00bf7276aea5f",
      "parents": [
        "dcda3b325f465aa6ec2be11db1c56c8a5e867f33"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 13:44:49 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 16 11:57:11 2012 -0700"
      },
      "message": "Don\u0027t call virtual methods in destructor\n\nThe result of calling virtual methods from a destructor is undefined.\n\nChange-Id: I0fd4a19626e5ae564a60b753315b5f6c4b8d1f2c\n"
    },
    {
      "commit": "1ea6d23396118a9cfe912b7b8a4e6f231e318ea2",
      "tree": "31327ae0fe7ad1e34a3766bf6246c26752704ce7",
      "parents": [
        "68337edf595a0c345ba4b8adcd4f1e541a1d7eb7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 14:31:33 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 13 16:35:52 2012 -0700"
      },
      "message": "Use atomic ops for thread suspend count\n\nThere was a theoretical but unlikely race if two binder threads\nexecuted suspend() or restore() concurrently.  Also added comments.\n\nChange-Id: I0908acc810b83bdd66455b27ca3429de1662a2cd\n"
    },
    {
      "commit": "1879fff068422852c1483dcf8365c2ff0e2fadfc",
      "tree": "f374fae563e2854ce20b4da16e9cae0d883aecd7",
      "parents": [
        "bf04a5d7f287fc712e0ed91849dc85c90c1e182d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 11 15:36:59 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 12 13:43:08 2012 -0700"
      },
      "message": "Add tid parameter to IAudioFlinger::openRecord\n\nNot yet implemented\n\nChange-Id: I35523fb15ad71727ecc9f4bb870f07e4b7397dc4\n"
    },
    {
      "commit": "bf04a5d7f287fc712e0ed91849dc85c90c1e182d",
      "tree": "f9fd2ffd8df5a02c9c9373f5362da76204e5a676",
      "parents": [
        "39c54f68804c1ce5c85ec588f3c2c63447a807b4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 12 09:07:11 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 12 09:36:34 2012 -0700"
      },
      "message": "Simplify AudioRecord::getInputFramesLost()\n\nThis also fixes a benign race in reading mActive without a lock.\n\nChange-Id: I19e953d4f275e5c266ca1ca3fece7b6c02ad1707\n"
    },
    {
      "commit": "39c54f68804c1ce5c85ec588f3c2c63447a807b4",
      "tree": "04b272355171e4dbfbc95652c477011264ad1518",
      "parents": [
        "4fe1ec4f40b58abff6cec147aa786cb65698161a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 09:12:23 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 11 09:02:23 2012 -0700"
      },
      "message": "Remove dead code\n\nChange-Id: If22a6c4e572b0734eba0c5a7ce29a2c61c581e5d\n"
    },
    {
      "commit": "4fe1ec4f40b58abff6cec147aa786cb65698161a",
      "tree": "6e289895d6a4daf62862422798a5b954c99ed5df",
      "parents": [
        "04270daf50f0c602d7c57a257a693e68246cbeb7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 16:33:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 11 09:00:45 2012 -0700"
      },
      "message": "Fix check for invalid channel count\n\nChange-Id: Id9e3dce0e3d5971786212d3f70e17a17e32ce92b\n"
    },
    {
      "commit": "04270daf50f0c602d7c57a257a693e68246cbeb7",
      "tree": "bebd6ac579df8b08aca04b61b2292c42c9b6aefc",
      "parents": [
        "254af180475346b6186b49c297f340c9c4817511"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 12:55:49 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 15:51:29 2012 -0700"
      },
      "message": "Record overflow cleanup\n\nAdd comments and rename one method for clarity\n\nChange-Id: I04a9147e46e88a072256c0211b112d52202419e2\n"
    },
    {
      "commit": "254af180475346b6186b49c297f340c9c4817511",
      "tree": "bee0e313aaa97645167e86f4678e513ab38d1c99",
      "parents": [
        "4d2132c866228eaef563e8141ebf06aa25ee9ff7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 14:59:05 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 10:05:31 2012 -0700"
      },
      "message": "Use audio_channel_mask_t more places\n\nUse it in AudioSystem::getOutput(), AudioSystem::getInput(),\nIAudioPolicyService::getOutput(), IAudioPolicyService::getInput(),\nand various other places in AudioFlinger.\n\nNot done: AudioTrack and OutputDescriptor.\n\nChange-Id: I70e83455820bd8f05dafd30c63d636c6a47cd172\n"
    },
    {
      "commit": "9f34a36d9cdb9595c288e50ffe00da038bc8abb9",
      "tree": "6b7e7720d4856de8d88b44f5eae3f62993761b2e",
      "parents": [
        "7d6c35bf132a46c0a8a9826491882495fc98bd8c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 20 16:46:41 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 08:28:31 2012 -0700"
      },
      "message": "Whitespace and indentation\n\nChange-Id: I424052b4ff9218147a5cfc8e6dcd67fe8105d229\n"
    },
    {
      "commit": "7d6c35bf132a46c0a8a9826491882495fc98bd8c",
      "tree": "75860c2ae1264af58a4ee7e849ce982a9d00f486",
      "parents": [
        "a51b4acf038ecd7728a98b85749eefc165aa358a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 12:45:10 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 10 08:25:35 2012 -0700"
      },
      "message": "Move constant initializations from onFirstRef() to constructor\n\nChange-Id: I57f55b0bd1edee105c58c3a055f95f1e4a2c9646\n"
    },
    {
      "commit": "6648821933dc06c0b09ab2c8b32135edddcd4291",
      "tree": "7f39b4c3e3fdb1376a6cb3d0f8007bc3eaaf2fda",
      "parents": [
        "94479fd5405642c67efd14cebe722feb9cbe6e77"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 21 12:57:20 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 17:06:27 2012 -0700"
      },
      "message": "AudioFlinger::getBuffer() always returns non-NULL\n\nChange-Id: I543d3db507597cacbfdad5d9ea71732137fe54fb\n"
    },
    {
      "commit": "94479fd5405642c67efd14cebe722feb9cbe6e77",
      "tree": "c316a649b478f44addc797a8d41cbcc370933397",
      "parents": [
        "01542f2704f39956da09ae2840e192dab760091f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 15:39:54 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 15:39:54 2012 -0700"
      },
      "message": "Fix build\n\nRevert after system/core audio_devices_t is submitted\n\nChange-Id: I5a8ee1a7b711e834501e927f41c62efa6a6600b6\n"
    },
    {
      "commit": "01542f2704f39956da09ae2840e192dab760091f",
      "tree": "596fdb0f5c6a2e9490db1bc87e4c65d028849ba3",
      "parents": [
        "c1dae24a08b67b98e18e4239d4f3a74d600d353c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 12:46:15 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 09 12:11:09 2012 -0700"
      },
      "message": "Only write to mDevice once\n\nThis fixes a bug where readers might see intermediate values.\nAlso add comments about how mStandby and mDevice are used.\n\nChange-Id: Idc84e56c21381a45137a2ca5ff9c57d437201869\n"
    },
    {
      "commit": "c1dae24a08b67b98e18e4239d4f3a74d600d353c",
      "tree": "d0923bff8eb16c7b060a37379dc2fc9a298e8554",
      "parents": [
        "2c75ef40330522fb50bbd7a0aa105573355b323c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 13:13:53 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 16:25:07 2012 -0700"
      },
      "message": "Remove debug code HAVE_REQUEST_PRIORITY and SOAKER\n\nChange-Id: I73a2afe72d8acb53e57e6b4e6fb5133e22b7875a\n"
    },
    {
      "commit": "a5f44ebaf58911805b4fb7fb479b19fd89d2e39b",
      "tree": "8221f3963c5be8d22bde7c3afdf98c1654333950",
      "parents": [
        "dd8104cc5367262f0e5f13df4e79f131e8d560bb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 25 11:38:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 03 11:35:41 2012 -0700"
      },
      "message": "audioflinger: fix effect disconnect deadlock\n\nFix possible deadlock when several EffectHandles on the same\nEffectModule are destroyed simultaneously:\n A wp on an EffectHandle should not be promoted to a local sp\nwith ThreadBase mutex held as the EffectHandle destructor can be\ncalled when the sp gets out of scope which will call\nThreadBase::disconnectEffect() and try to acquire the mutex.\n\nUse raw pointers instead of weak pointers for the list of handles\non an EffectModule.\n\nBug 6679606.\n\nChange-Id: Ice8b602fb03a7d363c44ce3dced8a53540d96270\n"
    },
    {
      "commit": "dd8104cc5367262f0e5f13df4e79f131e8d560bb",
      "tree": "46c95f24576ec352d7d5d363606db9a46a44e9c3",
      "parents": [
        "f1da96d8cf60842538e00a9c950cc451f7da2c10"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 12:42:44 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 10:24:45 2012 -0700"
      },
      "message": "Use audio_channel_mask_t more consistently\n\nIn IAudioFlinger::createTrack() and IAudioFlinger::openRecord(),\ndeclare input parameter to use correct type audio_channel_mask_t.\n\nIn IAudioFlinger::getInputBufferSize(), input parameter is now channel mask\ninstead of channel count.\n\nRemove unused IAudioFlinger::channelCount(audio_io_handle_t).\n\nIn AudioRecord::getMinFrameCount() and AudioSystem::getInputBufferSize(),\ninput parameter is channel mask instead of channel count.\n\nChange-Id: Ib2f1c29bea70f016b3cfce83942ba292190ac965\n"
    },
    {
      "commit": "f1da96d8cf60842538e00a9c950cc451f7da2c10",
      "tree": "b64f770259b25809f5fa1820a686f1cafb8de0e1",
      "parents": [
        "415fa7599f48494f99206b8d6e1974abb52c5923"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 16:10:16 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 10:22:13 2012 -0700"
      },
      "message": "Remove longStandbyExit\n\nIt was never set (the assignment was within an \"if\" that was never true).\n\nChange-Id: I01cc68e9df6b190eece621b2aa9858b4361880ce\n"
    },
    {
      "commit": "415fa7599f48494f99206b8d6e1974abb52c5923",
      "tree": "3cfdad6a05f9bece6cefc1bcaffc4f0a81f577c8",
      "parents": [
        "d5903ec1332630f2992a6f0d5ca69d13a185c665"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 16:11:18 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 10:18:11 2012 -0700"
      },
      "message": "Fix uninitialized field EffectModule::mPinned\n\nAlso mark EffectModule::mId and EffectModule::mSessionId const, and\ndocument the initialization of other fields in EffectModule.\n\nChange-Id: Ic1ca008e75e9b5924743ffc35bef80057f3a0669\n"
    },
    {
      "commit": "d5903ec1332630f2992a6f0d5ca69d13a185c665",
      "tree": "c84c6643dcfd0802321e051c6dc4fbb52bd12d94",
      "parents": [
        "524f4386465fe9911cc067c0c2a4fa3eadad211d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Mar 18 10:33:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 02 15:33:01 2012 -0700"
      },
      "message": "Compare sp\u003c\u003e to 0 and raw pointers to NULL\n\nChange-Id: I50ff8a010d349d1d7e3dffa04a6331814c2128b0\n"
    },
    {
      "commit": "a01992a0675a06df7d0bbe7b977207dd0c33fdc7",
      "tree": "2256e1ce66e1754bbbe6e295b7487e9f72a6481a",
      "parents": [
        "dbabf8a7dfe3aa8bf0ed169220d2009d5891fef2",
        "dbbd5b860a3a26bea3376410f75f27530d9cd10b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 12:45:53 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jul 02 12:45:53 2012 -0700"
      },
      "message": "am dbbd5b86: am 109347d4: audioflinger: fix regression in attachAuxEffect().\n\n* commit \u0027dbbd5b860a3a26bea3376410f75f27530d9cd10b\u0027:\n  audioflinger: fix regression in attachAuxEffect().\n"
    },
    {
      "commit": "109347d421413303eb1678dd9e2aa9d40acf89d2",
      "tree": "51837c9c8163816bb896cb067e4a4a555f507a8b",
      "parents": [
        "717e128691f083a9469a1d0e363ac6ecd5c65d58"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 12:31:03 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 02 12:31:03 2012 -0700"
      },
      "message": "audioflinger: fix regression in attachAuxEffect().\n\nCommit 717e1286 introduced a regression in PlaybackThread::Track::attachAuxEffect()\nwhen called with an effect ID of 0 to detach the auxiliary effect.\n\nIt is normal in this case that AudioFlinger::getEffectThread_l() returns 0.\n\nBug 6768757.\n\nChange-Id: I7430bd1aad2f68da38f7c3e4794e7ad657bfc6be\n"
    },
    {
      "commit": "dbabf8a7dfe3aa8bf0ed169220d2009d5891fef2",
      "tree": "f47fbc6fcbd7bbbf07c13c67496addb69720717b",
      "parents": [
        "a0108697f86d8625eb7ad3f13e422427fe7573ca",
        "651f9e7c972b58a49066081187161268bcf9237a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 01 09:36:38 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jul 01 09:36:38 2012 -0700"
      },
      "message": "am 651f9e7c: am 717e1286: audioflinger: fix auxiliary effect attachment\n\n* commit \u0027651f9e7c972b58a49066081187161268bcf9237a\u0027:\n  audioflinger: fix auxiliary effect attachment\n"
    },
    {
      "commit": "717e128691f083a9469a1d0e363ac6ecd5c65d58",
      "tree": "70761520a17703d543262ebe7778f51a360d7923",
      "parents": [
        "33e28dd3c033641f4db9d1b99c7c88d6d08c61f7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 29 16:36:52 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 29 17:03:53 2012 -0700"
      },
      "message": "audioflinger: fix auxiliary effect attachment\n\nAuxiliary effects (Reverb) are global effects and as such follow\nthe default rule which is to attach them to the output thread that\nhandles music streams by default. This causes a problem when several\nthreads are eligible to handle music streams as tracks can be attached\nto either thread based on criteria unknown when teh effect is created.\n\nThe fix consists in moving the auxiliary effect if necessary when an\nAudioTrack is attached to it and this track is not on the same\noutput thread.\n\nBug 6608561.\n\nChange-Id: Ib32c3cabc731b2046aba728be1771982999c6069\n"
    },
    {
      "commit": "22167855ff9af7b13fda669ca27c67a037a7d585",
      "tree": "173d9cb6b65734e259df2b311a4e3e18956fe49b",
      "parents": [
        "5f12136299918ea30555f3481668ec0dbb775e5f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 20 12:26:32 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 20 12:26:32 2012 -0700"
      },
      "message": "audioflinger: fix setStreamOutput()\n\nAudioFlinger::setStreamOutput() should also work for direct outputs.\nAlso ignore the destination output specified to match the expected\nbehavior which is to invalidate all tracks using the specified stream\ntype so that they can be re created on the correct ouput thread.\n\nDo not send STREAM_CONFIG_CHANGED event wich is ignored by AudioSystem\nanyway since the stream to output cache has been removed.\n\nChange-Id: I13d9d47922923b630dd755717875424c16be4637\n"
    },
    {
      "commit": "362ebcbf100f7fccd37551c77e67c4faa7241b63",
      "tree": "62291e1b6f9940cec2b8e6a67357744cd1ee134f",
      "parents": [
        "7b4de10199f3a1803350e9a65baa671874d9c2f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 24 08:44:00 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 14 15:34:17 2012 -0700"
      },
      "message": "DO NOT MERGE Remove log spam for fast track denied\n\nBug: 6531054\nChange-Id: Iedf58e810a157aae88b5900da27c81054c437058\n"
    },
    {
      "commit": "1d6573032ecde54a466ca32951e101b41a05c797",
      "tree": "967756aaa55eca58bc2cec8ed8843a180a5b81b2",
      "parents": [
        "bfe00d2e46531ef546cd9422a4d533070cbed8af",
        "48a0bfa6f731386f2794ff36d6677d56e98fc6ea"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 14 10:34:35 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 14 10:34:35 2012 -0700"
      },
      "message": "am 48a0bfa6: am 49dd5cf3: Merge \"Log track name on obtain/releaseBuffer warnings\" into jb-dev\n\n* commit \u002748a0bfa6f731386f2794ff36d6677d56e98fc6ea\u0027:\n  Log track name on obtain/releaseBuffer warnings\n"
    },
    {
      "commit": "0c9d26d187017f7fb028ab52a0fbc6395142faa4",
      "tree": "35fd2f6babef082b85058fd27a69bda048687295",
      "parents": [
        "b4ea1ab821d652cb080910d4081f5f1318597a90"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 14:35:01 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 13 15:12:42 2012 -0700"
      },
      "message": "Log track name on obtain/releaseBuffer warnings\n\nThis should help diagnose problems by allowing us to correlate\nthe logs with the dumpsys media.audio_flinger output.\n\nChange-Id: I8c7c592b4f87d13b0f29c66ce7a2f301a0f063c9\n"
    },
    {
      "commit": "8cc3651c04e48b755dcc579bfa4f9a7e9391d6e7",
      "tree": "c9a3c38ba62d6b72979e976b4021a5d593e08524",
      "parents": [
        "a4419420b0598413314a79c7ce3954a2e27686aa",
        "57d9b72812d25dff1c33e37b8475a469accd0919"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jun 12 12:50:44 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 12 12:50:44 2012 -0700"
      },
      "message": "am 57d9b728: am c15d6657: Add audio watchdog thread\n\n* commit \u002757d9b72812d25dff1c33e37b8475a469accd0919\u0027:\n  Add audio watchdog thread\n"
    },
    {
      "commit": "c15d6657a17d7cef91f800f40d11760e2e7340af",
      "tree": "c4346cb0fcde7483e42900aecce64df96250889b",
      "parents": [
        "b7acdfb8068bf408ed859dfdd441b4a8722eb12a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 14:52:57 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 11 11:39:54 2012 -0700"
      },
      "message": "Add audio watchdog thread\n\nChange-Id: I4ed62087bd6554179abb8258d2da606050e762c0\n"
    },
    {
      "commit": "796078f96c8a15fefcea70e666b22ea67cc35301",
      "tree": "eb61745fbd99644b96ff751b2df1ebe06b177cad",
      "parents": [
        "a9300fd3d84cc07bbfa702e2fad3b32a5ebfd337",
        "ea5008d8abfdf1479b4efa266cdb7c842d168aa9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 08 10:30:31 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 08 10:30:31 2012 -0700"
      },
      "message": "am ea5008d8: am 28ed2f93: Reduce underruns in screen off, esp. with EQ\n\n* commit \u0027ea5008d8abfdf1479b4efa266cdb7c842d168aa9\u0027:\n  Reduce underruns in screen off, esp. with EQ\n"
    },
    {
      "commit": "28ed2f93324988767b5658eba7c1fa781a275183",
      "tree": "07ba39f61d41aa6ff2af76dc2c9122a102c92059",
      "parents": [
        "a4f7e0e9a0e92a063f1b3a08988cf46e2cf1fa94"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 07 10:17:54 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 08 10:09:22 2012 -0700"
      },
      "message": "Reduce underruns in screen off, esp. with EQ\n\nAdd MonoPipe APIs to specify setpoint.\nUse screen state to configure pipe setpoint.\nFix a long-standing bug where pipe sleep time was excessive,\n  which interacted poorly with governor and low clock frequencies.\n  Now it deducts the elapsed time since last write(),\n  which was significant when there was EQ and low clock frequency.\n\nBug: 6618373\nChange-Id: I6f3b0072c2244aeb033ef0795ad164491a164ff5\n"
    },
    {
      "commit": "bdbf0c6f1a11d6fd9b71aa765f7de39e248557ba",
      "tree": "194524008993958cc8d8eb2bf3163bc3a03a220d",
      "parents": [
        "349d79668ea4ca078400995c70d5d3201e8d9ea1",
        "98e2e030231ce99a4796d34d39a7517078d6735e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 07 17:45:55 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 07 17:45:55 2012 -0700"
      },
      "message": "am 98e2e030: am a4f7e0e9: audioflinger: fix duplicating thread standby\n\n* commit \u002798e2e030231ce99a4796d34d39a7517078d6735e\u0027:\n  audioflinger: fix duplicating thread standby\n"
    },
    {
      "commit": "a4f7e0e9a0e92a063f1b3a08988cf46e2cf1fa94",
      "tree": "007deb0f276a01d2276a953d2a493cf4f7d11d50",
      "parents": [
        "e35a55fbdff5a695ee35ff43f1466a62fb75662b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 07 17:16:09 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 07 17:16:09 2012 -0700"
      },
      "message": "audioflinger: fix duplicating thread standby\n\nThe code that waits for a track presentation to be complete\nbefore disabling it caused a regression for duplicating threads.\nBecause of the way output tracks activity is managed, the number\nof frames output by the duplicating thread would never\nreach the target set for a track to be considered presented.\nThe track would not be removed from active list and the thread would\nnot go to standby and keep its wakelock held.\n\nBug 6606922.\n\nChange-Id: I4b46b420ac4cbf79a86b6791ae6589d407b01c92\n"
    },
    {
      "commit": "349d79668ea4ca078400995c70d5d3201e8d9ea1",
      "tree": "2b69f653abc60aa4801d6a35a921ca01c8e73c6e",
      "parents": [
        "6685cf4fdfe4b9bdfd8e87c04165c08a436abcf7",
        "d89dea161ff3c3da515c02928cad4a9c73b23312"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jun 07 11:13:19 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 07 11:13:19 2012 -0700"
      },
      "message": "am d89dea16: am e35a55fb: Merge \"Take latency and current time into account for visualization\" into jb-dev\n\n* commit \u0027d89dea161ff3c3da515c02928cad4a9c73b23312\u0027:\n  Take latency and current time into account for visualization\n"
    },
    {
      "commit": "f06c2ed50e1db871ae9eb2bd15a196064f8c278c",
      "tree": "a6e809ffab6281359f5c22166113cb2039579f68",
      "parents": [
        "67c0a58e05f4c19d4a6f01fe6f06267d57b49305"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Jun 06 09:52:31 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jun 07 09:16:27 2012 -0700"
      },
      "message": "Take latency and current time into account for visualization\n\nBuffer more data, and return the data that is currently being\noutput from the audio output, to ensure that visualizations are\nsmooth and responsive even when the audio output has a large\nlatency and/or large buffers.\nb/6522728\n\nChange-Id: I401637f01be7600b3c594a55c869036c13b206c0\n"
    },
    {
      "commit": "a88ed026402d92d699c336aa11267616007e4a9d",
      "tree": "bf66a778ed05602d37965316eaa91b48a9064f52",
      "parents": [
        "b86f92d552c391f5d2471bd4f979135be2578578",
        "717f9b7392b0fc3ba15b018c923b85e64c0662b5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 05 13:35:45 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 05 13:35:45 2012 -0700"
      },
      "message": "am 717f9b73: am 67c0a58e: audioflinger: various fixes on direct output\n\n* commit \u0027717f9b7392b0fc3ba15b018c923b85e64c0662b5\u0027:\n  audioflinger: various fixes on direct output\n"
    },
    {
      "commit": "67c0a58e05f4c19d4a6f01fe6f06267d57b49305",
      "tree": "0bfb89de1a57ad53abbd6314e6352538ab1a6317",
      "parents": [
        "ab9071b8d1b375418eb797c9a790da71de644344"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 01 19:31:12 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 05 12:50:16 2012 -0700"
      },
      "message": "audioflinger: various fixes on direct output\n\nVarious fixes in direct output playback thread implementation:\n- threadLoop_write() was broken for playback threads that do not\nuse a pipe sink.\n- output buffer size calculation was hard coded for stereo.\n- removed software volume that was implemented for PCM stereo\nformat only: the audio HAL has to implement volume if needed\nfor direct outputs.\n\nChange-Id: If211b4489be9af395435707b8cf0388cce1347b2\n"
    },
    {
      "commit": "b86f92d552c391f5d2471bd4f979135be2578578",
      "tree": "a7148fd9374e0b4d450792a82c3eadc8cf2f346d",
      "parents": [
        "24a2fd0113da60785ce5af5dd905f8aaf9e0f0a1",
        "e506084e1c22f8f1797b9dc3eb789a699efd45c3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 05 09:21:55 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 05 09:21:55 2012 -0700"
      },
      "message": "am e506084e: am ab9071b8: audioflinger: fix active sleep time calculation.\n\n* commit \u0027e506084e1c22f8f1797b9dc3eb789a699efd45c3\u0027:\n  audioflinger: fix active sleep time calculation.\n"
    },
    {
      "commit": "ab9071b8d1b375418eb797c9a790da71de644344",
      "tree": "637a5322ed80b9de92433ed9851302e45d78b727",
      "parents": [
        "399930859a75d806ce0ef124ac22025ae4ef0549"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 04 13:45:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 04 14:27:56 2012 -0700"
      },
      "message": "audioflinger: fix active sleep time calculation.\n\nWhen an audioTrack underruns, the audioflinger mixer thread\nsleeps for a certain time to give the app a chance to recover.\nThis time is based on the reported audio HAL latency.\nSome audio HALs implementing deep buffering have a variable\nlatency and this creates a problem if the sleep time is cached\nwhen the output stream is opened and not updated afterwards.\n\nThis change derives the active sleep time from the mix buffer\nframecount instead of the latency. This is more conservative\nbut works for variable latency.\n\nBug 6588525.\n\nChange-Id: Ia892fc290fe06f836565c3ae15f7a2ce026c88c6\n"
    },
    {
      "commit": "24a2fd0113da60785ce5af5dd905f8aaf9e0f0a1",
      "tree": "17424c05e4cdf34e2a680a760cc7285f99b1051f",
      "parents": [
        "5385b7b0f5d922ee38f8a54f11ee4462ef4b5e29",
        "f335f182e4b50249ac34b41da3566ddb016cc816"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 04 12:54:15 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jun 04 12:54:15 2012 -0700"
      },
      "message": "am f335f182: am 39993085: State queue dump\n\n* commit \u0027f335f182e4b50249ac34b41da3566ddb016cc816\u0027:\n  State queue dump\n"
    },
    {
      "commit": "5385b7b0f5d922ee38f8a54f11ee4462ef4b5e29",
      "tree": "d0a64b6a13c62f31b842e3d03565fd2ca5a57904",
      "parents": [
        "510ba8b812d88f62968a2c9b0b638fff6d99ee84",
        "2c00676cd34d78460ad610a4a4fd7a68544a7b7d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 04 08:30:39 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jun 04 08:30:39 2012 -0700"
      },
      "message": "am 2c00676c: am 1295bb4d: Fast track dumpsys\n\n* commit \u00272c00676cd34d78460ad610a4a4fd7a68544a7b7d\u0027:\n  Fast track dumpsys\n"
    },
    {
      "commit": "399930859a75d806ce0ef124ac22025ae4ef0549",
      "tree": "2471b70dedc0bb33f7310de8ae0e5622344c6f82",
      "parents": [
        "1295bb4dcff7b29c75cd23746816df12a871d72c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 13:40:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 04 08:27:25 2012 -0700"
      },
      "message": "State queue dump\n\nBug: 6591648\nChange-Id: Iac75e5ea64e86640b3d890c46a636641b9733c6d\n"
    },
    {
      "commit": "510ba8b812d88f62968a2c9b0b638fff6d99ee84",
      "tree": "e708da6b87725f7ab21ff2d0ef9e40514d471204",
      "parents": [
        "ad2c249a660f8ff81597dab00aaba1118b4a4342",
        "f45dc2f1751d9ac19826b99fab0b226f5c84570a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Jun 03 14:52:15 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jun 03 14:52:15 2012 -0700"
      },
      "message": "am f45dc2f1: am bf0d21fb: Count underruns for normal tracks also\n\n* commit \u0027f45dc2f1751d9ac19826b99fab0b226f5c84570a\u0027:\n  Count underruns for normal tracks also\n"
    },
    {
      "commit": "1295bb4dcff7b29c75cd23746816df12a871d72c",
      "tree": "81cf673d36c8aaf3d9d51a9f372a8425ee5fa49b",
      "parents": [
        "bf0d21fb1310e8677caa53b90e8c3aecebc7fc13"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 07:43:43 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Jun 03 14:49:11 2012 -0700"
      },
      "message": "Fast track dumpsys\n\nBug: 6591648\nChange-Id: I696f51c682e7233ba690d97da26012084989b412\n"
    },
    {
      "commit": "bf0d21fb1310e8677caa53b90e8c3aecebc7fc13",
      "tree": "247c7705394820c7cb84899343bf7a9b834bbda6",
      "parents": [
        "81787e56f8f21407eade5accc50c6da39b8af9b2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 14:59:29 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Jun 03 14:42:51 2012 -0700"
      },
      "message": "Count underruns for normal tracks also\n\nBug: 6591648\nChange-Id: Iff9cabe392bb2ce97062603adb9c9dc7aa4170d5\n"
    },
    {
      "commit": "35d7bfc359b3aa87ade92d1ab55c6992418cad48",
      "tree": "ba0172953505aa2b83b51ad6e7af0c19b7c1372c",
      "parents": [
        "68edcad7d1619a648e0988ac40cc23e61200c2a2",
        "92e5ee9548542513791a70c81e0cd3fd70397269"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 01 11:11:25 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 01 11:11:25 2012 -0700"
      },
      "message": "am 92e5ee95: am 7dc5b165: Merge \"Fix fast track leak if out of normal track names\" into jb-dev\n\n* commit \u002792e5ee9548542513791a70c81e0cd3fd70397269\u0027:\n  Fix fast track leak if out of normal track names\n"
    },
    {
      "commit": "893a05479c96f911d02beb0443da3ed6508143a7",
      "tree": "ba9fba13c28e13b555313231bfb4cbaba39d81b1",
      "parents": [
        "83410a85993ad6f5f0c122036ff0bda42bf1d4f7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 10:32:06 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 14:39:20 2012 -0700"
      },
      "message": "Fix fast track leak if out of normal track names\n\nBug: 6580402\nChange-Id: I3ac7f012062c35833147f47ba822eb4bf532a824\n"
    },
    {
      "commit": "529e888738a91ca70cbdeeabd982f8fb2947780c",
      "tree": "09558a3153e26e706ac69b46f1b1ed9e6db04253",
      "parents": [
        "c65abc64bff11b194a0b416ec66e44f5ed957dcf",
        "8c07f7599a757fe51dc54253c480067cf01f13d3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 30 14:13:01 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 30 14:13:01 2012 -0700"
      },
      "message": "am 8c07f759: am 3bdb4fbf: Merge \"audioflinger: fix effect problem during underrun\" into jb-dev\n\n* commit \u00278c07f7599a757fe51dc54253c480067cf01f13d3\u0027:\n  audioflinger: fix effect problem during underrun\n"
    },
    {
      "commit": "91b14c4c144d0cc957a427cffc02ba10d0615677",
      "tree": "dd7c1027319b6783cdc493bf4d37afb2537a2879",
      "parents": [
        "91b0d43a27b3a1cebd75270f953f3fb9fa4f2047"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 30 12:30:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 30 12:38:27 2012 -0700"
      },
      "message": "audioflinger: fix effect problem during underrun\n\nWhen an audio track underruns, the input buffer of the\ncorresponding effect chain (if any) must be cleared, otherwise\naudio from previous mixer run will be fed again to the effect process\nfunction.\n\nBug 6551652.\n\nChange-Id: I5cd02196745f756c85af82d6937e9dc54369b37f\n"
    },
    {
      "commit": "6d80297a55ab12759ee00b7f99fa97584b430da0",
      "tree": "a936d42443306cc034a709e77397873fd2a0d611",
      "parents": [
        "3545690e39ff7033c906d12d8bb77a06013d3f3c",
        "0cc6257030d3e6c649ea3ad807ecb9327ceb5b3e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 24 11:45:25 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 24 11:45:25 2012 -0700"
      },
      "message": "am 0cc62570: am f436fdcf: audioflinger: change session check in createTrack.\n\n* commit \u00270cc6257030d3e6c649ea3ad807ecb9327ceb5b3e\u0027:\n  audioflinger: change session check in createTrack.\n"
    },
    {
      "commit": "f436fdcf93bd417fd3c9d2a8b19fd221d894b5e3",
      "tree": "930951e6490510ef9eeab7210c8f729950783bd5",
      "parents": [
        "e737cda649acbfa43fc1b74612a83f2fac9aa449"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 24 11:07:14 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 24 11:07:14 2012 -0700"
      },
      "message": "audioflinger: change session check in createTrack.\n\nDo not refuse to create a track on an output thread if the same session\nis present on another thread. It is now possible that two tracks\nwith the same session ID are on different threads if one can use deep\nbuffering and the other can\u0027t.\n\nIn this case, move effects attached to this session to the output\nthread ion which the new track is created.\n\nBug 6530324.\n\nChange-Id: I9019b3ee382e374c89d2319033afcfa7f886e4c4\n"
    },
    {
      "commit": "852fca99e25db8d2180c2622ca55fca676490a08",
      "tree": "3f17c0f378e0d191d4ad961d3421ef6809a3f7e6",
      "parents": [
        "a6d7da4e897d5201423f7c205d48c1c1a4a07e17"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 24 08:44:00 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 24 08:44:48 2012 -0700"
      },
      "message": "Remove log spam for fast track denied\n\nBug: 6531054\nChange-Id: Iedf58e810a157aae88b5900da27c81054c437058\n"
    },
    {
      "commit": "e737cda649acbfa43fc1b74612a83f2fac9aa449",
      "tree": "01ac3aaf0b68473c7e21c3056547b87a54f89f0f",
      "parents": [
        "8d9846c0693b7651b243f0161caa86be506f764a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 22 18:55:44 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 22 19:06:51 2012 -0700"
      },
      "message": "audioflinger: refine latency latency calculation.\n\nThere is an audio pipe between the normal mixer output and the fast\nmixer to cope for scheduling delays and buffer size difference.\nThis pipe depth was not taken into account in latency calculation.\n\nAdding the pipe contribution to the latency significantly improves A/V sync.\n\nBug 6520569.\n\nChange-Id: I5584908e8aa8a02170eb38b22b4370eea800a235\n"
    },
    {
      "commit": "fbae5dae5187aca9d974cbe15ec818e9c6f56705",
      "tree": "101ef33da2a18e0cb1c70a0e1ae085450dc60396",
      "parents": [
        "cd8a36fdc49a823f78d45e8e1a464dc261553b26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 21 09:17:20 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 21 12:36:06 2012 -0700"
      },
      "message": "Keep a copy of most recent audio played\n\nChange-Id: I6b2f97881c39998a2fae9ab79d669af6c0a37e94\n"
    },
    {
      "commit": "99c99d00beb43b939dedc9ffb07adb89f6a85ba5",
      "tree": "a93aeb409fa2399bf552ea901793514f0cf79f6b",
      "parents": [
        "552477608b137fb66af126655c6865207a82d888"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 16:37:13 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 17 16:29:07 2012 -0700"
      },
      "message": "systrace for audio\n\nTrace fast track buffer fill status for underruns etc.\n\nMove the definition of macro to Android.mk.\n\nNo overhead if disabled.\n\nChange-Id: If0e83e21b61b059ca38f543f8a6ffb58e08c79ee\n"
    },
    {
      "commit": "88cbea8a918bbaf5e06e48aadd5af5e81d58d232",
      "tree": "add79cd641d5e2ab4be79f49ca63680fa0e86962",
      "parents": [
        "e00e0485b0aa1e432be8c639da0eb5285942777b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 15 07:39:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 17 15:04:31 2012 -0700"
      },
      "message": "Display pipe underrun counters in dumpsys\n\nThe normal mixer writes it\u0027s submix to a pipe, which is read by the fast\nmixer.  Now dumpsys media.audio_flinger display the raw underrun counters\nwhen fast mixer tries to pull from the pipe but doesn\u0027t get enough frames.\n\nChange-Id: I72505f149f9e12802784da654a651d43734e1c79\n"
    },
    {
      "commit": "9017e5e0ebad9664bb7b6f2057e5bb29c852c64f",
      "tree": "7598acfb775b560be2e160057d9f9eec86167c0e",
      "parents": [
        "6d0780ae34ed2fa3e9631667f200e15ddd472464"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 15 07:39:52 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 15 17:19:11 2012 -0700"
      },
      "message": "Increase normal mixer\u0027s pipe to fast mixer\n\nChange-Id: I330925c7d07b6adb30b773bda3657e4efef9ae9b\n"
    },
    {
      "commit": "44a957f06400a338e7af20b3d16c4c4ae22a673c",
      "tree": "505dc33ba379c96f6ef5e07ac28843b1bbab8115",
      "parents": [
        "2986460984580833161bdaabc7f17da1005a8961"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 15 15:26:05 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 15 15:30:03 2012 -0700"
      },
      "message": "Fix static track activity ref counting\n\nWhen a static AudioTrack underruns, it means that playback is over.\nAs apps do not necessarily stop playback explicitly, AudioFlinger\nshould call stopOutput() to decrease activity ref count in\naudio policy manager.\n\nBug 6486311.\n\nChange-Id: I1ea722c443780329ded6310c958b24726e918d16\n"
    },
    {
      "commit": "2986460984580833161bdaabc7f17da1005a8961",
      "tree": "bd8aa210c0faee61dc45e23479e29cfc85f313c2",
      "parents": [
        "dfa29ab13647f22b30b2de34d4830c9e815bf120"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 08 18:57:51 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 14 17:20:12 2012 -0700"
      },
      "message": "Fix issues with synchronous record start.\n\n- Added a timeout in case the trigger event is never fired.\n- Extend AudioRecord obtainBuffer() timeout in case of\nsynchronous start to avoid spurious warning.\n- Make sure that the event is triggered if the track is\ndestroyed.\n- Reject event if the triggering track is in an incompatible state.\n\nAlso fix a problem when restoring a static AudioTrack after\na mediaserver crash.\n\nBug 6449468.\n\nChange-Id: Ib36e11111fb88f73caa31dcb0622792737d57a4b\n"
    },
    {
      "commit": "4adcede0dc54a85c31abaf139921aebd7a072d8e",
      "tree": "329681d4effaa4c3795d9567cb2279ae873758bb",
      "parents": [
        "09474df67278c0cd621b57c4aef1deaec4d8447f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 12:26:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 14 12:28:12 2012 -0700"
      },
      "message": "Reduce video frame drop rate\n\nThe video playback engine depends on having relatively precise audio\nprogress updates for its A/V sync and frame drop calculations.  For small\naudio HAL buffer sizes, this was not a problem, but when the HAL buffer\nsize was \u003e 12 ms, the normal mix buffer size became \u003e 24 ms and this\nthen caused video problems.  The new formula tries to keep the normal\nmix buffer size within a closer tolerance of 20 ms to 24 ms.\n\nAlso use consistent term: multiplier instead of multiple.\n\nBug: 6479613\nChange-Id: I903bad74461908e8c8f0a61e99ab5e24d5c44433\n"
    }
  ],
  "next": "09474df67278c0cd621b57c4aef1deaec4d8447f"
}
