)]}'
{
  "log": [
    {
      "commit": "a6a88d9c445e261972c2433254e0a996336e78a4",
      "tree": "3bcb34c468d9f0f525fb68dbb237e5b709a03465",
      "parents": [
        "1bd947a7c99853ad4ee67d59db89524be1e5acfc"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 30 10:41:25 2013 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 30 10:41:25 2013 -0800"
      },
      "message": "Plumbing to reflect minor changes in the HDCP module API that allow for\n\nsupport of _decryption_ modules in addition to what we already supported.\n\nChange-Id: Ic37b87dc170ba8def3817991d25df798f21e950b\n"
    },
    {
      "commit": "49d24d3fcd01aef0ec1fa4abd9c1b85473f64c0f",
      "tree": "b2803e0ba9269ce4513f41d1a37984450f6fbfd7",
      "parents": [
        "df84d70d1da102995a5f1591c4af7c1807e4acd8",
        "8d6cc842e8d525405c68e57fdf3bc5da0b4d7e87"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Dec 21 08:09:10 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 21 08:09:11 2012 -0800"
      },
      "message": "Merge \"Remove unnecessary parameter\""
    },
    {
      "commit": "8d6cc842e8d525405c68e57fdf3bc5da0b4d7e87",
      "tree": "d3296fc4f886ae058cb353cec79576b7e4428897",
      "parents": [
        "53bc0a2fc54330534330118edd5c393f39eff8ab"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 11:06:53 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 18 16:16:30 2012 -0800"
      },
      "message": "Remove unnecessary parameter\n\nJust get the parameter on server side\n\nChange-Id: I433a63104dbb257e0d862be2ab61847cb36d1c15\n"
    },
    {
      "commit": "8ba01021b573889802e67e029225a96f0dfa471a",
      "tree": "110eca2effc73dcb2f46da71e9a0584e4af6e71e",
      "parents": [
        "53bc0a2fc54330534330118edd5c393f39eff8ab"
      ],
      "author": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Tue Dec 18 09:46:54 2012 -0800"
      },
      "committer": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Tue Dec 18 13:31:57 2012 -0800"
      },
      "message": "Rename ISurfaceTexture and SurfaceTexture\n\nThe C++ class names don\u0027t match what the classes do, so rename\nISurfaceTexture to IGraphicBufferProducer, and SurfaceTexture to\nGLConsumer.\n\nBug 7736700\n\nChange-Id: I64520a55f8c09fe6215382ea361c539a9940cba5\n"
    },
    {
      "commit": "e33054eb968cbf8ccaee1b0ff0301403902deed6",
      "tree": "b91f7abd2927e25a4cb7c50a8ef197c643ca9db6",
      "parents": [
        "7d9c126be8dfe3016683eeb2b7a2d88ba5b24c0b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 12:54:39 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 15 16:43:40 2012 -0800"
      },
      "message": "Use size_t for frame counts\n\nAlso fix typo: bufferCount should be frameCount.\n\nChange-Id: Ibed539504db75ef99dc21c8ff1bf2987122063a5\n"
    },
    {
      "commit": "3b16c766d1ae2cfd8487e8ffb2b23936fc0a8e17",
      "tree": "56e1f373606202e5d5277f9645158d91b1a0a80c",
      "parents": [
        "b4a17e834b718eff1ba2eac4232de6e73a4bf9f5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 08:44:39 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 16:19:23 2012 -0800"
      },
      "message": "Use uint32_t for sample rate\n\nChange-Id: Ie240b48fb54b08359f69ecd4e5f8bda3d15cbe80\n"
    },
    {
      "commit": "207e18540fefbaf530a4fdf506d266f34ddec84f",
      "tree": "d8e7d7db4c874aabfe35c5fdd4a5dcf7bf72047d",
      "parents": [
        "086f958a7e539acffb637b42f5a6998184544179"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Sep 20 16:00:17 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Sep 21 09:24:08 2012 -0700"
      },
      "message": "Remove legacy code and APIs in wifi display related code.\n\nChange-Id: Ia010e7a00534f9356b3247369d0ffd65591d91aa\n"
    },
    {
      "commit": "efbb781c15abf8e085f5ab8d39710bd58ea0b6e4",
      "tree": "a2f28698970fc1b62495cee5d617e1037a0a957d",
      "parents": [
        "74e58c55bc5259b957a51f1bb44a5911ad1f8400"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Sep 18 10:36:32 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Sep 19 09:28:08 2012 -0700"
      },
      "message": "HDCP module binderized\n\nChange-Id: I866768b1e3f3b232f1934a35b65f66befc12f3f6\n"
    },
    {
      "commit": "b019250df516e094b0cb648851f9a132b045378a",
      "tree": "dacb7de5f5f683a1c33fed69f6e78b9cb90e5b44",
      "parents": [
        "5e54e0898a0110642df126238227eca150f2654a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 07 17:38:58 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 07 17:39:35 2012 -0700"
      },
      "message": "Add a permission for controlling wifi display.\n\nChange-Id: I321b6c1a0223e0c3d5df04fde7a13ab91c08c7bc\n"
    },
    {
      "commit": "2e5f22e85d177b34e790f832789d03aee438a7db",
      "tree": "1e41eb4b82919725fcab038d5c158189ef9abf63",
      "parents": [
        "c56857b4cd12cd4bc3361e375f5b7554277ce9d7"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Fri Aug 24 14:47:25 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Sep 06 12:33:35 2012 -0700"
      },
      "message": "Add a small hook to support gapless in AAH.\n\nChange-Id: Ie07eca6b45142bdd83412ee0e38d732a4c355630\n"
    },
    {
      "commit": "455d02eca342d8159637af317a5d83219d267812",
      "tree": "2c8a516e25ac9866d681021cd138b582a9f76bba",
      "parents": [
        "0b73d4730202fcad53aefc4314a06e7b95f442f0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 05 17:48:03 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 05 17:48:03 2012 -0700"
      },
      "message": "Update remote display API.\n\nRenamed disconnect() to dispose() to emphasize the fact that\nthis method is intended to clean up the IRemoteDisplay\ncompletely, not just temporarily disconnect the current client\n(which might be useful someday).\n\nOther minor tweaks.\n\nChange-Id: I1209639eb0cd8af09c724206642d7e52aab48257\n"
    },
    {
      "commit": "0b73d4730202fcad53aefc4314a06e7b95f442f0",
      "tree": "49f1e28def31a204301280175e731cd82aebc203",
      "parents": [
        "e104596061b219e9bce6d4db49a9d15242f8d2e5"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Sep 05 10:26:52 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Sep 05 10:26:52 2012 -0700"
      },
      "message": "Expose an IRemoteDisplay to trigger wifi display connections setup and feedback.\n\nChange-Id: I7602cda0e38073c9f0e63fa4de238ca0d4b4ce8e\n"
    },
    {
      "commit": "e104596061b219e9bce6d4db49a9d15242f8d2e5",
      "tree": "d28e83486d2079284c3e04e260fe6a8952d9599f",
      "parents": [
        "6c75ad21705cde0a11f78c755dc70bdec76890e6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 04 21:38:42 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Sep 05 08:47:36 2012 -0700"
      },
      "message": "Implement remote display service stubs.\n\nChange-Id: I582ed000026bba6d116db8304e15a3c52f8a9a01\n"
    },
    {
      "commit": "bcf09f8c995221e75c7cd328f25c7cc6d2b5f7c9",
      "tree": "12db95dcd0186648022458280b950cf4aa154849",
      "parents": [
        "86b1961a8d61086ef8d5475182f2a3cf4392b42c"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Aug 30 14:51:40 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Aug 30 14:51:40 2012 -0700"
      },
      "message": "Only run the wifi display RTSP server on demand, and only on the wifi direct\n\ninterface.\n\nChange-Id: I7d3c44cb79cd40e73499f2d7ccf35c69b628e6d7\n"
    },
    {
      "commit": "d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480c",
      "tree": "3c4c7a83313d169b13c79c9660afeb804d27b975",
      "parents": [
        "eb941f9a0c8474324732a99387cc6d8cb4ab01ef"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Aug 29 11:41:50 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Aug 29 15:06:57 2012 -0700"
      },
      "message": "Initial checkin of support for acting as a wifi display source\n\nChange-Id: I08f17efa0c7d007e17408feb7d4fbef0a19f531a\n"
    },
    {
      "commit": "b8a9825bf0f5c74333b0e4ff5ba7677ac6fd2a25",
      "tree": "4dd56785fc2185f44abff6f257197ca982e4c49b",
      "parents": [
        "96272d57caa39566842795ba1f0605a5a5f72272"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Sun Aug 26 16:13:03 2012 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Sun Aug 26 16:18:11 2012 -0700"
      },
      "message": "Fixed a potential/rare race condtion in MediaPlayerService::Client::notify() method\n\no The mClient could be disconnected before the notify message is sent out. Use\n  a local reference could help resolve this issue.\n\no related-to-bug: 6782035\n\nChange-Id: Ia2047bd7f2666100fed83c6e5417a3bf2e20cd2c\n"
    },
    {
      "commit": "cb0b755efc2cd24703f400729994900bf2117f66",
      "tree": "21d73848006bb14b4de9fcfe56fa0a1befd09868",
      "parents": [
        "9a150640a28d3fa5507a590125a6c004681bb221"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Aug 23 17:47:31 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Aug 23 17:47:31 2012 -0700"
      },
      "message": "Add a missing NULL check.\n\nDon\u0027t crash if its time to start the next media player in a media\nplayer chain, but the current player\u0027s client has a NULL mAudioOutput,\nas is the case when the low level player implements\nMediaPlayerHWInterface.\n\nChange-Id: If555da3a46960cbee91ff26e5b1fd05e52c8ef28\n"
    },
    {
      "commit": "44a7e42f0310831e6a846d1b6bb40bf3a399bf6d",
      "tree": "aba58d779eb8a1d8fe4616d33b8eb6e1672d6f00",
      "parents": [
        "b3e12a4d15a329821979bf287c49a9630486e23f"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Jun 21 17:29:24 2012 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Mon Aug 13 09:48:56 2012 -0700"
      },
      "message": "Add the ability to dynamicaly register MediaPlayer types.\n\nAdd the ability to dynamically register low level MediaPlayer\nfactories which will be probed at setDataSource time to determine the\nproper MediaPlayerBase to instantiate.\n\nThis change is in preparation for moving libaah_rtp out of\nframeworks/base and into phantasm platform directory.\n\nChange-Id: Icf8904db3ab9e3c85df6e780d5546d9988cb9076\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "d791e094da5698c787f8db28ca5d5d490c512cf1",
      "tree": "59cac1f9eff55108cc81adee71c618e3844cb68e",
      "parents": [
        "67295b543c16ed7c77b67f859d598fe7b4571660"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 11 17:00:59 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 11 17:00:59 2012 -0700"
      },
      "message": "Fix gapless for deep buffers\n\nForward current flags to next output.\nb/6645676\n\nChange-Id: I584f7a67472d99cbd6bc38f3fe84763331d115d1\n"
    },
    {
      "commit": "67295b543c16ed7c77b67f859d598fe7b4571660",
      "tree": "ce4810e22cedaec06f3d7ada9f1b5f5e182df506",
      "parents": [
        "c15d6657a17d7cef91f800f40d11760e2e7340af"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 11 14:52:53 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 11 15:10:48 2012 -0700"
      },
      "message": "Fix gapless playback\n\nOn some devices the actual framecount per buffer of an AudioTrack\nwill be different than what was requested, which prevented the\ntrack from being reused. Now we create a new AudioTrack with the\nrequested parameters, and then compare it to the track we already\nhave. If they match, we throw away the new track and reuse the\nexisting one.\nb/6644559\n\nChange-Id: Id3e8c4460436f52e59b98ecaeb01c94f02877c1d\n"
    },
    {
      "commit": "73ac1eebff620714c6977f7342ff8dcc4858b3cf",
      "tree": "09a6525bc876346a77f71ea87f1d0fec8ffcc6d4",
      "parents": [
        "ef7f379497199148b5694615e75b3fb2bf666a18"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon May 07 15:36:32 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon May 07 15:36:32 2012 -0700"
      },
      "message": "Use new sd card mount point for dumpsys\n\nb/6455962\n\nChange-Id: I5c9f8c16c50587b25cafab03c48662e63855868e\n"
    },
    {
      "commit": "1948eb3ea6eee336e8cdab9b0c693f93f5f19993",
      "tree": "448eed49a4ba18fb1ab4f2fb1b2c0d5cef6d242f",
      "parents": [
        "21e8c50bd13ebe44f3088e26c9c6df0e163c469c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 13 16:50:19 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 20 14:17:02 2012 -0700"
      },
      "message": "Add support for deep audio buffers\n\nAllow AudioSink to use deep audio buffering when the\nsource is audio only and its duration is more than\na certain threshold.\nThis helps improve battery life but implies higher\naudio latency.\n\nChange-Id: Ie79915b61c370292f05aabda9779356570e03cbb\n"
    },
    {
      "commit": "0ca3cf94c0dfc173ad7886ae162c4b67067539f6",
      "tree": "bc156e7822e663626b78ec2ad09ef3970fbb48c5",
      "parents": [
        "ee685f6d19a6cc3b0bf02e69eb5dea11a2aeb601"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 09:24:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 15:04:46 2012 -0700"
      },
      "message": "rename audio policy output flags\n\nChange-Id: I27c46bd1d1b2b5f96b87af7d05b951fef18a1312\n"
    },
    {
      "commit": "99448608f375a7191c068c3bfd296f204b58a219",
      "tree": "2233a958570ce34e7203560677dcea2fe0e726e3",
      "parents": [
        "f15cb4472aaca54c13f8250e4c7872470c4bed83"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Apr 02 12:16:49 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Apr 04 14:26:45 2012 -0700"
      },
      "message": "Allow AudioTrack to start at nonzero position\n\nWhen creating a new AudioTrack (not inheriting one from a previous play),\nthe AudioSink should take the AudioTrack\u0027s position as the initial starting\npoint for mBytesWritten, since otherwise NuPlayer\u0027s calculations will be off.\nNormally this position will be 0, but if the test code for 32 bit wraparound\nin AudioFlinger.cpp is enabled, it might be (much) larger.\n\nChange-Id: I1e4f906d529861c3dea996de8afc6dbd491589af\n"
    },
    {
      "commit": "1bd139a2a68690e80398b70b27ca59550fea0e65",
      "tree": "e3be78f22aa021c4e372409128775c2093d46dae",
      "parents": [
        "d22da88fd555f1262357c7dcdeface8445e3a012"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Apr 03 14:19:20 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Apr 03 14:19:20 2012 -0700"
      },
      "message": "New Crypto services talking to the new crypto \"HAL\".\n\nChange-Id: I69ed31e7a8b4d69d1209d2d516f94d258f072566\nrelated-to-bug: 6275919\n"
    },
    {
      "commit": "4110c101c3d0dd8dbc44c8d2d0edd3e2e7d6652f",
      "tree": "7bb39d31afac7348bb91093cc0e1c2d9aa49cba2",
      "parents": [
        "a1472d9883e35edd280201c8be3191695007dfd4"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Mar 29 09:31:28 2012 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Apr 02 09:19:03 2012 -0700"
      },
      "message": "Add gapless playback support for NuPlayer\n\nThis makes NuPlayer use a SkipCutBuffer when needed, and adds a new\nAudioSink method to retrieve the number of frames written so far, so\nNuPlayerRenderer can calculate how much data it can write without blocking.\nAlso make some more methods const.\n\nChange-Id: Id7d253ad8a7b85e9a84ca2baafbe32817b16c744\n"
    },
    {
      "commit": "559bf2836f5da25b75bfb229fec0d20d540ee426",
      "tree": "d7dd708b17eeca96a3e5d8bcc25a51ff3d1b5d0d",
      "parents": [
        "b0b2b4d890cf3bfb274797a759642b4e733343d7"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Mar 28 10:29:14 2012 -0700"
      },
      "committer": {
        "name": "Anatol Pomozov",
        "email": "anatol.pomozov@gmail.com",
        "time": "Wed Mar 28 12:07:41 2012 -0700"
      },
      "message": "AV Android make files changes\n\no plus a few file relocation: ActivityManager.cpp/h, SoundPool.h, etc\no remove some runtime dependencies to libandroid, libandroid_runtime, etc\n\nChange-Id: I047a47c5fb361dd5cf85cd98798c39f629a75d10\n"
    },
    {
      "commit": "ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6",
      "tree": "99d5bb3a2f48f9a3ba3eaaf17e630b589e97bef1",
      "parents": [
        "cc1110dc92e53e9cc0afbb043e6ef8295bd9c5d5"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 26 11:13:27 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 26 11:24:04 2012 -0700"
      },
      "message": "Provisional support for secure decryption of media streams.\n\nChange-Id: Ib3982a9c960bfdb0cb7e1b174440b141b194cfbe\n"
    },
    {
      "commit": "afed0e1fa37473a4cd30018577b560acc79d9a3f",
      "tree": "60e3a06c0cc8266f4ecaa45eb7d08c0c47a8b2dd",
      "parents": [
        "898b11f2aeaaa2bed84d963a3fcfd3b229e00b99"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Sep 20 15:39:58 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Mar 22 13:18:08 2012 -0700"
      },
      "message": "Use NuPlayer for media playback everywhere\n\nif media.stagefright.use-nuplayer is set to true.\n\nChange-Id: Ibb217e7d7d5195b7feeea557554fe78e1585744c\n"
    },
    {
      "commit": "17a736c3e1d062d7fc916329eb32aef8935614af",
      "tree": "7fb73e48de8641ce6ad7b65fb4204bc60cd3e5f0",
      "parents": [
        "1746929ddc7592ab397c402724a61352e45df093"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 08:52:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 14:12:01 2012 -0700"
      },
      "message": "Update comments\n\nChange-Id: I327663a020670d0a72ff57bd0b682e2ce0528650\n"
    },
    {
      "commit": "ab334fd351ae5a0e18903da123d63e565b536874",
      "tree": "9bcc5a6151326d9ca345f9dfac0d9d68d48e73b4",
      "parents": [
        "3c5bbaee376d235404f267fbe1693d1960bfaaef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 12:56:06 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 15 13:15:27 2012 -0700"
      },
      "message": "audio_channel_in/out_mask_from_count\n\nand avoid ambiguous term \"channels\" where it might be confusing\nas to whether it is a channel mask or channel count\n\nChange-Id: I744fa08ccb6001a98c97bd638d2c9d56836c4234\n"
    },
    {
      "commit": "36a4d2cc7a44eb42d0d9ef5fe50b6747a7a34cab",
      "tree": "eec0f805e2e83ed1d720519748527c03affafc29",
      "parents": [
        "5e7616cc0e5493241211333134555d74aec89982",
        "6b74d671a1321a6ecc4a40b6c87beedfecc1ec44"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Mar 13 13:23:07 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 13 13:23:07 2012 -0700"
      },
      "message": "Merge \"Gapless playback, step 1.\""
    },
    {
      "commit": "6b74d671a1321a6ecc4a40b6c87beedfecc1ec44",
      "tree": "44092c52e8439f1991f23601287d424db916c814",
      "parents": [
        "887c5d2ac34d81bde66dadbd7b2ff07501744778"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 28 16:07:44 2012 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Mar 13 13:13:14 2012 -0700"
      },
      "message": "Gapless playback, step 1.\n\nCurrently able to play Ogg Vorbis, PCM WAV and other lossless files seamlessly\nby reusing the initial AudioTrack for subsequent players.\n\nChange-Id: Ie7cf6b9076bdf4f9211574456d192c02c04fecc7\n"
    },
    {
      "commit": "18868c5db2f90309c6d11e5837822135e4a0c0fa",
      "tree": "58c7505f59a1a93ab729fc039aa5cb1eaa49652e",
      "parents": [
        "f2015b625cd6bea86da7401e725332c35b90e7cf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 09:15:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 15:32:22 2012 -0800"
      },
      "message": "Use audio_policy_output_flags_t consistently\n\nThis affects:\n - IAudioFlinger::openOutput\n - AudioTrack::AudioTrack\n - AudioTrack::set\n - apps that call these\n\nChange-Id: I26fb281bac6cb87593d17697bc9cb37a835af205\n"
    },
    {
      "commit": "6556e5bb99bda64f3ab92e8b540fccdd59e9ed8d",
      "tree": "be047ace7a873144a5927ed52352d3cd57d69bf2",
      "parents": [
        "22f9dd98d9c4c3e0e58586cf6a6008ca6ee946e5",
        "db354e58e65592777aa17caa47933e14838b8b35"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 06 10:53:39 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 06 10:53:39 2012 -0800"
      },
      "message": "Merge \"MediaPlayerService: fix AudioSink latency\""
    },
    {
      "commit": "db354e58e65592777aa17caa47933e14838b8b35",
      "tree": "4a04ca6b47a4853f9b397a19b3f4dc84675c8fa7",
      "parents": [
        "d8d6185c978c9b27ca69e7791785e0983ed9e8b8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 05 17:27:11 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 05 17:27:11 2012 -0800"
      },
      "message": "MediaPlayerService: fix AudioSink latency\n\nThe AudioSink latency is currently cached when the associated AudioTrack\nis created. However, the AudioTrack latency can change if the AudioTrack is moved\nfrom one output stream to another.\nThe AudioPlayer must also periodically update its view of the latency\nas it is needed to compensate the real audio time used for A/V sync.\n\nThis fixes an A/V sync problem seen when switching A2DP on and off while\nplaying a video.\n\nChange-Id: I28b24049ca114e1af3e24791dcc900f463536ba4\n"
    },
    {
      "commit": "786618ffe881aceb64d65a6a2e2d76ede6e01ec0",
      "tree": "3e88f6c457f47529026207badf835dfa448ec8b8",
      "parents": [
        "e7c795f3300814aa3f26ceb845f29695383c7edc"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Mar 02 14:54:07 2012 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Mar 02 17:26:49 2012 -0800"
      },
      "message": "Add channel mask in AudioSink\n\nAdd support for specifying a channel mask when opening an AudioSink.\n  This parameter does not replace the channel count parameter in order\n  to not have to duplicate the logic to derive a mask from the\n  channel count everywhere an AudioSink is used without a known mask.\n\nA mask of 0 (CHANNEL_MASK_USE_CHANNEL_ORDER) means a mask will\n  be automatically derived from the number of channels.\n\nUpdate existing AudioSink implementations to use the channel mask,\n  and users of AudioSink to specify the mask if available, and\n  CHANNEL_MASK_USE_CHANNEL_ORDER otherwise.\n\nChange-Id: Ifa9bd259874816dbc25ead2b03ea52e873cff474\n"
    },
    {
      "commit": "c795b64060c3af9d7961fc1371e4ccfa8ee3e450",
      "tree": "aafa8ecde306b5420e96b7a6e0965d1f1f4c4fa6",
      "parents": [
        "4b77dc28097288cb062fce6bf5de0fb3394877a9"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Feb 22 15:38:35 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Mar 01 14:41:35 2012 -0800"
      },
      "message": "Switch the way we configure for MediaPlayer retransmission.\n\nThis is a cherry-pick of I6ab07d89b2eeb0650e634b8c3b7a0b36aba4e7dd\nwith merge conflicts addressed by hand and additional changes made in\nresponse to code review feedback.\n\nMove in the direction of a more publishable API for configuring a\nmedia player for retransmission.  It used to be that we used a custom\ninvoke and a modified URL (prefixed with aahTX://).  There are many\nissues with this technique and it was never meant to stand the test of\ntime.\n\nThis CL gets rid of all that.  A new (but currently hidden) method was\nintroduced to the java level MediaPlayer API, called\nsetRetransmitTarget(InetSocketAddress), which allows an app writer to\nset the retransmit target.  For now, this method needs to be called\nbefore a call to setDataSource (which is pretty unusual for the\nMediaPlayer API) because this mid level code uses this as a cue to\ninstantiate an aahTX player instead of relying on the data source to\nselect a player.  When retranmit functionality becomes part of the\nexisting android player implemenation, this\nset-retrans-before-set-data-source behavior can go away, along with\nthe aahTX player itself.\n\nChange-Id: I3b46c5227bbf69acb2f3cc4f93cfccad9777be98\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "761defc341c5ce9019a42919c441f035f665ec0d",
      "tree": "23b76ab41456c90e80559ffbb7d8e31a38104dc4",
      "parents": [
        "ef7740be67a4d7b6b033ebed59c3d4a9c74a2c18"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 09 15:09:05 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:12 2012 -0800"
      },
      "message": "Upintegreate AAH TX and RX players from ICS_AAH\n\nUpintegrate the android at home TX and RX players developed in the\nICS_AAH branch.\n\nChange-Id: I8247d3702e30d8b0e215b31a92675d8ab28dccbb\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "7a8b0ed6419e57dd8b41d3806893d63d3df91aab",
      "tree": "da2076d221f7eb3e26db190d51173c04a91e0788",
      "parents": [
        "1f5ce8b0941c9c6baadd40d151634145f6d5a35c"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Feb 02 09:06:31 2012 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Feb 13 12:39:54 2012 -0800"
      },
      "message": "Playback rate on MediaPlayer\n\nAdd support for modifying the playback rate of a MediaPlayer\n by altering the sample rate of its AudioTrack.\nThe playback rate is expressed in permille, where 1000 is the\n playback at normal speed.\n\nChange-Id: I981d060ab32f7bae7a767e82c60c88ae635dceed\n"
    },
    {
      "commit": "fff6d715a8db0daf08a50634f242c40268de3d49",
      "tree": "f5331971b746b2e0d878e1127003a0dab72e5fbb",
      "parents": [
        "09192653e836b21689f004bf8dee375356641181"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 16:38:12 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 10:20:14 2012 -0800"
      },
      "message": "Use audio_stream_type_t consistently\n\nAt native level it was a mixture of audio_stream_type_t, int, uint32_t,\nand uint8_t.  Java is still int.  Also fixed a couple of hard-coded -1\ninstead of AUDIO_STREAM_DEFAULT, and in startToneCommand a hard-coded 0\ninstead of AUDIO_STREAM_VOICE_CALL.\n\nChange-Id: Ia33bfd70edca8c2daec9052984b369cd8eee2a83\n"
    },
    {
      "commit": "4cc55d53d542c4f4ed645738cebb65b9e7eb6c44",
      "tree": "417efab1bc349bfaa4bdf7fccdff0e53fb76e7c0",
      "parents": [
        "d5a8bf0bca459389cdb81fdcc30893516bdce951",
        "e1c3962e268ffc12bfd1bd9ea84da1f135f36960"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 10:30:28 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 12 10:30:28 2012 -0800"
      },
      "message": "Merge \"Use audio_format_t consistently\""
    },
    {
      "commit": "29357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47",
      "tree": "3bdafe4b02fe36f6ee29c3170f0b0d2799bebf86",
      "parents": [
        "d709ca9c6a0fa1c8f40cbe624a119398643c5087"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Sun Jan 08 13:19:13 2012 +0000"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\n"
    },
    {
      "commit": "5ff1dd576bb93c45b44088a51544a18fc43ebf58",
      "tree": "c002dcda87f08329197b01395539bd25f10ca737",
      "parents": [
        "8a08dcc0a5de19a904e77d5f31bed3dff9a59890"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Jan 05 23:22:43 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 10:07:54 2012 +0000"
      },
      "message": "Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157065\n\nBug: 5449033\nChange-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69\n"
    },
    {
      "commit": "e1c3962e268ffc12bfd1bd9ea84da1f135f36960",
      "tree": "d24fac9434dbe5808a6c31a50414da7b5ce47c9a",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 09:36:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 13:34:54 2012 -0800"
      },
      "message": "Use audio_format_t consistently\n\nWas int, uint32_t, uint16_t, and uint8_t with 2-bit bitfield.\nAlso replace 0 by AUDIO_FORMAT_DEFAULT and replace 1 by\nAUDIO_FORMAT_PCM_16_BIT.\n\nChange-Id: Ia8804f53f1725669e368857d5bb2044917e17975\n"
    },
    {
      "commit": "b8a805261bf0282e992d3608035e47d05a898710",
      "tree": "7a43908b8e936ac1f30eef0542b40d667c47aa23",
      "parents": [
        "94023fa6744e24f26f0aba1699ec278649bd66df"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Jan 03 22:38:27 2012 +0000"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "471af5aaea2d2491a77dba379771f7c96b9ca3c3",
      "tree": "29609e7feb5c548e28ce94f88b4445c5c373d725",
      "parents": [
        "3b86c964df855a9740c446e984309b719c3ec37c",
        "936a981ba15d528a023311aa32f46446813551d9"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Nov 08 10:40:20 2011 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Nov 08 10:40:20 2011 -0800"
      },
      "message": "resolved conflicts for merge of 26f70db9 to master\n\nChange-Id: Ib1536b1a4c9eeff80e0726b3e61cee12057cd120\n"
    },
    {
      "commit": "3901e5d87573447db33fb9930871a1f5266a9b2c",
      "tree": "2ed377c9705a41c95cbc6ea29d683cd646ff2dc8",
      "parents": [
        "841fa37451fb74f3d5978a15aab606bbb67e8c39"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Oct 25 13:45:00 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Oct 28 09:39:23 2011 -0700"
      },
      "message": "Remove surface legacy APIs and code.\n\nAll surfaces are now supported through surface textures.\n\nChange-Id: I95dd823e7099c0c32a48a1121624149dcc29d9c6\n"
    },
    {
      "commit": "4b8bb4ee7d1d64dc1cd5478a3772f97e4a4a00d7",
      "tree": "1c9e328d23cb6328d2a2531c7215599d2ad3d78b",
      "parents": [
        "c1aa1e96d1310e8b8f9962f924247aa35a61e3c3",
        "262620399c228b3b201c2c4b39c87508d3047d74"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Fri Oct 28 02:53:20 2011 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 28 02:53:20 2011 +0000"
      },
      "message": "am fc9592f8: am 08479cee: Merge \"Stagefright: ANW::connect in MediaPlayerService\" into ics-mr0\n\n* commit \u0027fc9592f8a5f2f75207e5e532655ac294eb2b334b\u0027:\n  Stagefright: ANW::connect in MediaPlayerService\n"
    },
    {
      "commit": "262620399c228b3b201c2c4b39c87508d3047d74",
      "tree": "96e7fd612606424311873d34492def7da58bd6d8",
      "parents": [
        "be1480bade58688d201335860247734aec6b11cb",
        "7dae00baa6e8957be15523c46bb948bd1dde64c3"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Fri Oct 28 02:14:01 2011 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 28 02:14:01 2011 +0000"
      },
      "message": "am 08479cee: Merge \"Stagefright: ANW::connect in MediaPlayerService\" into ics-mr0\n\n* commit \u002708479ceeba56c460fb52f60a24df27776f1936c3\u0027:\n  Stagefright: ANW::connect in MediaPlayerService\n"
    },
    {
      "commit": "7dae00baa6e8957be15523c46bb948bd1dde64c3",
      "tree": "195997b2a0541d250d8ad61ae08232046bbd62bd",
      "parents": [
        "1765d6e0c962d2b89897c0278f969084f632d181"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Wed Oct 26 18:36:31 2011 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Wed Oct 26 18:40:00 2011 -0700"
      },
      "message": "Stagefright: ANW::connect in MediaPlayerService\n\nThis change moves the ANativeWindow connect and disconnect logic from\nMediaPlayer to MediaPlayerService::Client.\n\nBug: 5502654\nChange-Id: Ifc43b98b01ad8f35d62d7ece43110724ec7fda3d\n"
    },
    {
      "commit": "3856b090cd04ba5dd4a59a12430ed724d5995909",
      "tree": "a24e4c98fa6049fd8085826be838000f9a67e39b",
      "parents": [
        "1d2acaffde56ad79e6e96f228d7857863462397c"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Oct 20 11:56:00 2011 +0100"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Oct 26 09:57:54 2011 +0100"
      },
      "message": "Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/143865\n\nBug: 5449033\nChange-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a\n"
    },
    {
      "commit": "d24bac2f9e83d3dbc0ef9d2aae3b8ad8e4d2b731",
      "tree": "e653b32aa31661e403d313439e1f2d6914cc9fb6",
      "parents": [
        "545d1e935b8ee12255bbd443a89a4b8ec2aeeb35",
        "2e5bcd4a0d1f3078acfd88785aa29923ae03a3bb"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Oct 19 17:57:58 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 19 17:57:58 2011 -0700"
      },
      "message": "am b3cdadb6: Merge \"Check whether media recorder client exists before dumping.\" into ics-mr0\n\n* commit \u0027b3cdadb639027f62c7c1637ca962a70d2d1f3b4d\u0027:\n  Check whether media recorder client exists before dumping.\n"
    },
    {
      "commit": "e579e28089c6b86f56d257030b778c5e22b1a5a5",
      "tree": "870e0181874d16cba160ab7ad46202ad7a00292a",
      "parents": [
        "c4ff709bd714286ea4b1eaf8d932c43a02d5430d"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Oct 18 22:29:20 2011 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Oct 18 22:29:20 2011 -0700"
      },
      "message": "Check whether media recorder client exists before dumping.\n\nChange-Id: I1f3a644a958975e4cf6c02099c53e30cc4d2fd82\nrelated-to-bug: 5477177\n"
    },
    {
      "commit": "2bfdd428c56c7524d1a11979f200a1762866032d",
      "tree": "83bb72ba82f689cc704010c06a51a9963479bab4",
      "parents": [
        "f337772630b0a1b48d7828647d1079ebdc22919d"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Oct 11 15:24:07 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Oct 13 11:31:06 2011 -0700"
      },
      "message": "NuPlayer is now taking on the task of streaming over RTSP.\n\nChange-Id: Ie204db8810807f1e7981959e34dc0149e5d9563a\n"
    },
    {
      "commit": "9cb839a0fcc98fe4278b39afb8b6d664c04f1673",
      "tree": "f5847d0d1994489a829368b12c4998dcf229c926",
      "parents": [
        "ece731de0c0af30917316d55313f25c56f91960d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 27 09:48:56 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 27 10:23:38 2011 -0700"
      },
      "message": "Fix issue 5373048: AudioCache decode errors\n\nWhen decoding a file for the SoundPool, do not\nreject the entire file in case of error but\nreturn what was decoded so far instead.\n\nChange-Id: Iff199a1b6a4c8e064e42a0dfe0704e0ae36a27fd\n"
    },
    {
      "commit": "d681bbb1767bed09415e050ba78975df214bcd68",
      "tree": "2030c617c61bbf7b6cd8c6bafab601a99b1ac83d",
      "parents": [
        "d942202ee0c92608c648735c3ad0f1bab4312420"
      ],
      "author": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Tue Aug 30 14:39:17 2011 +0100"
      },
      "committer": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Fri Sep 02 11:26:59 2011 +0100"
      },
      "message": "Require INTERNET permission for network-based content.\nBug #1870981\n\nChange-Id: Ia3ad166390c4d60cea19c3783895b078a2c4c15f\n"
    },
    {
      "commit": "db29e5238e28d59978755a2ff2e7e0f05393abdf",
      "tree": "bc6a7aa136f0397facbce93eb5204a4e61e3a2eb",
      "parents": [
        "a2e0a4259191fc486e0f563b992e3eadd7f9ae4b"
      ],
      "author": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Fri Aug 12 13:46:55 2011 -0700"
      },
      "committer": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Fri Aug 12 13:46:55 2011 -0700"
      },
      "message": "Add a null check to handle failure of android::createPlayer\n\nChange-Id: Id56bd0c16104e46d8dc71f13d8a44aefe251fad4\n"
    },
    {
      "commit": "a23456b306f35b9ecf973bf5818ca39295e9e029",
      "tree": "306cdb8f5f84adc84f2ecf7e5a34c80d988b9818",
      "parents": [
        "ea7c2fea6a031d37270cb5b22b432729626b266d"
      ],
      "author": {
        "name": "Ashish Sharma",
        "email": "ashishsharma@google.com",
        "time": "Thu Jul 07 17:57:05 2011 -0700"
      },
      "committer": {
        "name": "Ashish Sharma",
        "email": "ashishsharma@google.com",
        "time": "Fri Aug 05 12:58:14 2011 -0700"
      },
      "message": "Network traffic accounting for chromium stack support in mediaserver.\n\n        - Atribute network activity to uid calling the mediaplayer\n        - Enables logging of chromium network stack in logcat\n\nChange-Id: I2d28c8392248a056b3cee305dd4d4475ebba4337\n"
    },
    {
      "commit": "9b80c2bdb205bc143104f54d0743b6eedd67b14e",
      "tree": "7a035b1bbc67096fa775d41544f420a5eb6e0487",
      "parents": [
        "cebcdaef5b559f4db2a9d8b305d9d7da03525b62"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Jun 30 15:47:02 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Jul 01 13:18:43 2011 -0700"
      },
      "message": "Charge network traffic to the uid of the process using the MediaPlayer.\n\nChange-Id: I2bcb54b8232afd3fc7ee16289f37c7a7b3f23067\nrelated-to-bug: 4517282\n"
    },
    {
      "commit": "a0b1d4b161599c2bb2a47119e50c51e75bbe980e",
      "tree": "806d5dbe250fbd8069bff8bcafffc730736fef8d",
      "parents": [
        "26adde897188059057b3ffcfde1d60171fc6888c"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Jun 07 15:52:25 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jun 08 16:04:26 2011 -0700"
      },
      "message": "Make dumpsys(media.player) more useful by having AwesomePlayer populate it.\n\nChange-Id: I12ba7d542331a8293d67a0d47378b8be4f777759\n"
    },
    {
      "commit": "0512ab559d4670c2204078470d7ef5d376811c57",
      "tree": "088654e0dd81abeca06fa9a4d8bc70ee43da8c42",
      "parents": [
        "158b194da537c18a6ad1d7ef3cd63c87b2310269"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 04 17:58:57 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 03 16:12:37 2011 -0700"
      },
      "message": "Remove dead code related to gettid\n\nThe gettid system call is always available now.\n\nChange-Id: Ib78b41781eda182dc8605daf456bbea7ff7c2dc0\n"
    },
    {
      "commit": "d217a8c4632b3e3065f8c2a26b9ce4dc4c97171f",
      "tree": "36ea6300b9a3e5412d45ddaa5e5d6a38117c30c0",
      "parents": [
        "013b5a67d6f8e12a1b06e74863daec1bee4d99c1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 01 15:20:35 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 01 15:20:35 2011 -0700"
      },
      "message": "Revert \"Use AudioTrack::event_type not int in callback\"\n\nThis reverts commit 2225e4b7049fa3fb9d39a068b8268b63c952d7c1"
    },
    {
      "commit": "013b5a67d6f8e12a1b06e74863daec1bee4d99c1",
      "tree": "cb10033d696d75aa6b609f39c19e8b5640f9c2fc",
      "parents": [
        "8a72c54e74eb365971288a81687e5c2aa47963e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 04 17:18:16 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 01 13:50:23 2011 -0700"
      },
      "message": "Use AudioTrack::event_type not int in callback\n\nChange-Id: Ifefc708d46874e04fd0d01cb6e2d43b987ee796c\n"
    },
    {
      "commit": "0d255b2d9061ba31f13ada3fc0f7e51916407176",
      "tree": "4df26e48710542386bddab7a0d1cbfa5d6835ac0",
      "parents": [
        "65580f9adf6c4d98449ad0716488f9fe3869aa5a"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue May 24 15:53:33 2011 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jun 01 10:55:29 2011 -0700"
      },
      "message": "Use channel mask instead of channel count for track creation\n\nRecord and playback objects (resp AudioRecord and AudioTrack)\nare created using a channel mask, but this information is lost\nin the mixer because only the channel count is known to\nAudioFlinger. A channel count can always be derived from a\nchannel mask.\n\nThe change consists in:\n- disambiguiting variable names for channel masks and counts\n- passing the mask information from the client to AudioFlinger\n and the mixer.\n- when using the DIRECT ouput, only verifying the format of\n the track is compatible with the output\u0027s for PCM.\n\nChange-Id: I50d87bfb7d7afcabdf5f12d4ab75ef3a54132c0e\n"
    },
    {
      "commit": "64760240f931714858a59c1579f07264d7182ba2",
      "tree": "5fad3bbdc4f7a19cff980b719edb75577c7f9a4b",
      "parents": [
        "b84d042a1216694e1db6b1fc2b053d348cab5593"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed May 11 14:15:23 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Thu May 12 14:09:57 2011 -0700"
      },
      "message": "update for new audio.h header location\n\nChange-Id: Ic4c62c4037800802427eb7d3c7f5eb8b25d18876\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "4f9e47f2c03ce36261c4717cd7e131d7940bb068",
      "tree": "5c3fc9eacd2d81b02cb45c050336c28ea924842e",
      "parents": [
        "d0675ede6de2249256d20271a19ccbf9f11745b8"
      ],
      "author": {
        "name": "Gloria Wang",
        "email": "gwang@google.com",
        "time": "Mon Apr 25 17:28:22 2011 -0700"
      },
      "committer": {
        "name": "Gloria Wang",
        "email": "gwang@google.com",
        "time": "Fri Apr 29 10:24:03 2011 -0700"
      },
      "message": "Add setParameter/getParameter to MediaPlayer API.\nfor bug 1982947\n\nChange-Id: If3f40e4f18cbba155af29944af38bdc627f8cd53\n"
    },
    {
      "commit": "fce7a473248381cc83a01855f92581077d3c9ee2",
      "tree": "e002e1edd8a11f2be56ce9538ab1b13aa289bc9e",
      "parents": [
        "db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Tue Apr 19 22:30:36 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Apr 27 13:10:10 2011 -0700"
      },
      "message": "audio/media: convert to using the audio HAL and new audio defs\n\nChange-Id: Ibc637918637329e4f2b62f4ac7781102fbc269f5\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "b483c4724846c0b8d4e82afcbb7c17f671bae81c",
      "tree": "3323eb5f46357ffff206c880b36fcf30dd984e02",
      "parents": [
        "fa4e195a735ab99e02388ac5c5611e73a76c7c72"
      ],
      "author": {
        "name": "Gloria Wang",
        "email": "gwang@google.com",
        "time": "Mon Apr 11 17:23:27 2011 -0700"
      },
      "committer": {
        "name": "Gloria Wang",
        "email": "gwang@google.com",
        "time": "Wed Apr 13 11:11:34 2011 -0700"
      },
      "message": "- Add another parameter in notify() to be able to send timed text sample\nthrough listener during video playback.\n- Add OnTimedTextListener in the MediaPlayer\nFor feature request 800939.\n\nChange-Id: I65072c27acb4c0037109a72be38c73e9f667420f\n"
    },
    {
      "commit": "51c1e0e86a0ad95bf3d890a9a2f51e54b8ef9444",
      "tree": "622fba590fbbf4fafcdf3230ee6d25ae4976ca65",
      "parents": [
        "94baecca5e14b083c46615a1bcf18ea6cf7cad46"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Apr 04 11:43:40 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Apr 04 11:43:40 2011 -0700"
      },
      "message": "This reverts an earlier change 4aeec2da39fce4de9b07b694d59fd308ffb3d491\n\nInstead of returning 0-filled buffers after EOS from AudioTrack we do this\nwork in AudioOutput instead. That way the EOS signal (0 frames returned)\nis preserved in AudioCache which otherwise would lead to a heap size overflow\nfilling everything with zeroes.\n\nChange-Id: I7e07429ba887957a4340dd4b21eef4bba76248cd\nrelated-to-bug: 3514073\n"
    },
    {
      "commit": "0a73d81f213fb2d6f2fdd59c4dda047bf453bb1c",
      "tree": "eab2ea363949c1b7f356fc4b921e48137d2db775",
      "parents": [
        "7b55c7ce1d8f187430d0b6bda68378f549930289"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 21 16:28:04 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 21 16:34:02 2011 -0700"
      },
      "message": "Enable http-live support for https:// urls, fix a parsing issue.\n\nChange-Id: I2284e1d62babde7f739fba6a3cb4e2619f0e62f9\nrelated-to-bug: 4148291\n"
    },
    {
      "commit": "8635b7b095fbf7ffc63d3ce791891a9116ace1f6",
      "tree": "6c9bbe1d0cec53f0c83099f1028302a178928cb9",
      "parents": [
        "1b99cc90afffbda6013ebbb45d64f17b1d90b9f5"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Mar 14 17:01:38 2011 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Mar 14 18:48:19 2011 -0700"
      },
      "message": "Add memory leak tracking/debugging code to drm server\n\nbug - 4099038\n\nChange-Id: I6c048eaf3d7f34bc144b8daaa5fdef1ed474af66\n"
    },
    {
      "commit": "9ee159b79022b2e1a050acb3890ce948e99e9ccb",
      "tree": "3f8c908cd6d5a69f1f6c5eb7c4e0a833890107e9",
      "parents": [
        "5f5354e35ab3b2a0cb4cabb6d0aa5a160225ccc8"
      ],
      "author": {
        "name": "Gloria Wang",
        "email": "gwang@google.com",
        "time": "Thu Feb 24 14:51:45 2011 -0800"
      },
      "committer": {
        "name": "Gloria Wang",
        "email": "gwang@google.com",
        "time": "Wed Mar 02 16:53:24 2011 -0800"
      },
      "message": "- To track the usage of all audio output devices\n- To track the currently used audio device\n- The devices are separated as speaker and other audio devices\n- Provide the collected data to battery application through pullBatteryData()\n\nChange-Id: I374c755266b5ac6b1c6c630400f4daf901ea8acc\n"
    },
    {
      "commit": "1173118eace0e9e347cb007f0da817cee87579ed",
      "tree": "d2d23b2120010097d1edda29cd0adffd938105c3",
      "parents": [
        "f7f3e824a8cb2b38355db8e4f99e43b90ee71ce4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 08 17:26:17 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 23 15:02:56 2011 -0800"
      },
      "message": "Bug 3438258 Add SurfaceTexture as MediaPlayer sink\n\nThis change enables the use of a SurfaceTexture in place of a Surface\nas the video sink for an android.media.MediaPlayer. The new API\nMediaPlayer.setTexture is currently hidden.\n\nThis includes:\n - New Java and C++ interfaces\n - C++ plumbing and implementation (JNI, Binder)\n - Stagefright AwesomePlayer and NuPlayer use ANativeWindow\n   (either Surface or SurfaceTextureClient)\n\nChange-Id: I2b568bee143d9eaf3dfc6cc4533c1bebbd5afc51\n"
    },
    {
      "commit": "7cf180c9bff69e5cc4a2f4e53b432db45ebbebab",
      "tree": "05d25862b1e1f30ffc31fe2ca2128ff68810df1b",
      "parents": [
        "1de41a66e3e7b548ee44e6654580e5f6f7265b11"
      ],
      "author": {
        "name": "Gloria Wang",
        "email": "gwang@google.com",
        "time": "Sat Feb 19 18:37:57 2011 -0800"
      },
      "committer": {
        "name": "Gloria Wang",
        "email": "gwang@google.com",
        "time": "Tue Feb 22 22:42:05 2011 -0800"
      },
      "message": "- Add method in MediaPlayerService to collect and pull\n  codec usage (duration) for the battery app\n- Collect MediaPlayer decoding usage data\n\nChange-Id: I0ef4e32b6a041ba1fe73c19f9c67185c61d03965\n"
    },
    {
      "commit": "ed8d14f6a934072cd012992c4ef16990a54baa9a",
      "tree": "e38162fe54457b3b943eb7e049dfd122822aa3fe",
      "parents": [
        "d48a6044fddc910f17e67650f280e91e7aaf5e65"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Feb 16 09:05:38 2011 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Feb 16 09:19:40 2011 -0800"
      },
      "message": "Remove legacy, AwesomePlayer-based http live implementation.\n\nChange-Id: I455d0faa5612dcd4d2bb6f2b3c7b64a1caaabf69\n"
    },
    {
      "commit": "4b197e1ffe46eb73ebdb80efc984bfde336b8e92",
      "tree": "94ac02ccd99d70c7baf085dcad5ced7cd00ad3a8",
      "parents": [
        "b1787e3b95e96cc002377d41518cc183f64b58c4"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Jan 06 14:14:56 2011 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Jan 06 14:14:56 2011 -0800"
      },
      "message": "Use NuPlayer for HTTP live streaming playback by default.\n\nReversed the property logic, set media.httplive.disable-nuplayer to true to revert\n\nChange-Id: I1057940667aaab56bb75c9ea15c2cdcab736f3c6\n"
    },
    {
      "commit": "5bc087c573c70c84c6a39946457590b42d392a33",
      "tree": "a9326bfa5027a152a5a21dd9de86d228c7d92330",
      "parents": [
        "53df1a460bcfdd129ca2bc416dee2009e35c042e"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Dec 23 10:27:40 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Dec 23 10:27:40 2010 -0800"
      },
      "message": "Squashed commit of the following:\n\ncommit eaeaa2672d4e0a82891493b2bde8bdd0c0e79a1b\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Thu Dec 23 10:26:48 2010 -0800\n\n    Remove lowest bandwidth stream if using the legacy player.\n\n    Change-Id: I2f885e26344996de9152f8fda9fd6bdef89bf953\n\ncommit 7d652972615b2750fd8f1c21b9fab0e136df2b82\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Thu Dec 23 10:14:36 2010 -0800\n\n    Don\u0027t clear the packet source\u0027s format for legacy discontinuities.\n\n    Change-Id: I9bd5a21b9bd28043ad38bd0658ccc8eda3c1079a\n\ncommit 2b18a45aac17cbfe1aa089d0f6510957d438dd64\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Thu Dec 23 10:13:55 2010 -0800\n\n    Use NuPlayer for HTTP live streaming based on runtime property.\n\n    adb shell setprop media.httplive.enable-nuplayer true\n\n    Change-Id: I22738df3403985dc8e6992b1ab5da5747309f773\n\ncommit 50d899fb7b9ea52c3994b0a58e993998d926aeed\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 22 16:25:22 2010 -0800\n\n    Make ACodec a lot less verbose.\n\n    Change-Id: I94c7e499b61032321ffaf999f5ad2c913cde6a48\n\ncommit b19e1740cb4d02990a56844654b5d019987c6405\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 22 16:22:22 2010 -0800\n\n    Wait until we have fresh codec-specific-data before instantiating the decoders\n\n    after a discontinuity involving a format change.\n\n    Change-Id: I7bcf9b5ae3319f08bf8978a117e8ee5220902e37\n\ncommit 06428c006906c9099e430aface3b439ff1d36ecc\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 22 15:20:38 2010 -0800\n\n    Disable random seeks in the streaming tool for now.\n\n    Change-Id: Ie86fde422dcfc4b2c7a01be51a193fda9c88cd71\n\ncommit e19db68f3bea8a61c191f60f6940f30e3a0d5f1b\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 22 15:20:27 2010 -0800\n\n    Tweak HTTP live parameters.\n\n    Change-Id: If4b71e12485facc523a8a43d8213d0feb190daab\n\ncommit 1e9942791538c2256b579d96c6c04264b0d8b087\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 22 14:48:23 2010 -0800\n\n    Enable http live streaming through NuPlayer for http URLs containing the string m3u8\n\n    Change-Id: I1691fe12ae8f1507fe3673313959cd50bc324624\n\ncommit 4c33f96a6e499ee0efe0e70b687094430cb7c1c0\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 22 14:40:27 2010 -0800\n\n    Support for HTTP live streaming in NuPlayer.\n\n    Change-Id: Iacba1c3ebaeb8d3b972185deaf4cff18c8009c54\n\ncommit ddf705ce553708bc5b13d89a878484cf839bd674\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 22 13:42:47 2010 -0800\n\n    StreamingSource now a subclass of abstract NuPlayer::Source\n\n    Change-Id: Ia6c7c639628910b9d1f37decc55da48b07a70de3\n\ncommit 9e04a8406b1882a8e3fdeb7b4d52db5ae70b970a\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 22 13:33:52 2010 -0800\n\n    Refactor media data sourcing to NuPlayer::Source.\n\n    Change-Id: I1db9fb08c4e527bf7b19c29978cf342c2b0a0bc9\n\nChange-Id: I9610a097481dda58f22142eacda3ac2dba0b63f9\n"
    },
    {
      "commit": "f933441648ef6a71dee783d733aac17b9508b452",
      "tree": "240f8068edb362cbea579659a963bbb029a2bac0",
      "parents": [
        "60c5b57edd3c8f4bdf6b38cf5b8a193ba770bb72"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Dec 15 15:17:42 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Dec 15 15:18:26 2010 -0800"
      },
      "message": "Initial support for a true streaming player for mpeg2 transport streams.\n\nChange-Id: I153eec439d260a5524b21270e16d36940ec3161a\n"
    },
    {
      "commit": "e2b1028852120bcfded33b8f06f66b780437fe92",
      "tree": "a524b579935df0a8773e780299e31b590d1bdb44",
      "parents": [
        "31d7235c79667f88002d9ad87207099ed438a197"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Nov 23 11:41:34 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Nov 23 14:46:13 2010 -0800"
      },
      "message": "Support streaming data across binder boundaries.\n\nChange-Id: Ifbac61406dcb81343765f99ccba08bd90f9274cc\n"
    },
    {
      "commit": "0a5ca668c6f7d45706e9aec4a1dfec0aacc6d233",
      "tree": "d9a1933cf2af87ad563e9220818c8d752b3a0379",
      "parents": [
        "6f9f029f7fc625bb2a1b448ad30a80a6a6a73b20"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Nov 16 13:05:53 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Nov 16 13:05:53 2010 -0800"
      },
      "message": "Remove all traces of legacy renderer support in stagefright.\n\nChange-Id: I17b8e0dbf53fca37c96830c41131b4bc0c24ca6d\n"
    },
    {
      "commit": "30d713a1c18a5ff892a7f13b2524ba624b70890a",
      "tree": "372cbad6a783c5cb5d3c2091722cdc8943c7bc28",
      "parents": [
        "2d71233de5450f1b128c8149fdbdf39b937f3cb8"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Nov 10 18:42:40 2010 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Nov 15 08:36:42 2010 -0800"
      },
      "message": "Remove legacy PV stuff\n\nChange-Id: I60ffea7c65592df4b3a80c590c863f1f79b371fd\n"
    },
    {
      "commit": "05ea6434ed399395e2dbe9f68abb44f04b274cb0",
      "tree": "96fc95609b002fdf18ae1dff241d3c3a549f1673",
      "parents": [
        "c8ca26ed63edcf2731c4773b8ce3141930cc7245"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Oct 29 12:00:20 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Oct 29 13:20:06 2010 -0700"
      },
      "message": "Squashed commit of the following:\n\ncommit 0d5694ba2d399dd0869532a4d6256448185a1be0\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Oct 29 11:59:23 2010 -0700\n\n    suspend() and resume() methods on VideoView are back but don\u0027t do anything.\n\n    They need to be back because they were public before.\n\n    Change-Id: Iddfd1021ffcf341f26e8d55ba761fd33701e2425\n\ncommit 16192891ed7d349ee97e47d1729d20a2d0d247b8\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Oct 29 11:47:05 2010 -0700\n\n    Revert \"New API on VideoView widget to suspend/resume a session. Do not release the MediaPlayer client for video suspending/resuming.\"\n\n    This reverts commit 2e1818a4d16c3309660f27286c77d8d1eee95a25.\n\n    Conflicts:\n\n    \tapi/current.xml\n\n    Change-Id: I68dd1d05871044faf3f832d0838aa40bc7f890e5\n\ncommit 8f934dc1a3ae4e60f0790fcf97671e063fa20fad\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Oct 29 11:44:16 2010 -0700\n\n    Revert \"Release mediaplayer if the current state is not suspending. Fix for bug 2480093.\"\n\n    This reverts commit efb882cf75eef39ecaf9f8920ed302a019fa629f.\n\ncommit f2ed03550887986f39d36b5dabcd9e919949c7cf\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Oct 29 11:44:08 2010 -0700\n\n    Revert \"Release MediaPlayer if suspend() returns false.\"\n\n    This reverts commit 047212fd4ea360675e94d3ce83c7f5544f65b268.\n\ncommit 441ecce678bd24e9660a72c8627b5bd94433ff8b\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Oct 29 11:40:46 2010 -0700\n\n    manually.\n\n    Change-Id: I4fdd43c9f7c8b3eedddb31a196da4984e1c58e87\n\nChange-Id: I60d4b10e7a9e4ed8d9a796f1711618f557eb6e89\n"
    },
    {
      "commit": "2eeadf9ded4b5770a713496e9887d668889987bc",
      "tree": "94815ad41dce013a8d793d9e70d21f330573bd2b",
      "parents": [
        "0714c8262054cb6a532025feb082b21b502a128b",
        "74684081846ee6e68325fa5aba5c45b7447fd368"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Oct 10 16:06:04 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Oct 10 16:06:04 2010 -0700"
      },
      "message": "am 4f21e517: am b37fcbfd: Merge \"Added getter for session Id to AudioSink\" into gingerbread\n\nMerge commit \u00274f21e517d09b9d793d20d64547df330fba705b3c\u0027\n\n* commit \u00274f21e517d09b9d793d20d64547df330fba705b3c\u0027:\n  Added getter for session Id to AudioSink\n"
    },
    {
      "commit": "8c563ed9ca8a863a66965330b5d14bb4b4ab59d4",
      "tree": "b2d2e571aa8618456b27e1cb67a717ca80340e3e",
      "parents": [
        "2a4d22d79e927f2245537921e10fc5fda1c47a29"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 07 18:23:03 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 07 18:23:03 2010 -0700"
      },
      "message": "Added getter for session Id to AudioSink\n\nAdded a method to expose the audio session id at AudioSink interface\nso that the AudioPlayer in stagefright can retrieve it.\n\nAlso:\n- Fixed audio effect send level not being initialized in mediaplayer.\n- Fixed compilation error when LOGV is enabled in mediaplayer JNI\n\nChange-Id: I4bb55454fd63d646e0e677692d737c4843fb05fb\n"
    },
    {
      "commit": "51be6db7d0e802b3f5d067e39e543ae4f09ed01c",
      "tree": "987f654eda08d2e4be1832f4fae744aa4ce390d1",
      "parents": [
        "3a2f37f40cfceb181ee61ae53a7d6954ce9717cd",
        "2658b3f8736a378ad5956aefed069387808d8cd3"
      ],
      "author": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Tue Sep 28 13:19:55 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 28 13:19:55 2010 -0700"
      },
      "message": "am 7dff9dfd: am 269dea1c: Merge \"Fix media.player dumpsys to output open/mapped files correctly. Bug 2866669. The dump function whitelists several directories as filters to the output. The mount point changed for SD card in Froyo, and we started filtering files that w\n\nMerge commit \u00277dff9dfd6176fad1318a27f16318561453a429f0\u0027\n\n* commit \u00277dff9dfd6176fad1318a27f16318561453a429f0\u0027:\n  Fix media.player dumpsys to output open/mapped files correctly. Bug 2866669.\n"
    },
    {
      "commit": "02fa834249a01144d6f23137951538600aa5d611",
      "tree": "8cfc2546431c46811d988c8976679fbc75143e0e",
      "parents": [
        "4a73f3da3501db6e95473a4a653d6319c6d618e2"
      ],
      "author": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Mon Sep 27 16:55:18 2010 -0700"
      },
      "committer": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Mon Sep 27 17:04:05 2010 -0700"
      },
      "message": "Fix media.player dumpsys to output open/mapped files correctly. Bug 2866669.\nThe dump function whitelists several directories as filters to the output.\nThe mount point changed for SD card in Froyo, and we started filtering files\nthat were open on the SD card. This fix changes the filter for the SD card,\nand adds the directory for data files as well.\n\nChange-Id: I61b67c3d11d93dbd530e8b3566000e79bc037137\n"
    },
    {
      "commit": "dd0f7a7127fdb04863b4ad66d2b846ee94358314",
      "tree": "e012a5e389d776605dad8edf62b50a4ba6dc2b4d",
      "parents": [
        "d3a3eaf5d0c88e13b8dc7154fcae8b15dcacc932",
        "e83fffc032654b819774e5d94d38842bb4190c22"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 30 13:30:35 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Aug 30 13:30:35 2010 -0700"
      },
      "message": "am 9aa05ec2: am 681c5ff2: Merge \"Reverse the default setting of media.stagefright.enable-{rtsp,record} in preparation for building without opencore.\" into gingerbread\n\nMerge commit \u00279aa05ec2cd6bc592074c7bd08d22db46649c7f12\u0027\n\n* commit \u00279aa05ec2cd6bc592074c7bd08d22db46649c7f12\u0027:\n  Reverse the default setting of media.stagefright.enable-{rtsp,record} in preparation for building without opencore.\n"
    },
    {
      "commit": "a1ffe49c7d537bf2a16fc3eb32b0ecc6d72bdf8a",
      "tree": "8ea3ebaca6f9020bb8381260e61e6b7633ebb3ca",
      "parents": [
        "e56121bc4cb29c91d736eab181b1f51c4f125e78"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 30 12:46:12 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 30 12:46:12 2010 -0700"
      },
      "message": "Reverse the default setting of media.stagefright.enable-{rtsp,record} in preparation for building without opencore.\n\nChange-Id: I1ca6bd8faba0185f9694f9dc04d2b3e6a7ab5ac3\nrelated-to-bug: 2370115\n"
    },
    {
      "commit": "5daeb129a2c2ba3d14ccd94af283b5f561c783ea",
      "tree": "c3e0f59fefcdb20b92e9a2fc5da59a7cf4b1464f",
      "parents": [
        "a0ced19fa96f26a25de708588a34ebfd452f250e"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 16 08:49:37 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 23 12:30:24 2010 -0700"
      },
      "message": "Squashed commit of the following:\n\ncommit 35cc68814a9537c31fde146e171e7b0bbdfe211e\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Mon Aug 16 08:48:42 2010 -0700\n\n    Only enable support for yuv to yuv conversion on passion, where it\u0027s available, use the slower yuv-\u003ergb565 path everywhere else.\n\ncommit d8ac5a8814103e60d11d2acf61997fc31a1dc58d\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Aug 13 13:56:44 2010 -0700\n\n    The software renderer takes over all rendering, converting from yuv to yuv if possible and rgb565 otherwise.\n\ncommit 684972074b74318bdcb826ed9b5b0864d2d2e273\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Aug 13 09:34:35 2010 -0700\n\n    A first shot at supporting the new rendering APIs.\n\nChange-Id: Iea9b32856da46950501f1a700f616b5feac710fd\n"
    },
    {
      "commit": "2beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1",
      "tree": "ce966d62f6fbb94178763ec53760f6961ffffd58",
      "parents": [
        "3108231d90e8aa324923fd8864ca2477948c5d25"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 16 07:43:46 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 21 06:28:01 2010 -0700"
      },
      "message": "Added support for auxiliary audio effects to AudioTrack and MediaPlayer.\n\nAdded methods to AudioTrack and MediaPlayer java classes to enable use of\nauxiliary audio effects. The effect can be attached and detached by specifying its\nID and the send level controlled.\n\nChange-Id: Ie74ff54a453096a742688476f612ce355543b6f3\n"
    },
    {
      "commit": "b914122eb9cb54bbeae4ec03bfebb194aecdccbd",
      "tree": "92968131eb8b5cd486338c484f743d67d48ba2c5",
      "parents": [
        "cb28102ad3976339ec445afbcb4130f2991b38d7"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Jul 08 11:16:11 2010 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Jul 08 21:25:55 2010 -0700"
      },
      "message": "Add runtime dumpsys support for media recorder client\n\nChange-Id: I4c8a81720f3be2db54678a7e84fe12849255046b\n"
    },
    {
      "commit": "da7581b7b61b84f15e8d671c86fd117c322b009e",
      "tree": "61fb39ca1eaa0a5b8a71d70683f32d238a8e74e7",
      "parents": [
        "215381ea729086b8359b7f59bdc2bd7cf55a0c45"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 02 08:12:41 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 07 11:00:28 2010 -0700"
      },
      "message": "Added Visualizer effect.\n\nThe visualizer enables application to retrieve part of the currently playing audio for visualization purpose.\nIt is not an audio recording interface and only returns partial and low quality audio content as a waveform or\na frequency representation (FFT).\n\nRemoved temporary hack made in MediaPlayer for animated wall papers based on audio visualization (snoop() method.\n\nThis commit also includes a change in AudioEffect class:\n - the enable()/disable() methods have been replaced bya more standard setEnabled() method.\n - some fixes in javadoc\n\nChange-Id: Id092a1340e9e38dae68646ade7be054e3a36980e\n"
    },
    {
      "commit": "608d77b1cf4fb9f63dc861e4e1fa3e80a732f626",
      "tree": "924276911b6c7b1cc35951709030559111aabe2c",
      "parents": [
        "d255a4e04d06796441ae234e8f3a8277578b3446"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jun 23 16:40:57 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jun 23 16:40:57 2010 -0700"
      },
      "message": "Remove most stagefright property overrides, remove VorbisPlayer and VorbisMetadataRetriever as this functionality is now provided by stagefright.\n\nChange-Id: Ieafe75a4550c273ad59b4518d7cd4c0fce0f7cce\nrelated-to-bug: 2370115\n"
    },
    {
      "commit": "a514bdb58b5de4986679f72b7204b4764f7a2778",
      "tree": "84b1ebf0c2b500bfb4995e373f8fee5b63b6c9fd",
      "parents": [
        "58ae9c530247668f8af36e30d228c716c226b3d4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 21 09:27:30 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 22 17:14:04 2010 -0700"
      },
      "message": "Added support for audio sessions in MediaPlayer and AudioTrack.\n\nAudio sessions are used to associate audio effects to particular instances (or groups) of MediaPlayers or AudioTracks.\n\nChange-Id: Ib94eec43241cfcb416590f435ddce7ab39a07640\n"
    },
    {
      "commit": "cf7b9c7aae758ac0b99833915053c63c2ac46e09",
      "tree": "2480a2da149f7ba8fe651876a6173947ec8c6a16",
      "parents": [
        "e71d10e7ad55ccbcb0756c007caef1c959090384"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Jun 07 15:19:40 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Jun 07 15:34:45 2010 -0700"
      },
      "message": "Initial checkin of preliminary rtsp support for stagefright.\n\nChange-Id: I0722aa888098c0c1361c97a4c1b123d910afc207\n"
    },
    {
      "commit": "2e90514be4c98b5fa6e1df5f2049a5e005a4263d",
      "tree": "5a46f118a7f05da39b068489b61209ec63f23034",
      "parents": [
        "45df6a2a25ff36606a5301155d8d97e9bf80d00b",
        "4ac3585263ad59def5cf14756347cecab43e6e67"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 09:46:11 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 14 09:46:11 2010 -0700"
      },
      "message": "am 1d628c5d: merge from open-source master\n\nMerge commit \u00271d628c5d3dd7998b29c339292a2dc391015d0782\u0027 into kraken\n\n* commit \u00271d628c5d3dd7998b29c339292a2dc391015d0782\u0027:\n  Accept media files by file extension in case insensitive manner.\n"
    },
    {
      "commit": "4ac3585263ad59def5cf14756347cecab43e6e67",
      "tree": "89ed91b26ca3e58f51278c0c58e77f56f1a766d8",
      "parents": [
        "a945bfd91aa291fba4d9201ffcb38fce40eab7fe",
        "49475772e0d3c38ab1246deac3d5e5bc6c2bb4e6"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 09:44:36 2010 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 09:44:36 2010 -0700"
      },
      "message": "merge from open-source master\n\nChange-Id: I934cf85c4673f9ca3a9549c2074907ad572310f4\n"
    },
    {
      "commit": "3830a4f133893e6a77a967c84220d7baf9687f23",
      "tree": "f89509fec9d700443a5dbaddfeb5c21334ae9e24",
      "parents": [
        "86f69c1f41dcf4e0826b17ecf7fd71eb353b0782",
        "3cf4e43cdd391502690c07e08e805aa8ff5db0c0"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue May 04 14:30:34 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 04 14:30:34 2010 -0700"
      },
      "message": "am 8ea45aad: am e083d0a2: Merge \"Support for Ogg Vorbis decoding in stagefright.\" into froyo\n\nMerge commit \u00278ea45aad100ee25067b2e83703454c71a968ba4f\u0027 into kraken\n\n* commit \u00278ea45aad100ee25067b2e83703454c71a968ba4f\u0027:\n  Support for Ogg Vorbis decoding in stagefright.\n"
    },
    {
      "commit": "3cf4e43cdd391502690c07e08e805aa8ff5db0c0",
      "tree": "3792432de7d3cf66218e1ed518bfbb32d7d9d4b7",
      "parents": [
        "0b5ba9eeed56a80fed3735f5cd4951477fda79f0"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue May 04 11:46:42 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue May 04 11:58:16 2010 -0700"
      },
      "message": "Support for Ogg Vorbis decoding in stagefright.\n\nSet the magic property media.stagefright.enable-vorbis to true to use the new implementation instead of the standalon vorbis player for file-based playback. HTTP streaming of vorbis content will always go through stagefright.\n\nChange-Id: Ie3843a99fadb22372f89540d0f8d65196e0c2af8\nrelated-to-bug: 2654400\n"
    }
  ],
  "next": "4acdadbd8195f4fb21ff4cb72f09f088097ddf3b"
}
