)]}'
{
  "log": [
    {
      "commit": "95e3768e1936673cacf185c721f9b2c117a94a0a",
      "tree": "993e603d53a6bf44744b94a394de2c790d81ed2f",
      "parents": [
        "8d14f5ccff2440f39630965486e9601ab6d007b6"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Fri Apr 12 11:13:36 2019 -0700"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Mon Apr 15 14:11:36 2019 -0700"
      },
      "message": "AudioFlinger::Thread ensure proper add / sub\n\nBug: 126772841\nBug: 130371615\nTest: 24 hours recording with 64 bit audioserver\nChange-Id: I71305448ee194d1cc325ab238f1681aee93ab18d\n"
    },
    {
      "commit": "99e9db75039f86a73d1a5052b1e3538ddda20de5",
      "tree": "46f3f12e2748a7f4feae255aedb4a3195d1cd27c",
      "parents": [
        "05fa8856abaa1e050c3c8e6ba97fc8878ed7600a"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Sep 14 15:17:36 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Sep 18 15:02:54 2018 -0700"
      },
      "message": "AudioTrackShared: Ensure proper subtraction\n\nOptimizing compilers may skip masking if the result of\nsubtraction is assigned to larger integral type.\n\nTest: long term test with 64 bit audioserver\nBug: 113763960\nChange-Id: Ida405a5a26e819891e7da7f29ebd0b78d2de1fc5\n"
    },
    {
      "commit": "4c94e03cac24f172e8367e351b66adf709b2cee6",
      "tree": "0115b73acebf2f3165e1ce20d7bdb65cab08136b",
      "parents": [
        "61c80f1f4a07886a01abada34beefed9db1bec4b",
        "51e09f9cae7b3195a2799b876eea8949faae912c"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Sep 18 10:26:55 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Sep 18 10:26:55 2018 -0700"
      },
      "message": "Merge \"Suppress implicit-fallthrough warnings in libaudioclient.\" am: 058002e0e3 am: 8a7c2de43f\nam: 51e09f9cae\n\nChange-Id: Ifcae7a82849a698a2406279e18c74be454c596b2\n"
    },
    {
      "commit": "ffe3558cb1024b39ce1e0e1dc2fb20bb3663299a",
      "tree": "05195cdd37c3c2c68aa26a66b5af1afb823c65ec",
      "parents": [
        "f8d13dee65d3708ea527e9f565be85031d7021ba"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Sep 13 13:59:28 2018 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Sep 17 12:45:53 2018 -0700"
      },
      "message": "Suppress implicit-fallthrough warnings in libaudioclient.\n\nAdd FALLTHROUGH_INTENDED for clang compiler.\n\nBug: 112564944\nTest: build with global -Wimplicit-fallthrough.\nChange-Id: Icafaff606364fe7bffaad1e9c2e763c444ea999c\n"
    },
    {
      "commit": "333c6b74cb1806f5732344e997861c80e99407d4",
      "tree": "7b830b6d01870c8b3ac2cd0a472bf37c8023bb9d",
      "parents": [
        "2ff16ece16b54d5ffc05f58cebac794c8e153d8f",
        "d1f9e1856196463842e2149c8a75a618ae133b39"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Aug 20 18:27:05 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Aug 20 18:27:05 2018 -0700"
      },
      "message": "Merge \"Fix or suppress some google-runtime-int warnings.\" am: d9f80435b6 am: c852559529\nam: d1f9e18561\n\nChange-Id: I612fb5d62488da8f658c33ebda5ab28877eccb9d\n"
    },
    {
      "commit": "bca742946f0c20e4227b23f2b52c43350e73ca5c",
      "tree": "9400059ddc2f410c677d6bb66ac32f925bc49737",
      "parents": [
        "51d361e77c038003d7aeab39e9d91ffb31332c1e"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Aug 10 16:06:07 2018 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Aug 20 16:01:29 2018 -0700"
      },
      "message": "Fix or suppress some google-runtime-int warnings.\n\n* Use time_t for tv_sec type.\n* Use \u0027auto\u0027 to avoid explicitly use of \u0027long\u0027.\n* Use (u)int16_t instead of (unsigned) short.\n\nBug: 112478838\nTest: build with WITH_TIDY\u003d1\nChange-Id: I023e579b071688731064e51dc94f404274cd59e2\n"
    },
    {
      "commit": "2a4e16168061c0516c48b93450917eede7723c44",
      "tree": "059bb279ffacafb9e120b1fbb1e3b49a749b2781",
      "parents": [
        "1ee5077f7b6a0129492494aa55f92089c4cc2049"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 01 15:06:09 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 01 15:17:11 2018 -0700"
      },
      "message": "AudioTrackShared: Move framesReadySafe to ServerProxy\n\nAllows common use for latency computation.\nImplementation for AudioRecordServerProxy added.\n\nTest: audio sanity, subsequent latency tests\nBug: 80447764\nChange-Id: Ib53181cdced16606bf268769a04bd52c689d89d3\n"
    },
    {
      "commit": "54274035905ef52c7eb88309aec5e5b8f25be471",
      "tree": "d2b51edba9e46feebaf6cb145c5a3f112b79afb5",
      "parents": [
        "6b6f4313aae039f2d73664816e45834e65f79bf5"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 19 18:16:44 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 20 09:53:33 2018 -0700"
      },
      "message": "AudioTrackShared: Fix wrap condition for stop limit\n\nTest: Photos video playback and repeat accessing info\nBug: 68747620\nChange-Id: I8c4afa44c0a0a7f689fbc8797ee815e8ae960979\n"
    },
    {
      "commit": "1d3556d6a068f141ac390a04f6a9d92a70f8d7ed",
      "tree": "e89b4aa887013efbc8227dcf4c56addf4ab284b9",
      "parents": [
        "1f03085b596f185d91ccae11b7c0d9f0bc8cd206"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Mar 29 16:30:14 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 02 14:19:24 2018 -0700"
      },
      "message": "AudioTrack: Prevent server from reading client data after stop\n\nPrior to this CL, if an AudioTrack client wrote audio data after\nAudioTrack stop(), but before the track was drained by the server,\nthe newly written client data would be consumed in the drain.\n\nWe now limit the server read to the client write position on stop.\nThis interlocking is essential for rapid asynchronous AudioTrack\ncommand processing.\n\nTest: AudioTrack CTS, SoundPool looping, bug test case\nBug: 75788313\nChange-Id: Ib70e3dc46afe047a8c6cf1fb906a618b3c66cc7f\n"
    },
    {
      "commit": "bfe83e8158f2c7e3cba81a0c2e5786e1eef005cb",
      "tree": "63baf4fe6aa4c618007983df4337a12661572510",
      "parents": [
        "90025976791da44d104572201d3f40cec981fc72",
        "ca5104eb946179b7659f42e027ca2adb4bcc15e2"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Aug 04 01:04:10 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Aug 04 01:04:10 2017 +0000"
      },
      "message": "Merge \"AudioTrackShared: Log more detail on fatal errors\" into oc-dr1-dev am: c8adbea083\nam: ca5104eb94\n\nChange-Id: If662b76ab0c1c2c760c42cf24f70bb8aeab57e0b\n"
    },
    {
      "commit": "9c64f34be9e56c70eb1aa22ea8e7ce28fe1a2970",
      "tree": "c7f58fcd10f810f70500671d8a8021efafab7728",
      "parents": [
        "71ee06d081d814b079ed22d2e1a50e1a0bbb490e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 02 18:10:00 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 03 15:46:01 2017 +0000"
      },
      "message": "AudioTrackShared: Log more detail on fatal errors\n\nTest: basic audio use regression test\nBug: 63868320\nChange-Id: Ia4caba9a878b308e6fa0c96ec124443cd96f125f\n"
    },
    {
      "commit": "d4ee4db973192806809caab637dc0ef081990754",
      "tree": "655b94a105b89826fedbef24cbd5639ab804b26b",
      "parents": [
        "8280e4156628d53c0a90c405fa57d4c40c33b62b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jul 12 15:26:04 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jul 12 17:53:49 2017 -0700"
      },
      "message": "AudioTrack: Fix flush problem with integer sanitization\n\nAnd other more rare cases of counter overflow.\n\nTest: Custom flush test\nBug: 63544101\nChange-Id: I48ee46966db79ab191ca948d00822e3b6e0cb865\n"
    },
    {
      "commit": "2c6c3bb76b2fa18ed3536331a1700250bd04c7ce",
      "tree": "2bdd2a6e5f8a2ba988a41d76b390827bfa68a964",
      "parents": [
        "2da80c13523113c4d93c3fe1b11ac16cd22b6d0e"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jun 16 14:01:45 2017 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jun 22 15:01:28 2017 -0700"
      },
      "message": "AudioFlinger: Log Record and MMap thread events\n\nAlso update track dump for better grouping and consistency.\n\nTest: adb shell dumpsys media.audio_flinger\nBug: 62700410\nBug: 62701585\nChange-Id: I3a6e76eac871cb08ff14d45f7d3992a6e7fba045\n"
    },
    {
      "commit": "1bfe09a0b1755a79abd32b41c0dd433b88fc260c",
      "tree": "eec723f657fc89b21f3cfc91b27c68eceac4add7",
      "parents": [
        "a29cd562f6f5839cce7e3be2e547d19c2d27f15d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 21 13:05:56 2017 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 29 11:39:04 2017 -0700"
      },
      "message": "Improve audio logs and dumpsys media.audio_flinger\n\nInclude mFrameCount in shared memory corrupt error log.\n\nFix typo in log for primary audio interface.\n\nInclude the new server frame count in logs for fast tracks.\n\nAlways log when fast is successful for output tracks, as it helpful\n  (was already there for input).\n\nCleanup dumpsys for threads.\n\nTest: builds OK, and logs contain more information\nChange-Id: I2b5b4d700e8eb7c261a3125fb03ddc00bf08537e\n"
    },
    {
      "commit": "538ec5e04f389cba637b030757be317fcb8677a8",
      "tree": "c9c576057efe1f6c0bdf1a4cbf6b58dce68f5e3f",
      "parents": [
        "e085c1072f017d4910f7e49741f72e8a722b8892"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Nov 02 13:21:22 2016 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Nov 04 12:14:36 2016 -0700"
      },
      "message": "Split libmedia into libmedia and libaudioclient\n\nThis makes it so audioserver doesn\u0027t need to link against the entire libmedia,\nwhich has dependencies on camera, ICU, OpenGL and other things that aren\u0027t\nneeded for audio.\n\nTest: build/boot\n\nChange-Id: I99ba1a3dc3b33ca9b3abd98e7519dbf228ee62af\n"
    },
    {
      "commit": "4bb650bb3c4f15789232f3f3cf778c5441122360",
      "tree": "38aeb0e3fe7cd024923114813d41b0dbf4ed88aa",
      "parents": [
        "3fb45bb6396f245ae7b47dcfe02fb600eec0b84c"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 09 12:11:17 2016 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Sep 12 17:11:30 2016 -0700"
      },
      "message": "AudioFlinger: flush direct tracks that are paused\n\nNormally the flush is processed on ObtainBuffer.\nBut that is not called when the track is paused.\nSo it was not possible to flush and re-prime a\ntrack that was paused.\n\nNow we flush synchronously for inactive tracks,\nand flush from prepareTracks_l for active tracks.\n\nBug: 19193985\nBug: 27791443\nChange-Id: I39a7e4921e45041c3a51cf91fd3995b5edee6dd4\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\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": "9887c3e252ec0571ee8637310ea9ec2eec118044",
      "tree": "9e6d4ed3e5cb5022ca93322681f3851cf05926f1",
      "parents": [
        "138cfd7d521bb0561333b3f1dd5076cbbbb15d04",
        "926b82fa9e22739686602f7ae8cf24105f14d82e"
      ],
      "author": {
        "name": "Ian Ni-Lewis",
        "email": "ilewis@google.com",
        "time": "Wed Mar 30 18:31:08 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 30 18:31:09 2016 +0000"
      },
      "message": "Merge \"Remove integer sanitization from ringbuffer pointer arithmetic\" into nyc-dev"
    },
    {
      "commit": "926b82fa9e22739686602f7ae8cf24105f14d82e",
      "tree": "5b7fc144bba164876e979067621f4ccf1351e0d1",
      "parents": [
        "7f7052f5e45f8eb1df80a6978e0095d9e9c9eded"
      ],
      "author": {
        "name": "ilewis",
        "email": "inl@google.com",
        "time": "Tue Mar 29 14:50:36 2016 -0700"
      },
      "committer": {
        "name": "ilewis",
        "email": "inl@google.com",
        "time": "Tue Mar 29 14:50:36 2016 -0700"
      },
      "message": "Remove integer sanitization from ringbuffer pointer arithmetic\n\nThe AudioTrackShared ringbuffer uses int32 positions and allows overflow.\nThis confuses the integer sanitization code and makes it panic.\nThe simplest solution for now seems to be to remove sanitization\nfrom the methods that touch the ringbuffer pointers.\n\nBug 27680456\n\nChange-Id: Ie4d7daf0fb1e4e223ee97c412af7b1bd9c6916eb\n"
    },
    {
      "commit": "26760d1a1105b6b318c837a491cdb96f6901804e",
      "tree": "d486ea2b568a39fbc59492dcb90b29f6acb6f496",
      "parents": [
        "02c4f1c02b832868bbae2bf2c62039e54dc0b6d4"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Mar 21 11:53:07 2016 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Mar 21 12:22:43 2016 -0700"
      },
      "message": "AudioTrackShared: fix min buffer size\n\nFast Tracks can have very low buffer sizes.\n\nBug: 27765661\nBug: 27765632\nChange-Id: I70262b2a0136aea3c0936aec85f15b0fc78d168f\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\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": "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": "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": "3f0c902beb53a245c9db35e871607dba05b8d391",
      "tree": "93b456b76dd9504e53de955f75c5c6a4f3d2be7c",
      "parents": [
        "00803f7e94052144ecf476268bc717191ee29865"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jan 15 17:49:46 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 10 15:57:51 2016 +0000"
      },
      "message": "Add AudioRecord timestamps\n\nBug: 13569372\nBug: 22886739\nChange-Id: Ibc81afefb733d23676a632a0f2da31163fdbe05f\n"
    },
    {
      "commit": "bdd8101cd487cdfe36726aa0d78c24008c35d605",
      "tree": "6f9bb1e35b482ba8aadbf1caeb0280a0c6f964db",
      "parents": [
        "37dfacdf3e66516bd4b0c7d08e1aad5869bf5825"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 29 15:25:06 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 29 15:56:33 2016 -0800"
      },
      "message": "AudioTrack: fix ClientProxy::obtainBuffer() size clamping\n\nFix data cast in comparison that can cause large unsigned values to\nbe considered small negative values, causing a wrong buffer size\ncalculation.\n\nChange-Id: I3b7d4326659c38e744338b5d1ae456c859c89abf\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": "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": "59950b403076a94828668902d30215ac5a733902",
      "tree": "adea7c360758c4979fc394a82385cebec1545c41",
      "parents": [
        "3f1ee7c73eb26f339e3307b894115e46b00e2bf1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 20 08:34:07 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 11 11:53:29 2016 -0800"
      },
      "message": "Remove unused ClientProxy::getFramesFilled()\n\nChange-Id: Ib3cf5a6b61572a1bff89bdd62262fdcf9f09aedc\n"
    },
    {
      "commit": "b463da8e499149c7230b8dbd839bb7bc8ece602f",
      "tree": "128eea7b0a107057bf88ea49b8eeea6938d835aa",
      "parents": [
        "4472c761cce96465df078f7f8ab9e25b8e6c3a60"
      ],
      "author": {
        "name": "Leena Winterrowd",
        "email": "lenhardw@codeaurora.org",
        "time": "Mon Dec 14 15:58:16 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 18 17:17:49 2015 -0800"
      },
      "message": "libmedia: Preserve futex return status in client obtainBuffer\n\nclock_gettime() can change errno if something goes wrong (most\ncommonly setting EBADF). This failure should not cause a failure\nin ClientProxy::obtainBuffer() if the futex returned successfully\nor with a known status. Preserve errno before calling clock_gettime\nto prevent propagation of an invalid, unexpected error.\n\nauthored-by: Leena Winterrowd \u003clenhardw@codeaurora.org\u003e\n\nChange-Id: Ib69201031a81395ece47dd8ad7c4dcddd2b00153\n"
    },
    {
      "commit": "77cce44fd360e4bd47ad3427ea14beb15b515d24",
      "tree": "9031600fa150b033a09ea4e2718cbe6951754f47",
      "parents": [
        "be99b0d5e29ba76fbb3748381a489edfc89ebdad",
        "0aa9146d7cf84e00958f8758564b161395d44bfe"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 14 01:28:35 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 14 01:28:35 2015 +0000"
      },
      "message": "am 0aa9146d: am 8fa0848c: Merge \"For static obtainBuffer(), do not set mUnreleased if acknowledging flush.\" into mnc-dr-dev\n\n* commit \u00270aa9146d7cf84e00958f8758564b161395d44bfe\u0027:\n  For static obtainBuffer(), do not set mUnreleased if acknowledging flush.\n"
    },
    {
      "commit": "954ca45ac30539a49f179580b667b0ab1056d113",
      "tree": "33adc92ecf3ea0bbafa97882e61381e3a8bf1204",
      "parents": [
        "e5200ea76c5d180b53087ae7825326ec61cc4687"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Sep 09 14:39:02 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Oct 13 15:48:31 2015 -0700"
      },
      "message": "For static obtainBuffer(), do not set mUnreleased if acknowledging flush.\n\nstatic audio tracks use obtainBuffer() to update position in start().\n\nBug: 22938515\nChange-Id: I8ae32f6cce4d122386d2cf8982e158049b04ba9a\n"
    },
    {
      "commit": "cb50c54b31a83ac598530780fa8c145a3cb4a2de",
      "tree": "fcd28903c829729ebfc68ac3de7c1f0025e1da0d",
      "parents": [
        "3cce4937ae9bb3a522bee74a47807c8cf0b462d5"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Oct 07 14:20:10 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Mon Oct 12 13:37:09 2015 -0700"
      },
      "message": "Fix benign unsigned overflow in AuidoTrackShared\n\nfsanitize\u003dinteger adds unsigned checks to int32_t - uint32_t, force both\noperands to int32_t to avoid such checks being added.\n\nChange-Id: I76fce38f9636f5322ad95fdb81abb690503f4d08\n"
    },
    {
      "commit": "d9459157206859d44d68ce908bff359b0d01f51f",
      "tree": "2ef8b655c98058dcae9e389de4d7108262b5a846",
      "parents": [
        "de83504563a01201511657d1824fe2e23f1d7916"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Sep 23 15:38:29 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Oct 07 14:49:55 2015 -0700"
      },
      "message": "Fix benign overflow in AudioTrackShared\n\nBug: 24340611\nChange-Id: Idc1e6ae09839475379bf0ab27943ae2de6f80bfa\n(cherry picked from commit 0c27d279a1a99d175b84cc530ce2bfb0665b308b)\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": "65dda4f09425ad027e27a51a3108472448d3ab8b",
      "tree": "0e73f54dfae97c5c2b868c4a85682b46198289e0",
      "parents": [
        "20b82e0cb5c615a4f88f245c12fec9ee0ec49894"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue Sep 22 16:13:30 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Sep 23 10:52:14 2015 -0700"
      },
      "message": "Fix benign overflow in ClientProxy::getMisalignment\n\nChange-Id: Ia4537f5b7a8c21178368fa2303602399a3f8fc36\n"
    },
    {
      "commit": "dbd0f3c5e15e56c2d91ae1405fecf2279785ef00",
      "tree": "683d6e42adbf5f3b9b3b2818d9f76a1b362d7af5",
      "parents": [
        "3bf9926510aaec6d70a171b1ccf405abbd74c700"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 17 11:04:04 2015 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 17 11:04:04 2015 -0700"
      },
      "message": "Fix build\n\nChange-Id: I18b63d68d452c4ee7544ff1614f4e3f57f5a9e73\n"
    },
    {
      "commit": "a2d75cdb1e389f2b4ce5992fb6652399b4d30966",
      "tree": "7356aa2f55de2f8c85c37f8a58fb4e135bb72754",
      "parents": [
        "14ae2c0d1aa6e32e97cbb62dabb604820e1e5152"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jul 15 17:04:20 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Jul 16 10:27:06 2015 -0700"
      },
      "message": "Fix AudioTrack flush pointer wrap\n\nOccurs when read offset / write offset span the power of 2\nmask boundary.\n\nBug: 22513776\nChange-Id: If863577dac6666e8b2083d78f78fe9b9490fcf76\n"
    },
    {
      "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": "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": "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": "f59497bd3c190e087202043de5450ef06e92b27d",
      "tree": "52ff88a5a4bd358358850e0ca16d0f9527fded4e",
      "parents": [
        "802a568f77b9a372537e4216b2a7cbb203958a87"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 26 16:35:47 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 13 16:22:16 2015 -0700"
      },
      "message": "Update comments\n\nChange-Id: I37d3c4ce22b74fe8581a886fe5a7f9fef8266dad\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": "b187de1ada34a9023c05d020a4592686ba761278",
      "tree": "31dea84d078f6198ce17ca856fcbb76c402f37b6",
      "parents": [
        "64cbdee08a18b25448a5fb0b058d3b83d5630d7f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 30 08:18:15 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 30 08:18:15 2014 -0800"
      },
      "message": "Line length 100\n\nChange-Id: I6c8fe626a3825fa9e139319656d682a57b887c97\n"
    },
    {
      "commit": "486a7135593b4b40c067e9b06f393577abfef482",
      "tree": "b7aed72b80e48ba1b3837c79e1e33e699dccfde4",
      "parents": [
        "87a408dfa54a2dba79079e251761f93bd0cc9cdf"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 22 16:54:21 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Dec 22 17:10:19 2014 -0800"
      },
      "message": "Fix 64 bit compiler warnings in AudioTrackShared\n\nComparisons between size_t and int64_t variables show\nwarnings for 64 bit compilation, fix with casting.\n\nChange-Id: I3c1b12ea6eca01e49696c724a1cf1cc6b88df7aa\n"
    },
    {
      "commit": "82a69ea8b090d57bff5e02774688b546a711bbb8",
      "tree": "b4712a7df9c4431103b1d1a4a77ad5b237703637",
      "parents": [
        "ca7b4bc40604ae4f06718cb34945fdab278987ae"
      ],
      "author": {
        "name": "zunkyu.lee",
        "email": "zunkyu.lee@lge.com",
        "time": "Fri Nov 07 15:47:32 2014 +0900"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 08 16:04:24 2014 -0800"
      },
      "message": "Prevent ANR when AudioTrack is paused or re-routed\n\nIf ClientProxy was interrupted by AudioTrack::pause() just before futex syscall() in obtainBuffer() was called,\nIt will not call releaseBuffer to wake up AudioTrackThread.\nIt puts the AudioTrackThread to sleep and then a deadlock occurs.\n\nIn this case, CBLK_INTERRUPT flags can\u0027t prevent a deadlock,\nso this patch set mFutex to FUTEX_WAKE during interrupt() to avoid deadlock.\n\nA similar problem could occur due to re-route or recovery after mediaserver death.\n\nBug: 18641665\nChange-Id: I66fcae43af9a91eb55f6cdb52c644ee6c0999772\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": "cb2129b3b568a4e31bcbda3545a468024bc972fe",
      "tree": "87f7c1114770b59e3a6166e7adbb3bcdea8601d2",
      "parents": [
        "97e6ca1a0be83e420ab238d9a1c31d3112126646"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Nov 11 12:17:22 2014 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Nov 18 17:15:51 2014 -0800"
      },
      "message": "Fix missing loop count for static tracks.\n\nStaticAudioTrackServerProxy::framesReady() previously returned\nonly the contiguous frames, update to return the total\navailable frames. This resolves short-count looping in\nSoundPool for FastTracks.\n\nAlso (1) Removes the racy condition of reading two variables\nand (2) Fixes buffer-\u003emNonContig to return the correct value\nand (3) Restores behavior that loop count of 1 goes back to\nloopStart once during playback.\n\nBug: 11830751\nBug: 12070295\nBug: 17456842\nChange-Id: I64906e6036bb00a1d7375b03efe6deb69d6478ca\n"
    },
    {
      "commit": "20f51b1ea04c410a25f214e37bcdb586e2a028cc",
      "tree": "f0925121321ebd3b5bd64715e950a65a3d86b4fe",
      "parents": [
        "b1322c78b035c9f47ebe57a39799d7a0e13bf57f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 30 10:43:19 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Oct 30 15:44:46 2014 -0700"
      },
      "message": "AudioTrack::flush() will no longer flush later data\n\nBug: 17832076\nChange-Id: I4915d782acb8077923e419406b0dcea5b6aab961\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": "6dbb5e3336cfff1ad51d429fcb847307c06efd61",
      "tree": "1918b6cde40e188641e729b6bbde39cce81085bd",
      "parents": [
        "4ea00a25cf85877b48ebd1e15a657cfaab29af58"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue May 13 10:38:42 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 02 11:30:29 2014 -0700"
      },
      "message": "Use of fast capture by normal capture\n\nWill only configure fast capture path if the input buffer size is less than\n10 ms and the input sample rate is same as the primary output sample rate.\n\nChange-Id: I4a7cdc6069d750845412c626d27e83f72a1ab397\n"
    },
    {
      "commit": "e348c5b72ad889389c7c1c900c121f0fbee221b5",
      "tree": "9c77581ad7520309c0bb90f11bba766a6cd61b28",
      "parents": [
        "9382378b6b271949bdce527ea3da748c13c4c692",
        "c0bf836f8a4e34d66c10a2bb8b8cee0db04790cc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:47:50 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:47:50 2014 -0700"
      },
      "message": "resolved conflicts for merge of c0bf836f to master\n\nChange-Id: I5cf238fa56d6fff443b212870cf9dd7f1110e7da\n"
    },
    {
      "commit": "ee499291404a192b059f2e04c5afc65aa6cdd74c",
      "tree": "1c1537b599b21c331b15493f776adcbff307ac2f",
      "parents": [
        "d084206d5a4a5364211af46e4201311933e83bfc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 17:55:51 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:15:33 2014 -0700"
      },
      "message": "Move frameworks/av off private API.\n\nBug: 11156955\nChange-Id: Ib3bb9d66a2bf92977c2445b62aa074a2d7a45aea\n"
    },
    {
      "commit": "9382378b6b271949bdce527ea3da748c13c4c692",
      "tree": "9b20c4e7b8e8dc733937f9125cd22b4c11c046a7",
      "parents": [
        "d83062287758be57d1d0908b30bb18aa9b367f38",
        "b108091734ee7668084cc1063187c2b10ddb7bb7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:01:17 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:01:17 2014 -0700"
      },
      "message": "resolved conflicts for merge of b1080917 to master\n\nChange-Id: Iabbe3e95e29f28461ff722b550e8a9f35bd2528f\n"
    },
    {
      "commit": "77e1512aee8092069514973379a59a318e721be3",
      "tree": "875411e1d44b2cf12e99134af2d7cfb7f9acceae",
      "parents": [
        "ce473c32705e2d1c5fcc817198101e1220b3c8f7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 17:31:18 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 17:31:18 2014 -0700"
      },
      "message": "Move frameworks/av off __futex_syscall3.\n\nBug: 11156955\nChange-Id: I943080bc51b6efa781059b48b5b5ecc4fa287512\n"
    },
    {
      "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": "844f88ccfcca95687e774bccb5e9065da61d33f8",
      "tree": "bfe432c13ed27513ad40db6cac889f5d580514a1",
      "parents": [
        "0fdbdd2a3909e4692fa3baaaa1f53eb91b31af56"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 09 13:38:09 2014 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 09 16:34:39 2014 -0700"
      },
      "message": "Cache mCblk in local variable cblk\n\nThis is the style used throughout the rest of AudioTrackShared.\n\nChange-Id: I959a6be3064e087bb19eba41173fd130dfcb4a9a\n"
    },
    {
      "commit": "adad3d7d935da176ff24941b4ae9edf7340e9b96",
      "tree": "7a8a2f8e31c7dd690805c1cfd9982d218c66296b",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 21 14:51:43 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 14:46:28 2014 -0700"
      },
      "message": "Use LOG_ALWAYS_FATAL instead of LOG_FATAL\n\nLOG_FATAL is compiled out in most builds, so the\nassertion checks were not being performed.\n\nChange-Id: I774f0985ab9c5ccecd8989a0f1c940386b73fc35\n"
    },
    {
      "commit": "751a9c8cbc391a91604dd1052fb95d3e4d278c2f",
      "tree": "2148da61941d0a19ba1b2118158dfb7d98d6a010",
      "parents": [
        "7eacea1156a3896ee7813cd9a06c535e63c95f6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 28 11:03:28 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Thu Feb 13 07:57:20 2014 -0800"
      },
      "message": "Replace size_t in shared memory by uint32_t\n\nEventually we may want to use uint64_t, but will need to confirm atomicity.\n\nBug: 12381724\nChange-Id: Ia2c591d262d22b47b6f7dab4b9d9faa14b86d865\n"
    },
    {
      "commit": "fdac7c00f9201bb3a9862069145f01d37e39755b",
      "tree": "f82c52ff982030d0b1c4d7ea75a987300393c7b3",
      "parents": [
        "9be49c915852b592a881be3905658e4fc698749d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 28 11:03:28 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 28 20:06:35 2014 +0000"
      },
      "message": "Replace size_t in shared memory by uint32_t\n\nEventually we may want to use uint64_t, but will need to confirm atomicity.\n\nBug: 12381724\nChange-Id: Ia2c591d262d22b47b6f7dab4b9d9faa14b86d865\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": "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": "2e422c472c91aa7912befd0fc038d1e11f354bc1",
      "tree": "7583e04f353f9cadf5081fafdcb8042450e3c85c",
      "parents": [
        "dedc7b0fa23c21b525dc8abb572bb8161ad66a9b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 18 13:00:29 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Oct 18 13:53:41 2013 -0700"
      },
      "message": "Allow releaseBuffer after flush\n\nAfter AudioTrack start checks for pending flush,\nallow releaseBuffer on any previously obtained buffer.\nFor example, this can happen if the resampler has obtained\na buffer but not released the whole buffer yet.\nNote that the resampler will be reading obsolete data.\n\nBug: 11285590\nChange-Id: I0614fbb62e43604aac3089cce4b7797c87a306b5\n"
    },
    {
      "commit": "cc21e4f1e41dfa17e7e2bef995fcd22c45f6bcd0",
      "tree": "a446f08a1adaf31ef5dddc491c620209176b67aa",
      "parents": [
        "014e7fa2e90827d911c37bb0ce4d2e10e14d0bb3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 16 15:12:32 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 16 15:12:32 2013 -0700"
      },
      "message": "AudioTrack: fix head position after restore\n\nThe head position transfered to the new track\nby restoreTrack_l() must take into account the frames that\nare dropped from the old track to avoid a non recoverable\noffset in the playback head position returned to applications.\n\nBug: 11230062.\nChange-Id: I51143a08b95e8f264ed709ae2054360315f2b8b1\n"
    },
    {
      "commit": "ce8828a016b082f730152af2204b8ea3610dc1ec",
      "tree": "aad0c32a17516519b22bcea0d4f2fa7c81c61d28",
      "parents": [
        "d176ec1e371a686c58385692a28da677e398c302"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 16 18:07:38 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 17 11:24:02 2013 -0700"
      },
      "message": "Fix underruns when fast track denied due to SRC\n\nOpenSL ES requests a fast track.  If sample rate conversion is needed,\nthe request is denied by server, and a larger client buffer is used\nto handle the higher latency of a normal track.  However the client\nnotification period was calculated based on buffer being divided into\n2 sub-buffers.  That resulted in the notification period being too long.\nThe server pulls chunks that are smaller than half the total buffer.\nSo now the client uses 3 sub-buffers when there is SRC.\n\nAlso removed the \u0027defer wake\u0027 optimization because it was incorrect.\nThis optimization attempted to reduce the number of wakeups of client,\nwhen server releaseBuffer knows that another releaseBuffer will be\nfollowing.  But there is no way for the first releaseBuffer to predict\nhow soon the second releaseBuffer will occur.  In some cases it was\na long time, and the client underran.  So now the client is woken up\nimmediately if the total number of available frames to client is \u003e\u003d\nthe minimum number the client wants to see (the notification period).\n\nAlso fix bug where minimum frame count was not being used in the\ncalculation of notification period.\n\nBug: 10342804\nChange-Id: I3c246f4e7bc3684a344f2cf08268dc082e338e2a\n"
    },
    {
      "commit": "82aaf94a5b18939e4d790bbc752031f3070704a3",
      "tree": "4e39e32d0ccde726548afcbd81e253d5e316b295",
      "parents": [
        "b08ab81bab9e8cd2e3a7fff02725a387070fd078"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 17 16:05:07 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 09:15:00 2013 -0700"
      },
      "message": "Report underruns for fast tracks also\n\nThis fixes a regression that was introduced earlier\nby commit 9f80dd223d83d9bb9077fb6baee056cee4eaf7e5\ncalled \"New control block for AudioTrack and AudioRecord\".\nThat commit broke underrun reporting for fast tracks.\n\nAlso remove Track::mUnderrunCount, which counted the number of underrun\nevents, and was only used by dumpsys media.audio_flinger.\n\nNow dumpsys media.audio_flinger reports the number of underrun frames,\n\nIsolated underrun-related control block accesses via the proxy, so that\nthe server is not directly poking around in the control block.\n\nThe new proxy APIs are AudioTrackServerProxy::getUnderrunFrames() and\nAudioTrackServerProxy::tallyUnderrunFrames().  getUnderrunFrames() returns\na rolling counter for streaming tracks, or zero for static buffer tracks\nwhich never underrun, but do a kind of \u0027pause\u0027 at end of buffer.\ntallyUnderrunFrames() increments the counter by a specified number of frames.\n\nChange-Id: Ib31fd73eb17cbb23888ce3af8ff29f471f5bd5a2\n"
    },
    {
      "commit": "d054c32443a493513ab63529b0c8b1aca290278c",
      "tree": "fc68ba259ded1dd4960bee2938a9bcc7c599c9a3",
      "parents": [
        "96f60d8f04432a1ed503b3e24d5736d28c63c9a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 12:59:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:50:48 2013 -0700"
      },
      "message": "Move control block mName to createTrack() output\n\nThis is part of a series of CLs to clean up the shared memory\ncontrol block, by removing any fields that don\u0027t have to be there.\n\nChange-Id: I6e51003a1293b6800258c31b22cff2eba42162e7\n"
    },
    {
      "commit": "96f60d8f04432a1ed503b3e24d5736d28c63c9a2",
      "tree": "083f6224327e0965a925076b3e1aec5636598203",
      "parents": [
        "97252bb0e40a5a9b41f020163393cf6c5da10b7e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 10:21:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:40:17 2013 -0700"
      },
      "message": "Rename control block flags to mFlags\n\nChange-Id: I7b6d31e24531954ab1ecdf3ed56c19433700bd89\n"
    },
    {
      "commit": "f20e1d8df84c5fbeeace0052d100982ae39bb7a4",
      "tree": "997cd41de1adb829c194f56cf29eb02945666b94",
      "parents": [
        "eced2daaa6c91a3731eef978ce65c6ec319c5e6a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 09:45:18 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:24:03 2013 -0700"
      },
      "message": "Rename control block server to mServer and add comments\n\nChange-Id: Ieabd91acee92d0e84e66fbd358df5282b856306e\n"
    },
    {
      "commit": "b1a270d1e926fb9a01b4265a7675ed0c2c8f4868",
      "tree": "091d06b02bc126ff1bb2dd1fabc9be829582ae69",
      "parents": [
        "bfb1b832079bbb9426f72f3863199a54aefd02da"
      ],
      "author": {
        "name": "Richard Fitzgerald",
        "email": "rf@opensource.wolfsonmicro.com",
        "time": "Tue May 14 12:12:21 2013 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "libmedia: offloaded playback support\n\n- start() returns a status so that upper layers can\nrecreate a non offloaded track in case of error.\n\n- Added states to handle offloaded tracks specific:\n  - waiting for stream end (drain) notification by\naudio flinger\n  - allow pause while waiting for stream end notification\n\n- getPosition() queries the render position directly from\naudio HAL.\n\n- disable APIs not applicable to offloaded tracks\n\n- Modified track restoring behavior for invalidated\noffloaded tracks: just send the callback and wait for\nupper layers to create a new track.\n\n- Added wait for stream end management in audio track client\nproxy. Similar to obtainBuffer and should be factored in.\n\nChange-Id: I0fc48117946364cb255afd653195498891f622bd\nSigned-off-by: Eric Laurent \u003celaurent@google.com\u003e\n"
    },
    {
      "commit": "bfb1b832079bbb9426f72f3863199a54aefd02da",
      "tree": "5007d22456776dc77d124be84bcfe8bc4152bbb2",
      "parents": [
        "fc5ea08326b510c6f82f71845d95a8758a6ab698"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 07 09:53:42 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "AudioFlinger: offload playback, non-blocking write\n\n- Added specialized playback thread class for offload playback,\nderived from directoutput thread.\nThis thread type handles specific state transitions for offloaded\ntracks and offloading commands (pause/resume/drain/flush..) to audio HAL.\nAs opposed to other threads, does not go to standby if the track is paused.\n\n- Added support for asynchronous write and drain operations at audio HAL.\nUse a thread to handle async callback events from HAL: this avoids locking\nplayback thread mutex when executing the callback and cause deadlocks when\ncalling audio HAL functions with the playback thread mutex locked.\n\n- Better accouting for track activity: call start/stop and release Output\nmethods in audio policy manager when tracks are actually added and removed\nfrom the active tracks list.\nAdded a command thread in audio policy service to handle stop/release commands\nasynchronously and avoid deadlocks with playback thread.\n\n- Track terminated status is not a state anymore. This condition is othogonal\nto state to permitted state transitions while terminated.\n\nChange-Id: Id157f4b3277620568d8eace7535d9186602564de\n"
    },
    {
      "commit": "ce177bb31493d3cd4450f9d4760fa1fd32ec6bf4",
      "tree": "7e892378eed7bc22e051862e4a07d72894740648",
      "parents": [
        "303d783cc3c0cc47bfd2f64ed13104e339427e34",
        "7db7df0e8d9d7cee8ba374468cdbfa0108e3337c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 11 20:11:55 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 11 20:11:55 2013 +0000"
      },
      "message": "Merge \"AudioTrackShared cleanup\""
    },
    {
      "commit": "050501d11d944dcb256d37d3b86bd658d94f6a7f",
      "tree": "97c66cb8bf0f64e10a231b49c870dd8fdf4a1b51",
      "parents": [
        "132a4fb88207075932d5dbb7970383ceb6405be7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 11 10:35:38 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 11 10:35:38 2013 -0700"
      },
      "message": "Fix AudioTrack::flush()\n\nIt was only flushing at a surface level, and even then only the first time\nthe server observed the client\u0027s flush request.  Now it flushes at a\ndeeper level, but there may be even deeper device-specific flushing.\n\nBug: 9770947\nChange-Id: I687cc3410ff9e5e5d4a5dcb9e3b129501e53d247\n"
    },
    {
      "commit": "7db7df0e8d9d7cee8ba374468cdbfa0108e3337c",
      "tree": "d1f5c23d596c07854e75999dbf333194d500aaa5",
      "parents": [
        "8f13428cb29a9b610a9e9a0f5fea437cd2d3f032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jun 25 16:13:23 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 02 14:45:19 2013 -0700"
      },
      "message": "AudioTrackShared cleanup\n\nMaintain unreleased frame count on client side also (was already there on server side).\nAssertion failure instead of BAD_VALUE status for incorrect usage of APIs.\nClean up error handling code.\n\nChange-Id: I23ca2f6f8a7c18645309ee5d64fbc844429bcba8\n"
    },
    {
      "commit": "93bb77da5481ab75c2cd6e3aa681839273c6e43d",
      "tree": "024bebbba1fd4692be502a1fc2c7297055a2a3cc",
      "parents": [
        "0d09a9bec07b3bec78bd473ff0bfcf0a261f3f25"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 24 12:10:45 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 24 13:34:08 2013 -0700"
      },
      "message": "Workaround AudioRecord bug for large buffer sizes\n\nBug: 9556436\nChange-Id: I92d1238b623d2cfd648e0a684d0e710fb0bd8b43\n"
    },
    {
      "commit": "0d09a9bec07b3bec78bd473ff0bfcf0a261f3f25",
      "tree": "410d8c22e5d15f9143d04212cd96939c217cacc5",
      "parents": [
        "a2cf13c77260f98fc674f103dcbd2bb2488a80ce"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 24 12:06:46 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 24 13:34:08 2013 -0700"
      },
      "message": "Use mFutex as an event flag rather than semaphore\n\nAn event flag can be more fault-tolerant in case of loss of synchronization,\nas it cannot overflow.  It also allows more bits to be used in the future.\nSee http://en.wikipedia.org/wiki/Event_flag\n\nChange-Id: I01ca25d951eb263124da54bb4738f0d94ec4a48b\n"
    },
    {
      "commit": "9f80dd223d83d9bb9077fb6baee056cee4eaf7e5",
      "tree": "79f19f80ebb7978e9bab16e1d9b835849c735592",
      "parents": [
        "9fef8d453b15a91a2b748faac2bfaff713bcf1e1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 18 15:57:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 12 14:33:10 2013 -0700"
      },
      "message": "New control block for AudioTrack and AudioRecord\n\nMain differences between old and new control block:\n - removes the mutex, which was a potential source of priority inversion\n - circular indices into shared buffer, which is now always a power-of-2 size\n\nChange-Id: I4e9b7fa99858b488ac98a441fa70e31dbba1b865\n"
    },
    {
      "commit": "e3aa659e9cee7df5c12a80d285cc29ab3b2cbb39",
      "tree": "90fdb6e9da1a03f4f24691aae27ae94ff913f1c7",
      "parents": [
        "84b6440fa1d1274267deabe0bd8dc626b5548e4c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 04 12:22:46 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 12 12:21:59 2012 -0800"
      },
      "message": "Start isolating control block accesses in a proxy\n\nThe proxy object will eventually be the only code that understands the\ndetails of the control block.  This should make it easier to change the\ncontrol block in the future.\n\nInitial set of control block fields that are isolated:\n - sample rate\n - send level\n - volume\n\nPrepare for streaming/static separation by adding a union to the control\nblock for the new fields.\n\nFix bug in handling of max sample rate on a track.  It was only checking\nat re-configuration, not at each mix.\n\nSimplify OutputTrack::obtainBuffer.\n\nChange-Id: I2249f9d04f73a911a922ad1d7f6197292c74cd92\n"
    },
    {
      "commit": "a8190fc518b6769257896605f3aee091aeb60b50",
      "tree": "6b235739b3e020180516761cb19f2163cacdb094",
      "parents": [
        "083d1c1492d496960d5b28f4664ff02101736677"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 03 17:06:56 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 03 17:11:19 2012 -0800"
      },
      "message": "Split off the current control block to separate file\n\nPrepare for a new implementation of step() etc.\n\nChange-Id: I268421976ba577aa1fb5d7015de5441c05861190\n"
    }
  ]
}
