)]}'
{
  "log": [
    {
      "commit": "e13f8a603867280de9b02ce4839202a182556416",
      "tree": "adfd4bef77236d67dd7c1e862740448bc82ba7d4",
      "parents": [
        "ea2b9c07b34079f0dbd8610a511e006e69a15adc"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 30 14:20:42 2016 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 01 16:56:02 2016 -0700"
      },
      "message": "NuPlayer: Play out remaining audio data when recycling isn\u0027t possible\n\nDon\u0027t flush it immediately.\n\nBug: 26530291\nChange-Id: I0427633402fa251ec62e2b70e47a0a7b451d3ea2\n"
    },
    {
      "commit": "ea2b9c07b34079f0dbd8610a511e006e69a15adc",
      "tree": "95898426bb80bdc743a0746bc8149f1ba313dfde",
      "parents": [
        "1b9e52cd6553e60f02663c02e7b75f05ec2ef351"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 17:06:53 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 31 14:45:36 2016 -0700"
      },
      "message": "Implement client playback timestamps with 64 bit accuracy\n\nProvide server timestamps if the HAL doesn\u0027t provide it.\nProvide monotonic - boottime translation.\n\nBug: 17472992\nBug: 26682703\nBug: 27749434\nChange-Id: I6c9b213d9f9284092e34d57f52870e02c72df62a\n"
    },
    {
      "commit": "5fe2151459fd6c88958c5ebd71f28004d49d8b65",
      "tree": "a6cc27e2e0e5646c01c8e3bbbf53f89a1bbccb99",
      "parents": [
        "eb130ab1c351801ea9f8cf91e2e141036a0fe5c9",
        "7a490e7ab39ef0b22baf24b03f2463c46dc068ed"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 29 17:51:14 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 29 17:51:15 2016 +0000"
      },
      "message": "Merge \"Read from proxy for PCM direct and offloaded track position\" into nyc-dev"
    },
    {
      "commit": "7a490e7ab39ef0b22baf24b03f2463c46dc068ed",
      "tree": "067f8a45cc1e8e95e938caa96ea3d9d186607289",
      "parents": [
        "fdb90f355b269737fe48a2da0593b37d5c2b83c1"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Mar 23 15:58:10 2016 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 28 17:22:50 2016 -0700"
      },
      "message": "Read from proxy for PCM direct and offloaded track position\n\nBug: 27776737\nChange-Id: I721bf2b4d46271bf84ad9fc29ff5c4ecd4759206\n"
    },
    {
      "commit": "9b3359feabbf138bb965da5173434da78bfe0929",
      "tree": "3df815199a5a03f0f2e06ddbf02ef9c565dbe518",
      "parents": [
        "15ac558b0f1873dbe0d9c1e6fed042a349f8b5a4"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Wed Mar 23 19:09:10 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 25 10:15:37 2016 -0700"
      },
      "message": "libmedia: Initialize state vars to avoid possible crash\n\nIf playback or record track creation fails on server side,\nsome state is left initialized incorrectly.\nThis can cause a crash when the object is destroyed\nbecause of a reference to a NULL object.\n\nInitialize state vars properly in the initialization list\nto avoid this behavior.\n\nauthored-by: Zhou Song \u003czhous@codeaurora.org\u003e\n\nCRs-Fixed: 992608\nChange-Id: If8c3611e3229c0c1b14b81285e07b9357fec7658\n"
    },
    {
      "commit": "79629f0716f04e79064256362be56730077b8c50",
      "tree": "5fb1f5adf8a0f6a7196afaca4a96a9e3bd55c1e1",
      "parents": [
        "5a898236109c3cb705241e66583d80df413198d2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 24 13:57:40 2016 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 24 15:50:39 2016 -0700"
      },
      "message": "AudioTrack: Do not resume callback thread on start failure\n\nBug: 27673375\nChange-Id: I1df1db51e75cee57f19824ac6506bf02000714fd\n"
    },
    {
      "commit": "fc1337d079ba7e6ffd7ce07706cfeeeb355c0200",
      "tree": "1a70a9e62e19bc4c0dbc2160c13a051039d10106",
      "parents": [
        "7c9ea89cbe3e42e0d94b1790ae1d424a9c16ce08",
        "e8972b0a27fac327c997fceb20d9abae1dc1d899"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 18 03:37:20 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 18 03:37:21 2016 +0000"
      },
      "message": "Merge \"AudioTrack: fix stall if setBufferSizeInFrames() called before play()\" into nyc-dev"
    },
    {
      "commit": "e8972b0a27fac327c997fceb20d9abae1dc1d899",
      "tree": "ff3812507f2eb266870eac29c56921f4a548dacf",
      "parents": [
        "f56a02a5e7d1bfaeabf8b918e56bf49ea509bd42"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 04 11:29:57 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 17 16:09:38 2016 -0700"
      },
      "message": "AudioTrack: fix stall if setBufferSizeInFrames() called before play()\n\nThe server was waiting for a full buffer.\nBut the buffer was only getting partly filled.\nSo the stream was not starting.\n\nThe fix involves having the server look at the adjustable threshold.\n\nBug: 27505889\nChange-Id: I5dbf686413e670dacbbecc9e0f838744e465f44f\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "d848eb48c121c119e8ba7583efc75415fe102570",
      "tree": "06733e396ad546bf39be0a6699193d041883edad",
      "parents": [
        "38246e482ea3bd1e0f88f7133934ec4537b48bbd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 08 13:42:11 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 16 14:04:22 2016 -0700"
      },
      "message": "Use audio_session_t consistently\n\nBug: 27562099\nChange-Id: I328d8226191386b163f2ace41233607294c50dcd\n"
    },
    {
      "commit": "4d231dc0ee34380956c71cbe18a750e487a69601",
      "tree": "cee9e9b9ff4d3aa17bca9269622e9f40d470ff09",
      "parents": [
        "f56a02a5e7d1bfaeabf8b918e56bf49ea509bd42"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 11 18:38:23 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 14 15:50:19 2016 -0700"
      },
      "message": "audio: Fix race condition in AudioTrack underrun.\n\nWhen audio flinger mixer removes an AudioTrack from the\nactive list in case of underrun, it is possible that the\nclient has written a full buffer just after the underrun detection and\nis blocked waiting for more space to write. In this case, the client\nwill never detect the DISABLED flag and the track never be restarted.\n\nAlso implement missing DISABLE flag detection in server side audio tracks\n(OutputTrack and PatchTrack).\n\nbug: 27567768\nChange-Id: I8d0753429d4113498258b1f61bd8ac5939a612f0\n"
    },
    {
      "commit": "ae34ed2bcc9fa49a22fe7497327adb689ef27e8d",
      "tree": "c0b9d4912875fcf99e2538aacb086e55f5564bab",
      "parents": [
        "633666975ff9a85475a7d134d297eec4e1e513f8"
      ],
      "author": {
        "name": "Haynes Mathew George",
        "email": "hgeorge@codeaurora.org",
        "time": "Thu Jan 28 11:58:39 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 09 10:19:10 2016 -0800"
      },
      "message": "AudioTrack: Use original flags during track recreation\n\nAlso the OFFLOAD and DIRECT flags aren\u0027t denied by server.\n\nauthored-by: Pavan Chikkala\u003cpavanc@codeaurora.org\u003e\nBug: 27554925\nChange-Id: I6fd6b129928af4513bb0cba271019288605310f8\n"
    },
    {
      "commit": "7fd0422fbd17af3b24eb04421d37fce50f3826e2",
      "tree": "b06fbc7c5d058d4f1cb5491b1befa238642e71b8",
      "parents": [
        "2c073da0f02c3cf7cd4795af2d861222cbcab72a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 02 12:38:16 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 01 08:33:03 2016 -0800"
      },
      "message": "Sample rate 0 means a route-dependent rate\n\nRemove check for primary _output_ [sic] sampling rate for fast capture.\nClean up AudioRecord handling of frame count and sample rate.\nClean up AudioTrack handling of notification period updates.\nMake AudioRecord and AudioTrack more similar in order of operation, comments, and whitespace.\n\nBug: 25641253\nBug: 21019153\nChange-Id: I24a6677945987fc39a9bf93f70357e4bc7410f98\n"
    },
    {
      "commit": "eeecb980ff4c202d0a3c4b0bfe040dce2f73336d",
      "tree": "decce0d925acd9efd68f2d540bbabb60c0661c6b",
      "parents": [
        "91afc2297dd1c39302dba6ff68e9839aae27d39a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 26 10:44:04 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 01 08:32:58 2016 -0800"
      },
      "message": "Add use for audio_unique_id_t\n\nBug: 25641253\nBug: 21019153\nChange-Id: I65dc128e760c245f3d90559635a8981b186c87d7\n"
    },
    {
      "commit": "818e7a32ce3633980138aff2c2bfcc5158b3cfcc",
      "tree": "61104149c08955e55a10b9353f80ed140ad3df26",
      "parents": [
        "6ae5843c281301a9ffd1059d185620a9337e15a2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 16 18:08:07 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 19 13:15:16 2016 -0800"
      },
      "message": "Implement server side playback timestamps with 64 bit accuracy\n\nProvide server timestamps if the HAL doesn\u0027t provide it.\nProvide monotonic - boottime translation.\nIntegrate record timestamps and playback timestamps together.\n\nBug: 17472992\nBug: 22871200\nBug: 26400089\nBug: 26682703\nChange-Id: If1974f94232fcce7ba0bbcdf63d9e54ed51918ff\n"
    },
    {
      "commit": "6ae5843c281301a9ffd1059d185620a9337e15a2",
      "tree": "5c97c15b705c079bf8b2dc9ebb0a1ba17df8ca07",
      "parents": [
        "d25c45526d9598218433b0fa59e1f5accbd5b639"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 16 18:32:24 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Feb 18 16:04:55 2016 -0800"
      },
      "message": "Enable FastTrack timestamps\n\nBug: 26413951\nChange-Id: Id54c32cb0f0be83d443f6cf1007181ebc461c586\n"
    },
    {
      "commit": "8ce8e264d0bf09ec131e4a7701fe1ebc3a678f8b",
      "tree": "0938951613cb0d2725a01f84840571c4c50a0998",
      "parents": [
        "bc57b12030cbd4885d9231e721bbfed1b6522212"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 16 11:59:23 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 16 11:59:23 2016 -0800"
      },
      "message": "Revert \"Enable FastTrack timestamps\"\n\nThis reverts commit b3a486fecddc9e9264fe63d356eca0812493db27.\n\nReverting while investigating the root cause.\n\nBug: 27186414\n"
    },
    {
      "commit": "b0a144d705a021994628d136a170a6d2bd4282e7",
      "tree": "f6144a26c0e19fa9a7ba75e136c80afeb9ecf14a",
      "parents": [
        "7f308c3e0556a5e704bcb3b341842ed50ba80b0a",
        "fdb3c07db5d44535eb8c3ec46dc78ad8446c01eb"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Feb 12 22:24:53 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 12 22:24:55 2016 +0000"
      },
      "message": "Merge \"AudioTrack: support ENCODING_IEC61937\" into nyc-dev"
    },
    {
      "commit": "fdb3c07db5d44535eb8c3ec46dc78ad8446c01eb",
      "tree": "b8c3d97da524e8aefcb37e736619da6b8e087a82",
      "parents": [
        "3ea4f828a6906e9931f96ebdcae9c63e14b86cbd"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Feb 09 10:47:02 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Feb 12 06:30:43 2016 +0000"
      },
      "message": "AudioTrack: support ENCODING_IEC61937\n\nSet DIRECT flag.\nUse audio_has_proportional_frames() instead of audio_is_linear_pcm()\nwhere appropriate.\n\nBug: 24541671\nBug: 20891646\nBug: 26373761\nChange-Id: Ia32036b18683b084d6c9887593df87397ea0afd9\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "b3a486fecddc9e9264fe63d356eca0812493db27",
      "tree": "cd2ff28eac5233cdb2037b437cb68abe9b9dff3c",
      "parents": [
        "e8c8ed47ca15aa6be83c6feef89e27a832e763e9"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Aug 04 15:17:58 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 12 00:34:47 2016 +0000"
      },
      "message": "Enable FastTrack timestamps\n\nBug: 26413951\nChange-Id: I99a69241a0bcd69f6bfebf785cac6d9ee1e2cd5f\n"
    },
    {
      "commit": "d79072e9dff59f767cce2cda1caab80ce5a0815b",
      "tree": "cab9cab36ddf4bb61675c4508d923b283fd3edd6",
      "parents": [
        "a7b723715bab4ddf6db364c825135a9bc003c7c0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 06 08:41:20 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 25 15:34:04 2016 -0800"
      },
      "message": "Remove TimedAudioTrack and associated code\n\nBug: 8278435\nChange-Id: I095c1a4888e645e14d93b0b15fbef4524a831ca1\n"
    },
    {
      "commit": "bbe98f009fc2c3181a8d4ab71b3e145f76c01755",
      "tree": "2a1945cccd1c9c801737d7b2fdfca5d6246ba516",
      "parents": [
        "27e583ba1d0d4fdc11d6eeee0c416e727045cbbc",
        "2812d9ea3a3a33142dd8e23c9d949c498d6f7a12"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 16 23:24:30 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 16 23:24:30 2016 +0000"
      },
      "message": "Merge \"AudioTrack: Add getUnderrunCount()\""
    },
    {
      "commit": "27e583ba1d0d4fdc11d6eeee0c416e727045cbbc",
      "tree": "ce7b938b6468b7260dbfc616a55175e32334b178",
      "parents": [
        "33ff89ba94a527e4293ee5349da01483252d5c83",
        "c0adecb800b197cb8c028513130ebabf2d0f37ba"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 16 23:23:43 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 16 23:23:43 2016 +0000"
      },
      "message": "Merge \"AudioTrack: add setBufferSizeInFrames()\""
    },
    {
      "commit": "33ff89ba94a527e4293ee5349da01483252d5c83",
      "tree": "e37751829ee24635aceec80ff5e0b0d47d71055c",
      "parents": [
        "e0db30868d9734f95a02df516dd0dc6a7226474b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Nov 30 11:16:01 2015 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 16 11:51:28 2016 -0800"
      },
      "message": "AudioTrack: lower Java latency\n\nAdd AUDIO_FLAG_LOW_LATENCY to enable Fast track.\n\nChange-Id: Ib1bff635afaa57af7754cb751b57c6afc4c2ab2b\nBug: 21019153\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "c0adecb800b197cb8c028513130ebabf2d0f37ba",
      "tree": "6d9896d68200ff0e7a0a1099529d591edaeabd33",
      "parents": [
        "e0db30868d9734f95a02df516dd0dc6a7226474b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Jan 08 12:44:11 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 16 11:39:20 2016 -0800"
      },
      "message": "AudioTrack: add setBufferSizeInFrames()\n\nAlso add getBufferCapacityInFrames().\nThese can be used to dynamically raise or lower latency.\n\nBug: 21019153\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\nChange-Id: I02ca7f6f5cc4e089fcd81cc8a2b6ff234e0381a8\n"
    },
    {
      "commit": "2812d9ea3a3a33142dd8e23c9d949c498d6f7a12",
      "tree": "5079c758817d0c42b3f7ade661366fdae25fe5d1",
      "parents": [
        "e0db30868d9734f95a02df516dd0dc6a7226474b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jan 04 10:34:30 2016 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 16 11:21:38 2016 -0800"
      },
      "message": "AudioTrack: Add getUnderrunCount()\n\nThis allows an app to detect application-level output glitches.\nUnderrun counts survive track recreation.\n\nChange-Id: I8eb14e92f6fc1007718a29b0666ab51ace30cdb8\nBug: 25641253\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "90e8a97dd5c9d391d7a2ea6a2290ed976f928379",
      "tree": "fd0c41eb9d79a2a8bd58fa1e87d70aee8324f68e",
      "parents": [
        "25283404e022cd23d61befaa3c7ba379c05e8f99"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Nov 09 16:42:40 2015 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Nov 13 12:39:07 2015 -0800"
      },
      "message": "Use modulo position variables in AudioTrack and AudioRecord\n\nMore type safety, plus correct treatment for sanitization.\n\nBug: 25569906\nBug: 25232421\nChange-Id: Id852277b81a1792c5e67392cd74bc39cba7ed1ad\n"
    },
    {
      "commit": "7095f876565f8c52bafe02e7c6ba04aa0c274dfa",
      "tree": "39909871faf202fa16848eb57c8f28a2d36b927d",
      "parents": [
        "74e0f3a620bd0cdfb153728e99a17a96ca3db0de",
        "51cd9a441ed0acf6e3b9c221e9b7f9424073191f"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Mon Nov 09 20:47:32 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Nov 09 20:47:32 2015 +0000"
      },
      "message": "Merge \"Whitelist getTimestamp from integer sanitization\"\nam: 51cd9a441e\n\n* commit \u002751cd9a441ed0acf6e3b9c221e9b7f9424073191f\u0027:\n  Whitelist getTimestamp from integer sanitization\n"
    },
    {
      "commit": "ec3806a8be1a014631b39df59edd596f8eb5be01",
      "tree": "7129f8779488acffd047b73519866247ee395c6d",
      "parents": [
        "9cc6bb627e9683149f3d3f0609a83b8f14be7fde"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Mon Nov 09 11:56:57 2015 -0800"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Mon Nov 09 11:56:57 2015 -0800"
      },
      "message": "Whitelist getTimestamp from integer sanitization\n\nThe timestamp math relies on modulo 32 bit math, whitelist this function\nfor now until we can find a better way to tackle this.\n\nBug: 25490803\nChange-Id: I3e2b19db023b4622f5884933feab96363756e8c6\n"
    },
    {
      "commit": "3845ba35a0bf364f30bd46029b89e7b5fff28793",
      "tree": "2b324dd9fd96b4d24b7373f050240ff64b519bfe",
      "parents": [
        "ce92aba3ab05f7d653908acc7e9be73128dd5ccd",
        "9b698dcfb41cbadd4a21d09eede0de672912959d"
      ],
      "author": {
        "name": "Dan Austin",
        "email": "danielaustin@google.com",
        "time": "Wed Oct 28 20:25:06 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Oct 28 20:25:06 2015 +0000"
      },
      "message": "Merge \"Refactor setPlaybackRate to avoid benign unsigned integer overflow.\" am: a38594e92f\nam: 9b698dcfb4\n\n* commit \u00279b698dcfb41cbadd4a21d09eede0de672912959d\u0027:\n  Refactor setPlaybackRate to avoid benign unsigned integer overflow.\n"
    },
    {
      "commit": "9b698dcfb41cbadd4a21d09eede0de672912959d",
      "tree": "d5b4250169626f73479122ef9c06a1e975f9c013",
      "parents": [
        "b8e13b1b1a7749e54641efbef32d5cf49933cba2",
        "a38594e92fea7f88c5edad98a4992b5f1b688436"
      ],
      "author": {
        "name": "Dan Austin",
        "email": "danielaustin@google.com",
        "time": "Wed Oct 28 20:21:13 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Oct 28 20:21:13 2015 +0000"
      },
      "message": "Merge \"Refactor setPlaybackRate to avoid benign unsigned integer overflow.\"\nam: a38594e92f\n\n* commit \u0027a38594e92fea7f88c5edad98a4992b5f1b688436\u0027:\n  Refactor setPlaybackRate to avoid benign unsigned integer overflow.\n"
    },
    {
      "commit": "e34eae2de7bd6dcba5dea132dabb09f63ac46adc",
      "tree": "f1eb25e6df17d3ef526b9baa7dfc3d1c2dd2c3d9",
      "parents": [
        "58fdf7cc01a5b81d40c0bb2f0aeb7c4d23ae5244"
      ],
      "author": {
        "name": "Dan Austin",
        "email": "danielaustin@google.com",
        "time": "Tue Oct 27 16:14:52 2015 -0700"
      },
      "committer": {
        "name": "Dan Austin",
        "email": "danielaustin@google.com",
        "time": "Wed Oct 28 19:44:28 2015 +0000"
      },
      "message": "Refactor setPlaybackRate to avoid benign unsigned integer overflow.\n\nThere is a check that results in a benign unsigned integer overflow.\nThis has been refactored to avoid the unsigned integer overflow.\n\nBug: 25327431\nChange-Id: Ib112a7cd585c680f13e4bee3d7e9f45da7d66f1d\n"
    },
    {
      "commit": "2eb225313de241d02979c66e2730983901ad05ea",
      "tree": "90010a43009d0a0d6c4728b2f617ea0b8487e46c",
      "parents": [
        "f55e722949d56f0a0a1b4285f9adb5df3ab05b71",
        "6a9219026124f9075c03a861101cea985f01cdce"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 22 23:46:46 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Oct 22 23:46:46 2015 +0000"
      },
      "message": "Merge \"Workaround for busy wait bug\" into mnc-dr-dev am: d34cf6d95c\nam: 6a92190261\n\n* commit \u00276a9219026124f9075c03a861101cea985f01cdce\u0027:\n  Workaround for busy wait bug\n"
    },
    {
      "commit": "606fbc1030d686bf1f8dc03d14a79342aca2ca41",
      "tree": "0394ffc9b5ae6d11957a2123177b62a65d09d5c1",
      "parents": [
        "e710ae53001bbbf1e1afd6b3f5c3478c673afd0e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 22 15:28:15 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 22 15:45:03 2015 -0700"
      },
      "message": "Workaround for busy wait bug\n\nUnderlying bug 25195759 is not yet fixed.\n\nBug: 24263351\nChange-Id: I04b644246640054d38c8de79e0eb80fcbfef0e48\n"
    },
    {
      "commit": "c67c65882f7cf1d3ae617bff41ff9c7ec8a0fd27",
      "tree": "68e91ad1c34d514bea75a537794c1210685d8b32",
      "parents": [
        "f8b1280535a6e3ebcf864d434a01d6c672cadd9a",
        "5116febf966875c19a0b137a3deef0ba0ebe42df"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 14 01:24:25 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 14 01:24:25 2015 +0000"
      },
      "message": "am 5116febf: am cfda8c43: Merge \"AudioTrack: Skip callback EVENT_STREAM_END on DEAD_OBJECT.\" into mnc-dr-dev\n\n* commit \u00275116febf966875c19a0b137a3deef0ba0ebe42df\u0027:\n  AudioTrack: Skip callback EVENT_STREAM_END on DEAD_OBJECT.\n"
    },
    {
      "commit": "39609a0a6d95d003b0f237e6c139b070b4df7071",
      "tree": "587a8b63f59c4293f932b61a0ff24aeac4bbb5dd",
      "parents": [
        "e5200ea76c5d180b53087ae7825326ec61cc4687"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Sep 03 16:38:38 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Oct 13 15:48:19 2015 -0700"
      },
      "message": "AudioTrack: Skip callback EVENT_STREAM_END on DEAD_OBJECT.\n\nSend only EVENT_NEW_IAUDIOTRACK to initiate teardown.\n\nBug: 23750452\nChange-Id: Ib5dcd578b5b6a6a1d91a03e58ef8da0acd994243\n"
    },
    {
      "commit": "7d7a11ca73c9684b63275e82b327f6f90fcc114e",
      "tree": "fae78dbfe990d9832e352e74c9a64ca79d17b4d5",
      "parents": [
        "0daa5e9607b0e68cec2bac20d16f88c561c12549",
        "9ea0680e4d77d21fb0698fec3ccd7779213eca62"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 07 17:31:33 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 07 17:31:33 2015 +0000"
      },
      "message": "am 9ea0680e: am b177e8a7: Merge \"AudioTrack: Prevent stop() from reissuing last marker event\" into mnc-dr-dev\n\n* commit \u00279ea0680e4d77d21fb0698fec3ccd7779213eca62\u0027:\n  AudioTrack: Prevent stop() from reissuing last marker event\n"
    },
    {
      "commit": "61be84167c1a11c8a030e00a2b79b2bc4fdf617f",
      "tree": "8213fe1a24bdc63e7994b6129615c57845590d03",
      "parents": [
        "f99498ee4de7123e2fd71778c6877be44fbd1506"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 06 10:51:09 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 06 13:46:50 2015 -0700"
      },
      "message": "AudioTrack: Prevent stop() from reissuing last marker event\n\nAvoid a duplicate marker event race condition (1 in 30 or less)\nby clearing marker reached in start() not stop().\n\nBug: 24497521\nChange-Id: I9520d063c7d173d2e642174bf60a2bfe75edf085\n"
    },
    {
      "commit": "54b3c3c7acf18226f6abf788a220837bc5737677",
      "tree": "b4fb0509a976c6fe6dcb8564af64cce7df2c12ba",
      "parents": [
        "b7132738e2e980f29fe67e863ac6b5488c0922b3",
        "6c4cf7fb4c8a48450f8290380710ddeb6a8cc625"
      ],
      "author": {
        "name": "Dan Austin",
        "email": "danielaustin@google.com",
        "time": "Tue Sep 29 16:29:48 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 29 16:29:48 2015 +0000"
      },
      "message": "am 6c4cf7fb: Merge \"Fix benign overflow in AudioTrack\"\n\n* commit \u00276c4cf7fb4c8a48450f8290380710ddeb6a8cc625\u0027:\n  Fix benign overflow in AudioTrack\n"
    },
    {
      "commit": "039c27aeaee809182fc1491311ca6dcbc1ec441b",
      "tree": "9b3159fa45f48e4893823a5018e6c364668aeb53",
      "parents": [
        "6f5a43f495b7d633c21ca4eb74956b71658c0c5d"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Sep 23 15:17:29 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Thu Sep 24 10:50:54 2015 -0700"
      },
      "message": "Fix benign overflow in AudioTrack\n\ntwo uint32_t\u0027s were being used in a computation that could be negative,\ncast to int32_t before the subtraction to prevent incorrect overflow\ndetection.\n\nChange-Id: I33c5ef79a0ebbba055daa0ea041b42229d0c3152\n"
    },
    {
      "commit": "e9fa23fe940c287bf2f6e8b28f4cf9161818cb80",
      "tree": "4000a728fb5e68a70b0c3d4720dd9557bee1805f",
      "parents": [
        "b5213840103ae1ce3425a6db3d851fce5f767889",
        "1f8749f27d4450c19952403a91362df3d20b972d"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Sep 23 12:44:00 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Sep 23 12:44:00 2015 -0700"
      },
      "message": "resolved conflicts for 1f8749f2 to stage-aosp-master\n\nChange-Id: Idda60a9d39f9be81e0c314f06fc080ad7fa35c7b\n"
    },
    {
      "commit": "20b82e0cb5c615a4f88f245c12fec9ee0ec49894",
      "tree": "84358b3b4a540b57f751ed5d6dd090a09a9bbd6d",
      "parents": [
        "318dd9b80789bdb30a7cf828a7ca18f6422c95c4"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue Sep 22 14:11:35 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Sep 23 10:51:19 2015 -0700"
      },
      "message": "Fix benign unsigned overflow in AudioTrack\n\nAn unsigned overflow could occur in timestamp computation when\nmTimestamp \u003c mServer.\n\nChange-Id: I9e01897478a6d481dd6fb7303d325617466497cf\n"
    },
    {
      "commit": "97c9f4fd7bc31e2968d816402659ba1c64f10b42",
      "tree": "96e726b7cfeac443b961a0f6cc3abb3a866d0e5a",
      "parents": [
        "fa8ebb45fd850f56ca1bf64fbed3ac11e10c7d3d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 11 18:04:14 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 12 01:12:26 2015 +0000"
      },
      "message": "NuPlayerRenderer: handle error when resuming an offloaded track\n\nMake sure that an offloaded audio track is torn down if\nstart() returns an error in onResume().\nThis makes sure that a track invalidated due to a potential\naudio path change while paused is re created on the correct\noutput.\n\nBug: 22256441.\nChange-Id: I6c7bfec6e7322415daffc0451bab46d0c558522a\n"
    },
    {
      "commit": "2c7d0f2013203588f9307166cad42902eb5a676f",
      "tree": "9460ada2b046711356148a6c84468afbb51bb858",
      "parents": [
        "5ce059661dcbab8924edab400681fc408ee76123",
        "d7bd69e4d1e74f25413721804d5290c53ea87f2b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jul 24 21:02:52 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 24 21:02:52 2015 +0000"
      },
      "message": "Merge \"Fix restore position warning and static track adjustment\" into mnc-dev"
    },
    {
      "commit": "d7bd69e4d1e74f25413721804d5290c53ea87f2b",
      "tree": "abd46c30e346d4abfbd2dafc303f531be923a35f",
      "parents": [
        "240577a43ff8d312fa4b464db887916580473396"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jul 24 07:52:41 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jul 24 11:01:55 2015 -0700"
      },
      "message": "Fix restore position warning and static track adjustment\n\nRemove unnecessary restoreTrack_l() position warning when\nAudioTrack output device changes.\n\nAlso, fix rare getPosition() offset error if a static track is\ncontinuously playing a long time (\u003e 24 hours at 48khz sampling)\nand its output device changes.\n\nBug: 22524122\nBug: 21699132\nChange-Id: I5a35c13d62ff9f0702b09d5cd9362c730364b18c\n"
    },
    {
      "commit": "a8d0890ca969ec40fdcf1cfcbeef85c0c379cfaf",
      "tree": "19d4d4ec0342472e24d5e242bf68a33c57ccd1c2",
      "parents": [
        "805a0c70574676d0fb29aa5e1f23417786b42259"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jul 22 11:52:13 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jul 22 11:52:13 2015 -0700"
      },
      "message": "Fix race condition in AudioTrackThread::wake\n\nBug: 22533684\nChange-Id: I2f46770dca44fc9dae41e067d3bec893c42a826e\n"
    },
    {
      "commit": "55a2dcce3a409393dc51ab2eb433914331f2df51",
      "tree": "ce69e72bd8520a05807a88a64bb58d33b0dc7962",
      "parents": [
        "2b343b1b2dd9e4885ef2b7ec2f798215d714ab3a",
        "6c7f062d3149d6890daaee64828959ad6f61ea54"
      ],
      "author": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Tue Jun 23 00:25:07 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 23 00:25:08 2015 +0000"
      },
      "message": "Merge \"Using centralized isAudioPlaybackRateValid to validate parameters\" into mnc-dev"
    },
    {
      "commit": "6c7f062d3149d6890daaee64828959ad6f61ea54",
      "tree": "dcab2e17178bf6d01ead75fad5df883961a6e195",
      "parents": [
        "fa907d4ee326c7bb9cbb4882ab7c0ec42bbceee3"
      ],
      "author": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Thu Apr 30 18:39:16 2015 -0700"
      },
      "committer": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Mon Jun 22 16:08:40 2015 -0700"
      },
      "message": "Using centralized isAudioPlaybackRateValid to validate parameters\n\nCentralized validation code\nbug: 20701446\n\nChange-Id: I9d9941c7639c05b2afe069ff4f858c693c910bfe\n"
    },
    {
      "commit": "6653c935d2518a713587b3887ca09aa09ebfa7fd",
      "tree": "6d9680827227e1a263b27e3eb4206a85a5122297",
      "parents": [
        "1f1db8356b599bc40703c907fb69e6e539343532"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 08 13:27:48 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jun 18 14:42:14 2015 -0700"
      },
      "message": "Return DEAD_OBJECT if getTimestamp cannot restore track\n\nBug: 21699132\nChange-Id: I90443f8674ed949e2546048b231be75cd6fe6615\n"
    },
    {
      "commit": "1f1db8356b599bc40703c907fb69e6e539343532",
      "tree": "bee3a3cc00e5577a7d847871e77f9d3712c92d25",
      "parents": [
        "bd974011599b6d4ff47c1cee36d617f191dc0c2f"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 08 13:26:10 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jun 18 14:38:32 2015 -0700"
      },
      "message": "Fix AudioTrack comments relating to use of restoreTrack_l()\n\nBug: 21699132\nChange-Id: Ib0d029a5e28676aeffbbbafc88c52a17367a413c\n"
    },
    {
      "commit": "c8e09c610fabc7390297ecb48e939acbdfe27325",
      "tree": "38ceed23e3bbef10f3d54388926c5ea242a1d069",
      "parents": [
        "005e9d0300fc326a076ec17b7fa6dd4f51568f55"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jun 03 23:43:36 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jun 04 12:23:56 2015 -0700"
      },
      "message": "Improve AudioTrack offload timestamp startup glitch detector\n\nNew or existing glitch behavior for Nexus 5 offload audio:\nwe receive several 0 timestamps,\nthen we get a stale timestamp (very large),\nthen a few ms later we get a correct nonzero timestamp.\n\nWe attempt to hide the glitch because the retrograde timestamp\ncorrection makes the glitch \"sticky\".\n\nBug: 21633313\nChange-Id: I39153af718c151f9435e7d315651a811f72743da\n"
    },
    {
      "commit": "a7f03353d5f172016f324e2a01f301cca6794152",
      "tree": "50ac6c8e46e5c60624b96008c2de4585f24364c9",
      "parents": [
        "4170eeec0a2dc2a9543b7e4674a43b3d2faac61d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sun May 31 21:54:49 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jun 03 22:26:17 2015 -0700"
      },
      "message": "Compute sleep time when AudioTrack client callback returns no PCM data\n\nCallbacks can go into a sleep-wait cycle if the client/app is unable to\ndeliver data.  This can happen if the buffer is large, or if\nthe client/app cannot keep the buffer filled, or upon a stream end condition.\nWe improve the sleep time computation for AudioTrack PCM callbacks.\n\nThis minimizes the number of callbacks to NuPlayerRenderer.\n\nBug: 21198655\nChange-Id: I4247798a6638def2f0d8f1b46f60323482065cb2\n"
    },
    {
      "commit": "9f9e21ed9a342e0ca945818bdc6c0c4fb3bfb9bd",
      "tree": "d225efadda08464e37526e7e4cbc02ef1cf3f9ca",
      "parents": [
        "08945c44a97d3749cc48f860eb4e01e57183ad90"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sun May 31 21:45:36 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jun 01 18:53:03 2015 -0700"
      },
      "message": "Store server latency, sample rate, framecount information in AudioTrack\n\nBug: 21198655\nChange-Id: I24590196642a97ea5d61bc6356f0aff782bd37d3\n"
    },
    {
      "commit": "faeb0f291330134dc4468359a36e099aae508449",
      "tree": "028333c0801e03826c4162cb35880236eaae3b3b",
      "parents": [
        "8eddd88568fe4da0ca0ceab5072bc488827f01b5"
      ],
      "author": {
        "name": "Ronghua Wu",
        "email": "ronghuawu@google.com",
        "time": "Thu May 21 12:20:21 2015 -0700"
      },
      "committer": {
        "name": "Ronghua Wu",
        "email": "ronghuawu@google.com",
        "time": "Fri May 22 10:36:31 2015 -0700"
      },
      "message": "libmediaplayerservice: try to open audio sink in offload mode in error.\n\nBug: 19061432\nBug: 21370108\nChange-Id: Iaa757555ef37fd1ac87b6e2d5a9969bb58cc5ebc\n"
    },
    {
      "commit": "296fb13dd9b5e90d6a05cce897c3b1e7914a478a",
      "tree": "d3ed4e6ff2902da6f556d038c71605c091b75f64",
      "parents": [
        "32fa6d0e65dbf956e253a1006e9419dce2fe75c9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 01 11:38:42 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 06 10:14:42 2015 -0700"
      },
      "message": "Implement audio device callback\n\nAdd class AudioSystem::AudioDeviceCallback notifying\nAudioSystem clients upon device selection change on a given\ninput or output thread.\nMaintain a list of installed callback per I/O handle in AudioSystem\nand call registered callbacks when an OPEN of CONFIG_CHANGED event\nis received on IAudioFlingerClient::ioConfigChanged().\nAdd methods to AudioTrack and AudioRecord to add and remove device\nchange callbacks.\nAdd methods to AudioTrack and AudioRecord to query currently selected\ndevice.\nioConfigChanged() events now convey the audio patch describing\nthe input or output thread routing.\n\nFix AudioRecord failure to start when invalidation is\nhandled by start().\n\nChange-Id: I9e938adf025fa712337c63b1e02a8c18f2a20d39\n"
    },
    {
      "commit": "4c5a3675ed6b429dfaa2707acf2b3faf2808baf2",
      "tree": "b0697130f34c1957f26b84f74d00fb8455890fae",
      "parents": [
        "1de1e25cba872bd4c077c2e394f8ca9c70b65856"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 30 16:18:53 2015 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri May 01 10:32:54 2015 -0700"
      },
      "message": "AudioTrack: reduce retrograde motion spew\n\nChange-Id: I96aced52b136ceea924aa3d9ef56374dd4c49784\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "3a474aa67fc31505740526dd249d96204c08bf79",
      "tree": "4db784ee57ffad037fa2ded86d0fd8b3a40173d5",
      "parents": [
        "a8df0b716bdfda1e10790e6f7297eeff83d2e52a"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Fri Apr 24 17:10:07 2015 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Thu Apr 30 16:56:10 2015 -0700"
      },
      "message": "stagefright: support setting/getting playback/sync config in MediaSync\n\nBug: 18249558\nBug: 19666434\nBug: 20057497\nChange-Id: I5868b17423d7c20cfaf4a399f3eb67bfba440605\n"
    },
    {
      "commit": "5aab9254a5c4f1951c12216a71550ab95b4adeaa",
      "tree": "0680d656f421297bbac15a8ad9b7ed776c2d2d66",
      "parents": [
        "457e82586d51c6d360ce4feb4c1dff1a31dcb8d3"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 30 14:55:19 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 30 21:58:56 2015 +0000"
      },
      "message": "AudioTrack: fix build\n\nUsing format %llu did not work for uint64_t on 64-bit systems!\n\nChange-Id: I727094e460141b9da3e433ceaa95e069dad948bc\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "dc0ac804721efff054ec9720d53e93ecca86cf5e",
      "tree": "8560f730cb37dddfccc6ea2a513d99889998e2c2",
      "parents": [
        "5f9bf49397b36ad4ebd838aef66b83e9e9fa42bc",
        "1b42097f38e72574ed853a35f4e8a66e4739c421"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 30 20:48:54 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 30 20:48:55 2015 +0000"
      },
      "message": "Merge \"AudioTrack: fix spurious retrograde messages\" into mnc-dev"
    },
    {
      "commit": "8c7e6dac6f5eb38cef627dab92eac8b38513450c",
      "tree": "6aede3a6ac013462a117ffb181d93439525eebeb",
      "parents": [
        "f62a067a5b21c840c915d36392679346ac0abfd7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 21 17:37:00 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 30 12:43:06 2015 -0700"
      },
      "message": "audio policy: session routes continued.\n\n- Clear session routes when client process dies.\n- Enforce the route only when the requesting session is active.\n- Fix requested route not working if an output mix change is required\n(e.g forcing to SPEAKER when the default route is USB or A2DP).\n- Make sure all sessions sharing the strategy with a rerouted session\nhave the same route (needed for volume control consistency)\n\nChange-Id: I0ab347a8fb97e73e2c5965374544c5f4fe509ef1\n"
    },
    {
      "commit": "1b42097f38e72574ed853a35f4e8a66e4739c421",
      "tree": "e708293755e42bca48d47380b8b8568cfc3d2f1f",
      "parents": [
        "5f88cdae61079be7920aee166eaac4941f65fb9f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 22 10:52:21 2015 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 29 23:36:01 2015 +0000"
      },
      "message": "AudioTrack: fix spurious retrograde messages\n\nThe retrograde motion was confused by some positions coming from\nthe DSP on offloaded tracks. So the retrograde check was moved up\ninto AudioTrack.cpp. This allows us to take advantage of the checks\nfor invalid positions based on timing.\n\nBug: 2047891\nChange-Id: Ifcad2349201443a7f1711347c203297100449536\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "983f2e02b342ef3ac4004471cbfd4cd8d5aecf7d",
      "tree": "7c2ec64cc3034b84348e96cfe120a9c87efe92e3",
      "parents": [
        "d54514d5e4b326e5dcaaf8b3f336ef31e447f355",
        "5a8a95de6dad1a3bcf3da5a37b35766e89086e13"
      ],
      "author": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Wed Apr 22 18:47:32 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 22 18:47:33 2015 +0000"
      },
      "message": "Merge \"Use AudioPlaybackRate to hold TimestretchBufferProvider parameters\""
    },
    {
      "commit": "5a8a95de6dad1a3bcf3da5a37b35766e89086e13",
      "tree": "64b82016eaef26f51b75470714172c06287c9c56",
      "parents": [
        "ea44f41bb142555e747cc11382296e94af99d312"
      ],
      "author": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Sat Apr 18 14:47:04 2015 -0700"
      },
      "committer": {
        "name": "Ricardo Garcia",
        "email": "rago@google.com",
        "time": "Wed Apr 22 10:57:24 2015 -0700"
      },
      "message": "Use AudioPlaybackRate to hold TimestretchBufferProvider parameters\n\nUse this struct to handle the parameters for TimestretchBufferProvider all\nacross the system.\nAdd stretch mode and fallback mode to TimestretchBuffer Provider.\n\nChange-Id: I19099924a7003c62e48bb6ead56c785cb129fba2\n"
    },
    {
      "commit": "493404d8c396e15ed73455acd39aa0f1940996e2",
      "tree": "a07080e7733732fd7273963cca1c93436b86b997",
      "parents": [
        "c9c3804a2caf3c0f96e7a8985f82db7ceef490df"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 21 15:07:36 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 22 08:12:53 2015 -0700"
      },
      "message": "audio policy: fix AudioTrack output device selection\n\nHave AudioTrack::setOutputDevice() set CBLK_INVALID flag instead\nof calling restoreTrack_l(). This allows restoreTrack_l() to be called in\na safe context.\n\nAllow device change while the AudioTrack is active by forcing a new\ndevice selection in startOutput() if the output route for this\nsession was changed.\n\nRemove some warnings.\n\nChange-Id: I2d921a63c9bfa0e122233645e2d6d39f95f5f17d\n"
    },
    {
      "commit": "f1063e2659cad01ec334a265c31734c63c319cc4",
      "tree": "9444deca08b86fec65754622ec06fbe551a06173",
      "parents": [
        "ee4e1b1a63758941460ae79a064249d3a5189443"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Fri Apr 17 15:19:42 2015 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Fri Apr 17 15:20:03 2015 -0700"
      },
      "message": "libmedia: fix all warning, make warnings errors, use clang\n\nChange-Id: Ic00d2c5d0bbb1605e96666e25c9ccc22bea6d3ff\n"
    },
    {
      "commit": "26145643ce22d797b3b1675c82c47a2d8c79ecaa",
      "tree": "746a243e80e1ac95086b825999822cbdf2302c1d",
      "parents": [
        "c44111b22c26236cb0b32d3fbd1cc9fad3fb28ff"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 15 21:56:53 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 16 09:58:43 2015 -0700"
      },
      "message": "Work around lack of pitch adjustment in Timestretcher\n\nChange-Id: I3e057b97c250a826133248b6aa1ff9ed677d88df\n"
    },
    {
      "commit": "b23cabdb71b98dc5e852f5d06be271696fea92c7",
      "tree": "5fd928f892970e2d905fdfcc502a0204d62a149d",
      "parents": [
        "9e6955a19bf77ebf27b770e910efbe1ebf1ceac0",
        "551b5355d34aa42890811fc3606d3b63429296cd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 14 15:02:11 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 14 15:02:12 2015 +0000"
      },
      "message": "Merge \"AudioRecord::obtainBuffer() can return nonContig like AudioTrack\""
    },
    {
      "commit": "551b5355d34aa42890811fc3606d3b63429296cd",
      "tree": "a55a6f457f11025f653241a58d475fe6a8269be5",
      "parents": [
        "7d669b3551c20109f5544455ca1555499693e1e1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 20 11:30:28 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 13 18:02:09 2015 -0700"
      },
      "message": "AudioRecord::obtainBuffer() can return nonContig like AudioTrack\n\nAnd fix error handling in both AudioRecord and AudioTrack.\n\nChange-Id: I4853d736cc6d2c05de5b18b0eac62716edfa62ec\n"
    },
    {
      "commit": "8edb8dc44b8a2f81bdb5db645b6b708548771a31",
      "tree": "663bda0f8a3d43894fa6d3d3f4283ed0df427f03",
      "parents": [
        "c5656cc900aeb4a705e27508dd82c70030a97709"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 26 19:13:55 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 09 18:49:15 2015 -0700"
      },
      "message": "Add playback rate to AudioTrack\n\nBug: 19196501\nChange-Id: I6411e1d3ce652b711a71a6d9df020cb5f60d4714\n"
    },
    {
      "commit": "aa9811945f575614b3482d09e4d969792701cebb",
      "tree": "1744aa567efe78c3062ec80da19277d96def0725",
      "parents": [
        "41efeb2b477066d96ad34a048f34fb6fb34213ec"
      ],
      "author": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Sat Mar 21 09:55:15 2015 -0700"
      },
      "committer": {
        "name": "Paul McLean",
        "email": "pmclean@google.com",
        "time": "Wed Apr 08 09:51:07 2015 -0700"
      },
      "message": "Adding explicit routing API to AudioTrack\n\nChange-Id: I40c048c7644c46f4e4f7103875206c0785c4b1dc\n"
    },
    {
      "commit": "5cbb5785a58655e21f5f7805274b8c78b986216b",
      "tree": "beb100fe401a58aea703ba57875c81dba7133d38",
      "parents": [
        "91e5e043d766e39b0840f2ca2e658e2fe58987e7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 27 18:39:59 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Mar 31 15:31:40 2015 -0700"
      },
      "message": "Reject sample rate changes for fast tracks\n\nThis is needed for a SoundPool fix.\n\nBug: 19970735\nChange-Id: I46b69e059aabf0d06b16b31ea436bb71f7146750\n"
    },
    {
      "commit": "bfd318402924414fbde4d31c9d23cc423f10b630",
      "tree": "35662fc06a14886bfcb74cfc6dbdf274a3497ee7",
      "parents": [
        "4c36d6f48f4eecacc148317f775f65961a4f03d2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 20 09:01:44 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 23 14:52:03 2015 -0700"
      },
      "message": "set() in AudioRecord and AudioTracks needs no lock\n\nChange-Id: I9d61b3d117e9b21fbbfad772d8981a5abb8fafae\n"
    },
    {
      "commit": "4c36d6f48f4eecacc148317f775f65961a4f03d2",
      "tree": "5f0cdb1359376f0483d5627551f5e2a210de7ad2",
      "parents": [
        "4408d8ab70d3385ac043d0f9a210a971c3a570c2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 20 09:05:01 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 23 12:31:57 2015 -0700"
      },
      "message": "Logging\n\nMove log of latency to where it is first computed.\nLog more parameters when a fast track is denied by client.\nLog session ID in destructor.\nRemove obsolete ALOGV that were for debugging a particular problem.\nLog more parameters of set().\n\nChange-Id: I0156bceaf397f2faa053214572c57136705685ee\n"
    },
    {
      "commit": "4408d8ab70d3385ac043d0f9a210a971c3a570c2",
      "tree": "abe90256407c6c21e2a27c15288ec04fa721e25c",
      "parents": [
        "d1e85c354bf08cbf7fb7619f91bda1c416b40627",
        "7ccdaad38054474b1d84b7c37ceffd98e9df354d"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Mar 23 18:55:48 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 23 18:55:49 2015 +0000"
      },
      "message": "Merge \"Fix position when restoring streaming audio track\""
    },
    {
      "commit": "138d6f9b0b77d94773a8a29d3c5bdb78f38ee142",
      "tree": "e1037f06d855663b9f9521985aea6fcf49171600",
      "parents": [
        "b882e936ead71ee407a5d6f1e7194115fc13c410"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 20 10:54:51 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 23 08:03:16 2015 -0700"
      },
      "message": "Update AudioTrack code to match AudioRecord\n\nsession ID check\nbuffer error code check\n\nChange-Id: I092a61adfd249122f9127dceedf67c0a3bdcfe7b\n"
    },
    {
      "commit": "40bc906252974d0b389ae4a147232d0c9a97193f",
      "tree": "95301839473e4c0d3be9ef1bd2e8c1d3677964a6",
      "parents": [
        "ae4b879d04c4b07c62241a8f507c8dce11e628e4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 20 09:09:33 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 23 08:02:57 2015 -0700"
      },
      "message": "namespace does not need a closing semicolon\n\nChange-Id: Ie8f9d42fc061f6d558f23b98414e04eb3d14b376\n"
    },
    {
      "commit": "ae4b879d04c4b07c62241a8f507c8dce11e628e4",
      "tree": "dc9dbff427144ad7d6b18f7ba65eb5720a8dadc7",
      "parents": [
        "a9757af8a140a1d5ae261c22f9d7eebef99cbe96"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 20 09:04:21 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 23 08:02:54 2015 -0700"
      },
      "message": "Declare and initialize in one statement\n\nChange-Id: Ie8593692907e67558f9d7654c9a4bf8cbce99bd8\n"
    },
    {
      "commit": "7ccdaad38054474b1d84b7c37ceffd98e9df354d",
      "tree": "4c6c60bae9e890801c4c3486cc2836543e6f71af",
      "parents": [
        "0e4421286b92a81e952f53210227adbf05d97c25"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 20 00:38:32 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Mar 20 00:38:32 2015 -0700"
      },
      "message": "Fix position when restoring streaming audio track\n\nBug: 19802225\nChange-Id: I19ca7836bc89627f6cead4961641b94c6b27b5f6\n"
    },
    {
      "commit": "c6bd5db9d9cf4bba1649b5b7ddea2d23f5de23a9",
      "tree": "11d3794ef66c44ae96cba25994b3c78f7e7a4e71",
      "parents": [
        "d4db9dcd7d29234893d580c329f23242197fe664"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 09 16:29:33 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 09 23:59:31 2015 +0000"
      },
      "message": "fix flush on HW A/V sync tracks\n\nFix mismatch between track flags on client and server side\nwhen HW A/V sync is requested.\n\nThe audio track was connected to a direct output by the audio policy\nmanager but the client failed to set the direct flag when creating\nthe track resulting in the direct flag not being set in audio flinger.\n\nBug: 19665934.\nChange-Id: I0a5257b20bf76c9c4d89bc2ad9b44777b81f13bf\n"
    },
    {
      "commit": "1dfe2f9c2d03fc8d0ed0cdfe0b9fb894bc0bcc11",
      "tree": "1863bd0a9a9d1c0a0ab2055e345d9f86b9986151",
      "parents": [
        "b46f394a85d704dd05287cf9bb77cf86e3c02a38"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 09 12:03:14 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 09 14:19:35 2015 -0700"
      },
      "message": "Allow TRANSFER_OBTAIN to be used for fast tracks\n\nChange-Id: I8fa20c26f076567b38210af4a680fe1cb2eacee4\n"
    },
    {
      "commit": "b46f394a85d704dd05287cf9bb77cf86e3c02a38",
      "tree": "b6f8c4c2d413ca71ef3b2ca0c5a32c97d7959979",
      "parents": [
        "54a8a456c2b4b382b3ffe3d99e40703df79c0717"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 09 12:00:30 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 09 14:17:25 2015 -0700"
      },
      "message": "AudioTrack::obtainBuffer() now returns number of non-contiguous frames\n\nChange-Id: I1f61d7e3d057c3254babe456b4aa0f6a1809da55\n"
    },
    {
      "commit": "54a8a456c2b4b382b3ffe3d99e40703df79c0717",
      "tree": "3ddae33bf1e144cfa93b9c6ee43bcc7d97ba80b3",
      "parents": [
        "3f02be2ceeaa4b67dc0b1a81aebcfa049276fad8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 09 12:03:00 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 09 14:13:15 2015 -0700"
      },
      "message": "AudioTrack::releaseBuffer parameter is const *\n\nChange-Id: I31ac20863107de05b83cd7f8cd7dd61bed98e456\n"
    },
    {
      "commit": "3f02be2ceeaa4b67dc0b1a81aebcfa049276fad8",
      "tree": "185789eccf36d1b1bd892755ada9471258267a48",
      "parents": [
        "f9d19514b3e620b6339c98a442da833a702915ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 09 11:59:04 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 09 14:13:10 2015 -0700"
      },
      "message": "AudioTrack obtain/release buffer comments\n\nChange-Id: I0eb178d1ab4eea7f72f4c55852c19b216ca55f5f\n"
    },
    {
      "commit": "0e48d25606c82def035ad10a5b3923767a765cdd",
      "tree": "2811d0042ca0c670bb6fb9cffa83b82de33f8ff8",
      "parents": [
        "c42ab4fcd42875ef74f8e9b8d8150f7bcfd0cd3b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 26 11:43:15 2015 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 06 11:51:26 2015 -0800"
      },
      "message": "Change AudioTrack resampling buffers from 3 to 2\n\nMove computation of minimum AudioTrack buffer size to server\nfor normal streaming PCM tracks.\n\nUse server-side computation to exactly determine requirements\nfor the resampler to avoid triple buffering.\n\nThis reduces latency for normal audio tracks that require resampling,\nand makes things consistent with the minimum buffer size.\n\nChange-Id: I2f2ca0e599ee20e16559bc5c5dab61ed100da16c\n"
    },
    {
      "commit": "abdb990953ffe94a9dc544aea0bed17ef7d5f484",
      "tree": "a5cba46c6820b02771d0759bdb1ef6b6d6292356",
      "parents": [
        "2d85f097d653b21d1ff2c34f0b732c674d20ccc2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 12 15:08:22 2015 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 14 13:11:38 2015 -0800"
      },
      "message": "Allow AUDIO_FORMAT_PCM_8_BIT AudioTrack buffers\n\nPreviously conversion to AUDIO_FORMAT_PCM_16_BIT was required.\nClient shared memory for static tracks and AudioFlinger track creation\nand buffer delivery now use native 8 bit PCM data.\n\nChange-Id: I485c07a4971fde9a25442bd43fed95019d39abcc\n"
    },
    {
      "commit": "2d85f097d653b21d1ff2c34f0b732c674d20ccc2",
      "tree": "84f26969648aeb0a1eb389e6b1c040ddf4957d55",
      "parents": [
        "3c09c78aabcb9d314dfb400258fb99a37c7b50c9"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 07 12:45:13 2015 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jan 07 17:38:55 2015 -0800"
      },
      "message": "Fix cumulative error in setPositionNotificationPeriod\n\nTime for AudioTrackThread sleep due to periodic notification\nneeds to be computed from actual position.\nExternal reported AOSP issue 65807.\n\nChange-Id: Ic46b64588e6c5803afcd8252cde8837eb3fbf6ff\n"
    },
    {
      "commit": "3c09c78aabcb9d314dfb400258fb99a37c7b50c9",
      "tree": "cff9d9d4cf65e0d4bf4e135ed4337c56dd6670af",
      "parents": [
        "53c3b5fc1afe162a8669cb3d27d6bb14e1847e39"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 29 18:39:32 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 06 12:00:00 2015 -0800"
      },
      "message": "Event driven wake for AudioTrackThread notification changes\n\nUsed for setMarkerPosition and setPositionUpdatePeriod.\n\nChange-Id: I0d94b929438a5cd94b295d7c1884f876fae8b5e7\n"
    },
    {
      "commit": "53c3b5fc1afe162a8669cb3d27d6bb14e1847e39",
      "tree": "1ccceb0cb183f01cdca8198606933b8fefc724a6",
      "parents": [
        "4ede21d9c1f957baf5e561849ff9bbe4bcbefc20"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 15 16:42:05 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 06 11:59:41 2015 -0800"
      },
      "message": "Improve AudioTrack EVENT_LOOP_END and EVENT_BUFFER_END accuracy\n\nFix timing computation to consider current position.\nFix EVENT_LOOP_END count accuracy (some could be dropped before)\nfor non-infinite loop static AudioTracks.\n\nChange-Id: I255f692915b55ab6f08ccd6a2365fee3f5d0a4fe\n"
    },
    {
      "commit": "4ede21d9c1f957baf5e561849ff9bbe4bcbefc20",
      "tree": "7a30e810c5dc2da9c03d1561a81bd4e00321097c",
      "parents": [
        "9b4615887c23548438fd0d8e3d8f04ac21912850"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Dec 12 15:37:34 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 06 11:59:11 2015 -0800"
      },
      "message": "Fix loop and position restoration in static AudioTracks\n\nAllow restoration of loop and position.\nMake position and loop synchronously readable.\n\nBug: 17964637\nChange-Id: I8cfb5036e665f55fdff5c67d27e1363ce9a8665d\n"
    },
    {
      "commit": "9b4615887c23548438fd0d8e3d8f04ac21912850",
      "tree": "63c96e7a84c2e7c942711f3aa6d4d05c4d0f3345",
      "parents": [
        "b126b43fcbfe10643245396fcae462c541a94ccf"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 01 17:56:29 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Jan 05 15:12:43 2015 -0800"
      },
      "message": "Fix loop and position setting in static AudioTracks\n\nAllow independent setting of position and loop.\n\nBug: 17964637\nChange-Id: I8b3bd97a244b932728b68da7684044f2636984a5\n"
    },
    {
      "commit": "85aca658ac7d20584b0647427256df50a5f243ef",
      "tree": "0a368cd14a99953de3943fa6f43334a8aea9f19f",
      "parents": [
        "22dfb93254de370d401706728aba1f032ef1b172",
        "d33712d7ec5dcf427cc0be9b7d2ca1c99823c8e6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 17 18:04:15 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Dec 17 18:04:15 2014 +0000"
      },
      "message": "am d33712d7: am 145cf5d8: Merge \"audioflinger: implement pause/resume for direct outputs\" into lmp-mr1-dev\n\n* commit \u0027d33712d7ec5dcf427cc0be9b7d2ca1c99823c8e6\u0027:\n  audioflinger: implement pause/resume for direct outputs\n"
    },
    {
      "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": "b279f5adfa2fd6f22c87b3a7106fbb62a0b9a5d2",
      "tree": "3e53a23fbf31379eab4d76b68af9f6b20b4c7e0c",
      "parents": [
        "a2bc118cfe860f9c108ba089b021d3b003185c56",
        "c49d9cda49dab8b7dd0376cf56476b3e1895d5c6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 10 21:55:52 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Dec 10 21:55:52 2014 +0000"
      },
      "message": "am c49d9cda: am 2dda40d6: Merge \"audio policy: add support for custom mixes\" into lmp-mr1-dev\n\n* commit \u0027c49d9cda49dab8b7dd0376cf56476b3e1895d5c6\u0027:\n  audio policy: add support for custom mixes\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": "aef46aa8eff1f975ae5253a334cf0c978427ca86",
      "tree": "ccef3488b19e299fc3fb2f87bfd034bcb9410c42",
      "parents": [
        "48662b3a0e88c85dc1ff401427892c695f1937b5",
        "bde85d05414cdd3888071635dd05e9ff78679d5e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Tue Dec 02 17:27:34 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Dec 02 17:27:34 2014 +0000"
      },
      "message": "am bde85d05: am 5458756a: Merge \"Track volume should be maintained even if track is restored\"\n\n* commit \u0027bde85d05414cdd3888071635dd05e9ff78679d5e\u0027:\n  Track volume should be maintained even if track is restored\n"
    },
    {
      "commit": "e6a9d65845032644b0865b6e3d0b5a820f35d9e4",
      "tree": "59dfcc773644b1b308d662ebbf38542f9ffedcc6",
      "parents": [
        "1a9c3954a20800dda3d6d18048c7f0edc8c53e6a"
      ],
      "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": "Mon Dec 01 11:29:03 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": "61280541836947ce0b281b240ffa4c55bbf5bd55",
      "tree": "4a287a2b07095295e7f054399fd9fb3052629d70",
      "parents": [
        "b438123fb1ee0a8c232fd66de658d5382d2083cf",
        "390ef84373b7edd1397381f780ca235326357094"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 27 00:06:00 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 27 00:06:00 2014 +0000"
      },
      "message": "am 390ef843: am f20c4356: Merge \"AudioRecord: use audio attributes instead of audio source.\" into lmp-mr1-dev\n\n* commit \u0027390ef84373b7edd1397381f780ca235326357094\u0027:\n  AudioRecord: use audio attributes instead of audio source.\n"
    },
    {
      "commit": "121143d5242a790d0bd01fe1b9cec5d28a1ba1d7",
      "tree": "ede3e199b33b12c6c5767f2bd566e4664905bada",
      "parents": [
        "0e47b16ffcf78acb81b0ebf14d058db191f74af0",
        "bf14c62e7973ed793a3b00c2c67beca4484c1c7a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 26 18:41:26 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 26 18:41:26 2014 +0000"
      },
      "message": "am bf14c62e: am 72bf901c: Merge \"audio policy: new getOutputForAttr() prototype.\" into lmp-mr1-dev\n\n* commit \u0027bf14c62e7973ed793a3b00c2c67beca4484c1c7a\u0027:\n  audio policy: new getOutputForAttr() prototype.\n"
    },
    {
      "commit": "0e47b16ffcf78acb81b0ebf14d058db191f74af0",
      "tree": "b887a57604e0cdc8f76c427a34dac2c9673d833e",
      "parents": [
        "d802d0718d7639da1bef1128a840cfd05200af55",
        "1e18795a4847e9368baa7ecee146d3901b283cd0"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Nov 26 18:41:10 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 26 18:41:10 2014 +0000"
      },
      "message": "am 1e18795a: am d325005e: Merge \"Fix AudioTrack loop mode to play audio from buffer start\" into lmp-mr1-dev\n\n* commit \u00271e18795a4847e9368baa7ecee146d3901b283cd0\u0027:\n  Fix AudioTrack loop mode to play audio from buffer start\n"
    },
    {
      "commit": "72215491c60fbcdb9a2f0be782e24e39cca249c5",
      "tree": "ac366bd0aad25d9575b19f77a75f23518a8810e8",
      "parents": [
        "fd2711ca8c9108d25f18b48b924afd925f41344a",
        "1a475921c0577a4650d1bbe40a85b732d1766939"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 26 12:01:49 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 26 12:01:49 2014 +0000"
      },
      "message": "am 1a475921: am 223fd5c9: audio: new routing strategies and stream types\n\n* commit \u00271a475921c0577a4650d1bbe40a85b732d1766939\u0027:\n  audio: new routing strategies and stream types\n"
    }
  ],
  "next": "caf7f48a0ef558689d39aafd187c1571ff4128b4"
}
