)]}'
{
  "log": [
    {
      "commit": "fd90fdfe2a611ae824a32e236da288b1fdfd445d",
      "tree": "bdeb9f47bd72f0a8743ec7325841bdef6c0bec2b",
      "parents": [
        "b281445c6e7a40cc144752db8fbf8ddf7bd56b5f"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Aug 21 18:14:43 2020 -0700"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Wed Sep 16 00:13:40 2020 +0000"
      },
      "message": "Add package name when creating AudioTrack.\n\nThe package name can be used when starting an external vibration, which\nis used by vibrator service to check if the application has the\npermission to start vibration.\n\nBug: 165910728\nBug: 162343845\nTest: atest AudioTrackTest MediaPlayerTest\nTest: start audio-coupled-haptic playback\nChange-Id: I6d12c4e141c037ee94ee79cbb9bf537421ec9507\nMerged-In: I6d12c4e141c037ee94ee79cbb9bf537421ec9507\n"
    },
    {
      "commit": "3784ab5009e070491c12bbddbf4948eddeac3de6",
      "tree": "04fe406dfa253947440716bbbe234a84bf9b22d5",
      "parents": [
        "ae3b9539cead752af48515f2e43c9985c3fc04e6"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Feb 18 17:18:24 2020 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Feb 18 20:03:09 2020 -0800"
      },
      "message": "Accommodate the move of AudioPlaybackRate to system/audio.h\n\nAudioPlaybackRate is now defined in system/audio.h\nas \u0027struct audio_playback_rate_t\u0027 (in global namespace).\nSimilar for the related enums.\n\nTo accommodate the existing code, introduce AudioPlaybackRate\nas a typedef in the \u0027android\u0027 namespace.\n\nUpdate code that was forward declaring AudioPlaybackRate\nas it\u0027s not a struct anymore.\n\nBug: 133526565\nTest: m\nChange-Id: Iba20f1de1e8779cd78ac4573f2082416f2b428e2\n"
    },
    {
      "commit": "5d05fbe8ba38d16c21974688edd7ad567fe6205c",
      "tree": "49a1c1e3490131bbcb16df72a70fbcc4c6b37aaa",
      "parents": [
        "fb1fb155f9ec3a05ffa9e49f9415b565dcf8c163"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Sep 30 13:08:50 2019 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 04 08:17:31 2019 -0700"
      },
      "message": "Clean up libaudioclient includes\n\nTest: build\nChange-Id: I1b2cd96e99564cd3944aa20a36207bd91287f7c8\n"
    },
    {
      "commit": "270dd6a1a6fc700dde00f982dcd87bf98e4b73a4",
      "tree": "e8b02ec7624fa1d1a55c0f49fcca1996545fcddf",
      "parents": [
        "8263e3519b6801f019e471efe4a6045b7046e4d3"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Sat Apr 06 04:41:15 2019 -0700"
      },
      "committer": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Thu Apr 18 23:55:37 2019 -0700"
      },
      "message": "Make mediaserver listen to Codec2 services\u0027 deaths\n\nTest: Kill media.extractor or mediaswcodec and observe logcat\n\nBug: 130071409\n\nChange-Id: Ie785642da99dfe4ff13e78d878817dae3de9f34a\n"
    },
    {
      "commit": "a0c98417c829c0b85ab207c8117a147f6b8c3040",
      "tree": "50cb7fd86e18de4bb75baaacbeaaca8498c1ee6f",
      "parents": [
        "71028253b21dfee4e3908916c4182cd0ea140f11"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Mar 29 12:10:19 2019 -0700"
      },
      "committer": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Sat Mar 30 01:46:35 2019 -0700"
      },
      "message": "Notify swcodec crashes too\n\nBug: 129426284\nTest: manual/CTS\nChange-Id: I086a2b8253757f941e4dd2e160490cbb59edb627\n"
    },
    {
      "commit": "7a498a96c082fd6baee468261128e9f0080ef2df",
      "tree": "1cf4a24c90a8a16eca9e2fc973e86ea589aac297",
      "parents": [
        "97df29e2b9c6df88fae9c14daa8e21c9ce5d45bf",
        "dd9010c7151e8224e46e5700f71c210a0df39f93"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Fri Feb 09 10:07:52 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Feb 09 10:07:52 2018 +0000"
      },
      "message": "Merge \"Refactor MediaPlayerBase\u0027s notify\" into oc-dev am: 01970bf6fb am: 5c7f325b00 am: d7baca3dbb\nam: dd9010c715\n\nChange-Id: I811b366fda6b63301a543d11f63c555ce489a5cd\n"
    },
    {
      "commit": "082e4f75a383f957a6ed9186ca0692b694e1ce45",
      "tree": "a336d965809441cc46c928b186dcb29464f64be8",
      "parents": [
        "028cf0973f928503e89124c3f6493a5226826ed9"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Sun Dec 17 02:31:18 2017 -0800"
      },
      "committer": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Sun Dec 17 02:51:06 2017 -0800"
      },
      "message": "Refactor MediaPlayerBase\u0027s notify\n\nTest: make cts -j123 \u0026\u0026 cts-tradefed run cts-dev -m \\\nCtsMediaTestCases --compatibility:module-arg \\\nCtsMediaTestCases:include-annotation:\\\nandroid.platform.test.annotations.RequiresDevice\n\nBug: 70546581\nChange-Id: Ia3a8eb99c2faf6935c63800ba08f65970cede48e\n"
    },
    {
      "commit": "028cf0973f928503e89124c3f6493a5226826ed9",
      "tree": "d726b12d56f9b32a7fc29667c0be3c3e558cae7c",
      "parents": [
        "97eb375c515ab9cf7ad8e23b678b32f279059139"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Tue Dec 12 01:56:40 2017 -0800"
      },
      "committer": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Thu Dec 14 16:29:26 2017 +0000"
      },
      "message": "Prevent MediaPlayerService::Client\u0027s use-after-free\n\nTest: make cts -j123 \u0026\u0026 cts-tradefed run cts-dev -m \\\nCtsMediaTestCases --compatibility:module-arg \\\nCtsMediaTestCases:include-annotation:\\\nandroid.platform.test.annotations.RequiresDevice\n\nBug: 70546581\nMerged-In: Ia142a7735c6685eb67b2c00917c0ed5ea7e0da9e\nChange-Id: Ia142a7735c6685eb67b2c00917c0ed5ea7e0da9e\n(cherry picked from commit d27ad6bae3215db0ed174f5f036339c9515fbba7)\n"
    },
    {
      "commit": "d27ad6bae3215db0ed174f5f036339c9515fbba7",
      "tree": "1322a7c128be6fee21ecf194723cd115f04c4923",
      "parents": [
        "5096385d0e5c102a7297d53aeb693402f304f5af"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Tue Dec 12 01:56:40 2017 -0800"
      },
      "committer": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Wed Dec 13 04:39:05 2017 -0800"
      },
      "message": "Prevent MediaPlayerService::Client\u0027s use-after-free\n\nTest: make cts -j123 \u0026\u0026 cts-tradefed run cts-dev -m \\\nCtsMediaTestCases --compatibility:module-arg \\\nCtsMediaTestCases:include-annotation:\\\nandroid.platform.test.annotations.RequiresDevice\n\nBug: 70546581\nChange-Id: Ia142a7735c6685eb67b2c00917c0ed5ea7e0da9e\n"
    },
    {
      "commit": "161b64fc1c9ee03d32b3bd634be950fac5ad6ed8",
      "tree": "d04f2f4d842a5309716bf8993c1d897feb6d4395",
      "parents": [
        "45145a39251970da167ff6cd31817673820fc134"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Nov 17 09:31:48 2017 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Nov 17 09:31:48 2017 -0800"
      },
      "message": "Cache routed device in case returning null when switching device.\n\nBug: 69366408\nTest: runtest --path cts/tests/tests/media/src/android/media/cts/RoutingTest.java\nChange-Id: I270fe60abdf22eada927bf0c5fc594de294c8428\n"
    },
    {
      "commit": "9bb3803a80a680ea7a3bc11e07b8a89ccddee003",
      "tree": "1ad46a98f44bd2c487678c05825c374cca92b338",
      "parents": [
        "63ca96305e389e4504ab8d89111dc8719d00161f"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Thu Mar 23 18:00:38 2017 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Sun Nov 12 14:32:02 2017 -0800"
      },
      "message": "BufferingSettings: simplify buffering control.\n\nNow only 2 marks, initialMarkMs and resumPlaybackMarkMs, remain.\nTest: pass cts tests\nBug: 36280094\nChange-Id: I03c8e2a0db9f7e845f57e76f51874cd8715a48d4\n"
    },
    {
      "commit": "156c6873a5e69af71f3c28b236c5831b9cb2ac95",
      "tree": "3e36c1490f5f2d22e6e79fac3d4f59a9559403ee",
      "parents": [
        "ef9fc7792d4995da68cb71a3e9f2304e565a016d"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Oct 06 09:47:15 2017 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Nov 02 11:14:55 2017 -0700"
      },
      "message": "Add AudioRouting interface for MediaPlayer\n\nBug: 64038649\nTest: Run cts in RoutingTest\n      Switch output device when playing music/video with MediaPlayer\n\nChange-Id: I5b5c288e6557199b0a6986785f9335a18a80ab89\n"
    },
    {
      "commit": "67d876b17e6589a47c5f8906201ec2494119104f",
      "tree": "e01df7ead6aaf7f67e768fb60ad6afcece3bb18b",
      "parents": [
        "19d6df66e43d4caa4a5f7091cf51c09a424d0589",
        "db42765c36920975fbe0c02252397d1a5813197b"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Tue Oct 31 02:30:12 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Oct 31 02:30:12 2017 +0000"
      },
      "message": "Merge \"Protect against possible race conditions\" into oc-dev am: 21076bf34e am: dc31a5d47c am: 516a132ea8\nam: db42765c36\n\nChange-Id: Ibda6f5f36af85be82f6f09e3d9f55ae50bed9abe\n"
    },
    {
      "commit": "f9c81464b9494082fa7cdff9f70c5402e8ac78c0",
      "tree": "12d5376268e2c464064b063537b428196fee4595",
      "parents": [
        "402b8a0ef5c4fa0f7a70020bf0d93ec4714edbf3"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Thu Sep 28 05:31:11 2017 -0700"
      },
      "committer": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Thu Oct 12 18:33:56 2017 -0700"
      },
      "message": "Protect against possible race conditions\n\nTest: make cts -j123 \u0026\u0026 cts-tradefed run cts-dev -m \\\nCtsMediaTestCases --compatibility:module-arg \\\nCtsMediaTestCases:include-annotation:\\\nandroid.platform.test.annotations.RequiresDevice\n\nTest: Run the poc in b/38234812\n\nBug: 38234812\nChange-Id: I28322e5a812c02c8e449ab8773715f60b9f5d976\n"
    },
    {
      "commit": "b7798a01d4b68bf2406907bb58f29b48dece8214",
      "tree": "b0b34ca04c0d22b24ac4dddf7a8f31aae333a800",
      "parents": [
        "284aa3014feb77fc89143caa00fc8f31c1300f0f"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Mon Oct 09 23:21:44 2017 -0700"
      },
      "committer": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Thu Oct 12 17:14:51 2017 -0700"
      },
      "message": "Remove OMX dependency from MediaPlayerService\n\nAlso, convert Android.mk files to Android.bp.\n\nTest: make cts -j123 \u0026\u0026 cts-tradefed run cts \\\n-m CtsMediaTestCases \\\n-t android.media.cts.MediaPlayerTest\n\nBug: 67652488\nChange-Id: I7172d1a2513826a5dafbe51245af11d863f50585\n"
    },
    {
      "commit": "d14133d15a41a6fe2d27cf6e408b464f28de9b62",
      "tree": "46c400270697e6667f3ea429a8d74fa92a26f226",
      "parents": [
        "7eaae5b788b37f5e19ca9b03d79ef32bd8b0df8a",
        "d0a98fa05f0f6719b93d000c4638230af06e0b99"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Sep 18 18:35:56 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 18 18:35:56 2017 +0000"
      },
      "message": "Merge \"stagefright: remove Miracast sender code\""
    },
    {
      "commit": "d0a98fa05f0f6719b93d000c4638230af06e0b99",
      "tree": "438b19e4d9bddffee72c9bab98772d99bd6b7cb1",
      "parents": [
        "5bb3cfe6f3591736a82ac8ede71ced1472e19700"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Thu Sep 14 17:43:10 2017 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Mon Sep 18 18:34:59 2017 +0000"
      },
      "message": "stagefright: remove Miracast sender code\n\nThis has been deprecated for some time. Remove this from codebase\nto avoid introducing new HAL for HDCP. Log warning and return NULL\nwhen remote display is requested. \n\nbug: 62213914\nChange-Id: I3560b60fe83a01c51df0f2e715a8f2c760e57bf8\n"
    },
    {
      "commit": "52c2851b30588df1aba00766c37ffde86a3345bc",
      "tree": "9ff98868cdbc27ab5cfd19f7cf8cae155b7cd6c4",
      "parents": [
        "014df71ed78023d99ca72578f7866cabbc1e6601"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Sep 13 18:17:51 2017 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Sep 13 18:20:53 2017 -0700"
      },
      "message": "MediaPlayer: add notifyAt at native side\n\nTest: media time is correct when playback rate is not 1.0\nBug: 65204641\nChange-Id: Ie9f67e3cb37267cfd364c9a9b9f674232b68ef27\n"
    },
    {
      "commit": "8cf3a0788df2ee184b498086b1b8da322eeadcca",
      "tree": "1bd36129bbd4afa491689deca23977dbf30930f6",
      "parents": [
        "a5ec8b0ec9c94fd9474fae1d1d1dc798ae6c4d2d"
      ],
      "author": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Wed Aug 09 09:01:33 2017 -0700"
      },
      "committer": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Fri Sep 01 10:14:30 2017 -0700"
      },
      "message": "Generate the IPlayer interface with AIDL.\n\nThis removes the manually rolled IPlayer implementation and instead uses\nan aidl generated implementation. The IPlayer aidl file is moved from\nframeworks/base/.\n\nTest: run cts --module CtsMediaTestCases\nBug: 64223827\nChange-Id: Ia609f7ba1cc6f71ce919d6174dd8b5e0e1b05575\n"
    },
    {
      "commit": "e5b9b6924007d6658bb1c24e958d16ec82e2a9c3",
      "tree": "ad2ef695292ac0178821f89926fbc347f5be056c",
      "parents": [
        "bbdae2f58c3bd18d72be876c023b4bfb00e2f920"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Thu May 11 11:44:56 2017 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Thu May 11 11:49:22 2017 -0700"
      },
      "message": "stagefright: put battery update under a separate lock\n\nBattery update doesn\u0027t need to lock the main lock for\nmediaplayerservice. Battery update sometimes is called\nfrom lower level componenet (eg. StagefrightRecorder),\nlocking the main lock here has potential to deadlock.\n\nPuting the battery update in a separate class so that\nit\u0027s clear this is not to be mixed with the rest of\nthe mediaplayerservice states.\n\nbug: 38230347\nChange-Id: Idf5f26f2b07ad6303775763ce283dad0679843d5\n"
    },
    {
      "commit": "4ef88d7106c01f81109ee163cb6789073d80c6ae",
      "tree": "b851ebaf0b55c4d8174dd4a744352a3d4513beee",
      "parents": [
        "10cbff139360f3f642e0e3b3ccf2d463dbed22cf"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Feb 21 19:47:53 2017 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Feb 24 21:05:58 2017 -0800"
      },
      "message": "VolumeShaper: Add AudioTrack restore\n\nMediaPlayer VolumeShaper can now be set before start().\n\nTest: CTS and Ducking\nBug: 31015569\nChange-Id: Idf63c167e164161b200e2467fbeb9409b3097dbe\n"
    },
    {
      "commit": "9c47c97ecac581d66b6febafd156618247e86742",
      "tree": "c49b5394e42b293c0333754bf01c71d387227833",
      "parents": [
        "6ab6061131a10b7f38074c156fd529fa3719a32b"
      ],
      "author": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Wed Feb 08 04:09:38 2017 -0800"
      },
      "committer": {
        "name": "Pawin Vongmasa",
        "email": "pawin@google.com",
        "time": "Thu Feb 16 11:16:06 2017 -0800"
      },
      "message": "Enable full migration of OMX to Treble.\n\n1. Toggling between Treble and non-Treble OMX will now be controlled by\ntwo properties: \"persist.hal.binderization\" and\n\"persist.media.treble_omx\". (Before this CL, this was controlled by\n\"debug.treble_omx\".)\n- If persist.media.treble_omx is not set, it will assume a default value\nof -1.\n- If persist.media.treble_omx is -1, persist.hal.binderization will be\nused to determine whether OMX will be created as a Treble or non-Treble\nservice.\n- If persist.media.treble_omx is 1, OMX will be created as a Treble\nservice.\n- If persist.media.treble_omx has any other value, OMX will be created\nas a non-Treble service.\n- persist.media.treble_omx can be changed without rebooting, but it will\nonly take effect after media.codec and mediaserver processes are killed.\n\n2. Remove all dependencies on non-Treble service. This was not done for\nMediaCodec, MediaPlayerService::Client, MediaRecorderClient, stagefright\ncommand, and omx_tests command. OMXClient and media.codec process will\nnow pick the right version of OMX based on properties mentioned above.\nBefore this CL, media.codec would always present the non-Treble version\nof OMX regardless of the flag.\n\n3. Provide workarounds for some HIDL issues.\n- A sequence of nested binder and hwbinder calls require many threads to\nhandle. (b/35283480) The workaround is to increase the number of threads\nin the thread pool of media.codec process.\n- android.hidl.base@1.0::IBase::unlinkToDeath takes a strong pointer\ninstead of a weak pointer. (b/35233970) This causes an infinite\nrecursion in the destructor of ServiceDeathNotifier in\nMediaPlayerService::Client and MediaRecorderClient. The workaround moves\ncalls to unlinkToDeath() outside of the destructor.\n\nTest: Recorded and played videos with Camera app. Ran stagefright and\nomx_tests commands.\nBug: 31399200\n\nChange-Id: Id1940ed982838e10bf10fe8ed5b7bb912a5a2d3a\n"
    },
    {
      "commit": "cefac14261a32fb856b0d1ab31541787112e306e",
      "tree": "d6fb3a4890929e05a5ffccc2d09c0b9da3d6bddc",
      "parents": [
        "2f77a2229be73b222098c45aed73728842667e12"
      ],
      "author": {
        "name": "Hassan Shojania",
        "email": "shojania@google.com",
        "time": "Mon Feb 06 21:02:02 2017 -0800"
      },
      "committer": {
        "name": "Hassan Shojania",
        "email": "shojania@google.com",
        "time": "Wed Feb 15 18:15:37 2017 -0800"
      },
      "message": "Modular DRM for MediaPlayer\n\nBug:  34559906\nTest: Manual through the test app\n\nChange-Id: I286f9ff199c34563b7b8643de725f8d1534ea06c\n"
    },
    {
      "commit": "9fc8b5cd4a64ef07e84c69112461324d5c13a0b0",
      "tree": "2d058e73f09f1822108daad51948a34c420634e3",
      "parents": [
        "ed1abbfc73d4ade0ef08239fc56ac66d70a00a92"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jan 24 13:36:48 2017 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Feb 13 14:31:46 2017 -0800"
      },
      "message": "VolumeShaper: Initial implementation\n\nThe VolumeShaper is used to apply a volume\nenvelope to an AudioTrack or a MediaPlayer.\n\nTest: CTS\nBug: 30920125\nBug: 31015569\nChange-Id: I42e2f13bd6879299dc780e60d143c2d465483a44\n"
    },
    {
      "commit": "071437a2005e39969983ec619a4c7bc54c2dc5a9",
      "tree": "0b1b44c249e3513e1bb96395484b707c194904d0",
      "parents": [
        "217fc01b390d88993c1c94669b251f952fe2c44e"
      ],
      "author": {
        "name": "Hassan Shojania",
        "email": "shojania@google.com",
        "time": "Mon Jan 23 09:19:40 2017 -0800"
      },
      "committer": {
        "name": "Hassan Shojania",
        "email": "shojania@google.com",
        "time": "Wed Jan 25 15:02:11 2017 -0800"
      },
      "message": "Modular DRM for MediaPlayer\n\nBug:  34559906\nTest: Manual through the test app\nChange-Id: I752c3e2bbc2fac9c75f7ddc986014c4b8ce75d84\n"
    },
    {
      "commit": "9c8086fa924e8b570fa66c3ef3bce0ec24a16031",
      "tree": "a54e6095684f7a247ce54ea791f6d7230c7ff81d",
      "parents": [
        "e158da59b3b525cf271968bec3967414b21159fa",
        "1afd0983fdca07cd55df8dca1fa05b55c45063f4"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sat Dec 10 00:27:34 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Dec 10 00:27:35 2016 +0000"
      },
      "message": "Merge \"MediaPlayer: Use uid_t for uids\""
    },
    {
      "commit": "d399e7e6065aa310e025ab633f633d5b4831a358",
      "tree": "161b8ee63095e28937e041299ae66a650197f265",
      "parents": [
        "48d8020342a4de6b0b925328ddbdfe34f22253a3"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Oct 26 15:49:11 2016 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Nov 23 10:50:24 2016 -0800"
      },
      "message": "BufferingSettings: define internal BufferingSettings API.\n\nTest: compiles\nBug: 32524218\nChange-Id: I9a95b2fdfa497179305e031aac69e5a987614dbb\n"
    },
    {
      "commit": "c5de09127e9e0d5df7aa587be317e1487d793245",
      "tree": "f27828fe26714b003613ef894579539228dfd134",
      "parents": [
        "b59c2fb19f03bba8a558be71848bafa6a0ad3cbc"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Fri Nov 18 10:22:14 2016 -0800"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Fri Nov 18 15:41:24 2016 -0800"
      },
      "message": "mediaplayer: support same seek mode as MediaMetadataRetriever.\n\nTest: manually force 4 seek modes in mediaplayer.\nBug: 32557491\nChange-Id: Iea4f6dbfc224fc6da39624300c6d872b79142f07\n"
    },
    {
      "commit": "1afd0983fdca07cd55df8dca1fa05b55c45063f4",
      "tree": "8b18742499e87de49231f89af89aa7a2e8d48364",
      "parents": [
        "1f12a8ad958344c50733b948628ffa06db9c5bc6"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Nov 08 16:13:44 2016 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Nov 08 16:44:22 2016 -0800"
      },
      "message": "MediaPlayer: Use uid_t for uids\n\nTest: Power manager shows correct uids\nBug: 32713790\nChange-Id: Iddf8de5705319ec17c68787efc11e342779660c5\n"
    },
    {
      "commit": "67b6dccfd7b59efa772a3c2c553e7382c8f9f24c",
      "tree": "d9d03e901bf841099593e0d2b3edb32aa23ac12b",
      "parents": [
        "2aa19a96710eaaaf6679453f0278d393fd768de5"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Mon Oct 31 17:01:37 2016 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Mon Oct 31 17:01:37 2016 -0700"
      },
      "message": "mediaplayer: add precise argument to seek function\n\nTest: compiles\nBug: 32557491\nChange-Id: Id8c3a938edd5a0b34a9b33e86a4dbff32cf10c98\n"
    },
    {
      "commit": "74b56a8e0d5c4aabd7df4d79589f93b23d8fae89",
      "tree": "251c3e91620288d90df91b6c1d507e5a34d954e6",
      "parents": [
        "45b663eae82282098d8c21c792a06c4f9f61da31",
        "168e16423f7bfa0387543df52697814ef160cce9"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Mon Aug 22 19:42:26 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Aug 22 19:42:26 2016 +0000"
      },
      "message": "resolve merge conflicts of 77da968 to nyc-dev-plus-aosp\nam: 168e16423f\n\nChange-Id: I72e14cf6b3affce16e910218196609aee4ff9845\n"
    },
    {
      "commit": "168e16423f7bfa0387543df52697814ef160cce9",
      "tree": "5b7a2e5385e7d0b9d1e59335dd32ffc3615246c5",
      "parents": [
        "776229a34a5f6f2c8dd2d67987624cacb362cbb7",
        "77da9683de33028a0b277667a0698e8eb1c8c7bc"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Mon Aug 22 12:27:15 2016 -0700"
      },
      "committer": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Mon Aug 22 12:27:34 2016 -0700"
      },
      "message": "resolve merge conflicts of 77da968 to nyc-dev-plus-aosp\n\nChange-Id: I123956fe0f90e7fc7712cf5a99b29add94d15564\n"
    },
    {
      "commit": "77da9683de33028a0b277667a0698e8eb1c8c7bc",
      "tree": "2b2c7589065bf2dc4bd9a4efe765f8ea91e455a9",
      "parents": [
        "167bfc2bae3e29e1332b23cb35c188db9e0837c2",
        "17744ab9d700078d1268dab2a070e6ef8cf962ec"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Mon Aug 22 18:48:21 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Aug 22 18:48:21 2016 +0000"
      },
      "message": "MediaPlayerService: avoid invalid static cast am: ee0a0e39ac am: 7b6a85546c am: b07255f603 am: d560830823 am: 51efd24460 am: 8d32201d4a am: 2b5ee9c8e4\nam: 17744ab9d7\n\nChange-Id: I7c9bff5b79002b4c1e83437b69c8cfd5a09854a3\n"
    },
    {
      "commit": "51efd2446058bfe0b6ecdd1858bd759159fd0831",
      "tree": "43dfd3a2e8ff065c81a7c12d289d0788afbb686e",
      "parents": [
        "be78a1c73f20bd72a3747b0c2552ae234b4e49be",
        "d560830823619a753be997d11d4f38223e74724e"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Mon Aug 22 18:28:19 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Aug 22 18:28:19 2016 +0000"
      },
      "message": "MediaPlayerService: avoid invalid static cast am: ee0a0e39ac am: 7b6a85546c am: b07255f603\nam: d560830823\n\nChange-Id: I77a7c93a2ae554532accb3be47bdee687b99f271\n"
    },
    {
      "commit": "d560830823619a753be997d11d4f38223e74724e",
      "tree": "7d11f31236516c4c2da1ab1dfb3cd0f102fb553c",
      "parents": [
        "6b1403777e71af2f342ed8a279197e8149aae164",
        "b07255f6038c7c7b9a80c9fe2bd2c5d7bbe0c8f1"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Mon Aug 22 18:23:41 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Aug 22 18:23:41 2016 +0000"
      },
      "message": "MediaPlayerService: avoid invalid static cast am: ee0a0e39ac am: 7b6a85546c\nam: b07255f603\n\nChange-Id: I9e2b7d8166c629fdbc3457d152e2947f16ba7ae3\n"
    },
    {
      "commit": "ee0a0e39acdcf8f97e0d6945c31ff36a06a36e9d",
      "tree": "e2cd58cba0269f63036fbf85b2182f9f04771289",
      "parents": [
        "8f4b1a7de0e102b9203cfda3970edd2eedd9becf"
      ],
      "author": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Tue Aug 16 16:50:54 2016 -0700"
      },
      "committer": {
        "name": "Robert Shih",
        "email": "robertshih@google.com",
        "time": "Tue Aug 16 17:13:47 2016 -0700"
      },
      "message": "MediaPlayerService: avoid invalid static cast\n\nBug: 30204103\nChange-Id: Ie0dd3568a375f1e9fed8615ad3d85184bcc99028\n"
    },
    {
      "commit": "5ca8f32280377dd923e72c3c6bd3994217461b8b",
      "tree": "b5146ce7885539d8b002d3270346f574e3965711",
      "parents": [
        "7aeb8c8d4437eb8f45be3ad3828764795e14ad4c",
        "63ef5a38f82d22c1f97922fe490a1fd336566d5c"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 10 23:53:01 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 10 23:53:01 2016 +0000"
      },
      "message": "resolve merge conflicts of fd923e7 to stage-aosp-master am: df5d9246f9\nam: 63ef5a38f8\n\nChange-Id: I516a43c5e56323e99ad7a8ca2e4811b77c9704f4\n"
    },
    {
      "commit": "df5d9246f9607b1c2f8b134c46a05af06e206da3",
      "tree": "7cd9fcb42c86c8cfe950db239e21e8b5ece98369",
      "parents": [
        "7ad2854adc0abe8dd7909a6ed401107ad09bc3d2",
        "fd923e7fe2779bcd69d79471b8c30c8b98918f62"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 10 15:40:39 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 10 16:10:32 2016 -0700"
      },
      "message": "resolve merge conflicts of fd923e7 to stage-aosp-master\n\nChange-Id: I75b44b89bae41197a1fd68362d20b8ba2b4dd192\n"
    },
    {
      "commit": "36d0ca16024820df9a12903d2ac443fabcc180bc",
      "tree": "51e8f285ae66ad7cb922caeb7ba8d5f1d20367e3",
      "parents": [
        "67fbddfdc2cafd63c83d3bb55a2451d4c26f546d"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Aug 09 14:31:32 2016 -0700"
      },
      "committer": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 10 17:56:35 2016 +0000"
      },
      "message": "Fix clang-tidy warnings in audio and playerservice.\n\n* Add explicit keyword to conversion constructors.\nBug: 28341362\n* Use const reference type for read-only parameters.\nBug: 30407689\nTest: build with WITH_TIDY\u003d1\n\nChange-Id: I265f3b094e08d5705b506b3fbba51439c134af84\nMerged-In: I265f3b094e08d5705b506b3fbba51439c134af84\n"
    },
    {
      "commit": "e0bbac912f9ea561ed96ad8b0a354cbab8f345a1",
      "tree": "286de5eb65dd7cd335648da9ae5d65f233c6e4d3",
      "parents": [
        "9f6392250bf6d02a514bd83b743906dda748dee9"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Mon Jul 18 16:04:53 2016 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Mon Jul 18 18:18:09 2016 -0700"
      },
      "message": "AudioSink: set configurations correctly for recycled track.\n\nBug: 29838892\nChange-Id: Ib64db16aeeaa4436d082a4098a21a75376119ef0\n"
    },
    {
      "commit": "0bfa3eee31c9f99ec65158f810e65e12bae5ebf1",
      "tree": "cf5719e6a3cec8c447a053bd6a456556b86efefc",
      "parents": [
        "e35bcaa2c908c5ef404928412ade7711e6173d35"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri May 13 15:48:36 2016 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon May 16 10:54:26 2016 -0700"
      },
      "message": "MediaPlayer/MediaRecorder: Do not notify client of audioserver death\n\nHandled internally within NuPlayer and MediaRecorder.\n\nBug: 28768023\nChange-Id: I26d94332a4668bf7a8ad54a7b25e6f0a3a6fe48d\n"
    },
    {
      "commit": "375a9c03550cc1bdca9e2cca862d6e549530bac6",
      "tree": "d46c5a9d62bdd1e855d97388d3c0821f45dfd73a",
      "parents": [
        "f15d88daa721d53921bfb7798dd12f7c74b44ac1",
        "6dc3a3e2292454f94c015da45f1ebfc6a493e736"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu May 05 16:55:50 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 05 16:55:50 2016 +0000"
      },
      "message": "Merge \"Report other servers\u0027 deaths in OnErrorListener too\" into nyc-dev"
    },
    {
      "commit": "6dc3a3e2292454f94c015da45f1ebfc6a493e736",
      "tree": "7bc7d425bc94627546428203f08c94691809162b",
      "parents": [
        "35443e32bfe0960dc6a6564426054b104977b143"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Apr 29 15:42:06 2016 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Apr 29 16:25:18 2016 -0700"
      },
      "message": "Report other servers\u0027 deaths in OnErrorListener too\n\notherwise applications will be unaware of those processes dying.\n\nBug: 22775369\nChange-Id: I48577f787a97ee7627ae8e7f32e2f21ace243ed0\n"
    },
    {
      "commit": "3003807fcfa96c9cbfea18d643f47108aa116cd5",
      "tree": "a3f7b454cdf3973b6fd716ee44f4295e6c100bb5",
      "parents": [
        "c3c06c4fe329d07bd7d442206bc9eb63e92bf5bd"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Mon Apr 25 13:41:35 2016 -0700"
      },
      "committer": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Tue Apr 26 20:46:17 2016 -0700"
      },
      "message": "Remove MediaDrm stack from mediaserver\n\nPart of media security hardening\n\nMediaDrm was temporarily allowed to\nrun in either mediaserver or mediadrmserver\nwhile all nexus devices were implementing\nsupport for the native_handle representation\nof secure buffers.  Now that all nexus\ndevices support native_handle, the MediaDrm\nstack can be removed from mediaserver.\n\nb/22990512\n\nChange-Id: Ie5d83bfeb4c4a824e1d0edb4c9452c782d6fd386\n"
    },
    {
      "commit": "f2c87b3f88d987d2af6322e9763eb8224a2bae48",
      "tree": "e5385d3a05f9a317b7fa1ea5613a2a6f584ebdfd",
      "parents": [
        "8ae73129e7e79d826b293238c2f037f723d0e6e8"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Apr 07 19:49:29 2016 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Apr 13 11:03:44 2016 -0700"
      },
      "message": "NuPlayer: Notify if drain message time is unexpectedly long\n\nBug: 27940058\nChange-Id: Id8897c30e21b6b9de545a710e7766ffceb491455\n"
    },
    {
      "commit": "2f6e73db45995636e5405fb2e1063a55550ba10f",
      "tree": "df839761306fc04ee8816ca53d300c92c3ca133b",
      "parents": [
        "4d363d4625588bf2007d31c244c83b0965d834b4"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 08 12:12:58 2016 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Apr 08 12:29:37 2016 -0700"
      },
      "message": "NuPlayer: fetch position from track\n\nBug: 27940058\nChange-Id: Ibe730dffca4b3e2649a07f1f7583b471e13bdbed\n"
    },
    {
      "commit": "d848eb48c121c119e8ba7583efc75415fe102570",
      "tree": "06733e396ad546bf39be0a6699193d041883edad",
      "parents": [
        "38246e482ea3bd1e0f88f7133934ec4537b48bbd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 08 13:42:11 2016 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 16 14:04:22 2016 -0700"
      },
      "message": "Use audio_session_t consistently\n\nBug: 27562099\nChange-Id: I328d8226191386b163f2ace41233607294c50dcd\n"
    },
    {
      "commit": "260e56c9a17737bf280d776797d6dee411c9b4da",
      "tree": "5e2de882c337b17d1d06dd5dd323be134d7bb882",
      "parents": [
        "4f12d94fc26df1d0c7a566792711b8863fd39fe9"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jan 28 21:41:25 2016 +0000"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jan 28 21:41:25 2016 +0000"
      },
      "message": "Revert \"Run codecs in a separate process\"\n\nThis reverts commit 4f12d94fc26df1d0c7a566792711b8863fd39fe9.\n\nChange-Id: Ic850a950119a45efd3042f40147253b37c328853\n"
    },
    {
      "commit": "4f12d94fc26df1d0c7a566792711b8863fd39fe9",
      "tree": "35c3df0045f97769878455388f4c99e2ffa65d68",
      "parents": [
        "97385561584e96c1c1149cf883e0ad1c75cfbdd0"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Dec 16 11:11:59 2015 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Jan 22 19:53:00 2016 -0800"
      },
      "message": "Run codecs in a separate process\n\nFor now this only runs decoders and Google encoders in the codec process.\n\nBug: 22775369\nChange-Id: Iadd8b6bc2873ddcfaee3e68866642ba74c6949aa\n"
    },
    {
      "commit": "c4ac8173f911aeac8d5006b19ba48fb51a865115",
      "tree": "3c1945093ad340ac2d60d4f9606ed108195fca7a",
      "parents": [
        "4ecbea3ae1fcefb082dc419cb663909536138ddb"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Oct 21 10:35:48 2015 -0700"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Oct 21 18:48:31 2015 +0000"
      },
      "message": "AudioSink: move getPlayedOutAudioDurationUs() from NuPlayerRenderer to AudioSink.\n\nChange-Id: Id22e10dc5f1cd7ade0e043ea56ed77497c2e32af\n"
    },
    {
      "commit": "2650e9661ea1608dfb6b58bc640a66cdbbb6ae58",
      "tree": "70b66e87a1061e0b842ca054ca3482950c69ed0e",
      "parents": [
        "70c1f74f3d4c43b67949f3e742195d60f4677462"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jul 22 18:14:02 2015 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Jul 23 17:44:57 2015 -0700"
      },
      "message": "MediaPlayerService: prevent audio_attributes_t race conditions\n\nAccess to audio attributes fields in Client and AudioOutput\n was not always locked.\nAudio attributes field in AudioOutput cannot share the same pointer\n as Client because it can be indepently accessed. Save the\n attributes inside AudioOutput instead.\n\nBug 22672670\n\nChange-Id: Ib1002b57b45cea44ff5e6eb115d581dc3beec006\n"
    },
    {
      "commit": "4356269be6d2b62bbb945364e8fc4beb99e1aada",
      "tree": "f2ef8b7a7f84fe3901333cf2784711bd1dc6b769",
      "parents": [
        "4b33e0838fdb1b5e545449add02005916b512c99"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 15 16:49:07 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 15 16:49:07 2015 -0700"
      },
      "message": "mediaplayer: fix audio attributes override by stream type\n\nMake sure that when audio attributes are set, the stream type\nis always derived from them.\n\nBug: 22481669.\nChange-Id: Ia10c7017eb27e7753faf97a42dd4f44e15f2c986\n"
    },
    {
      "commit": "d1c74340c9346e2bfd061e20fba9bf34c22d77db",
      "tree": "54220202e022e8ff9d53113a377ffcec120539c2",
      "parents": [
        "54c0659b9efa72d11997c590c4d377c44789c7fd"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Jul 07 16:54:23 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Fri Jul 10 10:09:00 2015 -0700"
      },
      "message": "libmediaplayerservice: Serialize access to AudioOutput\n\nNuPlayerRenderer may open and close the AudioOutput while\nMediaPlayerService::Client accesses it.\n\nBug: 20069455\nBug: 22295200\nChange-Id: Ic37987c1de1919cf890b2e69778e6df71e7ee7c5\n"
    },
    {
      "commit": "179652ee2a508361df1aa18e99000373886f0816",
      "tree": "cab9a40399ab43231c8a9b9fc00985b2efaf600c",
      "parents": [
        "a7f03353d5f172016f324e2a01f301cca6794152"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Sun May 31 22:49:46 2015 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Jun 03 22:26:44 2015 -0700"
      },
      "message": "NuPlayer: Add audio sink buffer configuration\n\nProperty media.stagefright.audio.sink (in milliseconds)\nAlso change the default buffer size for PCM playback to 500 ms.\n\nBug: 21198655\nChange-Id: I5781288f59bf08fbecd9263a26c919570b58be0f\n"
    },
    {
      "commit": "faeb0f291330134dc4468359a36e099aae508449",
      "tree": "028333c0801e03826c4162cb35880236eaae3b3b",
      "parents": [
        "8eddd88568fe4da0ca0ceab5072bc488827f01b5"
      ],
      "author": {
        "name": "Ronghua Wu",
        "email": "ronghuawu@google.com",
        "time": "Thu May 21 12:20:21 2015 -0700"
      },
      "committer": {
        "name": "Ronghua Wu",
        "email": "ronghuawu@google.com",
        "time": "Fri May 22 10:36:31 2015 -0700"
      },
      "message": "libmediaplayerservice: try to open audio sink in offload mode in error.\n\nBug: 19061432\nBug: 21370108\nChange-Id: Iaa757555ef37fd1ac87b6e2d5a9969bb58cc5ebc\n"
    },
    {
      "commit": "3a474aa67fc31505740526dd249d96204c08bf79",
      "tree": "4db784ee57ffad037fa2ded86d0fd8b3a40173d5",
      "parents": [
        "a8df0b716bdfda1e10790e6f7297eeff83d2e52a"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Fri Apr 24 17:10:07 2015 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Thu Apr 30 16:56:10 2015 -0700"
      },
      "message": "stagefright: support setting/getting playback/sync config in MediaSync\n\nBug: 18249558\nBug: 19666434\nBug: 20057497\nChange-Id: I5868b17423d7c20cfaf4a399f3eb67bfba440605\n"
    },
    {
      "commit": "be71aa29a3c86d2e01cd17839d2a72ab09a1bce5",
      "tree": "ca29cd10f78ff053761eb809c391019180836742",
      "parents": [
        "f62a067a5b21c840c915d36392679346ac0abfd7"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Apr 28 12:06:02 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Apr 29 19:06:41 2015 +0000"
      },
      "message": "Respect the record audio app op - media\n\nChange-Id: I3a97977b6e9a09355e2008f780d22d480fb7308b\n"
    },
    {
      "commit": "6d339f1f764bbd32e3381dae7bfa7c6c575bb493",
      "tree": "3b29d455c9f3ac73327a0117d2bc18d8b199a265",
      "parents": [
        "ee4e1b1a63758941460ae79a064249d3a5189443"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Fri Apr 17 16:15:53 2015 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Fri Apr 17 16:16:27 2015 -0700"
      },
      "message": "libmediaplayerservice: fix warnings, make warnings errors, use clang\n\nChange-Id: I1b2f6b65c5abbc366068a60b8909104f31b94228\n"
    },
    {
      "commit": "99f31604136d66ae10e20669fb6b5716f342bde0",
      "tree": "20e64f4f26533b37b087ce8656b1040b8189e24f",
      "parents": [
        "2f33dbc6ca08d45efea2df775c158e2a11e07ab6"
      ],
      "author": {
        "name": "Chris Watkins",
        "email": "watk@google.com",
        "time": "Fri Mar 20 13:06:33 2015 -0700"
      },
      "committer": {
        "name": "Chris Watkins",
        "email": "watk@google.com",
        "time": "Wed Apr 15 17:12:22 2015 -0700"
      },
      "message": "Unhide the android.media.[Media]DataSource interface.\n\nThis allows apps to implement MediaDataSource, which is modeled on\nstagefright\u0027s DataSource, to supply media data to the framework. This\nwas already implemented for MediaExtractor, but it was renamed from\nDataSource.\n\nMediaExtractor, MediaPlayer and MediaMetadataRetriever each have a new\noverload: #setDataSource(android.media.MediaDataSource)\n\nOnly NuPlayer supports this new data source.\n\nThe change introduces:\n * IDataSource:        The binder interface for DataSource.\n * JMediaDataSource:   The native counterpart to the java interface. It\n                       implements IDataSource.\n * CallbackDataSource: A stagefright DataSource that wraps an\n                       IDataSource.\n\nChange-Id: Ib3c944b49cc8a792c8eb9c85e5015c07f298ebc1\n"
    },
    {
      "commit": "7d3f4df0a77e052a7d37de9268aff8c2ed0909cc",
      "tree": "060550294c95fe8a35ba5c7c0c9d476d7c91d788",
      "parents": [
        "1ba399206f6a99fec17331186041b55c3733c8d8"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Tue Mar 03 15:28:00 2015 -0800"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Tue Mar 03 15:28:00 2015 -0800"
      },
      "message": "mediaplayer: use non-blocking mode for AudioSink::write().\n\nThis cherry picks https://googleplex-android-review.git.corp.google.com/#/c/643541/ to master.\n\nBug: 19448263\nChange-Id: I43dea830212de79c2b080185b6c6b36078f517d2\n"
    },
    {
      "commit": "9816016afb2a13c6a866cd047d57020566a8b9a9",
      "tree": "176a616a7d5da21447e880158cef57516efee9c3",
      "parents": [
        "658fc18d8e632441cd5d83a4f74b53620cbac1fe"
      ],
      "author": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Wed Feb 04 17:01:11 2015 -0800"
      },
      "committer": {
        "name": "Wei Jia",
        "email": "wjia@google.com",
        "time": "Tue Feb 24 16:34:11 2015 -0800"
      },
      "message": "mediaplayer: support dynamic playback rate\n\nBug: 19196501\n\nChange-Id: I856b1507d5fa2cedfb645706d2435683a7d3e050\n"
    },
    {
      "commit": "b7848f1c442bc8c71020957948d1b003a62a25b7",
      "tree": "b0a1dfd418429171c0af5379a1820569775a840b",
      "parents": [
        "1ed13b3b443735e7f7b5002954f31741b0b1c572"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Dec 04 08:57:56 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 26 07:57:39 2015 -0800"
      },
      "message": "Remove MediaPlayerService::decode()\n\nand make SoundPool use MediaCodec for decoding files to PCM.\n\nBug: 18239054\nChange-Id: Ia144fc1bbb0d2787638ee972e2224339b4965310\n"
    },
    {
      "commit": "06ad1528e6dd4c866c085d3cad9235d2752eb3ed",
      "tree": "4b8411a9c418927b3916d5b5381cc8738a3ccb31",
      "parents": [
        "919b93473ebbba036f3934e92039f038c7f91a54"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Thu Aug 28 07:27:44 2014 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Wed Sep 17 23:01:24 2014 +0000"
      },
      "message": "NuPlayer: use getTimestamp instead of getPosition\n\nBug: 14659809\nBug: 16985287\nChange-Id: I59ec72fbd40a9b8d28fe548ddad082c03000c045"
    },
    {
      "commit": "a31335a4ec96ba351f25f3b26fa79a78c2723a13",
      "tree": "2c1aea6357ac46dcdeecc0b1b5b80a4b6bd05cd3",
      "parents": [
        "2a1bcb8347ad4778a49bb340c3ed28ba27caa7d7"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Aug 20 17:37:59 2014 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Thu Aug 21 16:51:28 2014 -0700"
      },
      "message": "Fix SoundPool and MediaPlayerService buffer overflow\n\nOverflow occurs when SoundPool sample tracks cannot\nfit in the MediaPlayerService AudioCache buffer.\n\nUnnecessary decoding occurred with AwesomePlayer and\nan assert failure occurred with NuPlayer.  NuPlayerRenderer\nis also tweaked to handle the latter case.\n\nBug: 17122639\nChange-Id: I4d25d3e2c0c62e36a91da6bf969edabddc2ebbb0\n"
    },
    {
      "commit": "1381d4b5c0385aec3741073e5998773b064c1fb0",
      "tree": "6087b737255d34703a90d1952d48bb97646e492a",
      "parents": [
        "60b1c0e79d12a1c70758bc8d060156924635f8ba"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Thu Aug 07 15:18:35 2014 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Thu Aug 07 17:40:13 2014 -0700"
      },
      "message": "media/playerservice: add getCodecList() to MediaPlayerService\n\nBug: 11990470\nChange-Id: I8fa45946fd9b76f9b975fc59062819c57e6881ef\n"
    },
    {
      "commit": "d9d7fa0873796ac661c44a7fcd6ad5ff697ff01f",
      "tree": "237375ce1605b2d7bd896b23f0a2ba2f0235ae09",
      "parents": [
        "f92f22becdf7fce1f55d5ebd80ac2caa2ad55602"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jun 24 08:01:46 2014 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Jul 01 07:57:32 2014 -0700"
      },
      "message": "Support for audio attributes on audio output of media player\n\nChange-Id: Iae4995c98e64add1ab9e6c8ae6501515032755f5\n"
    },
    {
      "commit": "d457c970c8d08519cd77280a90b61ae1e342cfe3",
      "tree": "f0f409db4d834b4d70b2244dd97dfa707496df50",
      "parents": [
        "1d6fa7af1288b550faabe4ec2cf98684236723db"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 11 08:47:07 2014 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 11 12:39:43 2014 -0800"
      },
      "message": "Track pid for each session\n\nso they can be properly freed.\n\nChange-Id: I6f389035bc29e74e7c367c1c6d0252b180f666b3\n"
    },
    {
      "commit": "80520381d0bdf3451bd17c9ddef73d3fe71c58c2",
      "tree": "6e808da46811a04acb53993b6a5ba2c71d14e126",
      "parents": [
        "85f06f640d364490dbf133f55e9d62d7c7c0db11"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 31 16:49:31 2014 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 07 08:42:56 2014 -0800"
      },
      "message": "Fix warnings about unused parameters\n\nChange-Id: I27dc108e2c1f7ffd414bb7ff3d4c349651da6c26\n"
    },
    {
      "commit": "81e68448f3361eaf8618930471fdc3c21bdf5cbc",
      "tree": "afc00a9a35746f18f85200755870067b4d63dd80",
      "parents": [
        "412d4744efae64083e4f99a664e3efaba031af48"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Feb 05 11:52:33 2014 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Feb 05 12:27:54 2014 -0800"
      },
      "message": "Remove no longer needed http proxy handling code, it\u0027s obsolete now\n\nsince we started to use java\u0027s HTTPConnection instead of the native\nimplementation. Also remove other remnants of the previous http implementation,\nsuch as accounting for the http user\u0027s uid.\n\nChange-Id: I60bfd31381ea40d2220db587ec5c433093b60034\n"
    },
    {
      "commit": "1b86fe063badb5f28c467ade39be0f4008688947",
      "tree": "d88660112d407540184ad8e1292ed8aa98fae317",
      "parents": [
        "5ce88270eb2d41462de8c4155673b802b2ca48cb"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 29 11:13:26 2014 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Feb 04 15:11:53 2014 -0800"
      },
      "message": "FINAL ATTEMPT: HTTP services are now provided from JAVA and made available to media code\n\nChange-Id: I9f74a86e70422187c9cf0ca1318a29019700192d\n"
    },
    {
      "commit": "6f59db12a64f4496866952a251122ccb77a36c6b",
      "tree": "29fcb69aa1f491974ec2b2ea5a01155b53940be5",
      "parents": [
        "23700debf767ef7fdfc30d96612771c3a03ad40d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 26 17:16:50 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 22 09:09:51 2013 -0800"
      },
      "message": "update offloaded audio track sampling rate\n\nAudioPlayer must read the sampling rate from offloaded audio sinks\nwhenever a new time position is computed as the decoder can update\nthe sampling rate on the fly.\n\nChange-Id: I997e5248cfd4017aeceb4e11689324ded2a5bc88\n"
    },
    {
      "commit": "22612345ae97648d5b6db43cc1aa30aad77f7bba",
      "tree": "73b47a621118d0fa56d27929a9447e90ca27c97d",
      "parents": [
        "4215e6166fca9f87a6e9e848b3dfd4ab0d25c954"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 14 17:28:47 2013 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 14 17:36:42 2013 -0800"
      },
      "message": "AwesomePlayer: correct stream type for offload\n\ncanOffloadStream() function in stagefright utils forces the\nstream type to AUDIO_STREAM_MUSIC when querying the audio policy\nmanager if a particular track is offloadable or not.\nThis causes MP3 ringtones to be offloaded which is not a validated use case.\n\nThe fix consists in using the actual stream type read from the AudioSink.\n\nBug: 11410937.\nChange-Id: I44b8e033a8e785a79cdc291b142f80b5580bdc4d\n"
    },
    {
      "commit": "9cae217050aa1347d4ac5053c305754879e3f97f",
      "tree": "dff82f277cba8f34af39eaeeb00adec01bbda26c",
      "parents": [
        "be567be3f92026f5964c1c9ecce00e30bb7df412"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 14 14:12:05 2013 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Oct 25 14:06:03 2013 -0700"
      },
      "message": "Assign blame for playback wakelocks.\n\nSet a work source for the playback wakelock, so that playback is\ncounted against the requesting app instead of the media server.\n\nCherrypicked from master.\n\nb/9464621\n\nChange-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31\n"
    },
    {
      "commit": "3d00aa6de95fb46e36f2bab4e3facdf0b96acf06",
      "tree": "1ad12df4c11ca37280cbe6850eed9bff1e0a2f35",
      "parents": [
        "402dfba6dcd68f5fd8d8921f9751f3e47eb1449d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 24 09:53:27 2013 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 24 11:59:59 2013 -0700"
      },
      "message": "soundpool: allocate shared memory heap by client\n\nCurrent SoundPool implementation allocates the shared memory heap\ncontaining decoded PCM samples in mediaserver process.\nWhen mediaserver process crashes, the shared memory heaps allocated by\nAudioCache cannot be mapped anymore in the new instance of mediaserver.\nThis causes a silent failure to end playback of new sounds because\nAudioFlinger believes the new AudioTracks are opened in streaming mode\nand not static mode: it sees a NULL shared memory pointer when the track\nis created.\n\nThe fix consists in allocating the memory heap in the client process. Thus\nthe heap is not lost when mediaserver restarts. The global memory usage is\nthe same as this is shared memory.\n\nAlso added a way to detect that a shared memory is passed when the track is\ncreated but cannot be mapped on mediaserver side.\n\nAlso fix a crash in SoundPool when ALOGV is enabled.\n\nBug: 10894793.\nChange-Id: Ice6c66ec3b2a409d75dc903a508b6c6fbfb2e8a7\n"
    },
    {
      "commit": "d89532e133b881c7e0dac089333ad7642fc510f1",
      "tree": "ba12a120aaf59226926f7a585f8a0cbe2e25aba8",
      "parents": [
        "b1a270d1e926fb9a01b4265a7675ed0c2c8f4868"
      ],
      "author": {
        "name": "Richard Fitzgerald",
        "email": "rf@opensource.wolfsonmicro.com",
        "time": "Tue May 14 13:18:21 2013 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 26 09:30:34 2013 -0700"
      },
      "message": "libmediaplayerservice: offload playback support\n\nMain change is to how recycled tracks are used for gapless\nplayback. If we are playing offloaded tracks that can\u0027t be\nrecycled we don\u0027t open a new offloaded output until we have\nclosed the previous one. This is because offloaded tracks\nare a limited resource so we don\u0027t want to spuriously create\nunnecessary instances. If the tracks cannot be recycled\nthis means that the formats are incompatible and so the\nhardware most likely will also be unable to use the existing\noutput channel for the new track. If we already have the\nmaximum number of hardware offload channels open (which could\nbe only one) then creation of the next output would fail if\nwe attempted it while the previous output was still open.\n\nChange-Id: I4f5958074e7ffd2e17108157fee86329506730ea\nSigned-off-by: Eric Laurent \u003celaurent@google.com\u003e\n"
    },
    {
      "commit": "1ab85ec401801ef9a9184650d0f5a1639b45eeb9",
      "tree": "c3a39f141461642c3ac3c7f1370ca679d08d80e6",
      "parents": [
        "8f13428cb29a9b610a9e9a0f5fea437cd2d3f032"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri May 31 09:18:43 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 02 13:43:24 2013 -0700"
      },
      "message": "Include what is needed\n\nRemove old includes.\nHeader files only include other header files that they directly need themselves.\n\nChange-Id: Ic471386808d9f42ea19ccbd59cb50a5f83a89dd0\n"
    },
    {
      "commit": "ad3af3305f024bcbbd55c894a4995e449498e1ba",
      "tree": "2e242d4c49cce9faefc28665c6ee63a2a5da170c",
      "parents": [
        "7919fa2c33b1fa7f5e49b2188d671bfe519c231e"
      ],
      "author": {
        "name": "Richard Fitzgerald",
        "email": "rf@opensource.wolfsonmicro.com",
        "time": "Mon Mar 25 16:54:37 2013 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 27 17:16:24 2013 -0700"
      },
      "message": "Public API changes for audio offload support.\n\nNOTE: this does _not_ include all private member variables added\nto classes as part of offload support. Only public/protected functions\nand stubs functions/variables needed to make the changes buildable.\n\n- isOffloadSupported() added to audio policy service\n    A stub implementation is required to build, this always returns false\n- setParameters() added to IAudioTrack\n    A stub implementation is required to build, this always returns\n    INVALID_OPERATION\n\n- CBlk flag for stream end\n\n- Change AudioSystem::getRenderPosition() to take an audio_output_t\n    so caller can specify which output to query\n\n- Add AudioSystem::isOffloadSupported()\n    This is fully implemented down to the AudioFlinger function\n    AudioPolicyServer::isOffloadSupported() which is just a stub\n    that always returns false.\n\n- Add EVENT_STREAM_END to AudioTrack interface.\n    STREAM_END is used to signal when the hardware has actually finished\n    playing all the data it was sent.\n\n- Add event type enumeration to media player interface AudioSink callbacks\n    so that the same callback can be used to handle multiple types of\n    event. For offloaded tracks we also have to handle STREAM_END and\n    TEAR_DOWN events\n\n- Pass audio_offload_info_t to various functions used for opening outputs,\n    tracks and audio players. This passes additional information about the\n    compressed stream down to the HAL when using offload.\n    For publicly-available APIs this is an optional parameter (for some of\n    the internal and low-level APIs around the HAL interface it is mandatory)\n\n- Add getParameters() and setParameters() API to AudioTrack\n    Currently dummy implementations.\n\n- Change AudioPlayer contructor so that it takes a set of bitflags defining what\n    options are required. This replaces the original bool which only specified\n    whether to use deep buffering.\n\n- Changes to StageFright class definition related to handling tearing-down of\n    an offloaded track when we need to switch back to software decode\n\n- Define new StageFright utility functions used for offloaded tracks\n    Currently dummy implementations.\n\n- AudioFlinger changes to use extended audio_config_t.\n    Fills in audio_offload_info_t member if this info is passed in when\n    opening an output.\n\n- libvideoeditor changes required to add the new event type parameter\n    to AudioSink callback functions\n\n- libmediaplayerservice changes required to add the new event type parameter\n    to AudioSink callback functions\n\nChange-Id: I3ab41138aa1083d81fe83b886a9b1021ec7320f1\nSigned-off-by: Richard Fitzgerald \u003crf@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Eric Laurent \u003celaurent@google.com\u003e\n"
    },
    {
      "commit": "2799d743ee2ae5a25fe869a7f9c052acc029559f",
      "tree": "5cab5ff06f7cae0025b93fdcd549cfb2ec72b755",
      "parents": [
        "7c684c622110af460025eff85082030947278430"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 30 14:33:29 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 03 11:28:36 2013 -0700"
      },
      "message": "Use sp\u003cAudioTrack\u003e instead of raw AudioTrack *\n\nThis change prepares for the new implementation of AudioTrack client, which\nwill require clients to use only sp\u003cAudioTrack\u003e, not raw AudioTrack *.\nA raw delete will cause a race condition during AudioTrack destruction.\n\nAudioTrack was made a RefBase by commit b68a91a70bc8d0d18e7404e14443d4e4020b3635\non 2011/11/15, when it was needed by OpenSL ES (for the callback protector).\nAt that time, the only other client that was also converted from\nAudioTrack * to sp\u003cAudioTrack\u003e was android.media.AudioTrack JNI in\nproject frameworks/base (file android_media_AudioTrack.cpp).\n\nDetails:\n * Use .clear() instead of delete followed by \u003d NULL.\n * ALOG %p need .get().\n * sp\u003c\u003e don\u0027t need to be listed in constructor initializer, if initially 0.\n * Use \u003d\u003d 0 for sp\u003c\u003e vs \u003d\u003d NULL for raw pointers.\n * Use if (sp !\u003d 0) instead of if (raw).\n\nChange-Id: Ic7cad25795d6e862e112abdc227b6d33afdfce17\n"
    },
    {
      "commit": "b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1",
      "tree": "6dc90cde609f708f45ae08af2bdc5f9cd2df4bb3",
      "parents": [
        "41688da226e91c97ea3b2fe096044e1e5b0520bc"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed May 29 14:20:52 2013 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri May 31 15:31:56 2013 -0700"
      },
      "message": "Update HTTP proxy configuration for all media playback inside stagefright.\n\nChange-Id: Ie0dd00045aba668d8b49da73224e7a7c9c04f69b\nrelated-to-bug: 8873723\n(cherry picked from commit 2704965b8a1ff3b7450ff58ccecf86d8ec688c40)\n"
    },
    {
      "commit": "cc82dc6d500023eba6048616301a4b12682458db",
      "tree": "1f36f887af92cb4bee147e962b85ce10f35d587a",
      "parents": [
        "c93484ab9fdf044fd32f2388a3ce29040d2ba319"
      ],
      "author": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Fri Feb 08 10:18:35 2013 -0800"
      },
      "committer": {
        "name": "Jeff Tinker",
        "email": "jtinker@google.com",
        "time": "Wed Mar 13 13:39:48 2013 -0700"
      },
      "message": "Implementing MediaDrm APIs\n\nChange-Id: I9ff8eeb7d0c383b5c0c68cd54eb54ce7d2d22fe6\n"
    },
    {
      "commit": "279dcd89ab1d2de91dfe95e461412a0f577a6891",
      "tree": "fa0ae875d3404f6fae47823e4c3b2d09207dae9b",
      "parents": [
        "150a516ce434bd1df81e3c3070915e3f549bca59"
      ],
      "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": "5570227ac334479982a9dd8c1647c00f58f47c18",
      "tree": "885046de88c68c9fc468fd02617af4cafc6a758b",
      "parents": [
        "00169223fb04a14ddb542146223540e3695c8d27",
        "f37971f624164c3ed185d3f976404a6f60f49b9a"
      ],
      "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": "f37971f624164c3ed185d3f976404a6f60f49b9a",
      "tree": "e3455056e9e0512786cfdd832e1fd8bba765bc7c",
      "parents": [
        "34d7db5dd43000cac7e8e156d79e9f97ccbb8990"
      ],
      "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": "484566c410afdfbc4b6bc5aa1732aef37428a5b8",
      "tree": "5ce1fc6a755c32f0b6ff362fe1fc5bf0d9ee2b14",
      "parents": [
        "34d7db5dd43000cac7e8e156d79e9f97ccbb8990"
      ],
      "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": "45d76bb6c8f15335f89c287dbae04cc38f79d0a8",
      "tree": "baeb6a730e64585729fec469290541b38da1199c",
      "parents": [
        "8fdd88b073275812ccd2279e3f657a4b5960bfa3"
      ],
      "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": "59451f8ced48874427ff1550391c4f3cd2ba2e35",
      "tree": "157c7a66a42dee041738de4cd88c9b185ad686bd",
      "parents": [
        "d5a9ae029b50678de3b468d8324728a73ff5b0aa"
      ],
      "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": "2013a54981d4ffb036dff279b88cc9f08c0ee1c2",
      "tree": "0be5853ec89f5d075763a8228513a6e98a27a30e",
      "parents": [
        "62a1904e6beaa8848eddd2b635053536fbe5e804"
      ],
      "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": "ab1bd84889273bc21efdabe5ff6f4633eb918a85",
      "tree": "c7b13774524756c1add0ebf76de25be2ff8244e9",
      "parents": [
        "c869702b6aa0c4af48226c7385eee60a1642761c"
      ],
      "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": "35213f1420c669f43314cb75eadea450d21a75cb",
      "tree": "6869bbe05a695fbb1df99b339e869652142ed3fb",
      "parents": [
        "f8b8f6f8738b9780067e9e56bac8c1de9449b94c"
      ],
      "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": "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": "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": "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": "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": "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": "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": "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": "a3f1fa308728976fc9ca1b4f37d26e633b32b9ac",
      "tree": "613598b5d86ce915b4f505c0d9c19592fa8f7d79",
      "parents": [
        "04eaf3e5f20d7faa956c0d672024ffb5117f4c26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 14:54:46 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 18 16:06:47 2012 -0800"
      },
      "message": "Fix incorrect includes of AudioTrack.h\n\nRemove unnecessary includes of AudioTrack.h.\nUse forward declaration of class names in preference to #include when possible.\n\nChange-Id: I12982811fa75c2c7695d8bbfa595a7aaec047dc0\n"
    }
  ],
  "next": "fff6d715a8db0daf08a50634f242c40268de3d49"
}
