)]}'
{
  "log": [
    {
      "commit": "ec35a1416472865dbebc22b10199ad718ed2cc95",
      "tree": "dcd10e214322dae22492b8a49209fdfb4b33c30f",
      "parents": [
        "d20bf0676d6db8f12edcd2307f82409c076c7015"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 05 17:42:25 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 05 17:42:25 2011 -0700"
      },
      "message": "Fix issue 5381089: problem with A2DP music volume\n\nThis problem only occurs when audio effects are present and\nthe music volume is applied by one effect engine.\nWhen connecting or disconnecting A2DP, audio effects are moved from\none mixer thread to another. When removed from the source thread,\nthe effect is stopped but it is not restarted when added to the\ndestination thread.\nThis regression was introduced by commit 21b5c47e.\n\nChange-Id: I4cc578d8d760ec65b185032b6fda98c739d331bc\n"
    },
    {
      "commit": "b76e90de3c64626fe07a68469d0a59a31c8efb6b",
      "tree": "b8ced112fa7e83a34898679552a26744610ce0e1",
      "parents": [
        "1619f3d3428e9d502dc477d31e0681fe1cd12b89",
        "9f6530f53ae9eda43f4e7c1cb30d2379db00aa00"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 30 10:51:54 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 30 10:51:54 2011 -0700"
      },
      "message": "Merge \"226483: A2DP connected, but music out to speaker\""
    },
    {
      "commit": "9f6530f53ae9eda43f4e7c1cb30d2379db00aa00",
      "tree": "663430f29fec8c038ad2770e2640c9480c0e2251",
      "parents": [
        "d2824a9a392e02a09929a34f0a3dad41ac1faacf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 30 10:18:54 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 30 10:19:38 2011 -0700"
      },
      "message": "226483: A2DP connected, but music out to speaker\n\nWhen the A2DP headset is connected, there is a possible\nrace condition when the audio tracks are moved from\nthe mixer thread attached to the speaker output to the thread\nattached to A2DP output.\nAs the request to clear the stream type to output mapping cache in\nthe client process is asynchronous, it is possible that the flag\nindicating to the client audio track to re-create the IAudioTrack\non the new thread is processed before the cache is invalidated.\nIn this case, the track will be attached to the old thread and\nmusic will continue playing over the device speaker instead of being\nredirected to A2DP headset.\n\nChange-Id: Ib2ce1eb5320eaff83287b93779061bf4e7a330df\n"
    },
    {
      "commit": "bee5337da7659b3b7128622ba1f42618b11df5be",
      "tree": "523c43a148debb18c5d0f2c8a7b8bf1c62cf920f",
      "parents": [
        "d2824a9a392e02a09929a34f0a3dad41ac1faacf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 29 12:42:48 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 29 14:50:38 2011 -0700"
      },
      "message": "Audioflinger: reverse logic of BT NREC indication\n\nThe interpretation of BT NREC by AudioFlinger to enable\nor disable AEC and NS was wrong: NREC to ON (default) means\nthe phone (Audio Gateway) must enable local AEC and NS.\n\nChange-Id: I88a264e7fc9831c43bbace4f6b585baec73f2006\n"
    },
    {
      "commit": "db7c079f284f6e91266f6653ae0ec198b1c5006e",
      "tree": "08c3569af421bc760cb7b81f611ee0959c4b7b9d",
      "parents": [
        "8adb83ba4837b3c9de1a4221a5ca4c371a62e38c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 10 10:37:50 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 11 14:33:45 2011 -0700"
      },
      "message": "Audio effects: track CPU and memory use separately\n\nBefore this change, CPU and memory usage for an audio effect were\nregistered and checked against the limit by audio policy manager\nupon effect instantiation. Even if an effect was not enabled\nit would prevent another effect to be created if the CPU load budget\nwas exceeded, which was too restrictive.\n\nThis change adds a method to register/unregister CPU load only when\nan effect is enabled or disabled.\nIt also adds a mechanism to place all effects on the global output mix\nin suspend state (disabled) when an effect is enabled on a specific session.\nThis will allow applications using session effects to have the priority\nover others using global effects.\n\nAlso fixes some issues with suspend/restore mechanism:\n- avoid taking actions when an effect is disconnected and was not enabled.\n- do not remove a session from the suspended sessions list when corresponding\neffect chain is destroyed.\n\nChange-Id: I5225278aba1ae13d0d0997bfe26a0c9fb46b17d3\n"
    },
    {
      "commit": "3a34befc6fb04a4945a849e8bda8b84e4bf973fe",
      "tree": "80dee67385fb78763b2c25f6dce9ed122bfd9aee",
      "parents": [
        "a1f10e8959cd4656aedb2613e855342102e59555"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Aug 02 13:33:41 2011 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Aug 09 10:21:10 2011 -0700"
      },
      "message": "Keep effects sessions active when the caller dies.\n\nDon\u0027t remove effects until the session they are in goes away or all\nAudioEffects have been explicitly released. This allows the control\npanel process to die without stopping the effects.\n\nChange-Id: I4496e5df080230ca1af149dec95c1309ab8ea888\n"
    },
    {
      "commit": "c3e6572e0ff535932b1f6ffb7bcf5acd891675fb",
      "tree": "e4d87846a30c25c0c2c06c2ab314f93bb945b49f",
      "parents": [
        "ea7c2fea6a031d37270cb5b22b432729626b266d",
        "b8ba0a979067a4efb0b3819bf17770793e41c15e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 08 09:31:42 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 08 09:31:42 2011 -0700"
      },
      "message": "Merge \"AudioFlinger: protect input/output stream access\""
    },
    {
      "commit": "b8ba0a979067a4efb0b3819bf17770793e41c15e",
      "tree": "b38d6dc04987787c6bcf1d23b68ab2f6a870da93",
      "parents": [
        "8292f43746a359d31af631efcffccd142c0a50c3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Aug 07 16:32:26 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 08 08:55:29 2011 -0700"
      },
      "message": "AudioFlinger: protect input/output stream access\n\nSome methods would not check that the output orinput stream of a thread\nwas still valid before calling functions on its interface.\nThis could cause a crash if those methods where called while the output or\ninput was being closed by another thread.\n\nMake sure that the output or input stream pointer is cleared before closing the\nstream.\nAlways check that the output or input pointer is not null before calling\nfunctions at the stream interface.\nGeneralize the use of initCheck() method to verify that the output or input\nstream is not null.\n\nChange-Id: I9d9ca6b744d011bcf3a7bbacb4a581ac1477bfa5\n"
    },
    {
      "commit": "59bd0da8373af0e5159b799495fda51e03120ea4",
      "tree": "0848d5a00a8227d57514a082caa989c39e12e056",
      "parents": [
        "ff3f6808a07a6280071ac1aef7032d6a20ef7393"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 01 09:52:20 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 03 11:47:45 2011 -0700"
      },
      "message": "AudioFlinger: disable AEC and NS with BT headsets\n\nDisable AEC and NS when the Bluetooth SCO headset in use indicates it\nimplements those pre processings.\n\nChange-Id: I93f3d10b0a27243d5dbff7182639576fc0c6d862\n"
    },
    {
      "commit": "59255e4fc7d8ff52874b85b1988dc0785140cf81",
      "tree": "8c6655d7fc94a6caa7a6b3dd10393b8d4f5564ab",
      "parents": [
        "8292f43746a359d31af631efcffccd142c0a50c3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 27 19:49:51 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 02 20:03:35 2011 -0700"
      },
      "message": "Audio Effect Framework: add effect suspend/restore\n\nAdd the possibility for the effect framework to suspend\n(temporarily disable process) and restore audio effects.\nThis feature will be usefull to disable pre processing under certain\nconditions and better control coexistence of audio effects\non output mix and specific sources.\n\nChange-Id: I79b195982cc48748d5708308fb1647b9c3c34cc6\n"
    },
    {
      "commit": "a7280a59259018d997896c043fd2db95f631f12e",
      "tree": "516378da6bd410e4fd2fe8cc4927be61b450b684",
      "parents": [
        "99b25ba8da5fdb7a524b53c5db290f7a64f1259c",
        "ec437d8d3db79459d7b19e1734e6fe309bd621e8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 27 09:48:47 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 27 09:48:47 2011 -0700"
      },
      "message": "Merge \"AudioFlinger: fix crash when deleting pre process.\""
    },
    {
      "commit": "ec437d8d3db79459d7b19e1734e6fe309bd621e8",
      "tree": "e04cdae7f24f8a9827435b591b5f0f5cc8d2ae4b",
      "parents": [
        "288b66b60c9b3af3d84408885d0a4030c45eea9a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 26 20:54:46 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 26 20:54:46 2011 -0700"
      },
      "message": "AudioFlinger: fix crash when deleting pre process.\n\nIf a pre processing effect is detroyed while enabled and capture is active,\nthere was a possibility that the effect engine is released by the framework\nwhile still processed by the audio HAL.\n\nThe fix consists in not releasing the engine in EffectModule::removeHandle()\nbut just flag the effect as being detroyed to avoid further calls to functions\non the engine effect interface.\nThe effect interface is then removed from the audio HAL safely in\nEffectChain::removeEffect_l() while holding the EffectChain mutex.\n\nChange-Id: I71fab30d9145062af8644f545a1f1d4d3e7e7f02\n"
    },
    {
      "commit": "feb0db689c17dced50afaee54c659f1676e2d505",
      "tree": "a949f6cb66c3c5886cd0682fcb3781b0fd5db0a8",
      "parents": [
        "288b66b60c9b3af3d84408885d0a4030c45eea9a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 22 09:04:31 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 25 18:41:12 2011 -0700"
      },
      "message": "Fix issue 4604090: notification sound interrupted.\n\nThe problem is that the audio HAL fails to acquire the wake lock when playing the notification.\nThis is because of a change that removed the mediaserver process form the system group for honeycomb.\n\nThe fix consists in requesting the wake lock from PowerManagerService when AudioFlinger mixer\nwakes up.\n\nA consequence of this change is that audio HALs or pcm drivers do not have to hold wake locks\nanymore as in the past.\n\nChange-Id: I4fb3cc84816c9c408ab7fec75886baf801e1ecb5\n"
    },
    {
      "commit": "1d2bff0e588afe183a1baaae731519b4e957bbdb",
      "tree": "a1b9fd05b9b51546c52e76539bce2cccbad05cdb",
      "parents": [
        "77882a8deb5167235ae591e49c9dcff9abb373c1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 24 17:49:51 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 24 17:49:51 2011 -0700"
      },
      "message": "AudioFlinger: add dump of audio pre processing.\n\nDump of media.audio_flinger service was only listing effects on output threads.\nMoved the dump of effect chains from PlaybackThread to ThreadBase class so that\npre processings on RecordThread are also listed.\n\nChange-Id: If8bc74023c12b9c2371f1b300743b156ceca7b87\n"
    },
    {
      "commit": "7c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745",
      "tree": "eb67cd14e679d97a9b866a0410d8e582f4639274",
      "parents": [
        "67a124dcac0578aed94aebf451675a5f4c8a1e4e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 17 21:29:58 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 18 09:42:57 2011 -0700"
      },
      "message": "Audio framework: support for audio pre processing\n\nAudio effect framework is extended to suport effects on\noutput and input audio path.\n\nAudioFlinger: Support for audio effects and effect chains is\nmoved from PlaybackThread class to ThreadBase class so that\nRecordThread can manage effects.\nEffects of type pre processing are allowed on record thread\nonly. When a pre processing is enabled, the effect interface handle is\npassed down to the input stream so that the audio HAL can call the\nprocess function. The record thread loop calls the effect chain process\nfunction that will only manage the effect state and commands and skip the\nprocess function.\n\nAudioRecord: The audio session is allocated before calling getInput() into\naudio policy serice so that the session is known before the input theead is\ncreated and pre processings can be created on the correct session.\n\nAudioPolicyService: default pre processing for a given input source are\nloaded from audio_effects.conf file.\nWhen an input is created, corresponding effects are created and enabled.\n\nChange-Id: Id17119e0979b4dcf189b5c7957fec30dc3478790\n"
    },
    {
      "commit": "7394a4f358fa9908a9f0a7c954b65c399f4268e6",
      "tree": "76bde6cdaf308c987975d57a5a0d0794613ad65d",
      "parents": [
        "afcedc9e6f17d8213d9bd8f6c36643dcc816d0ef"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Mon Jun 13 18:16:26 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Mon Jun 13 18:16:26 2011 -0700"
      },
      "message": "audio: update for audio/audio_policy header names/locations\n\nChange-Id: I36c49352eee57559403cd1597f56a8485a360289\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\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": "65580f9adf6c4d98449ad0716488f9fe3869aa5a",
      "tree": "71432ddbf09fcc122be1ef5781bbc2d87f725ad8",
      "parents": [
        "e1315cf0b63b4c14a77046519e6b01f6f60d74b0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 27 17:51:52 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 27 17:51:52 2011 -0700"
      },
      "message": "Removed interface to load audio effects libraries\n\nRemoved unused functions allowing dynamic loading of audio effects libraries\nfrom effects factory API.\n\nChange-Id: I06cc5a51dc10aca87c7a8687bbb874babd711eca\n"
    },
    {
      "commit": "e1315cf0b63b4c14a77046519e6b01f6f60d74b0",
      "tree": "c10fd288fd0d0d85c619e7e635a249765202fabc",
      "parents": [
        "a3e73df3b402f1ebdbef7c8a8e3111d852e7bd35"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 17 19:16:02 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 27 15:15:00 2011 -0700"
      },
      "message": "New effect library API\n\nMoved and renamed media/EffectApi.h to hardware/audio_effect.h\nModified the effect library API to expose a library info structure\ncontaining an interface functions table.\nAlso removed enums for audio channels, audio format and devices\nfrom effect API and use values from system/audio.h instead.\n\nModified effects factory to support new library interface format and\nload libraries and efffects listed in audio_effects.conf file.\nThe file audio_effects.conf is first loaded from /vendor/etc and\nthen from /system/etc/audio_effects.conf if not found.\n\nModified existing effect libraries to implement the new library interface.\n\nChange-Id: Ie52351e071b6d352fa2fbc06c3846686f8c45df9\n"
    },
    {
      "commit": "6708b9a3fb654f5623ba5a696288fdba310a5e1a",
      "tree": "46bf064d0c57fa017823e9825aff06700a3f4a4f",
      "parents": [
        "86e152e70a1aab83cba2c75c76d7c0e2d00b61dc",
        "b469b9490b3cd9e0f0466d9b9ab228f6c793b82e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 13 10:24:24 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 13 10:24:24 2011 -0700"
      },
      "message": "Merge \"Fix audio effect framework issues\""
    },
    {
      "commit": "b469b9490b3cd9e0f0466d9b9ab228f6c793b82e",
      "tree": "7491d71638aed90347fb1fe85cec01f28a16bbcf",
      "parents": [
        "43ec1dfc5dc3934680a52a026c5519ddc51bdbd3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 09 12:09:06 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 13 08:34:45 2011 -0700"
      },
      "message": "Fix audio effect framework issues\n\nFix two issues in audio effect framework reported by partners.\n\n1 - Fixed duplicated audio buffer sent to effect process function when\npausing a track.\nModified Effectchain::process_l() function to clear the effect chain\ninput buffer before calling the effect process functions when no track\nis active on the session. Previous code was clearing the buffer after\ncalling the process functions and  when transitioning from active\nto inactive, the last processed buffer was passed again once to effect\nprocess function before being cleared.\n\n2 - Fixed potential mutex cross deadlock when disconnecting an effect\nwhile playback is active. This is because EffectChain::process_l()\nwas calling PlaybackThread::hasAudioSession() thus creating an inversion\nin the mutex lock order (EffectChain mutex locked before ThreadBase mutex).\nThe fix consists in removing the call to hasAudioSession() from process_l()\nand requires each effect chain to keep count of the number of audio tracks\nattached to it (previously only the active tracks were accounted for).\n\nChange-Id: Iee4246694ea8c7a66c012120c629d72dd38f9c35\n"
    },
    {
      "commit": "64760240f931714858a59c1579f07264d7182ba2",
      "tree": "5fad3bbdc4f7a19cff980b719edb75577c7f9a4b",
      "parents": [
        "b84d042a1216694e1db6b1fc2b053d348cab5593"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed May 11 14:15:23 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Thu May 12 14:09:57 2011 -0700"
      },
      "message": "update for new audio.h header location\n\nChange-Id: Ic4c62c4037800802427eb7d3c7f5eb8b25d18876\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "5a61d2f277af3098fc10b2881babca16391362da",
      "tree": "b242a8b77bdf78a631cdc014051c7b5d79457215",
      "parents": [
        "799a70e7028a4d714436c3a744a775acfbd31aae"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Tue Apr 19 19:04:32 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Apr 27 16:20:22 2011 -0700"
      },
      "message": "audioflinger: don\u0027t do work in constructor, instead do it in onFirstRef\n\nChange-Id: I22d9e01821816c3beb52b014330386c7fd2f0411\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "799a70e7028a4d714436c3a744a775acfbd31aae",
      "tree": "86e61ba1b01137b9c5c687a589a5dd9cfcb699f6",
      "parents": [
        "fce7a473248381cc83a01855f92581077d3c9ee2"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Mon Apr 18 16:57:27 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Apr 27 16:20:22 2011 -0700"
      },
      "message": "audioflinger: enumerate all the possible audio interfaces\n\nKeep track of the primary interface that handles the master volume,\netc.\n\nChange-Id: Ib0701fccff8d8783a99035a241ab7c8ec75c00ac\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "fce7a473248381cc83a01855f92581077d3c9ee2",
      "tree": "e002e1edd8a11f2be56ce9538ab1b13aa289bc9e",
      "parents": [
        "db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Tue Apr 19 22:30:36 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Apr 27 13:10:10 2011 -0700"
      },
      "message": "audio/media: convert to using the audio HAL and new audio defs\n\nChange-Id: Ibc637918637329e4f2b62f4ac7781102fbc269f5\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "117cd9286424888c1c5bf202ebf1e08ae1e6affe",
      "tree": "1aec3e46dbbebfe06fdc875ca8571298ad61e22d",
      "parents": [
        "8782cb4dc783cdcac8498148ab1894b4780c18df",
        "db130fbd3ccd37e247e49494a84f8a9841ecd593"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 03 18:44:32 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 03 18:44:32 2011 -0800"
      },
      "message": "Merge \"Bug 3366885 Remove LVMX switch\""
    },
    {
      "commit": "db130fbd3ccd37e247e49494a84f8a9841ecd593",
      "tree": "eddfcd84debc055e78baa446fafb3e88032577e4",
      "parents": [
        "856990b491d84b7ed4fefe337485c8997ba9dd02"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 03 17:18:19 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 03 17:18:19 2011 -0800"
      },
      "message": "Bug 3366885 Remove LVMX switch\n\nChange-Id: I0bf98c6f85f00b3296874571e1c049dcc4e2fcca\n"
    },
    {
      "commit": "eda6c364c253ba97ee45a3adeb8c2b45db1f81db",
      "tree": "7e8011600b617e524645928514e5eaf3f867bb75",
      "parents": [
        "ab8a0badb8fb1e294dacf2eb6a891439f348aff9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Feb 02 09:33:30 2011 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 03 09:26:24 2011 -0800"
      },
      "message": "Fix issue 3371080\n\nModified default volume control logic in AudioService:\n1 IN_CALL volume if in video/audio chat\n2 NOTIFICATION if notification is playing or was playing less than 5s ago.\n3 MUSIC\n\nModified silent mode:\n- now also affect MUSIC stream type\n- entering silent mode when VOL- hard key is pressed once while selected\nstream volume is already at 0 (except for VOICE_CALL stream).\n- exiting silent mode when pressing VOL+ hard key while in silent mode\n\nPlay sound FX (audible selections, keyboard clicks) at a fixed volume.\n\nModified audio framework:\n- isStreamActive() method now implemented in AudioPolicyManagerBase (previously AudioFlinger)\n- iStreamActive() now specifies a time window during which the stream is considered\nactive after it actually stopped.\n\nChange-Id: I7e5a0724099450b9fc90825224180ac97322785f\n"
    },
    {
      "commit": "f5aafb209d01ba2ab6cb55d1a12cfc653e2b4be0",
      "tree": "75b6429a6bb8b78943b770cad6924a7aaa94dc32",
      "parents": [
        "b9ff444a7eaf7ffd43970c0477110c6808bd4a7c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 18 08:40:16 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 19 15:49:42 2010 -0800"
      },
      "message": "Fix issue 3157123.\n\nUse a Mutex wherever atomic operations were used in AudioTrack,\nAudioRecord, AudioFlinger and AudioEffect classes.\n\nChange-Id: I6f55b2cabdcd93d64ef19446735b8f33720f8dbc\n"
    },
    {
      "commit": "8f45bd725549436eeacd12ee69349e2332ed8da5",
      "tree": "d1f48f9af5991d462fb22fb37a5dd0a3d7f2251a",
      "parents": [
        "06124758ff402512f3c7a5fb2b35d8d09a0d6c2e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 31 13:50:07 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 31 15:26:23 2010 -0700"
      },
      "message": "Audio Effects: fix problems in volume control.\n\n- Fixed click when re-enabling effect during the turn off phase:\nmake sure the effect states where effect is processed are the same\nwhere volume control is delegated to effect.\n- Fixed click when effect is deleted while still active: do not apply\nvolume ramp if an effect having volume control was just removed from the\neffect chain.\n\nAlso fixed a crash when PCM dump is enabled in effect bundle wrapper.\n\nChange-Id: Ib562f5cf75c69af75df0e862536262e2514493e4\n"
    },
    {
      "commit": "25cbe0ecd6df8be7e40537c5d85c82f105038479",
      "tree": "f2c3888144a92d90f8f3c92756ffef99b1c1bd63",
      "parents": [
        "c059860c73678a202bfa33062723e8f82fb779d9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 18 18:13:17 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 19 08:15:08 2010 -0700"
      },
      "message": "Fix issue 2929440\n\nFixed regression introduced by change a54d7d3d7dd691334189aab20d23c65710092869 in audioflinger mixer thread:\nWhen the output stream is suspended, the sleep time between two writes must match the actual duration\nof one output stream buffer otherwise the playback rate is not respected.\n\nChange-Id: Ic5bebe890290d1f44aeff9dd3c142d18e26fff2a\n"
    },
    {
      "commit": "39e94f8f723d445447fdee0822291e664b631f60",
      "tree": "99147be3db86a4bacc908e61498a9ada95ce725c",
      "parents": [
        "1b58c743e6748272e98cd04d3c0f63e371a44329"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 28 01:32:47 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 29 02:34:40 2010 -0700"
      },
      "message": "Allow creation of an audio effect on a session with no audio tracks.\n\nThis is necessary to allow creating and enabling an effect attached to a particular player\nsession before the playback is started. As a matter of fact, the implementation of the mediaplayer\ndoes not create the AudioTrack before playback starts.\n\nChange-Id: I1266e8885f9d756acc949303321aaac0fbf83e34\n"
    },
    {
      "commit": "25f4395b932fa9859a6e91ba77c5d20d009da64a",
      "tree": "01098a211d6c782708b840c28ebd396a6eb72a7b",
      "parents": [
        "23e1de74359f4bb1763aef0adfebe073122b032c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 28 05:40:18 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 28 05:49:21 2010 -0700"
      },
      "message": "Audio effects: modified command() parameter types.\n\nThe type of the cmd, cmdSize and *pReplySize parameters of the effect control interface command()\nfunction have been modified from int to uint32_t. This is more consistent with their role.\n\nChange-Id: I84d289fc262d6753747910f06f485597dfee6591\n"
    },
    {
      "commit": "de070137f11d346fba77605bd76a44c040a618fc",
      "tree": "ba741240b391a66899514061ccda38254e539013",
      "parents": [
        "f997cabca292d70d078ae828e21c28e6df62995f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 13 04:45:46 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 20 10:31:57 2010 -0700"
      },
      "message": "Audio policy manager changes for audio effects\n\nAdded methods for audio effects management by audio policy manager.\n- control of total CPU load and memory used by effect engines\n- selection of output stream for global effects\n- added audio session id in parameter list for startOutput() and stopOutput().\nthis is not used in default audio policy manager implementation.\n\nModifications of audio effect framework in AudioFlinger to allow moving and reconfiguring\neffect engines from one output mixer thread to another when audio tracks in the same session\nare moved or when requested by audio policy manager.\nAlso fixed mutex deadlock problem with effect chains locks.\n\nChange-Id: Ida43484b06e9b890d6b9e53c13958d042720ebdb\n"
    },
    {
      "commit": "f997cabca292d70d078ae828e21c28e6df62995f",
      "tree": "8e82ee801d8465366f659028f7105ee3ca38d4cc",
      "parents": [
        "46bf665ea3687f06069ebd1a0acd01ed7b5ac9cb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 19 06:24:46 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 19 06:31:30 2010 -0700"
      },
      "message": "Fixed problems in audio effect volume control.\n\nFixed the following problems in audio effect volume control in AudioFlinger:\n- Make sure that the volumes returned by EffectChain::setVolume_l() are correct even is\nno change is detected since last call\n- Do not use isEnabled() to validate volume control but mState \u003e\u003d ACTIVE instead as the volume control\nmust be also active in STOPPING and STOPPED states.\n\nChange-Id: Id62da3164fad500ee8a5efd6cd78c77e8fdcb541\n"
    },
    {
      "commit": "cab112421da6e8eac19ffddbbe3d76067cffee78",
      "tree": "c2e8bb3057c5de25454eae1286ff0868933680aa",
      "parents": [
        "5462fc9a38fa8c9dff434cd53fa5fb1782ae3042"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 15 12:50:15 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 15 12:50:15 2010 -0700"
      },
      "message": "Several improvements in audio effects volume control.\n\n- Fixed crash when deleting an effect chained before an effect having volume control\n- Changed EFFECT_FLAG_VOLUME_CTRL to implicitely include EFFECT_FLAG_VOLUME_IND\n(not need to set both in effect descriptor).\n- Volume control changes from one effect to another if needed according to effect enable state\n- EFFECT_CMD_SET_VOLUME is only sent when their is an actual change in volume\n\nChange-Id: Ieebaf09157e2627366023569d95516646e03e26c\n"
    },
    {
      "commit": "5462fc9a38fa8c9dff434cd53fa5fb1782ae3042",
      "tree": "76ee9bdf73fb2460d074025ed451e56f8ec34a11",
      "parents": [
        "65ab47156e1c7dfcd8cc4266253a5ff30219e7f0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 14 18:41:18 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 14 18:43:19 2010 -0700"
      },
      "message": "added BinderService\u003c\u003e template to help creating native binder services\n\nChange-Id: Id980899d2647b56479f8a27c89eaa949f9209dfe\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"
    }
  ]
}
