)]}'
{
  "log": [
    {
      "commit": "d1f69b0b17acbd96987ecb2f3378abd394d05903",
      "tree": "e3061c609dfaa2c217bb79a8d85e4571e8bd0d3d",
      "parents": [
        "8ddb02230d02968d471aa41b22433957c38827c0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 15 14:33:13 2014 -0800"
      },
      "committer": {
        "name": "Rachad Alao",
        "email": "rachad@google.com",
        "time": "Tue Dec 16 01:38:34 2014 +0000"
      },
      "message": "audioflinger: implement pause/resume for direct outputs\n\nExtend pause/resume support to direct output threads\n(was only for offload threads).\n\nIf the HAL implements pause/resume, track pause/resume is forwarded to\nthe HAL.\n\nPause, flush, resume sequence is respected by executing the HAL\ncalls in the playback thread (same as offload).\n\nMake sure the track flags on client side are consistent with the\nflags on server side.\n\nBug: 17883772.\nChange-Id: I89b360d69818f7a9204bd36e3ec63a79e106ecf1\n"
    },
    {
      "commit": "275e8e9de2e11b4b344f5a201f1f0e51fda02d9c",
      "tree": "c22e1c0b8541aa04fd6c8d803e4fa6704a84e6e2",
      "parents": [
        "82a69ea8b090d57bff5e02774688b546a711bbb8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Nov 30 15:14:47 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 09 15:47:19 2014 -0800"
      },
      "message": "audio policy: add support for custom mixes\n\nAdd support for custom mixes in AudioPolicyManager.\n\nTwo methods are added to register or unregister a list of custom mixes\nwith their attributes and format.\n\ngetOutputForAttr() and getInputForAttr() first look for a match in\nregistered mixes before defaulting to normal output/input selection\n\nRemote submix device connection disconnection now takes address into\naccount to identify the correspnoding custom mix.\n\nBug: 16009464.\n\nChange-Id: I3f1c2a485a0fb71b1f984ed0adc9b68aa971e408\n"
    },
    {
      "commit": "be837c328ae1ea2b193d05aaa3d4214c263b5b77",
      "tree": "e57cdef76f6936c4506d270dff4f59d72d202528",
      "parents": [
        "d6e7f1e1f8b1dfa6a87c7c0b1a5c68d435096b01"
      ],
      "author": {
        "name": "seunghak.han",
        "email": "seunghak.han@lge.com",
        "time": "Sat Nov 22 15:22:35 2014 +0900"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 05 10:52:34 2014 -0800"
      },
      "message": "Track volume should be maintained even if track is restored\n\nIf track is restored when it set its volume to a non-unity value (such as mute),\nthe volume was forced to unity again.  Now, the previous volume is restored.\n\nBug: 18570664\nChange-Id: I79f34c6c7d6f535baba813fd3b8ba8e55cac8ad7\n"
    },
    {
      "commit": "caf7f48a0ef558689d39aafd187c1571ff4128b4",
      "tree": "7a2c90732783e2c90cabb6045c4ab0dcea842bf1",
      "parents": [
        "087eb332cdd64026de27c914194127f8fda1a846"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 25 17:50:47 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 25 17:50:47 2014 -0800"
      },
      "message": "AudioRecord: use audio attributes instead of audio source.\n\nAdded AudioRecord constructor with audio attributes.\nReplaced AudioPolicymanager::getInput() by getInputForAttr().\n\nNo new functionality for now.\n\nAlso:\n\n- Fixed warnings in AudioPolicyManager\n- Allocate audio session ID before calling getOutputForAttr() in\nAudioTrack.\n\nBug: 16006090.\nChange-Id: I15df21e4411db688e3096dd801cf579d76d81711\n"
    },
    {
      "commit": "72bf901ca905ce154fe7866f06d25a01aadcf974",
      "tree": "0293ab3f6cdbec518913187d77c6d13d1c47a321",
      "parents": [
        "d325005e4a3be45c57e950f8c18b329c968602ce",
        "e83b55dc29ca16092ba02f36f55fa6e0e37fd78c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 26 00:21:20 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 26 00:21:20 2014 +0000"
      },
      "message": "Merge \"audio policy: new getOutputForAttr() prototype.\" into lmp-mr1-dev"
    },
    {
      "commit": "d325005e4a3be45c57e950f8c18b329c968602ce",
      "tree": "4673f354af652344295bc5fd2b2d37d0e6b2f16b",
      "parents": [
        "512dd849d0ef9e9988fedfbaf951b4b82523957c",
        "680b795435a5a501a56610258dce5eda40a1725d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Nov 25 23:49:04 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Nov 25 23:49:05 2014 +0000"
      },
      "message": "Merge \"Fix AudioTrack loop mode to play audio from buffer start\" into lmp-mr1-dev"
    },
    {
      "commit": "e83b55dc29ca16092ba02f36f55fa6e0e37fd78c",
      "tree": "f8232611b6372b74579e3ed03dfbeb167011d257",
      "parents": [
        "0f78eabb733e1413d7febd00c0bad0f0add02314"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 14 10:06:21 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 25 12:48:19 2014 -0800"
      },
      "message": "audio policy: new getOutputForAttr() prototype.\n\nUpdate getOutputForAttr() prototype and group all logic\ndealing with audio attributes to stream type conversion in\naudio policy manager.\n\ngetOutputForAttr():\n- specifies the audio session (for future use)\n- returns a status code\n- receives either stream type (for legacy) or audio attributes\n- returns an updated streamtype\n\nRemove logic dealing with legacy stream types to attributes conversion\nfrom AudioTrack.\n\nUse correct type for audio sessions in other APIs (startOutput() ...).\n\nreleaseOutput() specifies the audio session (for future use).\n\nBug: 18067208.\n\nChange-Id: I1bfbe9626c04c7955d77f8a70aecfad2cb204817\n"
    },
    {
      "commit": "680b795435a5a501a56610258dce5eda40a1725d",
      "tree": "db2d003b9b147e5f51e4cf6bf05d497d8ce4acb7",
      "parents": [
        "bc0f452b9a76dd8c8244e775bc9c5aa85cae3ddf"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Nov 12 13:18:52 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Nov 24 17:25:18 2014 -0800"
      },
      "message": "Fix AudioTrack loop mode to play audio from buffer start\n\nBug: 18217633\nChange-Id: Ica77acf0a32832d9b04eb657ef2f4f5329f8fbda\n"
    },
    {
      "commit": "223fd5c9738e9665e495904d37d4632414b68c1e",
      "tree": "33e0afab9a7479cdc4c688a742a8977c8ead21e4",
      "parents": [
        "bc0f452b9a76dd8c8244e775bc9c5aa85cae3ddf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 11 13:43:36 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 21 10:41:13 2014 -0800"
      },
      "message": "audio: new routing strategies and stream types\n\nAdded new routing strategies and stream type for internal use\nby audio policy manager and audio flinger:\n- One for accessibility to allow different routing than media\n- One for re-routing (remote submix) in preparation of dynamic\npolicies\n- Added stream type for \"internal\" audio flinger tracks used\nfor audio patches and duplication.\n\nBug: 18067208.\nChange-Id: I88f884b552e51e4a49c29125e5a1204cf58ff434\n"
    },
    {
      "commit": "29e6cecdd8562700ab625c5645ddd6a7753789f1",
      "tree": "e6b4da8119778e487653f7d74e087228e0b79e80",
      "parents": [
        "88ec9e992af75f9783794df5d7be31c3b018ad09"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 13 18:17:55 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 17 18:48:08 2014 -0800"
      },
      "message": "audio policy: do not prevent routing to A2DP when suspended.\n\nAllow A2DP sink selection even if A2DP is suspended.\nIt is not because use of A2DP is temporarily disabled by SCO\nselection that the policy rule routing a given use case\nto A2DP should be altered. The source will be routed to A2DP\nbut it will remain silent until suspend condition is cleared\nwhich is the purpose of suspend mode.\n\nAlso make sure that accessibility prompts are audible while in call\nby forcing stream type to STREAM_VOICE_CALL.\nFix inconsistent logic between AudioTrack::setStreamTypeFromAttributes()\nand AudioPolicyManager::getStrategyForAttr()\n\nBug: 18095151.\nChange-Id: I1c75dd8288ed3dd494eb942060eac9c9660dca50\n"
    },
    {
      "commit": "0d6db582f2ccc9f8943c5f3965e2994b7d137158",
      "tree": "bdd0de4b94942f7490dfe7b59b96bb4fa65a136a",
      "parents": [
        "538596f71dc667b2f39c27d0bc9bbf119b0e6d58"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 12 18:39:44 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 12 18:52:20 2014 -0800"
      },
      "message": "remove AudioSystem::getOutputSamplingRateForAttr()\n\nIt is safer to query the output sampling rate once the output\nhave been acquired by calling getOutputForAttr().\n\nBug: 16009464.\nChange-Id: Ib561facd19fba5359a6b837d75f1a1cd2dc51b29\n"
    },
    {
      "commit": "d2d089fc86c62843992e7d5b371ee9227189a1e6",
      "tree": "9bbab0fe070321be1612e188c835de59375f7e26",
      "parents": [
        "ed1e55c5276a1c031e9b2f016387c7d2fe7bc47f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 05 11:48:12 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 05 14:51:19 2014 -0800"
      },
      "message": "Improve AudioTrack recovery from mediaserver death\n\n1. Fix race condition in handling of binder death notifications.\n\nAudioSystem has a mixture of APIs for both ordinary app clients,\nand the AudioFlinger and AudioPolicy services within mediaserver.\nDue to this mix of uses, it is possible for there to be \"surprising\"\nsequences of calls on the call stack.\n\nPreviously, we used a single mutex for all global variables, but\nthis caused a deadlock.  To avoid the deadlock, we unlocked the mutex\nduring the critical sequence of calls.  But this was a a\ncrucial place where it should have stayed locked;\nsee Change-Id I315c1c5066f62b05e1c13b04fae1272b5fbce977\n\nNow we use separate mutexes for the AudioFlinger, AudioPolicy, and audio port\nrelated global variables.  This allows us to correctly hold each mutex\nthroughout the atomic region, even when AudioFlinger calls AudioPolicy\nvia AudioSystem, or vice-versa.\n\n2. AudioSystem::clearAudioConfigCache now clears the IAudioFlinger reference.\n\n3. Make AudioSystem::get_audio_policy_service more like get_audio_flinger.\n\nBug: 18242291\nChange-Id: I9761443d8337df5bf66d4ca2316a9fd0bd11be94\n"
    },
    {
      "commit": "461b02d3eccefea48fa15c67a9cd3a5895bd2765",
      "tree": "6fa1b5cef70a6572fa528bcb04f398b185bd3763",
      "parents": [
        "0def1d9e88e5ce567e13e0081f2ee8ae3cba0232",
        "03fcdcd0aa9758b6d882b18218fcfb9a1ccffdad"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Nov 04 01:37:34 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Nov 04 01:37:34 2014 +0000"
      },
      "message": "Merge \"audio: fix talkback why alarm is playing\" into lmp-mr1-dev"
    },
    {
      "commit": "03fcdcd0aa9758b6d882b18218fcfb9a1ccffdad",
      "tree": "93729916df7ea6d15a72e4c8b016f7584a480715",
      "parents": [
        "b1322c78b035c9f47ebe57a39799d7a0e13bf57f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 03 15:16:04 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Nov 03 15:16:04 2014 -0800"
      },
      "message": "audio: fix talkback why alarm is playing\n\nConvert attributes usage \"assistance accessibility\" to\na stream type guarantying that the prompt is audible\nand not muted by policy manager.\n\nBug: 17994328.\nChange-Id: I89f53f2ce84b499b859336c0a1a3a0332ee670f5\n"
    },
    {
      "commit": "d9cfeb447356cb6334379eaf5da1e49424eb5979",
      "tree": "5bae7d5985563f2cbbf9cc9cc1a5fca422cb8390",
      "parents": [
        "20f51b1ea04c410a25f214e37bcdb586e2a028cc"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Sep 22 16:51:34 2014 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Oct 31 14:12:20 2014 -0700"
      },
      "message": "Support speaker routing for FLAG_BEACON\n\nAdd support for routing audio stream to the speaker when audio\n  attributes carry the FLAG_BEACON value:\n- associate streams with FLAG_BEACON to the up-to-now unused\n  STREAM_TTS (\"Transmitted Through Speaker\").\n  The remapping happens in AudioTrack.\n- AudioPolicyManager: define new strategy for handling the Beacon\n  behavior, that only goes to speaker. Define new volume curves\n  for STREAM_TTS that are not silence only for the speaker device\n  category. Keep ref count of other streams and never play Beacon\n  streams when anything else is playing: either don\u0027t start playback\n  if something else is playing, or unmute STREAM_TTS when it\u0027s\n  allowed to play and mute when it\u0027s done.\n- Take into account muting latency when starting an output.\n\nBug 15415971\n\nChange-Id: I26539c7ec1a486accd85bbeb1623e9c7d3a1192f\n"
    },
    {
      "commit": "c2813e568aa476e03d159529c0af28c99536db8d",
      "tree": "95bf50e96fd0bd69d892b5bf629220b9fc874f94",
      "parents": [
        "9d2189ffcf1142b2948ce3065c32521ed7d966c4"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Oct 16 17:54:34 2014 -0700"
      },
      "committer": {
        "name": "Rachad Alao",
        "email": "rachad@google.com",
        "time": "Fri Oct 17 20:32:54 2014 +0000"
      },
      "message": "Fix AudioTrack retrograde getPosition when restoring tracks\n\nmReleased represents the number of frames written to the\ntrack, but was cleared on start() causing a mismatch if the\nclient wrote to the track before starting.  Moved the clearing\nto entering the STATE_STOPPED or STATE_FLUSHED state.\n\nBug: 18017947\nBug: 18022276\nChange-Id: I3788c98c4c3c4d9cc004378432797b3f3138e22e\n"
    },
    {
      "commit": "7985dcb06e0c29d5cc12d0c0e17e03d5d863cf53",
      "tree": "e99ab2f03b3fb49d533b8cf5e8659b39f5e5d8c8",
      "parents": [
        "f0011d49c0f08753dc2dc254c5a70885a9986602"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Oct 07 15:45:14 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Oct 07 15:45:14 2014 -0700"
      },
      "message": "AudioTrack: fix AudioTrackThread crash upon exit\n\nIn case of error during createTrack_l(), there is a possibility\nthat a newly created AudioTrackThread is resumed by requestExit()\njust after entering the Thread class _threadLoop() but before\nentering the class threadLoop(). In this case, processAudioBuffer()\nis executed once with mCblk \u003d\u003d 0 and we assert.\n\nBug: 17894033.\nChange-Id: I93d0d0d4dbf14bcb88dad23e6ad49d2ecd47badd\n"
    },
    {
      "commit": "bb6c9a05840d924b502ce0f1868fca4881ada1ed",
      "tree": "aec6d28b7ab31fec27416c6e853c94c2eedfcd9b",
      "parents": [
        "a935c76f96b066941b34f81c42b3fe9d00db98c5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 25 14:11:47 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 25 16:44:07 2014 -0700"
      },
      "message": "audio: fix stream type for accessibility usage\n\nMake sure that accessibility prompts are heard when\na ringtone is active by forcing stream type\nto AUDIO_STREAM_RING when phone state is AUDIO_MODE_RINGTONE.\n\nBug: 17558149.\nChange-Id: Ia3bead8052fca5cbf282c267f7b9b06014fef628\n"
    },
    {
      "commit": "dfc34daba6d6cb923683d96689a0cb7c7006eee5",
      "tree": "f215c906f1322d1ff3e893e89e11f8aaec4eb2b9",
      "parents": [
        "b0ed4e3e482cbdc2fa6c7853526597f4ae3f0972"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 19 09:05:05 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 19 09:06:01 2014 -0700"
      },
      "message": "Reduce log spam from getTimestamp errors\n\nBug: 17576481\nChange-Id: I07d99e7c42b7d4f0994b5a6d9c9fe8eb29fbbe40\n"
    },
    {
      "commit": "7f1bc8af1c46695191bf7e2aba6467f3616629c0",
      "tree": "905b0091037bea59f81df3cc6e49c2cfd1d7d24d",
      "parents": [
        "90869c2bef1bc47394a9f603ccebb62b2592fd2b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 12 14:43:11 2014 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Wed Sep 17 23:07:05 2014 +0000"
      },
      "message": "Fix AudioTrack offloaded timestamp handling.\n\ngetTimestamp for offloaded tracks now returns WOULD_BLOCK for\nsituations where the timestamp is unavailable due to the\nprevious track still flushing or the timestamp is stale.\nIt is fixed for normal playback conditions.\n\nBug: 14659809\nBug: 17428188\nChange-Id: Ic9ec07ccabc604236979769db5c4ea2dec252660"
    },
    {
      "commit": "200092b7f21d2b98f30b800e79d152636f9ba225",
      "tree": "35ced5107a366d0885a6a54e5473891e5ce01317",
      "parents": [
        "4953f92be5c45d7b79448e8964ecbdc39eacb782"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 15 15:13:30 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Sep 11 09:54:52 2014 -0700"
      },
      "message": "Clean up AudioTrack position and timestamp handling\n\nReplace epoch concept by observing and accumulating server delta\npositions.  The advantage of using server deltas instead of absolute\nvalues is that they (1) are not sensitive to 32-bit wraparound,\n(2) are not sensitive to server behavior for stop(), and\n(3) prepare for future 64-bit client positions without requiring 64-bit\npositions on server.\n\nAdd comments to AudioTrack::getTimestamp() and friends\nthat the timestamp output parameter is undefined on error.\n\nDon\u0027t allow getTimestamp to return a negative frame position after stop().\n\nAccumulate the client released frames, which may be useful for a future API.\n\nBug: 11815245\nChange-Id: I652940fa2db2f34a78c012a3ead0d9204fa29c6e\n"
    },
    {
      "commit": "cd04484f4837b8ca0041d118286ab6a98e84fc75",
      "tree": "4b9e501bb71969c0ca5049201aeae42284ac9b80",
      "parents": [
        "53a1e46e559b00653eadf6f4bb5572679b0ee734"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 07 11:04:34 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Aug 11 10:17:18 2014 -0700"
      },
      "message": "Extend downsampling ratios greater than 2:1\n\nAlso improve robustness to choice of sampling rate or buffer size\nsuch that increasing either by 10x does not cause overflow.\n\nBug: 12979141\nBug: 15933066\nChange-Id: If7989bd745d1bee3bdf811b8b7c978543ccafb65\n"
    },
    {
      "commit": "d9d7fa0873796ac661c44a7fcd6ad5ff697ff01f",
      "tree": "237375ce1605b2d7bd896b23f0a2ba2f0235ae09",
      "parents": [
        "f92f22becdf7fce1f55d5ebd80ac2caa2ad55602"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jun 24 08:01:46 2014 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jul 01 07:57:32 2014 -0700"
      },
      "message": "Support for audio attributes on audio output of media player\n\nChange-Id: Iae4995c98e64add1ab9e6c8ae6501515032755f5\n"
    },
    {
      "commit": "34fb29696b0f3abf61b10f8d053b1f33d501de0a",
      "tree": "4511e1ea03cdcfe50a4754904a507ec1ca6ac1b7",
      "parents": [
        "23307f736759efbdc6125e1ec0abbc4b48036346"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Jun 18 16:30:56 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Jun 20 07:36:25 2014 -0700"
      },
      "message": "libmedia: 64-bit compile warnings\n\nChange-Id: I600f062fa7148c01851023c1240c39939e648002\n"
    },
    {
      "commit": "ab5cdbaf65ca509681d2726aacdf3ac8bfb6b3fa",
      "tree": "0d406acdfea2d44cd430ef16ee2a25b7722e4b1d",
      "parents": [
        "29a8b2fe294a34ac7f004203426961a599e725ea"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 09 17:22:27 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 19 10:05:57 2014 -0700"
      },
      "message": "AudioTrack: add support for compressed audio\n\nAdd support for compressed audio playback by use\nof an AudioTrack attached to a direct output thread.\n\nBug: 9428304.\n\nChange-Id: I4a61be9cf0e31003ca85935d6e0ee38ca8192e03\n"
    },
    {
      "commit": "5bd3f38638acab633d181359cc9ec27b80f84d43",
      "tree": "f4f234ec7e3c4649beabe5b03c1a1a0b2b3cd1f2",
      "parents": [
        "faabb51ceef13bf1e3f692219ac410c1cd75d0de"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Jun 13 16:06:54 2014 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jun 18 08:07:00 2014 -0700"
      },
      "message": "AudioPolicyManager: return output for audio attributes\n\nIn AudioPolicyManager, support querying an output\n or playback strategy for audio attributes,\n instead of a stream type,\nIn AudioTrack creation, use the output returned\n for the track\u0027s attributes.\n\nChange-Id: I0fef05845ba676404775e2e338c10e6a96237268\n"
    },
    {
      "commit": "faabb51ceef13bf1e3f692219ac410c1cd75d0de",
      "tree": "ad761b6b94a1fa782774b8a3227ed7b5354112fc",
      "parents": [
        "9c68ac03f16cc32625f6965e869432eae4fded2d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jun 11 16:55:06 2014 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jun 17 16:59:52 2014 -0700"
      },
      "message": "AudioTrack construction with audio attributes\n\nStore audio attributes in AudioTrack class.\nWhen an AudioTrack is \"set\" with non null audio\n attributes, derive a stream type that reflects\n the attributes.\nWhen an AudioTrack is \"set\" without attributes,\n and only has a stream type, derive default\n audio attributes.\n\nChange-Id: I322b91fa9a7e193118960c5e78cdddd85d66f9ad\n"
    },
    {
      "commit": "9c68ac03f16cc32625f6965e869432eae4fded2d",
      "tree": "048251826118491e784077a2cdb3e9e02dc1f208",
      "parents": [
        "20d16a8af2dc95e827be693edabde4f09eb90c32",
        "b7f24b101d43139b4c747129bfbc4ecf5c468b86"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Jun 13 21:37:58 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 12 03:30:50 2014 +0000"
      },
      "message": "Merge \"AudioSystem: remove unused stream type\""
    },
    {
      "commit": "3bcffa136909c1fb6e88ee4efd12ccac18360a85",
      "tree": "6aedd2a1ead0fa545a93229fa2965477ec627de7",
      "parents": [
        "0ac53364b79dc72ee0c09f0efc46a22ab4374dbf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 12 18:38:45 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 13 08:56:56 2014 -0700"
      },
      "message": "force command flush after releasing a reference to shared memory\n\nAfter releasing a reference to a shared memory interface,\nIPCThreadState::self()-\u003eflushCommands() must be called to ensure\nthat the corresponding reference is also cleared immediately in the\nremote process. Otherwise the binder implementaiton will not\npush the clear systematically causing the memory region not to be freed.\n\nSee issues 10711502 and 2801375.\n\nBug: 14057166.\nChange-Id: If55f36f00d452d6cf00cf83bd2fba1c8f3abcb57\n"
    },
    {
      "commit": "b7f24b101d43139b4c747129bfbc4ecf5c468b86",
      "tree": "1d7cc6375adac742866973ab15d4d5caddf7f033",
      "parents": [
        "1a93f0cbb99fc5a59c92bd913f29409022ae236d"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jun 11 10:05:30 2014 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jun 11 10:05:30 2014 -0700"
      },
      "message": "AudioSystem: remove unused stream type\n\nThe audio stream type is not used in the getSampleRate() and\n getFrameCount() methods.\n\nChange-Id: I3d065ae272bd039204cd323cdab9b60460034f2d\n"
    },
    {
      "commit": "b4db73d022f3de3530bc2b3c9c831ccfdd1a2ead",
      "tree": "76def5c5d352697b31806a6c0b842ef1a0bc8925",
      "parents": [
        "1e54e6dfc1bb8d33089ed8857f0f194e696f85e2",
        "e541269be94f3a1072932d51537905b120ef4733"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon May 19 22:06:18 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon May 19 22:06:18 2014 +0000"
      },
      "message": "Merge \"Use new channel count functions for audio masks\""
    },
    {
      "commit": "c56f3426099a3cf2d07ccff8886050c7fbce140f",
      "tree": "9e486a809f9d500a70fd26c4e1d2596ded190dbe",
      "parents": [
        "7c96d53a65085f42ac2b6d416cbc16fd36ed72ff"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 21 17:53:17 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 19 09:46:25 2014 -0700"
      },
      "message": "Pass stereo gains as packed minifloat\n\nThis will allow (eventually) a greater dynamic range for gains.\nHowever there are still a few remaining places in effects and mixer\nthat will also need to be changed in order to get the full benefit.\n\nAlso fixes a minor bug: was not checking for NaN in AudioTrack C++.\n\nChange-Id: I63bce9e82e0a61546d8ff475fb94bcb700d99c96\n"
    },
    {
      "commit": "e541269be94f3a1072932d51537905b120ef4733",
      "tree": "39646def02d7230929eb85189f48b9193b8c23a0",
      "parents": [
        "7c96d53a65085f42ac2b6d416cbc16fd36ed72ff"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 16 11:25:07 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 16 15:05:05 2014 -0700"
      },
      "message": "Use new channel count functions for audio masks\n\nChange-Id: Ia658ab4b6320d19fdb50f123c930918724ff0ef3\nSigned-off-by: Andy Hung \u003chunga@google.com\u003e\n"
    },
    {
      "commit": "b773038277ba328696832b690b91ce6e95bd1a6c",
      "tree": "8c2ed603c214332d4599c564a49e057b6095bd15",
      "parents": [
        "8e085cbeccb1138d52a0a423af02e6ab41b4fee4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 30 15:50:31 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 07 14:24:58 2014 -0700"
      },
      "message": "Add client side support for more AUDIO_FORMAT_PCM_*\n\nAs much as possible, the checks for specific formats are done on server\nside.  The only exception is 8-bit, which needs a client side workaround.\n\nChange-Id: I52fe086c039460c8dac009de03b67eb54c56a836\n"
    },
    {
      "commit": "c4b88a8d0f524666bf0f390075c334d047a104f2",
      "tree": "a2d45172a9d794b8b626ed9acadb656e346b2e9c",
      "parents": [
        "b53fc4ef8da47df8d5f580e8ee6135866ffebc33"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 30 16:54:30 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 02 11:52:56 2014 -0700"
      },
      "message": "Fix bug for direct track with PCM !\u003d 16-bit\n\nThe AUDIO_FORMAT_PCM_8_BIT format was being converted to\nAUDIO_FORMAT_PCM_16_BIT on client side even for direct tracks.\nThat conversion was incorrect; it should only be done for mixed tracks.\n\nAlso remove checks for specific PCM formats in the generic part of\nserver side of createTrack.  Those format checks should only be done by\nthe thread.  This will allow direct tracks for PCM 8-bit, PCM 24-bit, etc.\n\nChange-Id: If5b9fd79f8642ed93e2aeabcaf4809b2ed798978\n"
    },
    {
      "commit": "877a0ac7e8677fa1cbd0e8565ad9d38ba0db5fc0",
      "tree": "ebea0b6a1baa42f5992d4eed4d0b72b85c870b2f",
      "parents": [
        "d1adad7acdff96f6518935214d93a655cc447570"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 30 17:04:13 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 30 17:04:53 2014 -0700"
      },
      "message": "Use AUDIO_INTERLEAVE_* constants\n\nChange-Id: I6609fa75c9a57fc4ca3887d626a2f4fb8b6593a1\n"
    },
    {
      "commit": "142f519aa1acd5804d111e60d100f170fed28405",
      "tree": "aaffc4a234a4b0a5e719374056edf12eb2333b29",
      "parents": [
        "ecdca392ed40e89a6ef14b86446e952c35497ac4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 17:44:59 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 14:56:54 2014 -0700"
      },
      "message": "Use symbol AUDIO_IO_HANDLE_NONE from \u003csystem/audio.h\u003e\n\nChange-Id: Id6b1aa17558eb73e17f22b8eab6cd02e00a96dff\n"
    },
    {
      "commit": "ecdca392ed40e89a6ef14b86446e952c35497ac4",
      "tree": "bf796efe37aca6ded41ca0ad4291ca344af337ac",
      "parents": [
        "51beebba9d4989d05831a13bbe5cdf53ecac1bf5",
        "66e4635cb09fadcaccf912f37c387396c428378a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 21:29:28 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 26 21:29:28 2014 +0000"
      },
      "message": "Merge \"Use symbolic constants from \u003csystem/audio.h\u003e\""
    },
    {
      "commit": "8c7b9fb41585fccb06573252823b929c82a40999",
      "tree": "b15b9c23c2440bf1df24350f1034064016110897",
      "parents": [
        "f7f21b93bfce562784ee8f632fb01a2f8e4ffa6b",
        "241618f1b286f9e7e02fe61e96d9194e2e1e8a7a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 20:44:48 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 26 20:44:49 2014 +0000"
      },
      "message": "Merge \"Remove streamType parameter from AudioSystem::getLatency()\""
    },
    {
      "commit": "ebb80e4f9873cc1a5ee3f766323f622bb0c07ae5",
      "tree": "c78d80901828a831e4562847f6ecaf03211bb2bc",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 08:21:17 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 08:27:13 2014 -0700"
      },
      "message": "Remove dead code\n\nChange-Id: I0878d11451c7bbbf96b59f5fe0cd97ba1f033aa9\n"
    },
    {
      "commit": "241618f1b286f9e7e02fe61e96d9194e2e1e8a7a",
      "tree": "fcec6a520e30f66bbb1b5e072f8aadb247724a67",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 17:48:57 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 18:09:12 2014 -0700"
      },
      "message": "Remove streamType parameter from AudioSystem::getLatency()\n\nChange-Id: Ie7346e93436ddc215cad7d16be555dcb6c277d54\n"
    },
    {
      "commit": "66e4635cb09fadcaccf912f37c387396c428378a",
      "tree": "7982a54dbc04375babd42e59c03ef930454a9687",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 17:44:23 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 16:22:54 2014 -0700"
      },
      "message": "Use symbolic constants from \u003csystem/audio.h\u003e\n\nAUDIO_INTERLEAVE_*\nAUDIO_STREAM_MIN\nAUDIO_SESSION_ALLOCATE\n\nChange-Id: I31dd6f327204685e50716079ce21c4ba206dff11\n"
    },
    {
      "commit": "c5a17425986b4ce3384e6956762c86018b49c4a0",
      "tree": "313484677c719c944bc7923b0c3766cba3bef5c6",
      "parents": [
        "c3df838434b37d8400eea2438083cc01a4c1cc71"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 13 14:59:59 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 14 14:49:36 2014 -0700"
      },
      "message": "Remove name output parameter from createTrack\n\nIt was only used for one log.\nA better solution will be a per-track unique ID.\n\nChange-Id: Ia440e02ae4a5a4019a9a2d08970e1ee93ac4c3a3\n"
    },
    {
      "commit": "c644345b0b8f5292a049c4cee2bb7a2a6159b884",
      "tree": "423a2a937e693746189cf51852d0e727c418471b",
      "parents": [
        "1ac1638077277de52d1dd4c54db71e67753f1960",
        "720ad9ddb2ac6b55b0dfbfcd2d8360151d8ac427"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Mar 11 17:12:36 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 11 17:12:37 2014 +0000"
      },
      "message": "Merge \"AudioTrack non-blocking write\""
    },
    {
      "commit": "3a90f2849d49bf65f2d6257fd6da30ae46d745fa",
      "tree": "992a54b006e96de6f62b2b0420bf352935b775c9",
      "parents": [
        "664334fc2204b9968e1600313383f5a6ff321811"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Mar 10 11:21:43 2014 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Mar 10 11:21:43 2014 -0700"
      },
      "message": "Fix freeze on pause\n\nisOffloaded() tries to lock mLock again. We should be calling isOffloaded_l()\nb/13394633\n\nChange-Id: I155be6fee937f894d8e6c974e593223ab6014ade\n"
    },
    {
      "commit": "1c32a00b8750998562a8d76351ba5c6d2ed788c8",
      "tree": "68ac5f1ccd1c53a7ba7da918eec2ea96c5918b94",
      "parents": [
        "1bdf803fde294017d8b504891618f688a21a2e75",
        "96f04886d1c1bfbc422e2be033ea66be83e42441"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 07 01:28:22 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 07 01:28:23 2014 +0000"
      },
      "message": "Merge \"Simplify AudioTrack stream end and fix race\""
    },
    {
      "commit": "7064fd2dcdfeafea53cd5a992bb78c413542f29f",
      "tree": "eb8961194a192128c7db06f5c0de50f9a72b93cd",
      "parents": [
        "48588bdd9ec1102a5e96b9033d1ed8b8d6a3b3ba"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Jan 08 13:59:53 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 06 11:38:38 2014 -0800"
      },
      "message": "AudioTrack: When paused, return cached playback position\n\nAn offload output can be re-used between two audio tracks having\nthe same configuration. A timestamp query for a paused track\nwhile the other is running would return an incorrect time.\nTo fix this, cache the playback position on a pause() and return\nthis time when requested until the track is resumed.\n\nBug: 12826612.\nChange-Id: I324112ea9827e52fff53ef44cd8513c8d85a0bc4\n"
    },
    {
      "commit": "720ad9ddb2ac6b55b0dfbfcd2d8360151d8ac427",
      "tree": "58049745c0426d9b615a3891419963f2589edd7b",
      "parents": [
        "56df9ff31d583ad3eae4f279a3df550273c58e1e"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Feb 04 11:00:59 2014 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Mar 03 10:44:27 2014 -0800"
      },
      "message": "AudioTrack non-blocking write\n\nBug 7531968\n\nChange-Id: I6d0e79fa8cab5b6eb36bcc34977f4cf0d7eec8ea\n"
    },
    {
      "commit": "33ca5cf8826f5fcd9c011e8d336138b62d982f2a",
      "tree": "19546ee5a21f0706d2d190f840b056f8fd278ef2",
      "parents": [
        "9cf4f07c2dc5d4f14bfd1adee691667eb55882ec",
        "c6ba823a397abf865b02f4f48fe18231f94d8e87"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 28 19:49:48 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 28 19:49:48 2014 +0000"
      },
      "message": "Merge \"Make openRecord_l more like createTrack_l for fast tracks: part 1\""
    },
    {
      "commit": "bce50bfc3846ab008bafa75c5d3f29fd7b5395f7",
      "tree": "ebefb9f660bf71aec96bd297e155d12c9d3588e8",
      "parents": [
        "838b3d8bafa4a781e277870dee4e0390165cff52"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 27 15:29:51 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 28 07:56:38 2014 -0800"
      },
      "message": "Fix type of AudioTrack/AudioRecord parameter frameCount\n\nIt\u0027s size_t consistently\n\nChange-Id: I29638ef59ac773218025f2403a3508a307b487e0\n"
    },
    {
      "commit": "838b3d8bafa4a781e277870dee4e0390165cff52",
      "tree": "b70ff81e8ef1c9fcdc21aad7fd07dfe793ad6872",
      "parents": [
        "484b4cd809aa46a54791d5c82a78d0f8aac895cf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 27 15:30:41 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 28 07:56:34 2014 -0800"
      },
      "message": "Fix type of AudioTrack/AudioRecord parameter notificationFrames\n\nIt\u0027s uint32_t consistently\n\nChange-Id: If8298c7e9aeea2b951fe47b675adbdf48d104846\n"
    },
    {
      "commit": "c6ba823a397abf865b02f4f48fe18231f94d8e87",
      "tree": "dcb8d8bb9f8c03bcf921184c9833862003e70f54",
      "parents": [
        "8897759002677a7072a51a7f0b7cc63761c5f2d4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 27 13:34:29 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 27 13:34:29 2014 -0800"
      },
      "message": "Make openRecord_l more like createTrack_l for fast tracks: part 1\n\nUse the transfer mode to distinguish use cases, as the presence of\na callback handler is not sufficient.  For example, the track could be\nconfigured for synchronous transfer with write() or read(), and also\nhave a callback handler for position updates.  But that does not mean\nthe track can operate in fast track mode.\n\nChange-Id: I2a7f1f0ca98e68efe180b524496985109d8ce291\n"
    },
    {
      "commit": "c08d20b6a37122ebf116262c9372509ed060d4c1",
      "tree": "ea9f9586612094d800e2a3498f0b9b4573f609ad",
      "parents": [
        "045e739161f5ae00321a6cfba20935abb791005b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 24 15:21:10 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 25 15:20:49 2014 -0800"
      },
      "message": "Simplify error handling after track creation\n\nIAudioFlinger::createTrack and IAudioFlinger::openRecord\nboth guarantee that (status \u003d\u003d OK) \u003d\u003d (sp\u003c\u003e !\u003d 0).\n\nChange-Id: I91cb4f7e843019efb65cace7ba146f7da7aa5b59\n"
    },
    {
      "commit": "5f631515d098c29603cda88f7a7e7580a2d55b57",
      "tree": "74b2b5ec4b6aeddeffcb6c04c833a3d4030660dd",
      "parents": [
        "e3247bf8dd4f8fa8dfa3a108260241ae4a967569"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 24 15:16:07 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 24 17:21:41 2014 -0800"
      },
      "message": "Unify comments and whitespace between AudioTrack and AudioRecord\n\nChange-Id: I5320a6b2d7f7077cb12d7da4f2ca30a940100bf2\n"
    },
    {
      "commit": "e3247bf8dd4f8fa8dfa3a108260241ae4a967569",
      "tree": "9b1ffe395ab3c15a4baa71bcb91022a2a2f21bb0",
      "parents": [
        "11cb175005db0090345f44bfa049b52fd8c809b8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 24 15:19:07 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 24 17:21:37 2014 -0800"
      },
      "message": "Update channel fields at same place in AudioTrack and AudioRecord\n\nChange-Id: I4b649feeef47e7968a9fa3a460217017ca9b05fe\n"
    },
    {
      "commit": "86f04663032ddaa25110149d709bbf896ad83b02",
      "tree": "014693a35b36f4cee533a39bfb20025e99af9887",
      "parents": [
        "dc6ac201032d0f6ad0c8149ae2f009ec38693025"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 24 15:13:05 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 24 17:21:29 2014 -0800"
      },
      "message": "Add log at entry to set() in AudioTrack and AudioRecord\n\nChange-Id: Ife23b88474c1d62c0cf682c1a310d951f2c0f54a\n"
    },
    {
      "commit": "d457c970c8d08519cd77280a90b61ae1e342cfe3",
      "tree": "f0f409db4d834b4d70b2244dd97dfa707496df50",
      "parents": [
        "1d6fa7af1288b550faabe4ec2cf98684236723db"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 11 08:47:07 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 11 12:39:43 2014 -0800"
      },
      "message": "Track pid for each session\n\nso they can be properly freed.\n\nChange-Id: I6f389035bc29e74e7c367c1c6d0252b180f666b3\n"
    },
    {
      "commit": "1d6fa7af1288b550faabe4ec2cf98684236723db",
      "tree": "a8801ca9a0925ba1faccf17acea4aa78d71a9d29",
      "parents": [
        "b82a9f105f89d6b3684c9f626918042bd8977912",
        "566be7c33fc56ae4c34168ecbee5316374f7e3c5"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 13:47:53 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 13:53:20 2014 +0000"
      },
      "message": "resolved conflicts for merge of 566be7c3 to master\n\nChange-Id: I7b1cc71057b2bd4f771e7bcf508a8c3abd6017ce\n"
    },
    {
      "commit": "377b2ec9a2885f9b6405b07ba900a9e3f4349c38",
      "tree": "b938e1d75a1beefae86244f287ca22f4a277740d",
      "parents": [
        "cdda7bf4d3ca9cad6979374a18dd5be79ea83d80"
      ],
      "author": {
        "name": "Kévin PETIT",
        "email": "kevin.petit@arm.com",
        "time": "Mon Feb 03 12:35:36 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Feb 11 11:40:06 2014 +0000"
      },
      "message": "Make frameworks/av 64-bit compatible\n\nContains the necessary changes to make frameworks/av build and work\non a 64-bit machine.\n\nSigned-off-by: Craig Barber \u003ccraig.barber@arm.com\u003e\nSigned-off-by: Kévin PETIT \u003ckevin.petit@arm.com\u003e\nSigned-off-by: Ashok Bhat \u003cashok.bhat@arm.com\u003e\nSigned-off-by: Marcus Oakland \u003cmarcus.oakland@arm.com\u003e\n\nChange-Id: I725feaae50ed8eee25ca2c947cf15aee1f395c43\n"
    },
    {
      "commit": "43bdc1de363a3c72c7dcf9c9a898bac109dc7cb5",
      "tree": "ef6644e90c7939011748527d08c423dfefa25889",
      "parents": [
        "4b76d27d6c4751b31a1cb8ac5e6da1d4b7724a7b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 10 09:53:55 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 10 10:17:48 2014 -0800"
      },
      "message": "Fix build after merge from AOSP\n\nChange-Id: I1cd3432c02db1600e49ade67e6a89e39e7a8d3ed\n"
    },
    {
      "commit": "3523e8c40bc60af0c95d1aa71a51a13d69ec80a2",
      "tree": "92a10a14b54f22f8b4af00dd493d6514b585473f",
      "parents": [
        "2ca060c742a47034cea0ad2fb4aa10f0d6b59a09",
        "4e12dadeec10993d2f77cce96600e73ca0dd86e2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Mon Feb 10 18:17:02 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 10 18:17:02 2014 +0000"
      },
      "message": "am 4e12dade: am 4361749d: Merge \"AudioTrack: Never try to use the fast path if resampling is required\"\n\n* commit \u00274e12dadeec10993d2f77cce96600e73ca0dd86e2\u0027:\n  AudioTrack: Never try to use the fast path if resampling is required\n"
    },
    {
      "commit": "cac3daa6332bf6d1f7d26adc4a9915f3d7992dd9",
      "tree": "806b4634036e26630acbed0f0dac907bec5ca7b5",
      "parents": [
        "010c4c8ec50eb04ece15f792c508a3b869749310"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 09:47:14 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 09:52:20 2014 -0800"
      },
      "message": "Use printf format %#x for audio_format_t in logs\n\nChange-Id: I1c611d1037685d52ccc84efe0fccd6413ec938e9\n"
    },
    {
      "commit": "398f21348e5100289f6e5be30c8b5257fa04aaf9",
      "tree": "26fb40e2808e33bcad41a36d263bc26b02f5c62c",
      "parents": [
        "c4eef29af4e306319d8741e0c3ade1ede9a0a2b5"
      ],
      "author": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Fri Jan 31 13:30:15 2014 +0200"
      },
      "committer": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Fri Jan 31 13:30:15 2014 +0200"
      },
      "message": "AudioTrack: Never try to use the fast path if resampling is required\n\nUnless AudioFlinger was built with FAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE\nenabled, AudioFlinger would deny using the fast path (and internally\nfall back to the normal codepath) when it realized that resampling\nwas required. Since the buffer size calculations within AudioFlinger\ndon\u0027t take resampling into account properly (see the calculation\nbelow \"AUDIO_OUTPUT_FLAG_FAST denied\" in audioflinger/Threads.cpp,\njust below the hunk that this patch changes), make sure AudioTrack\ndoesn\u0027t try to use the fast path if resampling is required.\n\nThis removes the possibility to enable\nFAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE in AudioFlinger since it\nAudioTrack now won\u0027t even try to use the fast path for content\nthat requires resampling, regardless of the AudioFlinger configuration.\n\nChange-Id: Icf0f8ad50bf0fdb84657f518c0120aa0535f23f9\n"
    },
    {
      "commit": "df576995a5aad3428aeeef765387d650945c161d",
      "tree": "51ee9bf8e0ac8b559547d4b12cd531ac037ae0e7",
      "parents": [
        "b2b9b2dbdbc0445080d3c2d15212a43ba1f9cff1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 27 18:13:39 2014 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 27 18:13:39 2014 -0800"
      },
      "message": "AudioTrack: fix obtainBuffer timeout calculation\n\nAudioTrack::obtainBuffer() passes a pointer to a timeout\nvariable that has gone out of scope when calling\nClientProxy::obtainBuffer().\n\nSame fix for AudioRecord.\n\nBug: 11968591.\nChange-Id: I22af8f94fa2f8cc54ab5c25c89167c805e754317\n"
    },
    {
      "commit": "363fb75db26698cbb50065506e0c80b61d1fbf92",
      "tree": "9c2e92f3780c2885233fe117018cdbbde3997dc9",
      "parents": [
        "38e905b3cbba4da443d799b16999989781afc6d8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 15 12:27:31 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 24 13:22:57 2014 -0800"
      },
      "message": "Remove the redundant parameters from createTrack_l()\n\nAudioRecord::openRecord_l() code was refactored earlier to\nremove the redundant parameters:\n    \u003e Change-Id: I124dce344b1d11c2dd66ca5e2c9aec0c52c230e2\n\nThis changelist refactors AudioTrack similarly.\n\nChange-Id: Iefd2bd662870ea81d04eff7b7c26f9c8b0dadd26\n"
    },
    {
      "commit": "38e905b3cbba4da443d799b16999989781afc6d8",
      "tree": "47b872b97f1af95c3e0ceefb1f8d56c9ae7a67fc",
      "parents": [
        "f0002d142e6d24c5438600b2c259679de710f8ac"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 10:21:48 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 24 13:19:59 2014 -0800"
      },
      "message": "Refactor code related to I/O handles to reduce chance for leaks\n\nThe AudioRecord input handle code was refactored earlier\nto fix a potential handle leak, and to simplify the code:\n    \u003e Change-Id: I124dce344b1d11c2dd66ca5e2c9aec0c52c230e2\n\nThis changelist refactors AudioTrack similarly,\nand adds further cleanup of both AudioTrack and AudioRecord.\n\nWe attempt to implement the rules for referencing counting I/O handles,\nbut there is still the possibility of a handle leak if the client process\ndies after allocating the handle reference but before releasing it.\nThat issue is being tracked separately.\n\nDetails:\n - AudioSystem::getOutput() is now called within createTrack_l\n - restoreTrack_l was missing offload info\n   now it has the info available,\n   but is not yet being called for offloaded tracks\n - AudioTrack::getOutput() is now const\n - Remove getOutput_l()\n\nChange-Id: I44a0a623d24fc5847bcac0939c276400568adbca\n"
    },
    {
      "commit": "f0002d142e6d24c5438600b2c259679de710f8ac",
      "tree": "20e5013fa14f2d5339868c1b08396f7b852a2123",
      "parents": [
        "c69b91ceae6255e41c5413796fb0ed4f7af45b15",
        "74935e44734c1ec235c2b6677db3e0dbefa5ddb8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 24 16:13:50 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 24 16:13:51 2014 +0000"
      },
      "message": "Merge \"Replace control block frameCount_ by explicit in/out parameter\""
    },
    {
      "commit": "1071915ad4ffb47825a946706f8fa73c0d22d7f8",
      "tree": "a67c0a6d91515f0fffb90e102d4897626c5f5d79",
      "parents": [
        "9c1aaa7fee4b17d3675af6108c5ff28f3a84c8ec",
        "b5ccb2d99b2af400c70777a6452f090ac14f5a96"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 20:15:07 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 17 20:15:08 2014 +0000"
      },
      "message": "Merge \"Make copy of audio_offload_info_t for future use\""
    },
    {
      "commit": "543140eb709a07bc386eb5f667a4a72e31dba56c",
      "tree": "b48f2d74e75f6de5a8db09ac47eaf9caefc089ff",
      "parents": [
        "0ce5ca5e113d58cbcb7cb48615d6dbbf3fbe7c66",
        "dd5f4c8c4059f890e81b28b026a688febb4e1dd9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 20:00:48 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 17 20:00:48 2014 +0000"
      },
      "message": "Merge \"Move up initialization of mFormat, mStreamType, and mSharedBuffer earlier\""
    },
    {
      "commit": "0ce5ca5e113d58cbcb7cb48615d6dbbf3fbe7c66",
      "tree": "b5f59ae15e5f5ea59a171f7677e2a8403361f80a",
      "parents": [
        "d0b33f63a9364364a827e77da26b112edf3c4d6e",
        "0cde076ddb283c84c3801a2df4cc3df99bd1577f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 19:15:57 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 17 19:15:57 2014 +0000"
      },
      "message": "Merge \"Cleanup createTrack error handling\""
    },
    {
      "commit": "d0b33f63a9364364a827e77da26b112edf3c4d6e",
      "tree": "2fc99dd12b5b0a261f880c926a3e903177cb7550",
      "parents": [
        "269a7e210949c4b28ba84dc71b9f99f6ef14f94e",
        "7103d9671ded507fd3f6938297019a32f71ea5a0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 18:54:08 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 17 18:54:09 2014 +0000"
      },
      "message": "Merge \"Remove dead code in AudioTrack::processAudioBuffer\""
    },
    {
      "commit": "a1ebc3b03d4dca534374c19e3c4f32ee687942e3",
      "tree": "2efa82e62c51647410cb473392e811da6c4c4e0d",
      "parents": [
        "6d88aaf9cd810d96a4888dff8bd33d44cd01ccaa",
        "70c0bfbe5ec88dcc3efa2bd8df26f36cff1cf03a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 17:52:53 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 17 17:52:53 2014 +0000"
      },
      "message": "Merge \"Improve logs in AudioTrack::getMinFrameCount\""
    },
    {
      "commit": "32a7e0a5f7b000951b9adb80b17796f35b024816",
      "tree": "75d9dd61e3e3abe0c459650a97c57bac3780f8ca",
      "parents": [
        "a238b9b43a2b8dac60e0fd8700daa6cd4f644547",
        "2b2165c75790050810460c8de3f414876bce4c0e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 17 15:36:52 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 17 15:36:53 2014 +0000"
      },
      "message": "Merge \"Unify comments between AudioTrack and AudioRecord\""
    },
    {
      "commit": "b5ccb2d99b2af400c70777a6452f090ac14f5a96",
      "tree": "2285b78fd6e07eaf38b6e48e149fca91c2acc481",
      "parents": [
        "dd5f4c8c4059f890e81b28b026a688febb4e1dd9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 14:42:43 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 17:03:16 2014 -0800"
      },
      "message": "Make copy of audio_offload_info_t for future use\n\nChange-Id: I515970aa0660418d5d1640fb1bf477e112c89bdd\n"
    },
    {
      "commit": "dd5f4c8c4059f890e81b28b026a688febb4e1dd9",
      "tree": "f109b6d755352250744e91b22ca1eb567aeacd25",
      "parents": [
        "0cde076ddb283c84c3801a2df4cc3df99bd1577f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 10:26:32 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 17:03:08 2014 -0800"
      },
      "message": "Move up initialization of mFormat, mStreamType, and mSharedBuffer earlier\n\nThis will allow removal of most of the parameter list to createTrack_l.\n\nAlso check for valid stream type at client so we can log a better error\nmessage.\n\nChange-Id: Ia7176896d47fbb49106119fca26d9de8e7efe859\n"
    },
    {
      "commit": "0cde076ddb283c84c3801a2df4cc3df99bd1577f",
      "tree": "9f1d49f9fc52a5cedea8e0bd14555a70ab5772b0",
      "parents": [
        "a238b9b43a2b8dac60e0fd8700daa6cd4f644547"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 15:06:36 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 17:01:04 2014 -0800"
      },
      "message": "Cleanup createTrack error handling\n\nSimilar to cleanup done earlier for openRecord in this CL:\n    \u003e Change-Id: I84897dd7d30b370640b54e928f230604b873cb68\n\nBug: 10888816\nChange-Id: I804a47f898e0319a60a9bd58906bbb037e45cc25\n"
    },
    {
      "commit": "70c0bfbe5ec88dcc3efa2bd8df26f36cff1cf03a",
      "tree": "f9a044e3ca073fb760e1d8f470f219bc2a307065",
      "parents": [
        "a238b9b43a2b8dac60e0fd8700daa6cd4f644547"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 14 15:47:01 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 11:46:40 2014 -0800"
      },
      "message": "Improve logs in AudioTrack::getMinFrameCount\n\nChange-Id: I8b478e6abdded26a43f32c131931939e9ae36fd7\n"
    },
    {
      "commit": "7103d9671ded507fd3f6938297019a32f71ea5a0",
      "tree": "5b5bb74201f1d035113988d177d14b27ca455981",
      "parents": [
        "a238b9b43a2b8dac60e0fd8700daa6cd4f644547"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 14 15:47:52 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 16 11:45:10 2014 -0800"
      },
      "message": "Remove dead code in AudioTrack::processAudioBuffer\n\nChange-Id: I0baefe9dc08bb5ec45d34698fc764caa160789d2\n"
    },
    {
      "commit": "ac1954cb9a480a409e8cee4193fc534a6a29fbb6",
      "tree": "fd15f328d3a8df1f62d1cd85f3d5b73b4ea38623",
      "parents": [
        "dbed8955148dd2fe39584007c528e3a532f1a04e",
        "396fabdb6efcdac5aea3d9f559d1beedf6a4cedc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 15 18:51:03 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 15 18:51:03 2014 +0000"
      },
      "message": "Merge \"Document AudioTrack mFrameCount and mReqFrameCount better\""
    },
    {
      "commit": "2b2165c75790050810460c8de3f414876bce4c0e",
      "tree": "d0051f908567bbd815ae5a163443f1f5809493ba",
      "parents": [
        "23a7545c4de71e989c2d8ebf1d5b9dcf463c36a9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 08:53:36 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 14 16:01:20 2014 -0800"
      },
      "message": "Unify comments between AudioTrack and AudioRecord\n\nChange-Id: I00a1025e2891a1c96218b3c2187eaddda6614ebc\n"
    },
    {
      "commit": "23a7545c4de71e989c2d8ebf1d5b9dcf463c36a9",
      "tree": "13f9b25c2dcc70506e3c743c817fce0998021be9",
      "parents": [
        "84fba38b60c2ddb02b9a787f56be88fc084b4a16"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 10:37:17 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 14 14:20:18 2014 -0800"
      },
      "message": "Document locking rules for mFlags, and fix discrepancies\n\nChange-Id: Id45ba544cc84133ed5e578fb4fd8a11b62211dc1\n"
    },
    {
      "commit": "84fba38b60c2ddb02b9a787f56be88fc084b4a16",
      "tree": "93537d89d01de689dd05d21d52181a6faf06950a",
      "parents": [
        "7e47f25f9031e231f5fdbbb789435485d1af45af",
        "2c6c5294388e251ebc1e00d6c8785190561c27fc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 14 20:36:18 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 14 20:36:18 2014 +0000"
      },
      "message": "Merge \"Fix race in AudioTrack::getParameters()\""
    },
    {
      "commit": "b1bef51fec06e8bceec914d1b48b411d3ff2adff",
      "tree": "983ad9a9d60191bb82b3537280229312bd6c0554",
      "parents": [
        "aaa42e57797db140ead1068dce6340ffd33fa005"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 10:25:53 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 12:05:17 2014 -0800"
      },
      "message": "Improve error logging for getOutputSamplingRate\n\nChange-Id: I3b52402a663b27efe1d7c6a4f684521f33f3ff8f\n"
    },
    {
      "commit": "2c6c5294388e251ebc1e00d6c8785190561c27fc",
      "tree": "9f61bedb0d81ee785c2ea86e198d4c18d6bc84b7",
      "parents": [
        "aaa42e57797db140ead1068dce6340ffd33fa005"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 10:29:08 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 13 11:48:33 2014 -0800"
      },
      "message": "Fix race in AudioTrack::getParameters()\n\nmOutput is protected by mLock.\n\nChange-Id: Id02e627062855ca60f28bd8961b1d5f44939c727\n"
    },
    {
      "commit": "396fabdb6efcdac5aea3d9f559d1beedf6a4cedc",
      "tree": "28a5b52e5cb0632088d48cafff65cd271518b183",
      "parents": [
        "6340829ffb9ff7586ffb88a214f56340d4c70d60"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 08 08:54:23 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 10 10:53:22 2014 -0800"
      },
      "message": "Document AudioTrack mFrameCount and mReqFrameCount better\n\nand remove unnecessary initialization of mFrameCount in set().\n\nChange-Id: I9effeb0a6dd035ca02fe77f6992c55d9515b4df6\n"
    },
    {
      "commit": "66a0467fdddada4caabd0f0a999fbb367fea7bee",
      "tree": "eec798c0690b0be60c3e9dd4bb2d691901855e9f",
      "parents": [
        "4d973f3894a50413f21e7db284e96afc87f57698"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 08 08:53:44 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 08 11:56:05 2014 -0800"
      },
      "message": "Cleanup AudioTrack::getMinFrameCount error handling\n\nGuarantee to return a non-zero frameCount for return status NO_ERROR;\n\nReturn the correct specific status_t if any of the AudioSystem APIs fail,\ninstead of the generic NO_INIT.\n\nAPI change: getMinFramCount no longer defaults to zero on error, so\ncallers _must_ check the return status.  This change makes\ngetMinFrameCount more like other APIs.  All known callers were reviewed,\nand they do check the return status.\n\nChange-Id: I4a8342a75ee89a068c23c84b8380ed9d1b968507\n"
    },
    {
      "commit": "74935e44734c1ec235c2b6677db3e0dbefa5ddb8",
      "tree": "dc7bc2c9f496097e95ff36440fcd79886517ba53",
      "parents": [
        "bd72d22097f78f5bd668b223bc8c94e351311e31"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 19 08:56:45 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 20 08:40:55 2013 -0800"
      },
      "message": "Replace control block frameCount_ by explicit in/out parameter\n\nin IAudioFlinger::createTrack and IAudioFlinger::openRecord\n\nChange-Id: I09c644c80e92c8e744b1b99055988a2588b2a83d\n"
    },
    {
      "commit": "7c7be1e05634d96d08210efb4bdeb012ffba440d",
      "tree": "662376e86a6d2890e18066065fd8cb031bcb6be4",
      "parents": [
        "bd72d22097f78f5bd668b223bc8c94e351311e31"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 19 16:34:04 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Dec 19 17:17:58 2013 -0800"
      },
      "message": "Fix some (but not all) unused parameter warnings\n\nChange-Id: Ia99e23a0b46db3f3e6aa46f9018e63c14f4af369\n"
    },
    {
      "commit": "dfeed91152cb54772b1411d7e82833ca4a48efcc",
      "tree": "f810edada58774d551fe674bc3b7f9507365fad7",
      "parents": [
        "9060d498be0c54d3caf84e2dbf1ba62516b3e76e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 27 14:29:13 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 17 22:05:05 2013 +0000"
      },
      "message": "AudioTrack: fix position callback after restore\n\nWhen restoring an AudioTrack, the next position callback point\nshould not be modified and set ahead of current buffer head.\nOtherwise, as frames are dropped, the new position is never reached\nand an application relying on position callbacks to reload the buffer\nwould be stalled.\n\nBug: 11868603.\nChange-Id: I93b2a311642a0c89944b78bcc0482d4ceed98ae4\n"
    },
    {
      "commit": "5e49afd05566820517747b9a8071c99ec0918328",
      "tree": "0dd9697822c0bd70f03bb776bc78e2da60f28991",
      "parents": [
        "a67c76538fff102cd44b2f38dd073df5f2a33605"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 26 17:16:50 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 17 13:41:37 2013 -0800"
      },
      "message": "update offloaded audio track sampling rate\n\nAudioPlayer must read the sampling rate from offloaded audio sinks\nwhenever a new time position is computed as the decoder can update\nthe sampling rate on the fly.\n\nChange-Id: I997e5248cfd4017aeceb4e11689324ded2a5bc88\n"
    },
    {
      "commit": "688ca6330a5e7d072f67a1791e464fa7dec08b72",
      "tree": "876abb6ec32d531ae0f2dd62b5d4d04ed725f9f9",
      "parents": [
        "e175e5ec1636fc638465187f3d5c6166d92388ed",
        "5c474238bc579224ec8f7267d05651b0aa934100"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 17 16:35:48 2013 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Dec 17 16:35:48 2013 +0000"
      },
      "message": "am 5c474238: am 5893736d: am a67c7653: Merge \"Increase kFastTrackMultiplier from 1 to 2\"\n\n* commit \u00275c474238bc579224ec8f7267d05651b0aa934100\u0027:\n  Increase kFastTrackMultiplier from 1 to 2\n"
    },
    {
      "commit": "a67c76538fff102cd44b2f38dd073df5f2a33605",
      "tree": "da803da6b3053b23ad6c5ebbd33fd7667e2697b3",
      "parents": [
        "a0e1c3918dd1356445df98e89dab6be2c8a78da3",
        "b5fed68bcdd6f44424c9e4d12bfe9a3ff51bd62e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 17 16:26:41 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 17 16:26:41 2013 +0000"
      },
      "message": "Merge \"Increase kFastTrackMultiplier from 1 to 2\""
    },
    {
      "commit": "b5fed68bcdd6f44424c9e4d12bfe9a3ff51bd62e",
      "tree": "12cac79b78992586c8f8da4f618a020f40d92441",
      "parents": [
        "92630351d265a61faae2dfe006a8bb330283aa7b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 03 09:06:43 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Wed Dec 04 17:12:42 2013 -0800"
      },
      "message": "Increase kFastTrackMultiplier from 1 to 2\n\nChange-Id: I158f147295eebcea96e4047d7618069bc48bdd7d\n"
    },
    {
      "commit": "b31788687736666e58b852e744a93f772d3f7148",
      "tree": "30abfcaff66b51602640c8b2e3400dc4b65093ee",
      "parents": [
        "2df921d05de1ae45173b0df64353049eafede019"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 27 14:29:13 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 27 14:50:44 2013 -0800"
      },
      "message": "AudioTrack: fix position callback after restore\n\nWhen restoring an AudioTrack, the next position callback point\nshould not be modified and set ahead of current buffer head.\nOtherwise, as frames are dropped, the new position is never reached\nand an application relying on position callbacks to reload the buffer\nwould be stalled.\n\nBug: 11868603.\nChange-Id: I93b2a311642a0c89944b78bcc0482d4ceed98ae4\n"
    },
    {
      "commit": "6f59db12a64f4496866952a251122ccb77a36c6b",
      "tree": "29fcb69aa1f491974ec2b2ea5a01155b53940be5",
      "parents": [
        "23700debf767ef7fdfc30d96612771c3a03ad40d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 26 17:16:50 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 09:09:51 2013 -0800"
      },
      "message": "update offloaded audio track sampling rate\n\nAudioPlayer must read the sampling rate from offloaded audio sinks\nwhenever a new time position is computed as the decoder can update\nthe sampling rate on the fly.\n\nChange-Id: I997e5248cfd4017aeceb4e11689324ded2a5bc88\n"
    },
    {
      "commit": "8ba90326d683b035d99e24db669093e4602a7149",
      "tree": "f7ee24ee1580a7e90cd9b38fdbf28c4dd6898811",
      "parents": [
        "d21952fe5bc94f7bb6ee729f806c0e641fdb1a0d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 30 11:29:27 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 08 11:26:57 2013 -0800"
      },
      "message": "Remove default channel mask for AudioTrack\n\nIt doesn\u0027t make sense to have a default channel mask, since the caller\nneeds to know what format it will use when supplying data, and there\nis currently no API to return the channel mask of an AudioTrack.\naudio_is_output_channel() does not allow 0, so it will catch any\nstragglers (I\u0027m not aware of any).\n\nAlso move channel mask validation earlier.\n\nChange-Id: Ia018ded8711455581a2a935f37432b049422d492\n"
    },
    {
      "commit": "9cae217050aa1347d4ac5053c305754879e3f97f",
      "tree": "dff82f277cba8f34af39eaeeb00adec01bbda26c",
      "parents": [
        "be567be3f92026f5964c1c9ecce00e30bb7df412"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 14 14:12:05 2013 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 14:06:03 2013 -0700"
      },
      "message": "Assign blame for playback wakelocks.\n\nSet a work source for the playback wakelock, so that playback is\ncounted against the requesting app instead of the media server.\n\nCherrypicked from master.\n\nb/9464621\n\nChange-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31\n"
    },
    {
      "commit": "462fd2fa9eef642b0574aa7409de0bde3fec8d43",
      "tree": "65446a138d197f062bf199480b96cca4df560fcf",
      "parents": [
        "f7d89bd79d170be3b299717ac11aff62909314c5"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 14 14:12:05 2013 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 11:13:17 2013 -0700"
      },
      "message": "Assign blame for playback wakelocks.\n\nSet a work source for the playback wakelock, so that playback is\ncounted against the requesting app instead of the media server.\n\nChange-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31\n"
    },
    {
      "commit": "abe0948c7b9aa32dceb82cebbfca52beb782754b",
      "tree": "a9018d0695d2a0221b8ce5e2dca84eb6bdec92e1",
      "parents": [
        "85b56a702f155cda9b945bcbadaa89e0f9ecc4a8",
        "b2059ff384eee8ffb70a7ec8fc5570405201c734"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 16 18:12:55 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 16 18:12:55 2013 -0700"
      },
      "message": "am b2059ff3: am f8f15b05: Merge \"Fix race condition in AudioTrack::pause followed by start\" into klp-dev\n\n* commit \u0027b2059ff384eee8ffb70a7ec8fc5570405201c734\u0027:\n  Fix race condition in AudioTrack::pause followed by start\n"
    },
    {
      "commit": "f8f15b05fe051009945c9042a1a9260280e0feb2",
      "tree": "28fd5dede6b2aae34a9b3b987049f3331ace5037",
      "parents": [
        "787c0d04ac4f9c938a1311f8e30d9d7ac2b8a6da",
        "598de6c701e989385eeffa7c5dfd61f0459a2631"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 17 00:59:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 17 00:59:33 2013 +0000"
      },
      "message": "Merge \"Fix race condition in AudioTrack::pause followed by start\" into klp-dev"
    }
  ],
  "next": "598de6c701e989385eeffa7c5dfd61f0459a2631"
}
