)]}'
{
  "log": [
    {
      "commit": "53dbe77b9f50cdd0de88b9d25dd643e90c8ba68b",
      "tree": "c69d11cf3119aaa816cea8a59cc0b63f52a53e69",
      "parents": [
        "81879df8dc51df4d8a3880349e9e1e6b5e3cebfb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 06 10:46:38 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 07 09:12:17 2015 -0800"
      },
      "message": "Move roundup from frameworks/av to system/media\n\nChange-Id: I1083ab739e445e5bd3e3082fc1d3a20cc19601d5\n"
    },
    {
      "commit": "0f6a0435713c435e1aaeacbfd9ce7abb6a5b19a9",
      "tree": "fc94098dd19cc6b1959df58ff4e8a7384d4d96d0",
      "parents": [
        "77342f72fdf96603938a95fcbb9888ec90e71e68"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Jun 18 16:32:00 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Jun 20 12:43:37 2014 -0700"
      },
      "message": "libnbaio: 64-bit compile warnings\n\nChange-Id: I9517c32193031dcc7af7b2104e985d66805b84aa\n"
    },
    {
      "commit": "3f35eb55f0e2bc5a4dda7f58ed52654403a87efa",
      "tree": "0aef3a05fa58a840a3289372c00e102bfaca6ce3",
      "parents": [
        "1392eb3d1802e9f894f87d7a7387207d1b6faca1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 21 13:54:25 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 25 15:23:33 2014 -0700"
      },
      "message": "Fix log spam when MonoPipe is unable to get local frequency\n\nLocal frequency does not change, so only ask for it the first time a\nMonoPipe is constructed in a given client process.  Thereafter use a\npreviously cached value.  Likewise, if the local frequency is unavailable,\nonly log this the first time.\n\nChange-Id: Ib1fc7251c3832e02fe03811db39a87e500f1df50\n"
    },
    {
      "commit": "4d693d6b8cc1283f92f5301daf19a07abc772a2b",
      "tree": "d377025ddacd76f5e923390236a70424897fdf6e",
      "parents": [
        "ac3e9db88ddb1f24bc6c8fb744a37dfdeec332bb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 06 07:53:11 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 06 08:40:43 2014 -0800"
      },
      "message": "Use mFrameSize instead of mBitShift\n\nChange-Id: Idac335ae70cc9300bb3325839fe8ef1e9e097245\n"
    },
    {
      "commit": "72e54af9fcdc4754914fe2bf8de699523538b315",
      "tree": "7fe0f7ca51dbaff80125ea7b12a7a0cc052315e0",
      "parents": [
        "e983e0a0017fce81dc3d9bea36f5abb7b7bce40b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 31 09:37:35 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 31 10:53:38 2014 -0800"
      },
      "message": "Use const NBAIO_Format\u0026 in parameter lists\n\nThis is in preparation for changing the typedef to a struct.\n\nChange-Id: I8d73a6b29580c65105afd78f24db7e2f4a1eb872\n"
    },
    {
      "commit": "e311b15cf821f65f68af2cdfe01e864cbc9a86ce",
      "tree": "442e530b17dc541fbff5b00427859f5c50bccd16",
      "parents": [
        "61540b5fe82cad1c6baa018f02bd2554e62e4364",
        "3b546caeb0a576c4d7d7f1e8d2fdfed2bb8bdeed"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Jan 11 04:20:10 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jan 11 04:20:11 2014 +0000"
      },
      "message": "Merge \"Fix c++11 narrowing\""
    },
    {
      "commit": "3b546caeb0a576c4d7d7f1e8d2fdfed2bb8bdeed",
      "tree": "06f5ff682b7809091f39ca7c2beae8f435d741a0",
      "parents": [
        "d5255d1de125d15afae6cfc35701a5255b5e2933"
      ],
      "author": {
        "name": "synergydev",
        "email": "synergye@codefi.re",
        "time": "Fri Oct 25 12:36:28 2013 -0700"
      },
      "committer": {
        "name": "synergydev",
        "email": "synergye@codefi.re",
        "time": "Fri Oct 25 12:38:30 2013 -0700"
      },
      "message": "Fix c++11 narrowing\n\nThe best fix for these narrowing\nviolations is to use static casting\n\nAs an example, this change would the following for libnaio:\nerror: non-constant-expression cannot be narrowed from\ntype \u0027uint32_t\u0027 (aka \u0027unsigned int\u0027) to \u0027long\u0027 in initializer list\n\nconst struct timespec req \u003d {0, ns};\n                                ^~\n\nChange-Id: I04ed1de4497dc19772194afef3ebf8fe0c8b82bc\n"
    },
    {
      "commit": "4d0815d694e5a2edb3ce48427de50f55d0f84c0b",
      "tree": "446da0a3f51945bcfc0de108c169eab70a652674",
      "parents": [
        "732845c7e8d294bb1aaa4cd9687da62b51f1f6e6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 14:40:55 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 15:12:31 2013 -0700"
      },
      "message": "Implement MonoPipe::getTimestamp\n\nusing SingleStateQueue observer\n\nChange-Id: I7b1928b087f1e676c7b291df6cefa7707301662c\n"
    },
    {
      "commit": "a07a1c2c91dc7ee6ded319262499f20cd01edcf7",
      "tree": "2d7b01150635952af8d8d9e4f1a0d0d48ccfa874",
      "parents": [
        "943ba3cca8df0da24db38e97e43aaacb5b788a21"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 10:54:35 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 15:11:39 2013 -0700"
      },
      "message": "Instantiate SingleStateQueue\u003cAudioTimestamp\u003e\n\nas typedef AudioTimestampSingleStateQueue and use it in MonoPipe.\n\nChange-Id: Idaebb362bd9d0a81a7ed83792ab9369dc37c0e74\n"
    },
    {
      "commit": "767094dd98b01baf21de2ad09c27b3c98776cf73",
      "tree": "57b1a9c3b3d794bac2e1922b314046f02df18e7e",
      "parents": [
        "e45a767e13fe3396185c9d378a70f7f11eb881d0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 23 13:51:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Sep 03 11:24:02 2013 -0700"
      },
      "message": "Add NBAIO_Sink::getTimestamp()\n\nwith a real implementation in AudioStreamOutSink\nfor dummy implementation initially in MonoPipe.\n\nUse in AudioFlinger::PlaybackThread::threadLoop_write()\nto keep the input to the timestamp latch up-to-date.\n\nChange-Id: I10ef277991b63bb43d55d6f3df75116ef32246cd\n"
    },
    {
      "commit": "9bb6e65def86afb36a03643c50456e646cdf98a8",
      "tree": "ffb7ece8b3a156671c5abdeaa9a16ba436a70d84",
      "parents": [
        "91e873a9cfef37f2dce69b33f90ca7c09c0112db"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 28 12:22:52 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 28 16:30:52 2012 -0700"
      },
      "message": "Enable write side of MonoPipe to be shutdown\n\nBug: 7253033\nChange-Id: Iea8390763b59ffa7a8e2a6b77dd04ea23442698f\n"
    },
    {
      "commit": "003d9f71937070791418bf7efc1f7fe1e4c6b821",
      "tree": "bcf8cd292f899525639d95d833cd0488cf32cf03",
      "parents": [
        "e646b2d26459ca30667097e9600ee3f57ebfd228"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 28 12:22:52 2012 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Sep 28 16:30:52 2012 -0700"
      },
      "message": "Enable write side of MonoPipe to be shutdown\n\nBug: 7253033\nChange-Id: Iea8390763b59ffa7a8e2a6b77dd04ea23442698f\n"
    },
    {
      "commit": "99ae06be60d7ccd753a0808191583225e5533f3a",
      "tree": "dbffc4a569cf43347fb77e37e8f718546b838770",
      "parents": [
        "4bf45909bcccb46acac61c155edd031e85b9dc12"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 24 11:29:00 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 24 11:48:20 2012 -0700"
      },
      "message": "Check clock_gettime(CLOCK_MONOTONIC) for failure\n\nBug: 7100774\nChange-Id: I15a84a19bb6d6ef1d9dac4beaa03587638196404\n"
    },
    {
      "commit": "80b3273cea8660fe8a5868d024d2788a1e083ffc",
      "tree": "e9d4e782be64fe03b80331cf62f98ca27c16be6f",
      "parents": [
        "94a68ecf2b56bd56994d0352cbaad56e58dcf0dc"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 24 11:29:00 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Sep 24 11:48:20 2012 -0700"
      },
      "message": "Check clock_gettime(CLOCK_MONOTONIC) for failure\n\nBug: 7100774\nChange-Id: I15a84a19bb6d6ef1d9dac4beaa03587638196404\n"
    },
    {
      "commit": "fc7992bd8220824f1404c0c54ac516d9e28b58c2",
      "tree": "972da8ca10068930ebb465a72c76be69a0ca6a79",
      "parents": [
        "6db33a9272da8f011be1c51675220b81655fd470"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 29 11:10:32 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 10:53:37 2012 -0700"
      },
      "message": "Move libnbaio out of AudioFlinger\n\nlibnbaio is now a separate shared library from AudioFlinger, rather\nthan a static library used only by AudioFlinger.\n\nAudioBufferProvider interface is now also independent of AudioFlinger,\nmoved to include/media/\n\nChange-Id: I9bb62ffbc38d42a38b0af76e66da5e9ab1e0e21b\n"
    },
    {
      "commit": "2dd4bdd715f586d4d30cf90cc6fc2bbfbce60fe0",
      "tree": "d0f594b402b6d2a4de89386c30c3db4adab89894",
      "parents": [
        "0a24726a64ba1c50aa6ee1610de2d80602d49fe6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 29 11:10:32 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 10:53:37 2012 -0700"
      },
      "message": "Move libnbaio out of AudioFlinger\n\nlibnbaio is now a separate shared library from AudioFlinger, rather\nthan a static library used only by AudioFlinger.\n\nAudioBufferProvider interface is now also independent of AudioFlinger,\nmoved to include/media/\n\nChange-Id: I9bb62ffbc38d42a38b0af76e66da5e9ab1e0e21b\n"
    },
    {
      "commit": "2c3b2da3049627264b7c6b449a1622f002210f03",
      "tree": "f99fadbfef22ff3b7709a505623371c22e39566c",
      "parents": [
        "ee578c0330319f04a48bccbdb26b53fea0388d04"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Aug 02 17:08:54 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Aug 08 11:28:15 2012 -0700"
      },
      "message": "AudioFlinger: fix timed audio\n\n(cherry picked from commit e20ac92c564a2f4e8123885807abdf0a78de0dd7)\n\n\u003e AudioFlinger: fix timed audio\n\u003e\n\u003e Addresses Bug 6900517.\n\u003e\n\u003e Finish up support for timed audio in the new FastMixer world.  Pay special\n\u003e attention to remaining lock-less and voluntary yield free on the FastMixer\n\u003e thread.  This fixes audio playback for Q on JB.\n\u003e\n\u003e Change-Id: Iaf815e58a1b1d0a0190051794bec8dc5c9231785\n\u003e Signed-off-by: John Grossman \u003cjohngro@google.com\u003e\n\nChange-Id: I9bd687acc345a05867af48e71116690fdb0ce1b5\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "28ed2f93324988767b5658eba7c1fa781a275183",
      "tree": "07ba39f61d41aa6ff2af76dc2c9122a102c92059",
      "parents": [
        "a4f7e0e9a0e92a063f1b3a08988cf46e2cf1fa94"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 07 10:17:54 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 08 10:09:22 2012 -0700"
      },
      "message": "Reduce underruns in screen off, esp. with EQ\n\nAdd MonoPipe APIs to specify setpoint.\nUse screen state to configure pipe setpoint.\nFix a long-standing bug where pipe sleep time was excessive,\n  which interacted poorly with governor and low clock frequencies.\n  Now it deducts the elapsed time since last write(),\n  which was significant when there was EQ and low clock frequency.\n\nBug: 6618373\nChange-Id: I6f3b0072c2244aeb033ef0795ad164491a164ff5\n"
    },
    {
      "commit": "820ba70df8ba595ae9055dfd34fdbfa32f70f14d",
      "tree": "e97d469bcac8dc241ed7f6690db31035a6f1493b",
      "parents": [
        "4364d2d1fd712faed7e839b58fedba3f48f626d0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 16:34:17 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 30 17:39:45 2012 -0700"
      },
      "message": "Pipe throttle based on requested frame count\n\nNow does throttling based on the requested frame count, but\nstill permits overfilling pipe up to the rounded-up frame count.\nAlso still uses the larger frame count for non-blocking arithmetic.\n\nBug: 6585323\nChange-Id: Ic2420a071419905524a14c22ebe1ce0e32d70a9d\n"
    },
    {
      "commit": "6d8aabe8a3be1ac0789d00b82c3ca8b81381f5ab",
      "tree": "1f621b7f3f61ede29474f1d2c3802ecffa1df4c7",
      "parents": [
        "874a897f09dc7b06679bb273506d7e0fa0152220"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 18 10:47:28 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 18 11:44:27 2012 -0700"
      },
      "message": "Add throttle to have pipe fill at more stable rate\n\nChange-Id: Ibff9ab62764e2acd04518a4a00e25f19e28aff4a\n"
    },
    {
      "commit": "010662326b9c43c703725f933e95e0897f8a6bdd",
      "tree": "29a39db792c50d29f266d9df86af2d1de2d4c752",
      "parents": [
        "a1472d9883e35edd280201c8be3191695007dfd4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 11:50:44 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 02 07:44:17 2012 -0700"
      },
      "message": "Non-blocking audio I/O interface, WIP\n\nYet another abstraction similar to AudioTrack::Buffer and AudioBufferProvider,\nbut with support for streaming, non-blocking, and eventually PTS.\n\nThis is intended to be used as follows:\n - primary HAL output stream implements a Sink\n - primary HAL input stream implements a Source\n - Pipe implements a Sink\n - PipeReader implements a Source or TimedSource (not shown yet),\n   which supports \"read at PTS\"\n - fast AudioTrack on server side will implement a Source using cblk\n - normal AudioTrack on server side will not be changed initially\n - fast AudioRecord on server side will implement a Sink using cblk\n - normal AudioRecord on server side will not be changed initially\n - fast mixer thread will read from Sources and write to a Sink,\n   or (unlikely) implement a Source and multiple Sinks\n - Visualization and PCM logger will read from Source or TimedSource\n - A2DP normal mixer will be connected directly to its output stream\n   and there will be a kind of OutputTrack for duplication that will\n   read from a Sink with non-blocking write fed by the fast mixer.\n\nPatch set 3 changes:\n - Add more implementations of NBAIO interfaces:\n   added SourceAudioBufferProvider, MonoPipe, MonoPipeReader.\n - Added Format_sampleRate and Format_channelCount.\n - Extract out the roundUp() method.\n - Respond to most comments from previous code review.\n - The new classes are untested.\n\nPatch set 4 changes:\n - Fix bugs in MonoPipe::write() and MonoPipeReader::read()\n - Fix bug initializing mFrameBitShift too early\n - renamed roundUp() to roundup()\n - Fix Android.mk\n - Add LOG_TAG an LOG_NDEBUG, use ALOG_ASSERT and utils/Log.h instead of assert\n - Fix build warnings\n - Move constructor and destructor bodies from .h to .cpp\n - Line length 100\n - Following naming conventions for #include double-include protector macros\n - Include what you use\n - More NBAIO logging\n - MonoPipe write can be blocking\n\nPatch set 5 changes:\n - Address code review comments\n - Use a static library so unused implementations don\u0027t take memory\n - Comment out libsndfile dependency\n - Remove debugging LOGV and LOG_NDEBUG\n\nPatch set 6 changes (would be 6 at old location, actually 2 at new location):\n - Address code review comments on patchset 5\n - For MonoPipe, allow the full pipe to be used, no need to omit one slot\n - Don\u0027t do atomic releasing stores unless needed\n\nStill to do:\n - I\u0027m not happy with the Pipe class names\n - Update build/ for new static library?\n\nChange-Id: Ie6c61f05ce06b676b033be448a8ef9025a2ffcfd\n"
    }
  ]
}
