)]}'
{
  "log": [
    {
      "commit": "6b111f32247800dccd34dd396e731b9e7888b185",
      "tree": "bc10d592cb78523898360b28da29ba639c66266f",
      "parents": [
        "6f85f6533a25f7eeaaacba53281572c00e63759a"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Apr 27 18:52:37 2017 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Apr 28 20:02:40 2017 +0000"
      },
      "message": "audiohal: Always load A2DP module locally\n\nThis makes legitimate unix socket interaction between A2DP\nmodule and the Bluetooth stack.\n\nImplemented by allowing both \"local\" and \"hidl\" interface\nwrappers to co-exist for devices and streams. A \"hybrid\" device\nfactory is introduced to create an appropriate implementation\nof a device depending on the requested module name.\n\nBug: 37640821\nTest: Play Music over BT headset\nChange-Id: I5592961dd5b56840418fb122680979d11a261b6c\n"
    },
    {
      "commit": "e1c4b5d7a94c21b8ce0c5707b4af84de596fbb79",
      "tree": "8c448787f6c4f7bfe7647cc32601350247d4066a",
      "parents": [
        "2b934d36939c571a47cc972670176bc0356c54be"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Dec 22 09:22:45 2016 -0800"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Jan 04 20:50:54 2017 -0800"
      },
      "message": "Re-implement HIDL stream read and write using FMQ\n\nResult: no hwbinder calls due read / write session.\n\nTest: make, perform Loopback RTT, check traces\nBug: 30222631\n\nChange-Id: I4a8792525ec374111302cfd5c0a2e41f9f4cc418\n"
    },
    {
      "commit": "af35aadb7ab558035b6cf45bd3930ecaa3a3b330",
      "tree": "ef709fefc01bbf3efb1f0bcddd9ecee0920977e4",
      "parents": [
        "e2bc75d146276c3cfe2b349073cf46f7706fa38d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 15 14:25:36 2016 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 20 12:57:13 2016 -0800"
      },
      "message": "audio HAL: implement mmap stream functions\n\nBug: 33398120\nTest: make marlin-eng with ENABLE_TREBLE true\n\nChange-Id: I10df5440b9946398a73a7ee309eca860eae0bfcd\n"
    },
    {
      "commit": "cbc8f617c1aebef5d041fa40dcd38a5466690b99",
      "tree": "525470607c3e6436c5a73caac90830104fcde9ac",
      "parents": [
        "0c739c59dd1a3d52beb82a353c13b6c853d93f5f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 11 18:05:13 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 11 18:05:13 2016 -0700"
      },
      "message": "Eliminate dependencies on hardware/audio.h (trivial cases)\n\nframeworks/av must not depend on hardware/ (except for the code\nfrom libaudiohal that actually calls into HAL).\n\nThis CL deals with simple cases where depending on system/audio.h\nis enough.\n\nChange-Id: Ia2cb66cc8c92316ce5ab884a008d5e531263c2e4\nTest: make\n"
    },
    {
      "commit": "15897e459c5086058e73b3e91690320a7bb46d4a",
      "tree": "84e9b8f15186f485d59aa15d0f59b628d2202a4e",
      "parents": [
        "ad111520f0167c4a0bf6a37fc025e2523c313258"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 30 16:16:41 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 30 16:16:41 2016 -0700"
      },
      "message": "Fix non-blocking playback threads creation\n\nBecause PlaybackThread calls StreamOutHal::setCallback inside\nthe constructor, onFirstRef gets called while the vtable pointer\nis set to PlaybackThread\u0027s vtable, not to its subclass vtable.\nonFirstRef launches a thread which starts calling methods\nthat are abstract in PlaybackThread.\n\nFixed by changing the type of StreamOutHal::setCallback argument\nfrom \"sp\" to \"wp\", as creating a weak pointer does not increase\nstrong refs count and thus doesn\u0027t call onFirstRef.\n\nBug: 31856492\nChange-Id: I0d51bc73ca88b4b235260ed773870ecb7dac55d0\nTest: added logging to verify the order of calls\n"
    },
    {
      "commit": "a0c91339814f37ea78365afb436c9f3d1f0a0090",
      "tree": "b0075232d68758a314754a9293c65ea15091ca95",
      "parents": [
        "5090f7d3211b5517a7602c910c04462f7eee0727"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Sep 19 10:01:12 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Sep 26 14:53:38 2016 -0700"
      },
      "message": "Update NBAIO to use the new audio HAL abstraction layer\n\nMoved the HAL access abstraction layer to a separate library so it\ncan be used both by audioflinger and libnbaio.\n\nBug: 30222631\nTest: manual with Loopback app, Hangouts, YouTube\n\nChange-Id: Id622c2f1aa8f55a775d34f369a596c2c4d29d5be\n"
    },
    {
      "commit": "1dc98674f701dada94143b4d31b7221c58346c6c",
      "tree": "44f80a66fdff774d2229ca3aaabdd614ed1f8013",
      "parents": [
        "9debf8f6d26f7aa12c68ddfb6cdb1323d4b5adbf"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Aug 18 17:50:29 2016 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Sep 21 15:58:24 2016 -0700"
      },
      "message": "Abstract away access to audio streams HAL in AudioFlinger\n\nIn this CL all direct access to audio_stream_t, audio_stream_out_t, and\naudio_stream_in_t their functions is encapsulated within the new\nhierarchy of Stream[In|Out]HalLocal classes.  AudioFlinger uses\ninterface classes Stream[In|Out]HalInterface to access these functions.\n\nNote that NBAIO still receives raw HAL stream handles and needs to be\nconverted separately.\n\nBug: 30222631\nTest: manual with Loopback app\n\nChange-Id: I6388cfa2006791c9c0aa7bb186719209726a2d48\n"
    }
  ]
}
