)]}'
{
  "log": [
    {
      "commit": "395b6a127b962fe7a0c1f4fa85487e8c3645cc8f",
      "tree": "252e3cdf40c32578789aa14476e77652b3c4afb7",
      "parents": [
        "a7108232dc22a4562adbcc7aedc0c00c21a9b175"
      ],
      "author": {
        "name": "Vivek Singh",
        "email": "vising@codeaurora.org",
        "time": "Fri Jul 05 11:59:38 2013 +0530"
      },
      "committer": {
        "name": "Ricardo Cerqueira",
        "email": "cyanogenmod@cerqueira.org",
        "time": "Sun Nov 03 02:53:38 2013 +0000"
      },
      "message": "audioflinger: Fix for removing noise while resuming playback after pause\n\n-Issue: While resuming playback after pausing and seeking to backward,\nthere is a noise.\n-Rootcause: When Resuming a Playback after Pausing and seeking,\nAudioResampler\u0027s reset() function is resetting their member\nvariables but derived classes\u0027 s member variable are not resetting.\nThis is causing a noise in Playback because AudioResamplerSinc,\nAudioResamplerOrder1 and AudioResamplerCubic\u0027s member variables\npointing to some previous state/values.\n-Fix: To reset the derived class member variables,\noverride the reset function in all the derived classes.\n\nChange-Id: I0584947ac203f9470cdc4a680ebccadf60e4e7db\nCRs-Fixed: 482838\n"
    },
    {
      "commit": "6d327d5ebc530ce90d84331f5d8ee087a3f9d6c6",
      "tree": "6e16ed1034b475c115685385d696d3c59eadd94f",
      "parents": [
        "b589eadfdf8ea21fe50968946adc9a9939564586"
      ],
      "author": {
        "name": "Emerson Pinter",
        "email": "dev@pinter.com.br",
        "time": "Sun Jul 28 19:34:16 2013 -0300"
      },
      "committer": {
        "name": "Ricardo Cerqueira",
        "email": "cyanogenmod@cerqueira.org",
        "time": "Sun Nov 03 02:47:14 2013 +0000"
      },
      "message": "More ifdefs for ICS audio blobs support\n\nChange-Id: I1e01db9b7cb2da45a3e52aafe7574b689a9c57f4\n"
    },
    {
      "commit": "0d44b5b2acbdc2579509da9ff4d63afb837943fc",
      "tree": "e352596e95e8c98bf3f42631ed3afdbb0326229d",
      "parents": [
        "89ad23a2d0ebc317e62ffb87e048469b1df3d69e"
      ],
      "author": {
        "name": "Ricardo Cerqueira",
        "email": "cyanogenmod@cerqueira.org",
        "time": "Sun Nov 03 02:46:27 2013 +0000"
      },
      "committer": {
        "name": "Ricardo Cerqueira",
        "email": "cyanogenmod@cerqueira.org",
        "time": "Sun Nov 03 02:46:27 2013 +0000"
      },
      "message": "Add support for ICS audio blobs\n\nEnable with the ICS_AUDIO_BLOB CFLAG\n\nChange-Id: Ie174d5997202b8931c1f11db62b6ec2e377f096a\n\nConflicts:\n\tservices/audioflinger/AudioFlinger.cpp\n"
    },
    {
      "commit": "2b3c797bcf833857694ca6ca3340da59554b4d45",
      "tree": "28a1cc9a89d305b1f93e8b20f60d895ec45eaf4c",
      "parents": [
        "6b8f36a3c4ae8a9112b15f1505454f8810be8eee"
      ],
      "author": {
        "name": "Ricardo Cerqueira",
        "email": "cyanogenmod@cerqueira.org",
        "time": "Thu Jan 10 23:53:09 2013 +0000"
      },
      "committer": {
        "name": "Ricardo Cerqueira",
        "email": "cyanogenmod@cerqueira.org",
        "time": "Sun Nov 03 02:45:25 2013 +0000"
      },
      "message": "audioflinger: Allow mixed use of JB A2DP HALs and ICS policy\n\nOld policies don\u0027t address the modules by handle and expect them\nall to be scanned for supported devices; new modules stopped\nlisting supported devices. The combination of a new A2DP with\nan old policy left policy unable to find A2DP outputs, so the\nnew HALs couldn\u0027t be used.\n\nSo... if an old policy is in use, searching for an A2DP output,\nand finds a non-primary HAL that doesn\u0027t list any device, assume\nit\u0027s A2DP and use it.\n\nChange-Id: Ie946c065b5c325afd02ba3437077f634e079b386\n"
    },
    {
      "commit": "a6f2c7b1ac67075197ccbaba61e5e23277aab5f7",
      "tree": "f872e4b7570cf2f431cca474e47d9d10c6cbed66",
      "parents": [
        "6a99d2058d0e5afed3643367166abee6b978209f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 18 13:00:29 2013 -0700"
      },
      "committer": {
        "name": "The Android Automerger",
        "email": "android-build@google.com",
        "time": "Sun Oct 20 12:32:53 2013 -0700"
      },
      "message": "Allow releaseBuffer after flush\n\nAfter AudioTrack start checks for pending flush,\nallow releaseBuffer on any previously obtained buffer.\nFor example, this can happen if the resampler has obtained\na buffer but not released the whole buffer yet.\nNote that the resampler will be reading obsolete data.\n\nBug: 11285590\nChange-Id: I0614fbb62e43604aac3089cce4b7797c87a306b5\n"
    },
    {
      "commit": "6a99d2058d0e5afed3643367166abee6b978209f",
      "tree": "95746546a67c27a04a0e5bd82f9760d80ad5f0d9",
      "parents": [
        "e3a7ca2e823c3d9bb1cecc6fe6a597a11fdd1129"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 17 18:59:26 2013 -0700"
      },
      "committer": {
        "name": "The Android Automerger",
        "email": "android-build@google.com",
        "time": "Fri Oct 18 14:48:42 2013 -0700"
      },
      "message": "audioflinger: fix track terminated before playing\n\nWhen a track is terminated before any audio was written,\nwe should not send a drain request to the HAL. The drain\nwill be ignored and we will wait the async callback for ever.\n\nAlso fix a potential deadlock by not deleting a track with the\nthread mutex held: mPreviousTrack changed from a sp to a raw pointer.\n\nBug: 11247103.\nChange-Id: I0a4b47b099204c7c326d45d700234ab8f72d8eae\n"
    },
    {
      "commit": "4ce5dd9c2cb8b149a3423d941c6fb0fcefede7ac",
      "tree": "ba799e32b0699249e7fb8e6f5d6fa4120b978d67",
      "parents": [
        "f8f15b05fe051009945c9042a1a9260280e0feb2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 17 11:32:39 2013 -0700"
      },
      "committer": {
        "name": "The Android Automerger",
        "email": "android-build@google.com",
        "time": "Thu Oct 17 16:39:58 2013 -0700"
      },
      "message": "Fix flush() followed by start()\n\nBug: 11259166\nChange-Id: I72526cdfd4e3ff4b06e6a317e577f57cc285205d\n"
    },
    {
      "commit": "014e7fa2e90827d911c37bb0ce4d2e10e14d0bb3",
      "tree": "1eebc29942794f1688fde67b9056803b8194355a",
      "parents": [
        "b3cb72a17d9a472883e9e2faa18b42eac533fe99"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Oct 14 15:03:38 2013 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Oct 14 17:29:57 2013 +0100"
      },
      "message": "Make Audio wakelock names less unique.\n\nThese wakelocks now show up in the client process, where they\nmight cause wakelock overflows if AudioFlinger threads die often.\n\nThe client process should be agnostic of audio flinger threading,\nso don\u0027t make the wakelock names rely on audioflinger thread names.\n\nWakelock names now depend only on the audio flinger thread type, and\nnot the ID itself.\n\nbug: 11200551\n\nChange-Id: Ia1f71b569cb7502d617b77596abc245f461a6ec0\n"
    },
    {
      "commit": "fee4ce338d78eeb58af1f66831ead53322d3859e",
      "tree": "f90931a7c5c4628b0e8e47976d68a9d586802b53",
      "parents": [
        "ea0fadeb5d81ef3cb7f9db458c9033d628bdb86a",
        "e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 07 16:16:06 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 07 16:16:06 2013 +0000"
      },
      "message": "Merge \"Cleanup openRecord error handling\" into klp-dev"
    },
    {
      "commit": "ea0fadeb5d81ef3cb7f9db458c9033d628bdb86a",
      "tree": "1650f71cf339cd9d561377e239e2a12f7b08cffc",
      "parents": [
        "026c5b07fefd36e0e2dd7035c2898d0e28596d0f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 04 16:23:48 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 04 16:37:07 2013 -0700"
      },
      "message": "audioflinger: offload: fix pause/flush/resume\n\nIf a pause/flush/resume sequence is fast enough, resume is received while\nwe are still in PAUSING state in which case it is a NOP. If this happens,\nflush is still forwarded to the audio HAL but is not preceeded by a pause\nwhich can cause problems to the audio DSP.\nIt is necessary to preserve the flush as this sequence is typical to a seek.\n\nThe fix consists in forcing a pause/resume when a flush request must be\nexecuted and the audio HAL has not been paused previously.\n\nBug: 11081559.\nChange-Id: Ib84ed26d503a61c05933b923ec556b10cedfe140\n"
    },
    {
      "commit": "547789d25dc6bd6561553bcf6b384fb0d4fee834",
      "tree": "767ae4b24b4fc71cc547cfa16898f5299d26a6cc",
      "parents": [
        "7bab024867996bec6dc4e3e31ed4570da9afbc25"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 04 11:46:55 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 04 11:46:55 2013 -0700"
      },
      "message": "audioflinger: fix wake lock acquisition check\n\nCommit e14a5d6 introduced a bug in ThreadBase::acquireWakeLock() where\nthe wake lock acquisition return code is not initialized before\nbeing checked causing the wake lock token to be sometines not set\nand potential failure to release the wake lock later.\n\nBug: 10985160.\nChange-Id: Iffd40e773ae3bcfec3c148a844d5dbebbf474eaf\n"
    },
    {
      "commit": "8097068de97c0cdab8150931f290edbd5b3721e5",
      "tree": "953f68c84ab80ca4f899e88081768d81dd31c93e",
      "parents": [
        "580ed263a6ea6c766f9f715e101340c7fe26ab75",
        "e14a5d6d2cc91dd2fc09ffdf7aa670b37da0795d"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 03 21:15:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 03 21:15:05 2013 +0000"
      },
      "message": "Merge \"Better recording wake lock accounting\" into klp-dev"
    },
    {
      "commit": "e14a5d6d2cc91dd2fc09ffdf7aa670b37da0795d",
      "tree": "ab8d3ea087c653c632068af36e443c5c3609cfe4",
      "parents": [
        "3d97e23fcd78f752443cb6c30a1ee39f49f1f987"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 03 08:51:24 2013 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Oct 03 13:54:53 2013 -0700"
      },
      "message": "Better recording wake lock accounting\n\nCount wake lock use against the app that initiated the recording,\nnot against the media server.\n\nb/10985160\n\nChange-Id: Iae6e6c030b7f1c6081d9c79725d6990f60dadaaa\n"
    },
    {
      "commit": "59fe010bcc072597852454a2ec53d7b0a2002a3b",
      "tree": "b6b42e04a89ead77c9ecd9635a328686a8bb9863",
      "parents": [
        "5d6d86a4d102704f49b9235eaf282c428d7100b6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 27 18:48:26 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 30 12:05:38 2013 -0700"
      },
      "message": "fix volume and effect enable delay on offloaded tracks\n\nVolume: add a method to wake up the mediaserver playback\nthread when a volume command is received on an offloaded track.\n\nEffects: call effect chain process on offloaded playback threads\nasynchronously from writes to allow effect state updates while\nwaiting for async write callback.\n\nBug: 10796540.\n\nChange-Id: Id2747ae88783575d1d7ffd6fc86fbd054ab2c739\n"
    },
    {
      "commit": "a2340b3059b9d6e4286d0db7069df477c164df0c",
      "tree": "4e14bcf9309bda5e444479b0e45a0c24c3e98a54",
      "parents": [
        "0adc67dfc5cedb211c36f06849681a60a32f5805",
        "fed6292af65a0b97b583ecbd3c232b3811a3f37b"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 27 00:50:59 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 27 00:50:59 2013 +0000"
      },
      "message": "Merge \"Don\u0027t call audio effect process on offloaded playback threads\" into klp-dev"
    },
    {
      "commit": "4de95592980dba88a35b3dc8f3fd045588387a4f",
      "tree": "e871e1ad9318cdd21fe82eb6f44f687f366d1c60",
      "parents": [
        "1802399c7c4d8557922688f246df292703f417f1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 26 15:28:21 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 26 15:56:43 2013 -0700"
      },
      "message": "audioflinger: fix crash when starting offload thread\n\nPassing a sp to parent thread to AsyncCallbackThread() constructor\ncauses a strong reference to be acquired on the OffloadThread inside\nits constructor which causes an early launch of the thread loop\nwith unpredictable consequences.\n\nPass a wp to parent thread instead.\n\nAlso move the creation of the AsyncCallbackThread to\nreadOutputParameters() where mUseAsyncWrite is initialized which\nmakes more sense.\n\nAlso change the type of AsyncCallbackThread parent thread to PlaybackThread\ninstead of OffloadThread to allow a broder use of non blocking write which\nin theory is not limited to audio offload use case.\n\nBug: 8174034.\nChange-Id: I4b093b022030cd4f5eb8b8e477333e91098a6549\n"
    },
    {
      "commit": "fed6292af65a0b97b583ecbd3c232b3811a3f37b",
      "tree": "24d1dc7750659a108dd48ec46ba89a9a49bd019d",
      "parents": [
        "d2ac3144e201398340cc5b9bb36e5efe39edd9eb"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Sep 25 18:50:33 2013 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Sep 26 11:43:58 2013 -0700"
      },
      "message": "Don\u0027t call audio effect process on offloaded playback threads\n\nAn audio effect process command is not meant to be called for\n playback threads belonging to offloaded playback.\n\nBug 10933817\n\nChange-Id: Idc7b6a0224791bbf8d61648474d3c288617c498f\n"
    },
    {
      "commit": "eb3c337a3d6c74ec857dfc8be7eeafe634614bcd",
      "tree": "7ade01c31e70ffeadf88fc60b2144faa47f9c49f",
      "parents": [
        "d2ac3144e201398340cc5b9bb36e5efe39edd9eb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 25 12:25:29 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 25 12:44:00 2013 -0700"
      },
      "message": "fix deadlock in audioflinger::createEffect()\n\ncommit 5baf2af5 introduced a regression by calling\ngetOutputForEffect() with AudioFLinger main mutex locked.\nThe locking order must always be AudioPolicyService mutex then\nAudioFlinger then ThreadBase mutex.\n\nBug: 10916796.\nChange-Id: Ide34a2d84dbb06dbb35abd0640d91b01b0ac4d40\n"
    },
    {
      "commit": "e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f",
      "tree": "4de6f04ad4abc14bb0e777bcb02863196c59e34b",
      "parents": [
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 11:52:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 24 12:12:47 2013 -0700"
      },
      "message": "Cleanup openRecord error handling\n\nBug: 10888816\nChange-Id: I84897dd7d30b370640b54e928f230604b873cb68\n"
    },
    {
      "commit": "664539d25180ab8f77e0521533ea2821cf28985f",
      "tree": "19b1c2a62d44ac7199249825aec131c70f6801ca",
      "parents": [
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 18:24:31 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 18:33:25 2013 -0700"
      },
      "message": "audioflinger: fix ro.audio.silent in offload again\n\nCommit 1abbdb4 was not working 100% of the times because\nit is possible that the offload thread loop never sleeps\nafter being created in which case the property is never read.\n\nThe loop now reads the property once when starting.\n\nBug: 10899309.\nChange-Id: I2e2ca332f2d7086e59d65f6010378c4d9618ba9e\n"
    },
    {
      "commit": "21e5456821e3c107d09b0629adbf23c9e06e7c0b",
      "tree": "c2eef1ee9d591a96e88922b5061a861d8596c802",
      "parents": [
        "4b701cc041d635e5ec56e382043a4c5d01aedd80"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 12:08:05 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 23 12:38:11 2013 -0700"
      },
      "message": "fix incoming call audio start time.\n\ncommit cec4abb fixing issue 6720482 had a flaw that\nwould insert commmands at the wrong position in the\naudio policy service command thread queue causing other\ncommands to be delayed more than expected.\n\nA change in track stop timing introduced by commit bfb1b83\nmade this issue visible when answering a call.\n\nBug: 10860012.\nChange-Id: Iec769112f14e13d13b64628b808e43663e33771c\n"
    },
    {
      "commit": "a3b97ad288e6808c54c6275eaac1bd53108d8f11",
      "tree": "eb4ee28ecd01cf4a4548004e8a2d9154ce0f2c73",
      "parents": [
        "fbb2609f132f23a983d376dec9ae6bfebfcacc4c",
        "accc147666bfd37fc8b4ef745f18a8c751555ec2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 16:56:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 20 16:56:34 2013 +0000"
      },
      "message": "Merge \"audioflinger: implement getTimestamp() for offloaded tracks\" into klp-dev"
    },
    {
      "commit": "accc147666bfd37fc8b4ef745f18a8c751555ec2",
      "tree": "a091aa566ed09e8efe881a16e3806ee4169de3f0",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 09:36:34 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 09:36:34 2013 -0700"
      },
      "message": "audioflinger: implement getTimestamp() for offloaded tracks\n\nBug: 9587132.\nChange-Id: Ie9d5f4cca96306d08bc9a2dbd6edd8953096702d\n"
    },
    {
      "commit": "fbb2609f132f23a983d376dec9ae6bfebfcacc4c",
      "tree": "df445957b7af9020660a3e4ee927807578dac685",
      "parents": [
        "cfca686ae8e64bda44a370232f3ba367e6e520d1",
        "ede6c3b8b1147bc425f7b923882f559a513fe23b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 20 00:48:39 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 20 00:48:39 2013 +0000"
      },
      "message": "Merge \"audioflinger: fix lost offload thread resume event\" into klp-dev"
    },
    {
      "commit": "ede6c3b8b1147bc425f7b923882f559a513fe23b",
      "tree": "ac3986f0521aa4a5af705299ab423ec9d5e98bfa",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 19 14:37:46 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 19 15:53:20 2013 -0700"
      },
      "message": "audioflinger: fix lost offload thread resume event\n\nIt was possible that a resume request signaled by addTrack_l()\nwhile waiting for an async write callback is lost. This is because\nmSignalPending was not set and waitingAsyncCallback_l() would pause the\nthread loop before executing prepareTracks_l().\n\nThe fix consists in using signal_l() method to wake the thread\nloop o that mSignalPending is set.\n\nAlso make sure that sleepTime is reset to 0 when resuming to make sure\nthat we write any remaining bytes to the HAL.\n\nBug: 10810347.\n\nChange-Id: If9a3b22cc3b9e6eb384a56c48c40e6258d0896ad\n"
    },
    {
      "commit": "d1b28d41dbda203ffb420ba2e36cbe736b163ff8",
      "tree": "8515326721a76081b458cce1329e13b7252d2fbe",
      "parents": [
        "5baf2af52cd186633b7173196c1e4a4cd3435f22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 18 18:47:13 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 18 19:00:22 2013 -0700"
      },
      "message": "audioflniger: fix leaked audiosession references\n\nacquireAudioSessionId() should not create session references\nif the caller is not listed in the known notification clients.\nIt happens when the MediaPlayer or AudioTrack is created by the\nmediaserver on behalf of a client (e.g CameraService). In this case\nreleaseAudioSessionId() can be called from a different pid and\nthe session reference will not be removed.\nAlso we will not be able to remove the reference if the client\nprocess dies.\n\nBug: 10606426.\nChange-Id: Ibb5e27518daeb484a2e66302e4c6221cbaca5b70\n"
    },
    {
      "commit": "5baf2af52cd186633b7173196c1e4a4cd3435f22",
      "tree": "9c6752456812c4a927574a71e1d2ec2495ff6ce3",
      "parents": [
        "9a98b6de791aeb130192df10744f5b35f8b6ef1a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 12 17:37:00 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 18 11:52:40 2013 -0700"
      },
      "message": "more support for audio effect offload\n\nOffloading of audio effects is now enabled for offloaded\noutput threads. If an effect not supporting offload is enabled,\nthe AudioTrack is invalidated so that it can be recreated in PCM\nmode.\n\nFix some issues in effect proxy related to handling of effect\ncommands to offloaded and non offloaded effects.\n\nAlso fixed a bug on capture index in software Visualizer effect.\n\nBug: 8174034.\n\nChange-Id: Ib23d3c2d5a652361b0aaec7faee09102f2b18fce\n"
    },
    {
      "commit": "7f91e5e09cf3bd8068894b2e54cbdaac70bf53a0",
      "tree": "d780b615c9e2ea42c5449ebfeb870b3c7bee7eb9",
      "parents": [
        "d4dadf23dd2dd8acd514d60d84475954070340b8",
        "1abbdb4429479975718421c4fef3f79ce7c820e3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Sep 14 00:07:28 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Sep 14 00:07:29 2013 +0000"
      },
      "message": "Merge \"audioflinger: fix ro.audio.silent in offload mode\" into klp-dev"
    },
    {
      "commit": "1abbdb4429479975718421c4fef3f79ce7c820e3",
      "tree": "ac73fe0a2f36b66d9c33f22dd09ac76730beefce",
      "parents": [
        "99bf6267f0a4e2c3153be49ced59ae164d55ea6d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 13 17:00:08 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 13 17:00:08 2013 -0700"
      },
      "message": "audioflinger: fix ro.audio.silent in offload mode\n\nChange-Id: I5a1a79000d53146689b0a198cc5419c36509703f\n"
    },
    {
      "commit": "972a173d7d1de1a3b5a617aae3e2abb6e05ae02d",
      "tree": "f506c9ef80a8a31bfd58a254617fdecb26dbbcf5",
      "parents": [
        "99bf6267f0a4e2c3153be49ced59ae164d55ea6d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 04 09:42:59 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 13 12:14:07 2013 -0700"
      },
      "message": "audioflinger: longer offload thread standby delay\n\n- Increase offloaded output thread standby delay to 1 second\nto allow transition between tracks with going to stanby\nif reusing the same audio track (gapless)\n\n- Make sure pause/flush/resume sequence is sent to the HAL\nin the right order\n\n- Fix format display in track dump\n\nBug: 8174034.\nChange-Id: I43ef6f8fdbf7427e4eff6cc2d0665d7d1463ea8a\n"
    },
    {
      "commit": "dc33c542351449ceee95cc50a9009f495e7c72ba",
      "tree": "0f44c9770a45605876de1e051801bee5781a56ad",
      "parents": [
        "efc4d4899e03fb8464017dd48539106cec2163de",
        "0c72b24f91c68442eb374bd1b338c394105b8262"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Sep 12 15:13:44 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 12 15:13:45 2013 +0000"
      },
      "message": "Merge \"Fix AudioTrack shared memory leak\" into klp-dev"
    },
    {
      "commit": "efc4d4899e03fb8464017dd48539106cec2163de",
      "tree": "40e6503137bc0720b515c05b2d39771d1d25c7c7",
      "parents": [
        "a911f51c21430ac92f1d796b2338878fd98382e9",
        "9a54bc27876acd5d8be5b1fc3dc46701fe76fbb3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 12 00:15:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 12 00:15:15 2013 +0000"
      },
      "message": "Merge \"audioflinger: add HOTWORD audio source.\" into klp-dev"
    },
    {
      "commit": "0c72b24f91c68442eb374bd1b338c394105b8262",
      "tree": "d5b7396b593f2157fead8f0c5c41d45c1c236009",
      "parents": [
        "6220f993541b0317e6ace3c410dd35a8d76e30bc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 11 09:14:16 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Sep 11 12:47:29 2013 -0700"
      },
      "message": "Fix AudioTrack shared memory leak\n\nBug: 2801375\nChange-Id: I50e15164fe310f69ea019dca5b49171a02bc6992\n"
    },
    {
      "commit": "9a54bc27876acd5d8be5b1fc3dc46701fe76fbb3",
      "tree": "15f25097fc7fc2548d41a29c94c22710472f01ca",
      "parents": [
        "84b7fb0c88ddd05ed7c148c82fe1691040a9404d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 09 09:08:44 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 10 14:39:28 2013 -0700"
      },
      "message": "audioflinger: add HOTWORD audio source.\n\nHOTWORD is a special capture audio source that uses\nthe same audio tuning as VOICE_RECOGNITION but allows an\nactive capture to be preempted.\n\nBug: 10640877.\n\nChange-Id: Iea09a11cbcdbacc8d434e5230e7559dcd1b44ac0\n"
    },
    {
      "commit": "813e2a74853bde19e37d878c596a044b3f299efc",
      "tree": "b95aa8b59f49b4348b2112047ee80e572637d706",
      "parents": [
        "84b7fb0c88ddd05ed7c148c82fe1691040a9404d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Aug 31 12:59:48 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 09 09:09:21 2013 -0700"
      },
      "message": "audioflinger: no effects on offloaded tracks\n\nInvalidate offloaded tracks when an effect is enabled\nso that the track is recreated in PCM mode and the effect\ncan be applied.\nThis is temporary until effect offloading is implemented.\n\nBug: 8174034.\n\nChange-Id: I77b8b54a10db6cb8334be76d863ea7e720eaad09\n"
    },
    {
      "commit": "3b4529e03c5fc7a44c22f9091ad15a269bfca3a8",
      "tree": "552d810348dc2ffd6018e58970a4cbbb39eceb5e",
      "parents": [
        "60c60df7db278d2fa5c90b0fa14f99a61d50272b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 05 18:09:19 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 06 18:09:03 2013 +0000"
      },
      "message": "audioflinger: remove async write race conditions\n\nRemove possible race conditions between async callback\nthread and offload thread when clearing and setting the\ndraining and write blocked flags.\n\nBug: 8174034.\nChange-Id: I7af10491f39dc0e7d7414862a9d8e763daa2e2b7\n"
    },
    {
      "commit": "fe346c707f59d763ded93bc3d27b51f0c0408258",
      "tree": "3e6f12ac7b37bc8ef10845c4c7ccdcfef4b51cd5",
      "parents": [
        "4d0815d694e5a2edb3ce48427de50f55d0f84c0b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 30 13:28:22 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 15:19:03 2013 -0700"
      },
      "message": "Fix miscellanous AudioTrack::getTimestamp() bugs\n\nCheck that get_presentation_position is non-NULL before calling.\n\nAudioTrack::getTimestamp not implemented for fast tracks.\n\nFix typo in Track::getTimestamp().\n\nFix bugs in AudioTrack::getTimestamp after stop:\n - getTimestamp while stopped is not allowed.\n - stop, start, getTimestamp now returns the correct value.\n\nChange-Id: Ie8d9dc1f28d8927634e04175a68b147ffc2ea8eb\n"
    },
    {
      "commit": "732845c7e8d294bb1aaa4cd9687da62b51f1f6e6",
      "tree": "775ccbda50c8bb2403af5cb52b8891a6130ded5d",
      "parents": [
        "6466c9e6e6278c740aed77f695f679be9f5db478"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 09:26:31 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 15:12:20 2013 -0700"
      },
      "message": "FastMixer computes presentation timestamps for fast tracks\n\nand forwards them to each track\u0027s ExtendedAudioBufferProvider::onTimestamp().\n\nChange-Id: I06fb9586bb7e20d5c0289abdc8cac6cd3fd2f6e8\n"
    },
    {
      "commit": "6466c9e6e6278c740aed77f695f679be9f5db478",
      "tree": "cd987ec819ddecba0665cd692285069c083fb19b",
      "parents": [
        "894d6be4f9b4721c77a01919ecf03b27cec90cc9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 10:54:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 15:12:11 2013 -0700"
      },
      "message": "Add ExtendedAudioBufferProvider::framesReleased and onTimestamp\n\nand implement them in SourceAudioBufferProvider using the associated NBAIO_Source,\nand in Track using the associated AudioTrackServerProxy.\n\nChange-Id: I60dc4adba63fc1dc452ff16caf347e4a7c8242c2\n"
    },
    {
      "commit": "767094dd98b01baf21de2ad09c27b3c98776cf73",
      "tree": "57b1a9c3b3d794bac2e1922b314046f02df18e7e",
      "parents": [
        "e45a767e13fe3396185c9d378a70f7f11eb881d0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 13:51:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 11:24:02 2013 -0700"
      },
      "message": "Add NBAIO_Sink::getTimestamp()\n\nwith a real implementation in AudioStreamOutSink\nfor dummy implementation initially in MonoPipe.\n\nUse in AudioFlinger::PlaybackThread::threadLoop_write()\nto keep the input to the timestamp latch up-to-date.\n\nChange-Id: I10ef277991b63bb43d55d6f3df75116ef32246cd\n"
    },
    {
      "commit": "6bf9ae20b3bd2dbb8f2e89ee167a6785222301cf",
      "tree": "4075a75b4c805011df36d78b015edf6180d649df",
      "parents": [
        "d656a4be3c3b6bc249b06599c2b02c2863d2c47f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 30 15:12:37 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 30 15:12:37 2013 -0700"
      },
      "message": "audioflinger: offloaded tracks flush/pause order\n\nMake sure that a flush received after a pause is forwarded\nto the HAL after the pause.\n\nChange-Id: Ib3221f70c59f8b3dbbac20b23104f6b779b75be0\n"
    },
    {
      "commit": "bd096fd9d8e5fc0e62f98807f4818a06f70d0812",
      "tree": "8ff27bce9f34e4bdd0f8e233494a24efef475a7d",
      "parents": [
        "573d80a8f463f648a515fc0975bf83951b272993"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 13:53:56 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:59:31 2013 -0700"
      },
      "message": "Implement Track::getTimestamp()\n\nusing a new timestamp latch in PlaybackThread, and\nAudioTrackServerProxy::framesReleased() which returns mServer.\n\nChange-Id: I1ebfba968c773faaab95648c272fd3ebd74718d6\n"
    },
    {
      "commit": "573d80a8f463f648a515fc0975bf83951b272993",
      "tree": "c50d730bd7bd113a0f86c091730f9b861354f395",
      "parents": [
        "53cec22821072719ee02c856e9ac2dda2496c570"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 26 09:36:23 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:24:28 2013 -0700"
      },
      "message": "Add AudioFlinger::PlaybackThread::Track::getTimestamp()\n\nwith a dummy implementation initially,\nand use it in AudioFlinger::TrackHandle::getTimestamp()\n\nChange-Id: I2da88fc52a135a7f0d9fd9538986e919dc8ccd3b\n"
    },
    {
      "commit": "53cec22821072719ee02c856e9ac2dda2496c570",
      "tree": "1ac72eaf3ba6059680f8c3d7e39ae58a9e03adc8",
      "parents": [
        "ce70374bf105f8a6160bf5dd70affea012b2a464"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:01:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:19:07 2013 -0700"
      },
      "message": "Add IAudioTrack::getTimestamp()\n\nwith dummy implementation in AudioFlinger::TrackHandle, and\nimplement AudioTrack::getTimestamp() using IAudioTrack.\n\nAlso document invariant that mAudioTrack and control block are always\nnon-0 after successful initialization.\n\nChange-Id: I9861d1454cff7decf795d5d5898ac7999a9f3b7e\n"
    },
    {
      "commit": "893a5642871114fca3b2a00c6ff8e5699ce3e3ed",
      "tree": "d34721dfd133e8a79a4ff32ee8e8d2d83ef24031",
      "parents": [
        "7fb865653293e665f48b31e791ca124e98c7d257"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 16 20:19:26 2013 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 16 20:21:07 2013 -0700"
      },
      "message": "Enforce permission for recording from remote submix.\n\nBug: 10265163\nChange-Id: I2395036bac6e10baeaf6ea4bc3093bd9dd98742d\n"
    },
    {
      "commit": "90e58b1fefc8caf70b34301a92bc86179580b6fc",
      "tree": "c3413197c464b11a3ea8ca846443cc7b15326582",
      "parents": [
        "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:16:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordThread::createRecordTrack_l use flags for fast tracks\n\nLook at client\u0027s request for a fast track in the flags parameter,\nand check whether the request can be satisfied.\n\nChange-Id: I65ddaeb1b85670fe9066076f638bfed0cda01c0d\n"
    },
    {
      "commit": "ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2",
      "tree": "a467af6f181bff45e8c1e47284ebbc4d6d3ccead",
      "parents": [
        "eeca32671896739e84050da5992d5f151a1629de"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:14:50 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "RecordTrack::createRecordTrack_l flags are in/out\n\nThe flags are currently unused, but will be used for requesting a fast\ntrack.  Making flags in/out will allow reporting back up to client that\nthe request is denied.\n\nChange-Id: Ifbee57da3632ce130551065a426577fb97b1a68d\n"
    },
    {
      "commit": "eeca32671896739e84050da5992d5f151a1629de",
      "tree": "d611c0a426354e80345956c945e9381e6137209b",
      "parents": [
        "27f7b2a8fe899565487d8a326676a5f7d0a05a37"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 16:12:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:22:42 2013 -0700"
      },
      "message": "IAudioFlinger::openRecord track_flags_t flags is in/out\n\nThis will allow AudioFlinger to tell client it is denying a request.\n\nChange-Id: Iff2be3ad6636371bbda9c9899a283c94620c1f06\n"
    },
    {
      "commit": "f36dbfe3d517e9311be0a4d0fd6658380690e84c",
      "tree": "65768073d7fd288eac6c28f1283589d65fe0cbad",
      "parents": [
        "1a3739169becc850999c3c06db402541119a428c",
        "82aaf94a5b18939e4d790bbc752031f3070704a3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:14:01 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 02 16:14:01 2013 +0000"
      },
      "message": "Merge \"Report underruns for fast tracks also\""
    },
    {
      "commit": "1a3739169becc850999c3c06db402541119a428c",
      "tree": "84762cba8a976b67dca741e8cad5adb2486f0c71",
      "parents": [
        "c5f8c3e5502f3c220fdbb54573608f3b3bd47517",
        "6d4d879037a495f9a4276a6996d1845594ce9090"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Aug 01 12:47:14 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 01 12:47:14 2013 -0700"
      },
      "message": "am 6d4d8790: am b687ff9f: Merge \"Fix mismatched delete/new couple\"\n\n* commit \u00276d4d879037a495f9a4276a6996d1845594ce9090\u0027:\n  Fix mismatched delete/new couple\n"
    },
    {
      "commit": "82aaf94a5b18939e4d790bbc752031f3070704a3",
      "tree": "4e39e32d0ccde726548afcbd81e253d5e316b295",
      "parents": [
        "b08ab81bab9e8cd2e3a7fff02725a387070fd078"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:05:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 09:15:00 2013 -0700"
      },
      "message": "Report underruns for fast tracks also\n\nThis fixes a regression that was introduced earlier\nby commit 9f80dd223d83d9bb9077fb6baee056cee4eaf7e5\ncalled \"New control block for AudioTrack and AudioRecord\".\nThat commit broke underrun reporting for fast tracks.\n\nAlso remove Track::mUnderrunCount, which counted the number of underrun\nevents, and was only used by dumpsys media.audio_flinger.\n\nNow dumpsys media.audio_flinger reports the number of underrun frames,\n\nIsolated underrun-related control block accesses via the proxy, so that\nthe server is not directly poking around in the control block.\n\nThe new proxy APIs are AudioTrackServerProxy::getUnderrunFrames() and\nAudioTrackServerProxy::tallyUnderrunFrames().  getUnderrunFrames() returns\na rolling counter for streaming tracks, or zero for static buffer tracks\nwhich never underrun, but do a kind of \u0027pause\u0027 at end of buffer.\ntallyUnderrunFrames() increments the counter by a specified number of frames.\n\nChange-Id: Ib31fd73eb17cbb23888ce3af8ff29f471f5bd5a2\n"
    },
    {
      "commit": "b08ab81bab9e8cd2e3a7fff02725a387070fd078",
      "tree": "ca39f5da6fd5d654a71472143ee4718855f576d6",
      "parents": [
        "4d74828fc0f6c13d49a36147a4250bcfa8ad0a47",
        "34af02647b387a252fb02bab8e2cb9f7bd9c8abb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 22:40:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 22:40:16 2013 +0000"
      },
      "message": "Merge \"Add resampler comments and fix a typo\""
    },
    {
      "commit": "34af02647b387a252fb02bab8e2cb9f7bd9c8abb",
      "tree": "2e2e6f24d984884746c91704fb054e00e38e5ff0",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 11:52:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 12:01:03 2013 -0700"
      },
      "message": "Add resampler comments and fix a typo\n\nChange-Id: Ie071673875f663de4212eed4a4dff89d51a5a915\n"
    },
    {
      "commit": "d054c32443a493513ab63529b0c8b1aca290278c",
      "tree": "fc68ba259ded1dd4960bee2938a9bcc7c599c9a3",
      "parents": [
        "96f60d8f04432a1ed503b3e24d5736d28c63c9a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 12:59:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:50:48 2013 -0700"
      },
      "message": "Move control block mName to createTrack() output\n\nThis is part of a series of CLs to clean up the shared memory\ncontrol block, by removing any fields that don\u0027t have to be there.\n\nChange-Id: I6e51003a1293b6800258c31b22cff2eba42162e7\n"
    },
    {
      "commit": "96f60d8f04432a1ed503b3e24d5736d28c63c9a2",
      "tree": "083f6224327e0965a925076b3e1aec5636598203",
      "parents": [
        "97252bb0e40a5a9b41f020163393cf6c5da10b7e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 10:21:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:40:17 2013 -0700"
      },
      "message": "Rename control block flags to mFlags\n\nChange-Id: I7b6d31e24531954ab1ecdf3ed56c19433700bd89\n"
    },
    {
      "commit": "97252bb0e40a5a9b41f020163393cf6c5da10b7e",
      "tree": "2730f01323e31639eb85736a20ad0e0cf867876e",
      "parents": [
        "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
        "291bb6d8947c5b0c062f0895d623c529259bfa39"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 16:35:09 2013 +0000"
      },
      "message": "Merge \"AudioRecord and HAL input stream must be 16-bit PCM only\""
    },
    {
      "commit": "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
      "tree": "997cd41de1adb829c194f56cf29eb02945666b94",
      "parents": [
        "eced2daaa6c91a3731eef978ce65c6ec319c5e6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 09:45:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:24:03 2013 -0700"
      },
      "message": "Rename control block server to mServer and add comments\n\nChange-Id: Ieabd91acee92d0e84e66fbd358df5282b856306e\n"
    },
    {
      "commit": "a30e75897934da2ce7b1b03bcb4b58e139d3e81e",
      "tree": "78a398fee8ff72494debd7284ce0b43115412ad0",
      "parents": [
        "fa319e6d918b84f93fb5457af5d1cca6421ac517",
        "9fdcb0a9497ca290bcf364b10868587b6bde3a34"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 14:36:19 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 30 14:36:20 2013 +0000"
      },
      "message": "Merge \"Fix theoretical race using TrackBase::sampleRate()\""
    },
    {
      "commit": "eb144bbbd0b18427562b0d7db5b38e11f9484739",
      "tree": "c9ca9b64b648eef884e088f55c3693c0ddbc9c40",
      "parents": [
        "1bb59258458350af518170558120783bc2f9e61d"
      ],
      "author": {
        "name": "Andrei V. FOMITCHEV",
        "email": "andreix.fomitchev@intel.com",
        "time": "Tue Oct 09 11:33:25 2012 +0200"
      },
      "committer": {
        "name": "David Wagner",
        "email": "david.wagner@intel.com",
        "time": "Tue Jul 30 14:42:08 2013 +0200"
      },
      "message": "Fix mismatched delete/new couple\n\nIn RecordThread::readInputParameters(), mRsmpInBuffer is allocated\nwith new[] and should be freed with delete[] instead of delete.\n\nThis error has been found by valgrind.\n\nChange-Id: I2f947abb658a21a7d1e61eebb99270cb37d2d147\nSigned-off-by: Andrei V. FOMITCHEV \u003candreix.fomitchev@intel.com\u003e\nSigned-off-by: David Wagner \u003cdavid.wagner@intel.com\u003e\nSigned-off-by: Jack Ren \u003cjack.ren@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n"
    },
    {
      "commit": "fa319e6d918b84f93fb5457af5d1cca6421ac517",
      "tree": "2ccff564a324d72c8bd5d872a220f56b26431203",
      "parents": [
        "548efc94813c1dec6e8cf6c085ae41ccb04827f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:17:38 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:20:47 2013 -0700"
      },
      "message": "Remove CC_LIKELY and CC_UNLIKELY where not needed\n\nOnly keep them in performance-sensitive code\n\nChange-Id: Ib257ddd7bc39ce9896997ffae008c524ac743d01\n"
    },
    {
      "commit": "548efc94813c1dec6e8cf6c085ae41ccb04827f1",
      "tree": "620319f408aa2fc988373767cd382572bf32f3a3",
      "parents": [
        "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 29 08:48:51 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Rename RecordThread::mInputBytes to the more generic mBufferSize\n\nThis prepares for using it in PlaybackThreads later\n\nChange-Id: Id90a92aa6372e4b69914b0008cef07296ca5d6a3\n"
    },
    {
      "commit": "9b58f63e45ef2fdfb839b9b9bb3411d81eb96128",
      "tree": "064801660f69f98c8ed48db753902ac141d6bc32",
      "parents": [
        "2314e90eb8de63a7058297817125b94c1eac8019"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:37:48 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 16:36:09 2013 -0700"
      },
      "message": "Move members from ThreadBase to PlaybackThread\n\nMove mNormalFrameCount and frameCountHAL(), since they\u0027re not used by\nrecord threads.  Also comment which fields are updated by readParameters().\n\nChange-Id: I5fc0a8a89cc637976f22d49271a5a3e136dab4e1\n"
    },
    {
      "commit": "7f249fa9bcb64da324d19f551943fac7686d221c",
      "tree": "76cc14be9525f53fbf910c00884ebe4b5c9988c9",
      "parents": [
        "ae4b5f93444802632d71ec34373842e6f5febbaa",
        "fad226abd12435dbcd232f7de396f1a097b2bd5f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 21:13:08 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 21:13:14 2013 +0000"
      },
      "message": "Merge \"Use standard name and type for channel mask\""
    },
    {
      "commit": "175f8338e67aae6d0ca420b8f45a5f7cab4394d5",
      "tree": "cea9a9e0eb01e11f87ceb30dbdfdff293ac26513",
      "parents": [
        "5be847c22e7cec35a8b342338541fe1472bfd1a0",
        "d8ea699dc8e7dac58bb32e9cdb31b0758da25817"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 20:24:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 20:24:16 2013 +0000"
      },
      "message": "Merge \"Simplify getParameters()\""
    },
    {
      "commit": "f6ed423af92a56ef54bba23eba883b1f21448b54",
      "tree": "bad2f734e3191cbfa3c72bdeadcd88f5015e6ba8",
      "parents": [
        "2eeca1f8e18106d118f7268cb9d8597539685c5c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 11:16:27 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 12:43:12 2013 -0700"
      },
      "message": "Treat mChannelCount as uint32_t consistently\n\nmChannelCount was 8-, 16-, or 32-bits\n\nChange-Id: I2cc2fedf3e33144e5c8bbd9894763282d9217f63\n"
    },
    {
      "commit": "2eeca1f8e18106d118f7268cb9d8597539685c5c",
      "tree": "28b2c665c838d4e78265c74c284694f85a77a579",
      "parents": [
        "b59c1ad726b8bdf441f373d0bdc612539769334a",
        "34542acfa25c6413c87a94b6f7cc315a0c496277"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 18:18:05 2013 +0000"
      },
      "message": "Merge \"Move local variable declarations to point of first use\""
    },
    {
      "commit": "b59c1ad726b8bdf441f373d0bdc612539769334a",
      "tree": "9f870ae2f9f64f4a01f3c91e95d310db4d9895b7",
      "parents": [
        "3af48e6b28983da8c11d3d7d7fdd2088d881b462",
        "3dcd00dddec86a1c5133083ad7ba2265d49c048c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:59:04 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:59:09 2013 +0000"
      },
      "message": "Merge \"Declare methods in binder opcode order\""
    },
    {
      "commit": "3dcd00dddec86a1c5133083ad7ba2265d49c048c",
      "tree": "0cb9279c20e16d3f059739818b71e9b77c185330",
      "parents": [
        "b283374cbf79dc5a36f1eef0015d7baf8881792e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 10:10:23 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 10:49:59 2013 -0700"
      },
      "message": "Declare methods in binder opcode order\n\nChange-Id: I5f624b7a51ffe1a17a67c056cf984f74e4c56eac\n"
    },
    {
      "commit": "3af48e6b28983da8c11d3d7d7fdd2088d881b462",
      "tree": "9cc0c78c849d44737bf6ccc3cb218f0829b6880a",
      "parents": [
        "b283374cbf79dc5a36f1eef0015d7baf8881792e",
        "35cc4f3127322ad3e3dd1e15e8ae29ff4b4a3af6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:37:58 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:37:58 2013 +0000"
      },
      "message": "Merge \"Remove obsolete mBufferEnd\""
    },
    {
      "commit": "b283374cbf79dc5a36f1eef0015d7baf8881792e",
      "tree": "b2f1680b6c3c3094a50176e234f8f8ca424f0058",
      "parents": [
        "bd4c4fbb3b073e48963185d11a15da1fa18d2e54",
        "9e8fcbcd8efa51d70d1207ff57bfbfe31324287a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 17:06:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 17:06:18 2013 +0000"
      },
      "message": "Merge \"Move delete AudioMixer closer to point of re-allocation\""
    },
    {
      "commit": "35cc4f3127322ad3e3dd1e15e8ae29ff4b4a3af6",
      "tree": "ad534d537cd19cdb33fb5068059f3bd726e1f805",
      "parents": [
        "bd4c4fbb3b073e48963185d11a15da1fa18d2e54"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:21:35 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 09:40:24 2013 -0700"
      },
      "message": "Remove obsolete mBufferEnd\n\nChange-Id: I507c6109d66000bb30933ca23b912a1316f55e5e\n"
    },
    {
      "commit": "bd4c4fbb3b073e48963185d11a15da1fa18d2e54",
      "tree": "00ebf9a7c78cd47ca27ca22b072142e3b21e7c04",
      "parents": [
        "afbbc6c5f6bc470d504dcf24ceb3ac21d57fb78d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:21:14 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 09:40:19 2013 -0700"
      },
      "message": "Remove obsolete TrackBase::step(), mStepCount, mStepServerFailed\n\nChange-Id: I6347096f066b8b19451c6472db7b0671f0cf7702\n"
    },
    {
      "commit": "afbbc6c5f6bc470d504dcf24ceb3ac21d57fb78d",
      "tree": "6fc44421938fc9a08c232580f581b89f95259ed3",
      "parents": [
        "420ea49539d23ab305a7b33c0854a7a475493dd4",
        "a8356f663014e7d4c27869629af83d8bb3441e19"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 29 14:27:55 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 29 14:27:56 2013 +0000"
      },
      "message": "Merge \"Simplify RecordTrack::stop()\""
    },
    {
      "commit": "420ea49539d23ab305a7b33c0854a7a475493dd4",
      "tree": "d67162f23f49a00a39f701548f6a52a11376d537",
      "parents": [
        "65d30dd9ee498f7b3bfc033735458a6ff399c207",
        "fc38a2e0268b5e531db2975c3a81462a3593c861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Jul 27 00:00:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jul 27 00:00:34 2013 +0000"
      },
      "message": "Merge \"CBLK_OVERRUN, not CBLK_UNDERRUN, is for record threads\""
    },
    {
      "commit": "65d30dd9ee498f7b3bfc033735458a6ff399c207",
      "tree": "e5fa59313d1c9ed9e61622217b92383fccac93eb",
      "parents": [
        "422801c5e9b795105f28e639c4bed5ee3f4e56f3",
        "0fea74cdbc09c1259e08215e2ea90e7988d62df8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 26 23:24:50 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 26 23:24:50 2013 +0000"
      },
      "message": "Merge \"Remove obsolete TrackBase::reset()\""
    },
    {
      "commit": "422801c5e9b795105f28e639c4bed5ee3f4e56f3",
      "tree": "b01bec728cec33edab05f66d8fa2a88fc5533f16",
      "parents": [
        "94ea60f975c3eb7ce6d2a4430538a42a5fc3babd",
        "7fc97ba08e2850f3f16db704b78ce78e3dbe1ff0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 26 21:33:40 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 26 21:33:41 2013 +0000"
      },
      "message": "Merge \"HAL stream format for mixer output threads must be stereo 16-bit PCM\""
    },
    {
      "commit": "a8356f663014e7d4c27869629af83d8bb3441e19",
      "tree": "af015d8d690aaf239b940d0ca65576bd795719c9",
      "parents": [
        "fc38a2e0268b5e531db2975c3a81462a3593c861"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:37:52 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:44:51 2013 -0700"
      },
      "message": "Simplify RecordTrack::stop()\n\nChange-Id: Ib959c1e9dc9544d12277ce11bea445118b2e0521\n"
    },
    {
      "commit": "fc38a2e0268b5e531db2975c3a81462a3593c861",
      "tree": "bc9f29a75795ea00e5ab0785ae2b11647acdc1c1",
      "parents": [
        "0fea74cdbc09c1259e08215e2ea90e7988d62df8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:41:19 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:42:26 2013 -0700"
      },
      "message": "CBLK_OVERRUN, not CBLK_UNDERRUN, is for record threads\n\nChange-Id: I8948f76ef4717a423c37cd6ea7db4381636af612\n"
    },
    {
      "commit": "0fea74cdbc09c1259e08215e2ea90e7988d62df8",
      "tree": "45421baddb2bab78c036dba12063e7d70b5b2082",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:34:57 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 14:39:31 2013 -0700"
      },
      "message": "Remove obsolete TrackBase::reset()\n\nChange-Id: I38100b7e28a12d7af8cb40ae3f4d9cb4a0ebe701\n"
    },
    {
      "commit": "bfb1b832079bbb9426f72f3863199a54aefd02da",
      "tree": "5007d22456776dc77d124be84bcfe8bc4152bbb2",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 07 09:53:42 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "AudioFlinger: offload playback, non-blocking write\n\n- Added specialized playback thread class for offload playback,\nderived from directoutput thread.\nThis thread type handles specific state transitions for offloaded\ntracks and offloading commands (pause/resume/drain/flush..) to audio HAL.\nAs opposed to other threads, does not go to standby if the track is paused.\n\n- Added support for asynchronous write and drain operations at audio HAL.\nUse a thread to handle async callback events from HAL: this avoids locking\nplayback thread mutex when executing the callback and cause deadlocks when\ncalling audio HAL functions with the playback thread mutex locked.\n\n- Better accouting for track activity: call start/stop and release Output\nmethods in audio policy manager when tracks are actually added and removed\nfrom the active tracks list.\nAdded a command thread in audio policy service to handle stop/release commands\nasynchronously and avoid deadlocks with playback thread.\n\n- Track terminated status is not a state anymore. This condition is othogonal\nto state to permitted state transitions while terminated.\n\nChange-Id: Id157f4b3277620568d8eace7535d9186602564de\n"
    },
    {
      "commit": "9e8fcbcd8efa51d70d1207ff57bfbfe31324287a",
      "tree": "43dae12b292fcfe0ab9ed12c57f26a170b16b807",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 10:09:11 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 12:50:26 2013 -0700"
      },
      "message": "Move delete AudioMixer closer to point of re-allocation\n\nNo need to delete AudioMixer before readOutputParameters\n\nChange-Id: Icafa785c9021bbe8d985e4f9527f8fc8c5e62622\n"
    },
    {
      "commit": "7fc97ba08e2850f3f16db704b78ce78e3dbe1ff0",
      "tree": "ada9fda1321150cc75295eece5f7f82e35f0c9f3",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:18:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 12:22:18 2013 -0700"
      },
      "message": "HAL stream format for mixer output threads must be stereo 16-bit PCM\n\nDirect and tunnel output threads can support various HAL stream formats,\nincluded encoded.  But currently there are stereo 16-bit PCM assumptions\nin several places for mixer and duplicating output threads:\n - mMixBuffer and mixBuffer()\n - AudioMixer including resampler\n - FastMixer\u0027s mixBuffer\n - effects\n - NBAIO_Format\n - anywhere FCC_2 is used\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces stereo 16-bit\nPCM in mixer and duplicating threads at the place where the HAL format\nis read.  It was already being checked in checkForNewParameters_l(),\nbut not in readOutputParameters().\n\nChange-Id: Ibe344cc922743da234299097aa1bb1f54795cc9b\n"
    },
    {
      "commit": "d8ea699dc8e7dac58bb32e9cdb31b0758da25817",
      "tree": "6610e00d5fe1cc23c316ed0b0663ec06dede82db",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 14:17:15 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:31:38 2013 -0700"
      },
      "message": "Simplify getParameters()\n\nChange-Id: Iedfeca3cd477d023c350d6d4e6eed874ee467a32\n"
    },
    {
      "commit": "34542acfa25c6413c87a94b6f7cc315a0c496277",
      "tree": "8fdb43eabdcceca8291966fe88d9c37a3864beee",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 26 11:29:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 25 08:21:55 2013 -0700"
      },
      "message": "Move local variable declarations to point of first use\n\nChange-Id: Ideb83dea2c3002651c34fa646753cba598e29e93\n"
    },
    {
      "commit": "fad226abd12435dbcd232f7de396f1a097b2bd5f",
      "tree": "4e5214f8f5b142239a9583e79032b70330fa7c8e",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:19:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 17:49:04 2013 -0700"
      },
      "message": "Use standard name and type for channel mask\n\nFormer name \u0027channels\u0027 was ambiguous with respect to channel count.\n\nChange-Id: I716f792d95a7e0c787d27514ad6e93dbcef8a415\n"
    },
    {
      "commit": "291bb6d8947c5b0c062f0895d623c529259bfa39",
      "tree": "aa527f282bf3523c3692f086e4e088e8e21aa69c",
      "parents": [
        "39a60318dcd78b2cb406d2c7dba57cbe9c99c3e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 16 17:23:39 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 24 16:03:05 2013 -0700"
      },
      "message": "AudioRecord and HAL input stream must be 16-bit PCM only\n\nCurrently there are 16-bit PCM assumptions in several places for capture:\n - resampler API\n - mRsmpInBuffer and mRsmpOutBuffer\n - RecordThread::threadLoop upmix, downmix, and resampling\n - possibly other places\n\nUntil those assumptions are removed, this CL enforces 16-bit PCM in both\nclient and server at all places where a format is checked.\n\nChange-Id: I08b0570bff626ad0d341804825a72c14e61b4233\n"
    },
    {
      "commit": "01061c1d57700b37fa879217763494cdf94d5c98",
      "tree": "c75bede54ece9d23cb7a04cdfb6cc89066b4fe82",
      "parents": [
        "cb155c8f4bf556b0d37c3596c4dc265ab491152b",
        "4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 22 15:02:08 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 15:02:08 2013 +0000"
      },
      "message": "Merge \"Use AudioSystem::setLowRamDevice() to configure memory\""
    },
    {
      "commit": "cb155c8f4bf556b0d37c3596c4dc265ab491152b",
      "tree": "5b9f53d2c33435c511b010801de6233106497783",
      "parents": [
        "18cf609ca3f20a9da2c7e140088d7557e7479f49",
        "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 22 14:43:59 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 14:43:59 2013 +0000"
      },
      "message": "Merge \"Revert \"Fix Audioflinger crash when TeeSink is enabled\"\""
    },
    {
      "commit": "18cf609ca3f20a9da2c7e140088d7557e7479f49",
      "tree": "0782d67b426a8e4a03721abab2f85878e1f2d0d8",
      "parents": [
        "288abb6fe160dff109dedbf89b227fc2b10a2ee8",
        "1b8ae3d9f3605fab7d14c323f2118ba3c769a42a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 22 14:43:19 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 14:43:20 2013 +0000"
      },
      "message": "Merge \"Fix compile warning\""
    },
    {
      "commit": "1b8ae3d9f3605fab7d14c323f2118ba3c769a42a",
      "tree": "6ef5c082dd187c13cd961261227688e66597028c",
      "parents": [
        "20f4754b7e687d3718a0a0a585f2c9ac22e2567d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 10:32:41 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 10:32:41 2013 -0700"
      },
      "message": "Fix compile warning\n\nChange-Id: I80de4a013dc65eb7c532561438fd10e005354c03\n"
    },
    {
      "commit": "4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61",
      "tree": "c7ed5d9b71f919bf664dd0cb6cbdd1c3de2f9241",
      "parents": [
        "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 14:45:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Use AudioSystem::setLowRamDevice() to configure memory\n\nBug: 9798886\nChange-Id: I9321e3f369f1ed9429ae222e3926ebdeb012b8b0\n"
    },
    {
      "commit": "0d61251648b5110bfc33ef5b3d19bbf65db0a7b5",
      "tree": "0ae0e6c9cce87e880523a92218e549a4e5c81a63",
      "parents": [
        "153b9fe667e6e78e0218ff0159353097428c7657"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 16:09:26 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Revert \"Fix Audioflinger crash when TeeSink is enabled\"\n\nThis reverts commit 84e391686d7eced293913d1d7993721224ee0ba1.\n\nBug: 8834855\nChange-Id: I8211ef5ea5d87d97ada115723df31c8057f38ca8\n"
    },
    {
      "commit": "153b9fe667e6e78e0218ff0159353097428c7657",
      "tree": "360a76911071e362a94af32ccf67ce9619629708",
      "parents": [
        "20f4754b7e687d3718a0a0a585f2c9ac22e2567d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 15 11:23:36 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 09:30:37 2013 -0700"
      },
      "message": "Make AudioFlinger::instantiate() more resilient when called from separate module\n\nBug: 8834855\nChange-Id: I4cd842cdfb09d2aaaaab9df9ac3bec6179709bd3\n"
    },
    {
      "commit": "c6ae3c8a261794fd4445e4e152d1ada074a3f92f",
      "tree": "c8f6493eb0a0f6af812ea5909096cf91818fce05",
      "parents": [
        "ee5e8d3e8dc61f8fb1fa725278d63802074c10c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 09:08:51 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:38:58 2013 -0700"
      },
      "message": "Fix theoretical memory leak in mConfigEvents\n\nChange-Id: I137f70676c8919661e716c33e0dd9c25c2b6285c\n"
    },
    {
      "commit": "ee5e8d3e8dc61f8fb1fa725278d63802074c10c5",
      "tree": "3632e0647c90e1f2e47c7c0e57250240eb49757e",
      "parents": [
        "cff1b2359b8a302f19539c0bc5d25c98a52733fd",
        "3d1982595cb9cb0856841f1f57fbdb4581189e99"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 15:14:16 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 17 15:14:16 2013 +0000"
      },
      "message": "Merge \"Fix indentation\""
    },
    {
      "commit": "3d1982595cb9cb0856841f1f57fbdb4581189e99",
      "tree": "411fe41a4645e65de97c1073fccc6c6ec0e87bbe",
      "parents": [
        "551ababe67ce31778000d52958e53e1c56e1a294"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:20:54 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:20:54 2013 -0700"
      },
      "message": "Fix indentation\n\nChange-Id: Ia28720a7d0fad8cf110c2448b967d5648d42e017\n"
    },
    {
      "commit": "fb1fdc9d6603aa228362e7349451f6455c9849c2",
      "tree": "1caac6c881db81bcfedb596b292ce62ecbaf6a2c",
      "parents": [
        "551ababe67ce31778000d52958e53e1c56e1a294"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:03:19 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:08:15 2013 -0700"
      },
      "message": "Add comments\n\nChange-Id: Ifbf3a46a4183c8abc0feee1c588953ab10303cc1\n"
    },
    {
      "commit": "20ed5f444c149c49d0e599da09e5cec1e5cc6051",
      "tree": "f1c9c66d5572a1daebc9c218aff7399a2a0cac47",
      "parents": [
        "1ab85ec401801ef9a9184650d0f5a1639b45eeb9",
        "ace2378c934b61fbd865b5ade9ff7d0df81dabe3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 03 08:40:51 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 03 08:40:51 2013 -0700"
      },
      "message": "am ace2378c: am f59a4b39: fix scheduling policy service death detection\n\n* commit \u0027ace2378c934b61fbd865b5ade9ff7d0df81dabe3\u0027:\n  fix scheduling policy service death detection\n"
    },
    {
      "commit": "ace2378c934b61fbd865b5ade9ff7d0df81dabe3",
      "tree": "b3146af4726c4a98a245e58ad1941fb7844c6418",
      "parents": [
        "f64bd473e4c500dc54923baac7261e6d2d72daa6",
        "f59a4b393f4844c5bbc8d6212364bdddea33d232"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 03 08:16:46 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 03 08:16:46 2013 -0700"
      },
      "message": "am f59a4b39: fix scheduling policy service death detection\n\n* commit \u0027f59a4b393f4844c5bbc8d6212364bdddea33d232\u0027:\n  fix scheduling policy service death detection\n"
    },
    {
      "commit": "1ab85ec401801ef9a9184650d0f5a1639b45eeb9",
      "tree": "c3a39f141461642c3ac3c7f1370ca679d08d80e6",
      "parents": [
        "8f13428cb29a9b610a9e9a0f5fea437cd2d3f032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 31 09:18:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 02 13:43:24 2013 -0700"
      },
      "message": "Include what is needed\n\nRemove old includes.\nHeader files only include other header files that they directly need themselves.\n\nChange-Id: Ic471386808d9f42ea19ccbd59cb50a5f83a89dd0\n"
    }
  ],
  "next": "f59a4b393f4844c5bbc8d6212364bdddea33d232"
}
