)]}'
{
  "log": [
    {
      "commit": "a47f3165f53c8e8fb8907a94de7417e2c3047eeb",
      "tree": "d6f691af946f8754b8534347c9b0b3ec535e776e",
      "parents": [
        "659004c2949620d8adb29e1d950a2dd1c75ba9a9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 07 10:13:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 08 11:22:38 2012 -0800"
      },
      "message": "Simplify AudioTrack::restoreTrack_l()\n\nRemove CBLK_RESTORING and CBLK_RESTORED from control block flags,\nfor AudioTrack only.  They are still used by AudioRecord.\n\nThis is part of a series to clean up the control block.\n\nChange-Id: Iae4798f5b527c492bdaf789987ff3a1dadd0cb37\n"
    },
    {
      "commit": "659004c2949620d8adb29e1d950a2dd1c75ba9a9",
      "tree": "0619d1c2fa1515119ddd92648724e89a1073e76a",
      "parents": [
        "755e8e1dcf36f282b727ff22d87d3c2fac70d30a",
        "b1c0993b215c5c3eebd1c6bafc22bba23d57a70b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 08 10:35:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 08 10:35:07 2012 -0800"
      },
      "message": "Merge \"Add all-channel AudioTrack::setVolume() API\""
    },
    {
      "commit": "755e8e1dcf36f282b727ff22d87d3c2fac70d30a",
      "tree": "e0c8468a87427f51deba8d018931afb4394b3f1d",
      "parents": [
        "864585df53eb97c31e77b3ad7c0d89e4f9b42588",
        "d5ed6e88a9bea1879e41d7defaf1edea7c09f554"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 08 10:04:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 08 10:04:07 2012 -0800"
      },
      "message": "Merge \"Fix call to restoreTrack_l() without lock held\""
    },
    {
      "commit": "d5ed6e88a9bea1879e41d7defaf1edea7c09f554",
      "tree": "99a34f51474700f4873e3f817b6b9f2c47001fc3",
      "parents": [
        "8fa3ad0e4c77f7868348ad2a4cacc34c34e7c39e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 02 13:05:14 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 07 16:11:56 2012 -0800"
      },
      "message": "Fix call to restoreTrack_l() without lock held\n\nAlso document lock order\n\nChange-Id: I2c1f273a0a51fa79ee3dd766de8d23083e270051\n"
    },
    {
      "commit": "864585df53eb97c31e77b3ad7c0d89e4f9b42588",
      "tree": "529492712326aa5aa997aa2d2f66a65baf4356b1",
      "parents": [
        "8fa3ad0e4c77f7868348ad2a4cacc34c34e7c39e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 06 16:15:41 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 07 08:32:40 2012 -0800"
      },
      "message": "Remove CBLK_DIRECTION from control block flags\n\nThis is part of a series to clean up the control block.\n\nChange-Id: I0265fece3247356b585d4d48fbda6f37aea8a851\n"
    },
    {
      "commit": "8fa3ad0e4c77f7868348ad2a4cacc34c34e7c39e",
      "tree": "b2ca5d7c9f8ff86f0e69359251a873478115c503",
      "parents": [
        "9d91e2a52b74380dae2662c8c00477c013b83c2c",
        "e0b07179a48ee50fda931d2aa1b3c751d167e4d7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 07 08:29:30 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 07 08:29:31 2012 -0800"
      },
      "message": "Merge \"Remove CBLK_FAST from control block flags\""
    },
    {
      "commit": "e0b07179a48ee50fda931d2aa1b3c751d167e4d7",
      "tree": "d495cc851dba53652011108297d100e64a4c4acd",
      "parents": [
        "48c6b2628f8a6037309c7957b07129d850187aa3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 06 15:03:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 06 17:25:22 2012 -0800"
      },
      "message": "Remove CBLK_FAST from control block flags\n\nThis is part of a series to clean up the control block.\n\nChange-Id: Ic881a3560d9547cb63fcc0cefec87aa3da480e0d\n"
    },
    {
      "commit": "05d499958e4030938ed77a924ebdd9899f36752e",
      "tree": "c1eb564773575a2905de4b99f2a352e315611a5e",
      "parents": [
        "48c6b2628f8a6037309c7957b07129d850187aa3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 06 14:25:20 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 06 14:37:04 2012 -0800"
      },
      "message": "Remove unused fields in AudioTrack::Buffer\n\nChange-Id: Iab75f6e2348d8b6d1f3cec95aeb3fcd5135dfb50\n"
    },
    {
      "commit": "d2c38fc4d5dc742d7441444316849510dd2b7363",
      "tree": "5f7da68ffa30a22cc567a71af0d0fbf2c3ffb4c3",
      "parents": [
        "cce9dfb4b17ef5a42c5805aeeae28d3390e4655f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 01 14:58:02 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 06 10:33:38 2012 -0800"
      },
      "message": "Cache mCblk in local variable cblk\n\nUse \"iMem\" for sp\u003cIMemory\u003e\n\nChange-Id: I2f1fbbc517fbd77cfc92f6c3b1f253c26bae93b0\n"
    },
    {
      "commit": "8e825a57202ce6cb2ddac67683ee5885334ce75d",
      "tree": "967d141640b7c6cbb737cd6c1ec6a6335fec9310",
      "parents": [
        "7eb54958353458953ad052418c1c98a1b5338b7d",
        "9c5fdd83f9b9f49be35107971feb33528d60b945"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 05 16:32:24 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 05 16:32:24 2012 -0800"
      },
      "message": "Merge \"Simplify control block flag names\""
    },
    {
      "commit": "b1c0993b215c5c3eebd1c6bafc22bba23d57a70b",
      "tree": "7b2d2eb6d08c5460fc896e083983ef6e65b5db45",
      "parents": [
        "ad4e408b8ea397caadbfee85e1e39515e7e08104"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 16:21:04 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 05 15:12:51 2012 -0800"
      },
      "message": "Add all-channel AudioTrack::setVolume() API\n\nAdd combined channel APIs setVolume to AudioTrack,\nand remove obsolete getVolume.\n\nChange-Id: I0c87bfdbff4f4292259fa33e65f67badbafd270b\n"
    },
    {
      "commit": "847d05dc8fa144dcf8f4f435d6a6ac1727f00937",
      "tree": "c079d882c6070ba620cad05b2b5254b4ba2ecf50",
      "parents": [
        "f27bdebd0c611f9618577f65346f44574146dc00"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 16:05:09 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 05 13:49:59 2012 -0800"
      },
      "message": "Remove deprecated AudioTrack APIs\n\nChange-Id: I88be6525f3e33df529c0c3cb701d12a484809477\n"
    },
    {
      "commit": "9c5fdd83f9b9f49be35107971feb33528d60b945",
      "tree": "cd8f20f3c4355d55057cc70369be9c2d3f890838",
      "parents": [
        "ad4e408b8ea397caadbfee85e1e39515e7e08104"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 05 13:38:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 05 13:43:51 2012 -0800"
      },
      "message": "Simplify control block flag names\n\nUse only one symbol per flag\n\nChange-Id: Ia3582e2134abd60c896d11337face65383e79c7c\n"
    },
    {
      "commit": "9a08ebc8de71e260efb86cd1a04559b075b38ebc",
      "tree": "3974062bbee1bc0287d7f0d1ac00a1db1108e584",
      "parents": [
        "821cea93f38065592456d6644600f5ee1123fe72"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 02 09:59:51 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 02 13:24:50 2012 -0700"
      },
      "message": "Fix spurious wakeup waiting for new IAudioTrack\n\nIf there was a spurious wakeup while waiting for another thread to create\na new IAudioTrack, we assumed that the track has been created when it\nmight not have been.\n\nChange-Id: I5f3999b4f7a06a00aabd65a746cc7222fff396ab\n"
    },
    {
      "commit": "85ab62c4b433df3f1a9826bed1c9bec07a86c750",
      "tree": "0c5443a20824924cb7403f4cabfee84062489793",
      "parents": [
        "5fe6138bd839297a1eed16885102b3bdfc98c040"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 01 11:11:38 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 01 12:19:25 2012 -0700"
      },
      "message": "Line length 100\n\nChange-Id: Ib28fd7b9ce951a6933f006e7f8812ba617625530\n"
    },
    {
      "commit": "896adcd3ae6a1c7010e526327eff54e16179987b",
      "tree": "8c999b21698b1b7b45ac1d290ef3c64c808f380d",
      "parents": [
        "4362f5300162ed55f56cf167eccf7f2e5b89d435"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 13 11:18:23 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 13 17:03:00 2012 -0700"
      },
      "message": "audioflinger: send priority request from a thread\n\nWhen creating a fast AudioTrack, a request is sent to SchedulingPolicyService\nto elevate the requesting thread priority. This generates a binder\ncall into system_server process and to a JAVA service via JNI.\nIf the thread from which the track was created is in the system_server\nprocess and does not have the \"can call java\" attribute, a crash occurs because\nthe binder optimization reuses the same thread to process the returning binder\ncall and no JNI env is present.\n\nThe fix consists in sending the priority change request from the AudioFlinger\nmixer thread, not from the binder thread.\n\nThis also reverts the workaround in commit 73431968\n\nBug 7126707.\n\nChange-Id: I3347adf71ffbb56ed8436506d4357eab693078a3\n"
    },
    {
      "commit": "73431968e3c5cf420b5d63c54cf72d10ff7ee7bc",
      "tree": "11239e23b4a170e479addf4a102200b46e6c8ebb",
      "parents": [
        "359cf1cac2a7851a59dfe4960a1a5992ac6fdb84"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Sep 12 19:42:34 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Sep 12 19:42:34 2012 -0700"
      },
      "message": "Workaround for track recreation bug\n\nIgnore thread can call Java parameter to work around bug where\n AudioTrack instance gets recreated when key clicks are enabled\n and WFD gets turned on, with the wrong parameters.\n\nChange-Id: Ia42c8704b46fe3ffea560b05b60939fa2e4b29e1\n"
    },
    {
      "commit": "c3ae93f21280859086ae371428ffd32f39e76d50",
      "tree": "542d16fac64eb1f6e40c32517d60c2da5078e900",
      "parents": [
        "c9936c72c128a4a9288424fb082d7e7fe4b9b91f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 30 10:59:30 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 15:31:00 2012 -0700"
      },
      "message": "Update audio comments\n\nChange-Id: Ie7504d0ddb252f7e4d4f99ed0b44cfc7b1049816\n"
    },
    {
      "commit": "a997e7a7c5aa2fc7e95316218316f8b7b98786ba",
      "tree": "4f98e352833c4de61728588cacc08d40d1d01778",
      "parents": [
        "8da4cd7d706d9f551bf2d08cd8b61907a10cd38d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 07 09:44:19 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 07 15:13:42 2012 -0700"
      },
      "message": "Revert \"Swap the order of creating IAudioTrack and thread\"\n\nThis reverts commit 5d464eb0b8cffb994a754ff108795e858a882414.\nIt caused the wrong thread ID -1 to be passed to IAudioFlinger::createTrack().\n\nChange-Id: Ic221d2bb4af572d3d2d752af19238c52f6728e3a\n"
    },
    {
      "commit": "5d464eb0b8cffb994a754ff108795e858a882414",
      "tree": "e5d78a91a03a1895cc03cfeb89c26aac49d15a9e",
      "parents": [
        "0ec23ce0d1ff79566c402bc30df3074f6e25a22b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 22 17:19:53 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 27 14:58:43 2012 -0700"
      },
      "message": "Swap the order of creating IAudioTrack and thread\n\nSimplifies the error recovery in case IAudioTrack fails.\n\nChange-Id: I6aee41a2ac747a5689fb4836b04174e6107bf32f\n"
    },
    {
      "commit": "28b76b334f92a15a2be3cc9e2f7d229a3275d1ac",
      "tree": "c605d3e995f4b6be55dd4b10e1c998b059990d0d",
      "parents": [
        "fd4e20c226eca185fc789de761beae64855bfbbb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 17:24:41 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 17 11:31:59 2012 -0700"
      },
      "message": "Use audio_channel_mask_t for channel mask\n\nChange-Id: I1c1896da48983aa9f1462a4b471f910498816f60\n"
    },
    {
      "commit": "04cd0186305e2b59d23c9147787046c6662029cc",
      "tree": "5c2da34c5489ab0741729ba6b66cec980c384720",
      "parents": [
        "5f0033d27b75fead593ed7ca2b86f5b6f5adf6cc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 25 11:49:27 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 13 09:05:50 2012 -0700"
      },
      "message": "getMinFrameCount error handling\n\nConvention is for \"get\" APIs that directly return status_t and indirectly\nreturn a value via a pointer, to return BAD_VALUE if the pointer is NULL.\nAlso indirectly return 0 for other errors.\n\nChange-Id: I1599f20ecb26e9723f9fb384ffbf911ff3a2ce1c\n"
    },
    {
      "commit": "d4070955e28ae62aa4be1657f9d32acde104bb86",
      "tree": "4e289a66bb82da52f8e0e1c1691b35f1309d9f35",
      "parents": [
        "39c54f68804c1ce5c85ec588f3c2c63447a807b4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 12 11:03:31 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 12 11:09:09 2012 -0700"
      },
      "message": "Remove dead code in libmedia\n\nChange-Id: I7d8201590cda29c9fa99662a4fdba222091febfe\n"
    },
    {
      "commit": "d3a9ff4b725de612bf0354c035ba8f8564dbc6e8",
      "tree": "6352c2917870180111ebb84d3b1839ac2392bdae",
      "parents": [
        "a43787a8cc513715543fb5c80c7c464e2cd51b6e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 21 12:11:38 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 21 12:11:38 2012 -0700"
      },
      "message": "Move declarations of local variables to first use\n\nChange-Id: I48b193a742b32b6746aa938b84dc405124a6a5c3\n"
    },
    {
      "commit": "192cbbad773979a6fe3b5a0c223356de4fc3309c",
      "tree": "23bdbff8fd2a2b88a63a54287c6112908b050fb7",
      "parents": [
        "82233b4b5bee06f11618a558ae465abbfdedfd6e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 13 08:38:36 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 14 10:56:59 2012 -0700"
      },
      "message": "Fix audio track pause.\n\nAudioTrack::pause() should signal the control block condition\nto release threads waiting for available buffers in obtainBuffer().\nOtherwise the behavior relies on the timout on the condition\nor the fact that audioflinger will mix a new audio buffer while executing\nthe pause.\n\nBug 6653769.\n\nChange-Id: I5f8f73c471fe306070f30b814f32fd4b4dc1d575\n"
    },
    {
      "commit": "0c9d26d187017f7fb028ab52a0fbc6395142faa4",
      "tree": "35fd2f6babef082b85058fd27a69bda048687295",
      "parents": [
        "b4ea1ab821d652cb080910d4081f5f1318597a90"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 31 14:35:01 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 13 15:12:42 2012 -0700"
      },
      "message": "Log track name on obtain/releaseBuffer warnings\n\nThis should help diagnose problems by allowing us to correlate\nthe logs with the dumpsys media.audio_flinger output.\n\nChange-Id: I8c7c592b4f87d13b0f29c66ce7a2f301a0f063c9\n"
    },
    {
      "commit": "df839841d2db4cb8e2acb10205b3942622b3e7a2",
      "tree": "183ce49d98a66d866aeed85e98da6709206074ac",
      "parents": [
        "83410a85993ad6f5f0c122036ff0bda42bf1d4f7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 31 14:27:14 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 31 14:32:38 2012 -0700"
      },
      "message": "Do not keep audio wake lock when apps underrun.\n\nDo not automatically restart an AudioTrack after an underrun\nif the callback is executed but no data is written by the app.\n\nBug 6541286.\n\nChange-Id: I11e7ab8dc968d7ff087058fec68f44490d3a7731\n"
    },
    {
      "commit": "2986460984580833161bdaabc7f17da1005a8961",
      "tree": "bd8aa210c0faee61dc45e23479e29cfc85f313c2",
      "parents": [
        "dfa29ab13647f22b30b2de34d4830c9e815bf120"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 08 18:57:51 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 14 17:20:12 2012 -0700"
      },
      "message": "Fix issues with synchronous record start.\n\n- Added a timeout in case the trigger event is never fired.\n- Extend AudioRecord obtainBuffer() timeout in case of\nsynchronous start to avoid spurious warning.\n- Make sure that the event is triggered if the track is\ndestroyed.\n- Reject event if the triggering track is in an incompatible state.\n\nAlso fix a problem when restoring a static AudioTrack after\na mediaserver crash.\n\nBug 6449468.\n\nChange-Id: Ib36e11111fb88f73caa31dcb0622792737d57a4b\n"
    },
    {
      "commit": "093000f7d11839b920e8dfaa42ed1d09f48e24b8",
      "tree": "ffecb5126696e2c2c83980ce8ad561b60278064a",
      "parents": [
        "6a3969cc3bcbfc84dbcc27aa726eb96bc03a830b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 03 09:35:36 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 03 10:05:00 2012 -0700"
      },
      "message": "Don\u0027t allow AudioTrack frameCount to decrease\n\nThis is a workaround for bug that client can cache return value of\nframeCount(), and is not notified when this value changes due to automatic\nre-recreation of the underlying IAudioTrack.\n\nA better long-term fix would be to notify clients when these kinds of\nparameters change, and to fix assumptions in client code that they are\nconstant (e.g. in SoundPool and maybe obtainBuffer).\n\nAlso, once a fast track request is denied, don\u0027t request it again.\n\nBug: 6431187\nChange-Id: I55b4ff30bbd9ed3a402e39452a38de52cdea53a9\n"
    },
    {
      "commit": "f4022f90db5acb680870db8c1150b673cdd211d9",
      "tree": "0ffaec361f808d5710d42298fa7d01873771cf6c",
      "parents": [
        "2c3297ab6c4daaaa7b27eed8418c64cf168fe2a1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 02 10:34:59 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 02 10:37:55 2012 -0700"
      },
      "message": "Fix race in AudioTrack destruction\n\nBug: 6427369\nChange-Id: Id3b4487406235b881f6f0b4b95c5a02a9b797e75\n"
    },
    {
      "commit": "31dfd1db7a4d2228d9642008af6f3dd744368eb6",
      "tree": "5182b898a5f21161ea879c4fe173f91d54366fd7",
      "parents": [
        "2409e4337b1e5968cbf75a839778f849266b64d9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 01 11:07:08 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 01 11:07:48 2012 -0700"
      },
      "message": "Disable fast track log spam\n\nexcept for \"denied by client\" and \"denied by server\"\n\nChange-Id: I133ab747933729cc1f386813ee06ece055bdb294\n"
    },
    {
      "commit": "e0fa467e1150c65a7b1b1ed904c579b40f97c9df",
      "tree": "44ae1e182fd15695fccf5d1f396f99edc7942ee5",
      "parents": [
        "e370bb62b89d2f2980f519392010ea08a24c558e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 24 14:35:14 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 25 18:41:32 2012 -0700"
      },
      "message": "Move frame count calculations for fast tracks\n\nFor fast tracks: move the default and minimum frame count calculations\nfrom client to server.  If accepted, the default and minimum frame count\nis the fast mixer (HAL) frame count.  If denied, the default and minimum\nframe count is the same as it currently is for normal tracks.\n\nFor normal tracks: there is no change yet, preserve legacy behavior for\nnow but add a FIXME to change this later.\n\nBug fix: the test for buffer alignment matches channelCount was wrong.\n\nBug fix: check for 8-bit data in shared memory, which isn\u0027t supported.\n\nOptimizations:\n - in set(), only call AudioSystem::getOutputSamplingRate() when needed\n - in createTrack_l(), only call AudioSystem::getSamplingRate() and\n   AudioSystem::getFrameCount() when needed\n\nChange-Id: I79d2fe507db1a8f7bb094c71da8a129951dbb82f\n"
    },
    {
      "commit": "a636433cbd09c0708b85f337ef45c0cdef3bcb4d",
      "tree": "8a629f33d648d1ddd8b79305f02763c539fef7cd",
      "parents": [
        "9adb12830ac2da72c91b842d24725ced6d236b16"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 19 09:35:04 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 23 16:54:41 2012 -0700"
      },
      "message": "Use C APIs instead of C++ APIs for policy\n\nThe C++ APIs are going away.\n\nNote: we use tid \u003d\u003d 0 which is not supported yet by the C APIs,\ndo not submit this until that is added.\n\nChange-Id: I0e90789e6c81c69f2544e899c52421ea5d1342be\n"
    },
    {
      "commit": "ca8b28013c0558a4a3323a1a0f58520277200086",
      "tree": "56e351a74a524a059ed1759a6612cf88f6fd5b82",
      "parents": [
        "4a6c9c59a0297c3c6fcfadddaed7a9a976046daf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 23 13:58:16 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 23 14:15:45 2012 -0700"
      },
      "message": "Fix regression in AudioTrack::pause()\n\nBug: 6379646\nChange-Id: I12b53bc4118499ddc73a53a981f3f56328140868\n"
    },
    {
      "commit": "3acbd053c842e76e1a40fc8a0bf62de87eebf00f",
      "tree": "1d6dcc01039a1af770131c6b427efa27a2e5755f",
      "parents": [
        "f853499c6a088ef8506cacbb3ccdffa87e0cec3e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 10:39:56 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Apr 22 14:50:01 2012 -0700"
      },
      "message": "Configure policy of mediaserver threads\n\nChange-Id: Ifd825590ba36996064a458f64453a94b84722cb0\n"
    },
    {
      "commit": "1948eb3ea6eee336e8cdab9b0c693f93f5f19993",
      "tree": "448eed49a4ba18fb1ab4f2fb1b2c0d5cef6d242f",
      "parents": [
        "21e8c50bd13ebe44f3088e26c9c6df0e163c469c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 13 16:50:19 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 20 14:17:02 2012 -0700"
      },
      "message": "Add support for deep audio buffers\n\nAllow AudioSink to use deep audio buffering when the\nsource is audio only and its duration is more than\na certain threshold.\nThis helps improve battery life but implies higher\naudio latency.\n\nChange-Id: Ie79915b61c370292f05aabda9779356570e03cbb\n"
    },
    {
      "commit": "0ca3cf94c0dfc173ad7886ae162c4b67067539f6",
      "tree": "bc156e7822e663626b78ec2ad09ef3970fbb48c5",
      "parents": [
        "ee685f6d19a6cc3b0bf02e69eb5dea11a2aeb601"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 09:24:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 15:04:46 2012 -0700"
      },
      "message": "rename audio policy output flags\n\nChange-Id: I27c46bd1d1b2b5f96b87af7d05b951fef18a1312\n"
    },
    {
      "commit": "1a9ed11a472493cac7f6dfcbfac2064526a493ed",
      "tree": "5f4a3c6856f294b3c0371afd87df96277215107b",
      "parents": [
        "290ca3a767a974ce9d041e5bcb0c69153f7851d5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 20 18:36:01 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 03 16:53:25 2012 -0700"
      },
      "message": "audio policy: add configuration file\n\nremoved outputs to stream mapping cache in audio system: the output for a\ngiven stream type must always be queried from audio policy manager as the cache\nis not always updated fast enough by audioflinger callback.\n\nremoved AudioFlinger::PlaybackThread::setStreamValid() not used anymore if\nstream to output mapping is not cached.\n\nChange-Id: Ieca720c0b292181f81247259c8a44359bc74c66b\n"
    },
    {
      "commit": "4a4a0959bca78e03e3c3f486ba17829c28314d8c",
      "tree": "5fbfe5302ca28741483ae64d0ccf2630830f167e",
      "parents": [
        "a1472d9883e35edd280201c8be3191695007dfd4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 11:38:14 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 02 07:34:39 2012 -0700"
      },
      "message": "AudioTrack client fast policy\n\nChange-Id: I42ce691df3f586ac061b62237f35a263a0116f1f\n"
    },
    {
      "commit": "a1472d9883e35edd280201c8be3191695007dfd4",
      "tree": "22d33eed0e95560b5fe989ace6a2e0f53aff3790",
      "parents": [
        "40a1da57d21bbc883630e7a854a279685fe1fa61"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Mar 30 14:36:54 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Mar 30 21:21:36 2012 -0700"
      },
      "message": "Make AudioTrack/AudioRecord handle more than 2^32 frames\n\nb/6160363\nChange-Id: I471815012c6a113ec2c4dd7676e8fa288a70bc76\n"
    },
    {
      "commit": "b83d38feeeb88a8a2a6219e1fca2480b5a14fb0d",
      "tree": "7e1392f0427d0300d8140ef0a6c18dc32f393831",
      "parents": [
        "8f7f7ad54c698cb57a2a369cf1ae5b917853917b",
        "a075db4ff9b086ac2885df77bb6da0869293df92"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 26 07:16:37 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 26 07:16:37 2012 -0700"
      },
      "message": "Merge \"IAudioFlinger::createTrack and openRecord flags\""
    },
    {
      "commit": "291f4d505aff81969e6666049d3cc3446f836af2",
      "tree": "f2ad96c1acfb08c190148f8f12a7f86825cd7728",
      "parents": [
        "ccf89b54f973f11082150d02ed957f7e967fbc8b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 12:16:56 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 15:41:02 2012 -0700"
      },
      "message": "Remove enforceFrameCount\n\nIt was only used to decide whether to issue a warning.\nThe warning was issued the first time track was created but\nnot at re-creation.  Now it is a verbose message every time,\nnot a warning since it happens all the time with key clicks on A2DP.\n\nChange-Id: I9d39f53c0a7eb84b666e55b1b76ff830cf8f37ba\n"
    },
    {
      "commit": "63c1faa8dea7feb90255d31ef2a133d8f2818844",
      "tree": "973c66b51e7e85b6ea753b5643f7d99c66d82dde",
      "parents": [
        "7153494670bdac8b650cb10b8b1838651e0ca418",
        "17a736c3e1d062d7fc916329eb32aef8935614af"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 07:24:21 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 07:24:21 2012 -0700"
      },
      "message": "Merge \"Update comments\""
    },
    {
      "commit": "ea7939a079b3600cab955760839b021326f8cfc3",
      "tree": "570fb56838735a46a28e28a4f083d763f758ea24",
      "parents": [
        "eb76ff27c13386eb5a2dad73b1a8366f80eb0ff7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 12:56:26 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 17:53:33 2012 -0700"
      },
      "message": "Whitespace\n\nFix indentation, and add blank lines in key places for clarity\n\nChange-Id: I57a0a8142394f83203161aa9b8aa9276abf3ed7c\n"
    },
    {
      "commit": "17a736c3e1d062d7fc916329eb32aef8935614af",
      "tree": "7fb73e48de8641ce6ad7b65fb4204bc60cd3e5f0",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 08:52:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 14:12:01 2012 -0700"
      },
      "message": "Update comments\n\nChange-Id: I327663a020670d0a72ff57bd0b682e2ce0528650\n"
    },
    {
      "commit": "a075db4ff9b086ac2885df77bb6da0869293df92",
      "tree": "2496dbf3d7fbb569b843780535bcea450157eb25",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 06 11:22:44 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 09:04:23 2012 -0700"
      },
      "message": "IAudioFlinger::createTrack and openRecord flags\n\ncreateTrack and openRecord don\u0027t need the \"old\" flags parameter,\nwhich was either audio_policy_output_t or audio_in_acoustics_t\nshifted left by 16 bits.  But they do need \"new\" flags, which\nare defined by the application use case.  Initially, the only\napplication use case flag is timed output, but others are planned.\n\nFor output, the audio_policy_output_t flags are passed to\nAudioSystem::getOutput, which returns an audio_io_handle_t, and that\nhandle is then passed to createTrack. So createTrack doesn\u0027t need the\nold flags parameter.\n\nFor input, the audio_in_acoustics_t flags are passed to\nAudioSystem::getInput, which returns an audio_io_handle_t, and that\nhandle is then passed to openRecord. So openRecord doesn\u0027t need the\nold flags parameter.\n\nChange-Id: I18a9870911846cca69d420c19fe6a9face2fe8c4\n"
    },
    {
      "commit": "e53b9ead781c36e96d6b6f012ddffc93a3d80f0d",
      "tree": "4bcde0bc9a797851ec1bee4f630c8c4f0735f623",
      "parents": [
        "b87396f9ebabbb7b47683bceca96cbe635a1ca00"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 12 16:29:55 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 11:09:47 2012 -0700"
      },
      "message": "Whitespace and indentation\n\nFix indentation to be multiple of 4.\nMake it easier to search:\n  sp\u003c not sp \u003c to\n  \"switch (...)\" instead of \"switch(...)\" (also \"if\" and \"while\")\nRemove redundant blank line at start or EOF.\nRemove whitespace at end of line.\nRemove extra blank lines where they don\u0027t add value.\n\nUse git diff -b or -w to verify.\n\nChange-Id: I966b7ba852faa5474be6907fb212f5e267c2874e\n"
    },
    {
      "commit": "18868c5db2f90309c6d11e5837822135e4a0c0fa",
      "tree": "58c7505f59a1a93ab729fc039aa5cb1eaa49652e",
      "parents": [
        "f2015b625cd6bea86da7401e725332c35b90e7cf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 09:15:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 15:32:22 2012 -0800"
      },
      "message": "Use audio_policy_output_flags_t consistently\n\nThis affects:\n - IAudioFlinger::openOutput\n - AudioTrack::AudioTrack\n - AudioTrack::set\n - apps that call these\n\nChange-Id: I26fb281bac6cb87593d17697bc9cb37a835af205\n"
    },
    {
      "commit": "d8d6185c978c9b27ca69e7791785e0983ed9e8b8",
      "tree": "cda49b71e787cf1bcf68671e237389f70706cff3",
      "parents": [
        "985ed9a1a22ec7e6e245d3fb8e93d3a23bdc539b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 05 17:06:40 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 05 17:18:36 2012 -0800"
      },
      "message": "AudioTrack: relax check on minimum buffer size\n\nCurrent AudioTrack implementation enforces that the requested audio\nbuffer size is at least corresponding the audio latency.\nThis requirement is too strong and leads to problems with current\nstagefright and AudioSink implementations when playing over output\nstreams with long latency.\n\nUltimately, the AudioSink design should be changed to specify a minimum\nbuffer size in time or frames units but not in buffer count units.\n\nChange-Id: I8ba603956f92ac49143a8249572665aa548f2f0f\n"
    },
    {
      "commit": "480b46802bef1371d5caa16ad5454fce04769c57",
      "tree": "50bc53de16466d73d177b8f19ff96e8b9774b730",
      "parents": [
        "a3873833d518e032138cf70188b6f33cd7acec3d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 12:30:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 16:38:09 2012 -0800"
      },
      "message": "Shorten thread names\n\nprctl(PR_SET_NAME) limits to 15 characters.  Before we had names like\n\"Binder Thread #\" and the counter was cut off :-( Also remove redundant\n\"thread\" at end of name; it\u0027s always a thread.\n\nChange-Id: I1f99c2730ba0787ed9b59c15914356cddf698e2f\n"
    },
    {
      "commit": "4ff14bae91075eb274eb1c2975982358946e7e63",
      "tree": "e9e54fddb9832d30b69c2a11c9ed2884397f2f95",
      "parents": [
        "951bd8d1ad9581a414e171ad8605a9515d0ad667"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Feb 08 16:37:41 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:11 2012 -0800"
      },
      "message": "Upintegrate Audio Flinger changes from ICS_AAH\n\nBring in changes to audio flinger made to support timed audio tracks\nand HW master volume control.\n\nChange-Id: Ide52d48809bdbed13acf35fd59b24637e35064ae\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "d9b9b8d09e7471b0ffa21cfa9f944ef4ad300a71",
      "tree": "e2b8666cc7ca81254ce264129ddd70c076a63ed1",
      "parents": [
        "ed15977476a3d53103866e6d527fa3fb65d4166c",
        "99e53b86eebb605b70dd7591b89bf61a9414ed0e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:42:32 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 14 09:42:32 2012 -0800"
      },
      "message": "Merge \"Update comments\""
    },
    {
      "commit": "99e53b86eebb605b70dd7591b89bf61a9414ed0e",
      "tree": "8939550ada02fe21121550a83952ebf7638c0dac",
      "parents": [
        "6dbc1359f778575d09d6da722b060a6d72c2e7c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 08:59:58 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:17:59 2012 -0800"
      },
      "message": "Update comments\n\nWe no longer put the filename at start of file.\n\nChange-Id: Ic435b159a23105681e3d4a6cb1ac097bc853302e\n"
    },
    {
      "commit": "ed15977476a3d53103866e6d527fa3fb65d4166c",
      "tree": "8c42c9c2f1ecb0ee10359e806a68927e4d0697e9",
      "parents": [
        "8d6a2449a91f5116d7243ab039393195ebd663fe",
        "38f5d71e72f3b76c5b519614d27f051d53cd2712"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:09:03 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 14 09:09:03 2012 -0800"
      },
      "message": "Merge \"Remove dead code AudioTrack::getLoop\""
    },
    {
      "commit": "6dbc1359f778575d09d6da722b060a6d72c2e7c5",
      "tree": "721c46e8b89595b51a80ee71c71542895edc1308",
      "parents": [
        "7a8b0ed6419e57dd8b41d3806893d63d3df91aab"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 10:56:47 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 07:30:48 2012 -0800"
      },
      "message": "AudioRecord and AudioTrack client tid\n\nInform AudioFlinger of the tid of the callback thread.\n\nChange-Id: I670df92dd06749b057238b48ed1094b13aab720b\n"
    },
    {
      "commit": "38f5d71e72f3b76c5b519614d27f051d53cd2712",
      "tree": "a27ac85c22bc55b10bdeeaa3bddaae473325caaf",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 14:12:12 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 14:12:12 2012 -0800"
      },
      "message": "Remove dead code AudioTrack::getLoop\n\nChange-Id: I868329c52f31bc20125f068500d8f892b4ec9796\n"
    },
    {
      "commit": "4f9b0c54011eb8fd2ccfb393c2dcd51cd07800e0",
      "tree": "318b28bb04ce0b4ce39f75f6a8dbac27cee1455c",
      "parents": [
        "86feafe15b3f9609e1e9f64184688c2b6f2e4834",
        "0e265cf36d201a7ccc0238b5c60b50f43d1dc450"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:34:33 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:34:33 2012 -0800"
      },
      "message": "Merge \"Remove dead mutex in AudioTrack/AudioRecord thread\""
    },
    {
      "commit": "a5224f319e2ba4b51ddb4287705ccf8d4b8ecc51",
      "tree": "eb36f63045d044c840072ad95398d49b743cd6bd",
      "parents": [
        "787bae0578fbaab6219ebf23494866b224d01438"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 12:41:44 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 15:48:25 2012 -0800"
      },
      "message": "AudioTrack declare more methods const\n\nChange-Id: I4999e984460893961d0d8092cff17f3cf07d7214\n"
    },
    {
      "commit": "a0d68338a88c2ddb4502f95017b546d603ef1ec7",
      "tree": "f052125f4720fde00179d41d4ee04e02934052e4",
      "parents": [
        "87f155d6655b2d3b27e69281a29e85c6407e4d26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 16:47:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 07:57:01 2012 -0800"
      },
      "message": "Use NULL not 0 for raw pointers\n\nUse if (p !\u003d NULL) instead of if (ptr)\n\nChange-Id: Iaec3413a59ccbf233c98fcd918cc7d70ac5da9fa\n"
    },
    {
      "commit": "0e265cf36d201a7ccc0238b5c60b50f43d1dc450",
      "tree": "395a2c8f3685c1d1140f3ad12d2dff884d7db6ad",
      "parents": [
        "bf6954598193147cac980b8b5d7ad5215f1dec16"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 10:52:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 11:23:30 2012 -0800"
      },
      "message": "Remove dead mutex in AudioTrack/AudioRecord thread\n\nThe client callback threads had mutexes called AudioTrackThread::mLock\nand ClientRecordThread::mLock.  These mutexes were only used by start()\nand stop(), and were unused by the thread itself.  But start() and\nstop() already have their own protection provided by AudioTrack::mLock\nand AudioRecord::mLock.  So the thread mutexes can be removed.\n\nChange-Id: I098406d381645d77fba06a15511e179a327848ef\n"
    },
    {
      "commit": "83d86538c4c479a9225c75ab27938e8f05abb9c8",
      "tree": "72fdff9fb9bb7e41fe48c41bfed65ab83b64f85f",
      "parents": [
        "58f30210ea540b6ce5aa6a46330cd3499483cb97"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 14:39:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 16:19:59 2012 -0800"
      },
      "message": "Make AudioTrack control block volume field private\n\nThis is part of the process of abstracting the control block\nto make it easier to maintain.\n\nChange-Id: Idb8f461e68dab3bcf268159cc0781651c6fb7094\n"
    },
    {
      "commit": "05bfe50e13793404a78c20c850d467d17734d496",
      "tree": "170ad8aee42f47bf510dcae85e1b0e6657ab6e32",
      "parents": [
        "ea3cc3bca949139e401b77f2ac0cce7ac6e76f8f",
        "511754b5839fd9b09fc56b89ae007fbc39084a33"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 11:49:04 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 20 11:49:04 2012 -0800"
      },
      "message": "Merge \"Move memcpy_to_i16_from_u8 to audio_utils\""
    },
    {
      "commit": "c813985abd8ba61e999b3505f6a332574f87a1be",
      "tree": "d87c4ec564d4f3d19db4c1032661799cce847617",
      "parents": [
        "04eaf3e5f20d7faa956c0d672024ffb5117f4c26"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 18 10:51:55 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 18 10:51:55 2012 -0800"
      },
      "message": "Temporarily restore AudioSystem/AudioTrack APIs with their former signatures\n\nuntil we get updated prebuilts from vendor.\n\nChange-Id: I8aae81d2513edca0ab268053a11c8c4206879e61\n"
    },
    {
      "commit": "b1cf75c4935001f61057989ee3cf27bbf09ecd9c",
      "tree": "e3daaea6160475e36dedfccaabf5d8b94406d05e",
      "parents": [
        "f237a30e9344d43f832ba11db6f62c6ad2084444"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 12:20:54 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 16:25:17 2012 -0800"
      },
      "message": "Track volume cleanup\n\nAlways read and write track volumes atomically. In most places this was\nalready being done, but there were a couple places where the left and\nright channels were read independently.\n\nChanged constant MAX_GAIN_INT to be a uint32_t instead of a float.\nIt is always used as a uint32_t in comparisons and assignments.\nUse MAX_GAIN_INT in more places.\n\nNow that volume is always accessed atomically, removed the union\nand alias for uint16_t volume[2], and kept only volumeLR.\n\nRemoved volatile as it\u0027s meaningless.\n\nIn AudioFlinger, clamp the track volumes read from shared memory\nbefore applying master and stream volume.\n\nChange-Id: If65e2b27e5bc3db5bf75540479843041b58433f0\n"
    },
    {
      "commit": "511754b5839fd9b09fc56b89ae007fbc39084a33",
      "tree": "7db3e4ac83e2d108dd2190c37887a001faa3664f",
      "parents": [
        "f237a30e9344d43f832ba11db6f62c6ad2084444"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 09:52:19 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 15:15:06 2012 -0800"
      },
      "message": "Move memcpy_to_i16_from_u8 to audio_utils\n\nThis will make it easier for this kind of code to be optimized\nfor each target architecture.\n\nChange-Id: I9efd27d6c0175b00b9a784353244805cec63c0b8\n"
    },
    {
      "commit": "613882293184e575a44bff681a3decaefe889e69",
      "tree": "052f84c8fe6e7b201f03117f617c3ad77b8b0dd0",
      "parents": [
        "0107954f72153db747a3727dc1157e9236dfed90",
        "b9980659501d0428d65d8292f3c32da69d37fbd2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 07:27:46 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 17 07:27:46 2012 -0800"
      },
      "message": "Merge \"Use size_t for frame size\""
    },
    {
      "commit": "0107954f72153db747a3727dc1157e9236dfed90",
      "tree": "f279f37a12104778bdf7fa912e2205dd0c339f6e",
      "parents": [
        "b9ac2007cd141992eb5412ffb1c6527e0259b3ab",
        "fff6d715a8db0daf08a50634f242c40268de3d49"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 07:25:36 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 17 07:25:36 2012 -0800"
      },
      "message": "Merge \"Use audio_stream_type_t consistently\""
    },
    {
      "commit": "05632a5fa4b88ca474294887fc92a9fcdf0e2352",
      "tree": "28e36d2cce839d66870ea066a2b334dd9b63c833",
      "parents": [
        "09192653e836b21689f004bf8dee375356641181"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 03 14:22:33 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 15:25:14 2012 -0800"
      },
      "message": "AudioTrack and AudioFlinger send level cleanup\n\nAdd an API to control block for getting/setting send level.\nThis allow us to make the mSendLevel field private.\n\nDocument the lack of barriers.\n\nUse 0.0f to initialize floating-point values (for doc only).\n\nChange-Id: I59f83b00adeb89eeee227e7648625d9a835be7a4\n"
    },
    {
      "commit": "b9980659501d0428d65d8292f3c32da69d37fbd2",
      "tree": "8b703aca299f4f715a65d07cc37b753e9753a941",
      "parents": [
        "f4e76c538f81068bc2e125f3f9ef8b8dd40f2d2a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 09:48:27 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 14:58:44 2012 -0800"
      },
      "message": "Use size_t for frame size\n\nexcept in the control block, where we don\u0027t have room.\n\nIn AudioFlinger::ThreadBase::TrackBase::getBuffer,\nread the frame size from control block only once.\n\nChange-Id: Id6c4bccd4ed3e07d91df6bbea43bae45524f9f4e\n"
    },
    {
      "commit": "fff6d715a8db0daf08a50634f242c40268de3d49",
      "tree": "f5331971b746b2e0d878e1127003a0dab72e5fbb",
      "parents": [
        "09192653e836b21689f004bf8dee375356641181"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 16:38:12 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 10:20:14 2012 -0800"
      },
      "message": "Use audio_stream_type_t consistently\n\nAt native level it was a mixture of audio_stream_type_t, int, uint32_t,\nand uint8_t.  Java is still int.  Also fixed a couple of hard-coded -1\ninstead of AUDIO_STREAM_DEFAULT, and in startToneCommand a hard-coded 0\ninstead of AUDIO_STREAM_VOICE_CALL.\n\nChange-Id: Ia33bfd70edca8c2daec9052984b369cd8eee2a83\n"
    },
    {
      "commit": "4cc55d53d542c4f4ed645738cebb65b9e7eb6c44",
      "tree": "417efab1bc349bfaa4bdf7fccdff0e53fb76e7c0",
      "parents": [
        "d5a8bf0bca459389cdb81fdcc30893516bdce951",
        "e1c3962e268ffc12bfd1bd9ea84da1f135f36960"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 10:30:28 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 12 10:30:28 2012 -0800"
      },
      "message": "Merge \"Use audio_format_t consistently\""
    },
    {
      "commit": "83bc7f3cf78b28a818417f40a4f0c00593993366",
      "tree": "92870fd797bc4cc281c60e463848e27e7f16b1ea",
      "parents": [
        "3bba0e0a60b15895134bc2c731d21fd7ebd28784"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 12:38:13 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 12:27:41 2012 -0800"
      },
      "message": "libmedia new can\u0027t fail on Android\n\nChange-Id: Ie79dd5abb8078b35474bf0f1b3a6ff994a3a3360\n"
    },
    {
      "commit": "5c7b3bcc88e2b472f1f7b416d89222714b96a567",
      "tree": "8de86a7b665428b3dddc2fce5abbbe722e37ef80",
      "parents": [
        "febdbfec3b1ed0e20aa4f10bfdd82702d3e41f4b",
        "9a2aaf927e56a4b4acab23ef16b3f133a9f48a63"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 09 10:24:40 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 09 10:24:40 2012 -0800"
      },
      "message": "Merge \"Clean up AudioTrack::mActive and stopped()\""
    },
    {
      "commit": "29357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47",
      "tree": "3bdafe4b02fe36f6ee29c3170f0b0d2799bebf86",
      "parents": [
        "d709ca9c6a0fa1c8f40cbe624a119398643c5087"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Sun Jan 08 13:19:13 2012 +0000"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\n"
    },
    {
      "commit": "5ff1dd576bb93c45b44088a51544a18fc43ebf58",
      "tree": "c002dcda87f08329197b01395539bd25f10ca737",
      "parents": [
        "8a08dcc0a5de19a904e77d5f31bed3dff9a59890"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Jan 05 23:22:43 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 10:07:54 2012 +0000"
      },
      "message": "Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157065\n\nBug: 5449033\nChange-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69\n"
    },
    {
      "commit": "e1c3962e268ffc12bfd1bd9ea84da1f135f36960",
      "tree": "d24fac9434dbe5808a6c31a50414da7b5ce47c9a",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 09:36:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 13:34:54 2012 -0800"
      },
      "message": "Use audio_format_t consistently\n\nWas int, uint32_t, uint16_t, and uint8_t with 2-bit bitfield.\nAlso replace 0 by AUDIO_FORMAT_DEFAULT and replace 1 by\nAUDIO_FORMAT_PCM_16_BIT.\n\nChange-Id: Ia8804f53f1725669e368857d5bb2044917e17975\n"
    },
    {
      "commit": "9a2aaf927e56a4b4acab23ef16b3f133a9f48a63",
      "tree": "c4bbdbe2a7e0292105736849e28faf12d298e47c",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 03 09:42:47 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 11:55:24 2012 -0800"
      },
      "message": "Clean up AudioTrack::mActive and stopped()\n\nmActive is protected by mLock; volatile is meaningless on SMP.\n\nFixed a couple of places where mActive was accessed without a lock:\n - stopped()\n - processAudioBuffer()\n\nAdded stopped_l() for cases where we already hold the lock.\n\nMade mActive a bool not int.\n\nMoved down a lock in setPosition that was being acquired too early.\n\nChange-Id: I73ff368e991c0db9f9472df0b3f96fd33fcc7311\n"
    },
    {
      "commit": "f6b1678f8f508b447155a81b44e214475ab634a8",
      "tree": "dabe2858dfed9133c6a270cd6b86877a9d3588b1",
      "parents": [
        "94023fa6744e24f26f0aba1699ec278649bd66df"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 15 09:51:17 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 07:33:45 2012 -0800"
      },
      "message": "Use the standard CC_LIKELY and CC_UNLIKELY macros\n\nSeveral source files privately defined macros LIKELY and UNLIKELY in terms\nof __builtin_expect. But \u003ccutils/compiler.h\u003e already has CC_LIKELY and\nCC_UNLIKELY which are intended for this purpose.  So rename the private\nuses to use the standard names.\n\nIn addition, AudioFlinger was relying on the macro expanding to extra ( ).\n\nChange-Id: I2494e087a0c0cac0ac998335f5e9c8ad02955873\n"
    },
    {
      "commit": "42968939dfce0954d6540011199045ec4ed7de80",
      "tree": "0e297b59294db0688bab53cad567bb235f3ec4df",
      "parents": [
        "a06a9a50b37d60e9c43c9de9f8ea3a8649cd5691",
        "c5ac4cb3a5124860ccfc7e4ff66251c55a5595ca"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 17:35:36 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 14 17:35:36 2011 -0800"
      },
      "message": "Merge \"Fix indentation and whitespace\""
    },
    {
      "commit": "2eda60a8485cfe70a60e72156beffdc470ecb093",
      "tree": "bd491ab0f798c707b6bade7051f0d9e0cba23337",
      "parents": [
        "f7d4ae9149a1fa4fa97ee0ba97652e28ed92b297",
        "362c4e697d8e9c034e964ac7b40227e054491547"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 16:56:31 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 14 16:56:31 2011 -0800"
      },
      "message": "Merge \"Audio C++ comments\""
    },
    {
      "commit": "c5ac4cb3a5124860ccfc7e4ff66251c55a5595ca",
      "tree": "8b5320023ea729a043b00157e5ba528b4276e700",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 12 09:05:55 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 16:54:05 2011 -0800"
      },
      "message": "Fix indentation and whitespace\n\nUse git diff -w to verify.\n\nChange-Id: Ib65be0a1ecf65d6cad516110604e3855bf68a638\n"
    },
    {
      "commit": "1d334101f1289cf4c8967af6e78ac22619175982",
      "tree": "583306b211bc854994c52b4f8667726de210d9ef",
      "parents": [
        "c23bd9b5b9e4be9c395789810fdd8522296fc50c",
        "9054897ab9ffb307fadae81b774a1fc61cb542e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 15:40:43 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 14 15:40:43 2011 -0800"
      },
      "message": "Merge \"Remove unnecessary this-\u003e\""
    },
    {
      "commit": "b299dc4ded29a226daac07f195d1558e660d2f9f",
      "tree": "6624976ec87c6d7964497393d2c0ef7c71dd2375",
      "parents": [
        "505c529b2be910a7c5a814799b2e65af4b5dc941",
        "91eb8bfbe253a6b6fe1aa23fb884a601c28991c4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 15:40:01 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 14 15:40:01 2011 -0800"
      },
      "message": "Merge \"Remove redundant clear()\""
    },
    {
      "commit": "362c4e697d8e9c034e964ac7b40227e054491547",
      "tree": "dde3ca3f11e00cc82f1b6a6bd7ebe7b1c24421c5",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 10:28:06 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 14:38:26 2011 -0800"
      },
      "message": "Audio C++ comments\n\nChange-Id: I84906ebb9dfcfa5b96b287d18364b407f02a30c1\n"
    },
    {
      "commit": "91eb8bfbe253a6b6fe1aa23fb884a601c28991c4",
      "tree": "9afffafed1fc4902515e81f8a30e4f082ef3966d",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 13 11:23:47 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 13:31:40 2011 -0800"
      },
      "message": "Remove redundant clear()\n\nChange-Id: Ie5e4e63cbc8fa85ef50451dddf8f149fa864b132\n"
    },
    {
      "commit": "9054897ab9ffb307fadae81b774a1fc61cb542e7",
      "tree": "b5ef60696ca4730641a76a94aeef912afe97b50e",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 13 11:45:07 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 13:09:08 2011 -0800"
      },
      "message": "Remove unnecessary this-\u003e\n\nChange-Id: I72038f5d4568f0633d3e4ab90f4b67e2dd22c332\n"
    },
    {
      "commit": "f0c495012bad92230604a9a12a907812ec49ee8f",
      "tree": "7bee248d2bc7f9266bdc2d1bdbd35e990be248ba",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 30 09:46:04 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 13:06:57 2011 -0800"
      },
      "message": "AudioTrack::setVolume check range\n\nChange-Id: Ie182bf0f741f1f49f68c02a1e7437a2a34d34fc5\n"
    },
    {
      "commit": "879135196fd1c97deefc538c888037c56c2879a7",
      "tree": "3ee39136a951bf1fbb25e0b484c3c1b6709c5868",
      "parents": [
        "5c052218128013d630b4d9a84393ebfbff11f3e8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 16:15:25 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 16 14:52:55 2011 -0800"
      },
      "message": "Bug 4903178 Restore priority and cgroup on stop\n\nOn AudioTrack and AudioRecord stop or failed start, restore the priority\nand cgroup of the caller to their previous values, rather than forcing\nto NORMAL.  Dependent on new thread APIs.\n\nAlso fixes bug where priority was set to AUDIO but cgroup not set.\n\nChange-Id: Ib83893918fb4fdf57c6b87884b51038997a631d8\n"
    },
    {
      "commit": "3856b090cd04ba5dd4a59a12430ed724d5995909",
      "tree": "a24e4c98fa6049fd8085826be838000f9a67e39b",
      "parents": [
        "1d2acaffde56ad79e6e96f228d7857863462397c"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Oct 20 11:56:00 2011 +0100"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Oct 26 09:57:54 2011 +0100"
      },
      "message": "Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/143865\n\nBug: 5449033\nChange-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a\n"
    },
    {
      "commit": "cfe2ba6b01a258e39f9c215ffc7b750e0b68f708",
      "tree": "c4a213cfc30955cc61a8c9673e032caff41a0947",
      "parents": [
        "98afd841e8f0803a00d1970e4a28ea8999e9c498"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 13 15:04:17 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 13 17:33:29 2011 -0700"
      },
      "message": "Issue 5298399: Lost speech after a crash in gTalk.\n\nFixed problem in AudioTrack::restoreTrack_l() causing a permanent\nfailure if the IAudioTrack interface to AudioFlinger could not be\nrestored at the first attempt.\n\nChange-Id: I039d4fe2dca8d3baf71f1a6c51119f27a67b6611\n"
    },
    {
      "commit": "2267ba18d0d2b2d4bd7f5411821ad89ac2659a88",
      "tree": "3339791f7085faf94b891071826d8a1be5d1cb17",
      "parents": [
        "74a0a0d7f766d63330a00c3fa8f133c44c1d5be6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 07 11:13:23 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 08 15:18:37 2011 -0700"
      },
      "message": "AudioTrack: extend callback thread sleep time\n\nDo not force wake up the AudioTrack thread every 10ms if no timed\nevents (loop, markers..) have to be processed.\nThis will help reduce power consumption.\n\nChange-Id: Icb425b13800690008dd07c27ffac84739e3dbba3\n"
    },
    {
      "commit": "408b8dc3c0a364c6f6b4991d15da9e6bcc2b8008",
      "tree": "f5f9885d8b86fc8073678962a8d38eec4ebef2a4",
      "parents": [
        "3a13fad63af40a8364fce796b1a54a8f0a2fbf32"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 06 12:36:15 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 06 14:37:20 2011 -0700"
      },
      "message": "Issue 5247986: Battery drain due to audio wakelock\n\nThe problem occurs when activating or deactivating A2DP connection\nwhile SoudPool has a channel active. This can happen quite frequently now\nthat the UI sound effects are enabled by default.\nIf PCM data is remaining in the AudioTrack buffer when it is restroyed and\nre-created on the new AudioFlinger output thread, this data is flushed.\nAs a consequence, no underrun or request for new data callback is sent to\nSoundPool and the sound channel remains active for ever as the end of the\nsample is never detected.\n\nChange-Id: I13e0c11e4ce3f83bff7f58d347ca814b6a86712b\n"
    },
    {
      "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": "cd07594333cbe8b2c86c6609cce01a74d6cc33f8",
      "tree": "70b1b94cb811f564e8fe0c6ec348469adaae5f3c",
      "parents": [
        "539a735a82fefb1944aa6135df73dfe9f541566c"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Aug 25 16:47:23 2011 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Aug 25 17:33:49 2011 -0700"
      },
      "message": "Bug 4364249 Play position is 0 after flushing AudioTrack\n\nAudioTrack::stop() is not synchronous, so a stop() followed\n by flush(), which is synchronous, will not always report\n a playhead position of 0 after being called.\nThis CL adds a flag to mark a track as flushed, and report the\n correct playhead position in this state.\nBug 5217011 has been created to address the real issue in the\n future, where flush could be made synchronous, to properly\n address bug 4364249.\n\nChange-Id: Icf989d41a6bcd5985bb87764c287f3edb7e26d12\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": "68cbeba4e21aa53f52fb99b74dfa1910af31a3eb",
      "tree": "7a591241b2bebccb279c57a4877f5c3a97f1799e",
      "parents": [
        "eddf9ef9235608e0231379a7bc614853bf5bcfa3",
        "d0965dde97f2815ae0a15fe6b40946f8a741a81e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 23 09:00:03 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 23 09:00:03 2011 -0700"
      },
      "message": "Merge \"Fix warnings for uninitialized local variables\""
    },
    {
      "commit": "d0965dde97f2815ae0a15fe6b40946f8a741a81e",
      "tree": "ce6d1bc86145ed07b57c65b739df4e5c84070da4",
      "parents": [
        "e6ebb09642944b1d0cc06a788308e9b843dee595"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 16:18:04 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 16:18:04 2011 -0700"
      },
      "message": "Fix warnings for uninitialized local variables\n\nChange-Id: Ic9b03b0fd215444e76c7b7bebb385f7831c557e0\n"
    },
    {
      "commit": "671a636931295d9c33ffca74551a804479d01241",
      "tree": "b7173f3a54e1eb6245d816c04b13c9be4b12ecc6",
      "parents": [
        "a6c4758fdac248b863567da99f0c13eb12448a95"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 16 21:30:45 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 17 14:19:55 2011 -0700"
      },
      "message": "Added audio_bytes_per_sample() helper function\n\nChange-Id: Ibfcd75c4c241a53d5f052c25ada091904991048a\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": "c6854100cea4fcd0f20cb2ac8235c02d1849b3a1",
      "tree": "f99b0d979380e2208f3d07c56397205c06b38373",
      "parents": [
        "d217a8c4632b3e3065f8c2a26b9ce4dc4c97171f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 01 16:46:29 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 01 16:46:29 2011 -0700"
      },
      "message": "Remove unnecessary level of priority indirection\n\nChange-Id: I942d43973c20a7ace8b0d3f78b4da97e45e996c6\n"
    }
  ],
  "next": "0d255b2d9061ba31f13ada3fc0f7e51916407176"
}
