)]}'
{
  "log": [
    {
      "commit": "6a08a9293b732532e98607d41a42bc06a52e8184",
      "tree": "a33a0ab6ffb3cf820c22f1a9ee53d2001dfaf9bb",
      "parents": [
        "ad9882e76f9debbd2ada2b616d5f51b8908ed764",
        "0c3f0588700228d4d81dded56480d14857e1b2cd"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Sun Feb 21 09:25:04 2021 -0800"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Sun Feb 21 09:25:04 2021 -0800"
      },
      "message": "Merge ab/7061308 into stage.\n\nBug: 180401296\nMerged-In: Iffdea341e5cd3cc2ef82e1b9c0adf211b3c29381\nChange-Id: I9e0e28ec101bde3ee24c946e9fb5c11b1cceba64\n"
    },
    {
      "commit": "948e6aace91d16acfaa97763c7228029a1c2afe0",
      "tree": "e1213aacab8f21fd8bf9dcd02dbc82741013379f",
      "parents": [
        "367398038247b09a3f92e05affac5f9b1f5e2f90"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Fri Feb 12 21:02:31 2021 -0800"
      },
      "committer": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Tue Feb 16 04:09:57 2021 -0800"
      },
      "message": "[LSC] Add LOCAL_LICENSE_KINDS to frameworks/av\n\nAdded SPDX-license-identifier-Apache-2.0 to:\n  apex/Android.bp\n  camera/cameraserver/Android.bp\n  camera/tests/Android.mk\n  cmds/screenrecord/Android.bp\n  cmds/stagefright/Android.mk\n  drm/common/Android.bp\n  drm/drmserver/Android.bp\n  drm/libdrmframework/Android.bp\n  drm/libdrmframework/plugins/common/util/Android.bp\n  drm/libdrmframework/plugins/forward-lock/FwdLockEngine/Android.bp\n  drm/libdrmframework/plugins/forward-lock/internal-format/common/Android.bp\n  drm/libdrmframework/plugins/forward-lock/internal-format/converter/Android.bp\n  drm/libdrmframework/plugins/forward-lock/internal-format/decoder/Android.bp\n  drm/libdrmframework/plugins/passthru/Android.bp\n  drm/libmediadrm/Android.bp\n  drm/libmediadrm/fuzzer/Android.bp\n  drm/libmediadrm/protos/Android.bp\n  drm/libmediadrm/tests/Android.bp\n  drm/mediacas/plugins/clearkey/Android.bp\n  drm/mediacas/plugins/clearkey/tests/Android.bp\n  drm/mediacas/plugins/mock/Android.bp\n  drm/mediadrm/plugins/clearkey/common/Android.bp\n  drm/mediadrm/plugins/clearkey/default/Android.bp\n  drm/mediadrm/plugins/clearkey/default/tests/Android.bp\n  drm/mediadrm/plugins/mock/Android.bp\n  media/audioserver/Android.mk\n  media/bufferpool/1.0/Android.bp\n  media/bufferpool/1.0/vts/Android.bp\n  media/bufferpool/2.0/Android.bp\n  media/bufferpool/2.0/tests/Android.bp\n  media/codec2/components/aac/Android.bp\n  media/codec2/components/amr_nb_wb/Android.bp\n  media/codec2/components/aom/Android.bp\n  media/codec2/components/avc/Android.bp\n  media/codec2/components/base/Android.bp\n  media/codec2/components/cmds/Android.bp\n  media/codec2/components/flac/Android.bp\n  media/codec2/components/g711/Android.bp\n  media/codec2/components/gav1/Android.bp\n  media/codec2/components/gsm/Android.bp\n  media/codec2/components/hevc/Android.bp\n  media/codec2/components/mp3/Android.bp\n  media/codec2/components/mpeg2/Android.bp\n  media/codec2/components/mpeg4_h263/Android.bp\n  media/codec2/components/opus/Android.bp\n  media/codec2/components/raw/Android.bp\n  media/codec2/components/vorbis/Android.bp\n  media/codec2/components/vpx/Android.bp\n  media/codec2/components/xaac/Android.bp\n  media/codec2/core/Android.bp\n  media/codec2/faultinjection/Android.bp\n  media/codec2/fuzzer/Android.bp\n  media/codec2/hidl/1.0/utils/Android.bp\n  media/codec2/hidl/1.0/vts/functional/Android.bp\n  media/codec2/hidl/1.0/vts/functional/audio/Android.bp\n  media/codec2/hidl/1.0/vts/functional/common/Android.bp\n  media/codec2/hidl/1.0/vts/functional/component/Android.bp\n  media/codec2/hidl/1.0/vts/functional/master/Android.bp\n  media/codec2/hidl/1.0/vts/functional/video/Android.bp\n  media/codec2/hidl/1.1/utils/Android.bp\n  media/codec2/hidl/client/Android.bp\n  media/codec2/hidl/services/Android.bp\n  media/codec2/sfplugin/Android.bp\n  media/codec2/sfplugin/tests/Android.bp\n  media/codec2/sfplugin/utils/Android.bp\n  media/codec2/tests/Android.bp\n  media/codec2/vndk/Android.bp\n  media/codecs/amrnb/common/Android.bp\n  media/codecs/amrnb/enc/fuzzer/Android.bp\n  media/codecs/amrnb/fuzzer/Android.bp\n  media/codecs/amrwb/dec/fuzzer/Android.bp\n  media/codecs/amrwb/enc/Android.bp\n  media/codecs/amrwb/enc/SampleCode/Android.bp\n  media/codecs/amrwb/enc/fuzzer/Android.bp\n  media/codecs/amrwb/enc/test/Android.bp\n  media/codecs/g711/decoder/Android.bp\n  media/codecs/g711/fuzzer/Android.bp\n  media/codecs/m4v_h263/dec/Android.bp\n  media/codecs/m4v_h263/dec/test/Android.bp\n  media/codecs/m4v_h263/fuzzer/Android.bp\n  media/codecs/mp3dec/fuzzer/Android.bp\n  media/extractors/Android.bp\n  media/extractors/aac/Android.bp\n  media/extractors/amr/Android.bp\n  media/extractors/flac/Android.bp\n  media/extractors/fuzzers/Android.bp\n  media/extractors/midi/Android.bp\n  media/extractors/mkv/Android.bp\n  media/extractors/mp3/Android.bp\n  media/extractors/mp4/Android.bp\n  media/extractors/mpeg2/Android.bp\n  media/extractors/ogg/Android.bp\n  media/extractors/tests/Android.bp\n  media/extractors/wav/Android.bp\n  media/img_utils/Android.bp\n  media/libaaudio/Android.bp\n  media/libaaudio/examples/Android.bp\n  media/libaaudio/examples/input_monitor/Android.bp\n  media/libaaudio/examples/loopback/Android.bp\n  media/libaaudio/examples/write_sine/Android.bp\n  media/libaaudio/src/Android.bp\n  media/libaaudio/tests/Android.bp\n  media/libaudioclient/Android.bp\n  media/libaudioclient/tests/Android.bp\n  media/libaudiofoundation/Android.bp\n  media/libaudiofoundation/tests/Android.bp\n  media/libaudiohal/Android.bp\n  media/libaudiohal/impl/Android.bp\n  media/libaudioprocessing/Android.bp\n  media/libaudioprocessing/audio-resampler/Android.bp\n  media/libaudioprocessing/tests/Android.bp\n  media/libaudioprocessing/tests/fuzzer/Android.bp\n  media/libcpustats/Android.bp\n  media/libdatasource/Android.bp\n  media/libeffects/config/Android.bp\n  media/libeffects/downmix/Android.bp\n  media/libeffects/downmix/tests/Android.bp\n  media/libeffects/dynamicsproc/Android.bp\n  media/libeffects/factory/Android.bp\n  media/libeffects/loudness/Android.bp\n  media/libeffects/lvm/benchmarks/Android.bp\n  media/libeffects/lvm/lib/Android.bp\n  media/libeffects/lvm/tests/Android.bp\n  media/libeffects/lvm/wrapper/Android.bp\n  media/libeffects/preprocessing/Android.bp\n  media/libeffects/preprocessing/benchmarks/Android.bp\n  media/libeffects/preprocessing/tests/Android.bp\n  media/libeffects/proxy/Android.bp\n  media/libeffects/visualizer/Android.mk\n  media/libheif/Android.bp\n  media/libmedia/Android.bp\n  media/libmedia/tests/codeclist/Android.bp\n  media/libmedia/xsd/Android.bp\n  media/libmedia/xsd/vts/Android.bp\n  media/libmediahelper/Android.bp\n  media/libmediahelper/tests/Android.bp\n  media/libmediametrics/Android.bp\n  media/libmediaplayerservice/Android.bp\n  media/libmediaplayerservice/datasource/Android.bp\n  media/libmediaplayerservice/nuplayer/Android.bp\n  media/libmediaplayerservice/tests/Android.bp\n  media/libmediaplayerservice/tests/stagefrightRecorder/Android.bp\n  media/libmediatranscoding/Android.bp\n  media/libmediatranscoding/tests/Android.bp\n  media/libnbaio/Android.bp\n  media/libnblog/Android.bp\n  media/libstagefright/Android.bp\n  media/libstagefright/bqhelper/Android.bp\n  media/libstagefright/bqhelper/tests/Android.bp\n  media/libstagefright/codecs/aacdec/Android.bp\n  media/libstagefright/codecs/aacenc/Android.bp\n  media/libstagefright/codecs/amrnb/dec/Android.bp\n  media/libstagefright/codecs/amrnb/enc/Android.bp\n  media/libstagefright/codecs/amrwbenc/Android.bp\n  media/libstagefright/codecs/avcdec/Android.bp\n  media/libstagefright/codecs/avcenc/Android.bp\n  media/libstagefright/codecs/common/Android.bp\n  media/libstagefright/codecs/flac/dec/Android.bp\n  media/libstagefright/codecs/flac/enc/Android.bp\n  media/libstagefright/codecs/g711/dec/Android.bp\n  media/libstagefright/codecs/gsm/dec/Android.bp\n  media/libstagefright/codecs/hevcdec/Android.bp\n  media/libstagefright/codecs/m4v_h263/dec/Android.bp\n  media/libstagefright/codecs/m4v_h263/enc/Android.bp\n  media/libstagefright/codecs/mp3dec/Android.bp\n  media/libstagefright/codecs/mpeg2dec/Android.bp\n  media/libstagefright/codecs/on2/dec/Android.bp\n  media/libstagefright/codecs/on2/enc/Android.bp\n  media/libstagefright/codecs/opus/dec/Android.bp\n  media/libstagefright/codecs/raw/Android.bp\n  media/libstagefright/codecs/vorbis/dec/Android.bp\n  media/libstagefright/codecs/xaacdec/Android.bp\n  media/libstagefright/colorconversion/Android.bp\n  media/libstagefright/data/Android.bp\n  media/libstagefright/filters/Android.bp\n  media/libstagefright/flac/dec/Android.bp\n  media/libstagefright/flac/dec/test/Android.bp\n  media/libstagefright/foundation/Android.bp\n  media/libstagefright/foundation/tests/AVCUtils/Android.bp\n  media/libstagefright/foundation/tests/Android.bp\n  media/libstagefright/foundation/tests/OpusHeader/Android.bp\n  media/libstagefright/foundation/tests/colorutils/Android.bp\n  media/libstagefright/http/Android.bp\n  media/libstagefright/httplive/Android.bp\n  media/libstagefright/id3/Android.bp\n  media/libstagefright/id3/test/Android.bp\n  media/libstagefright/mpeg2ts/Android.bp\n  media/libstagefright/mpeg2ts/test/Android.bp\n  media/libstagefright/omx/Android.bp\n  media/libstagefright/omx/tests/Android.bp\n  media/libstagefright/rtsp/Android.bp\n  media/libstagefright/tests/Android.bp\n  media/libstagefright/tests/ESDS/Android.bp\n  media/libstagefright/tests/HEVC/Android.bp\n  media/libstagefright/tests/extractorFactory/Android.bp\n  media/libstagefright/tests/fuzzers/Android.bp\n  media/libstagefright/tests/mediacodec/Android.bp\n  media/libstagefright/tests/metadatautils/Android.bp\n  media/libstagefright/tests/writer/Android.bp\n  media/libstagefright/timedtext/Android.bp\n  media/libstagefright/timedtext/test/Android.bp\n  media/libstagefright/webm/Android.bp\n  media/libstagefright/webm/tests/Android.bp\n  media/libstagefright/writer_fuzzers/Android.bp\n  media/libstagefright/xmlparser/Android.bp\n  media/libstagefright/xmlparser/test/Android.bp\n  media/libstagefright/xmlparser/vts/Android.bp\n  media/libwatchdog/Android.bp\n  media/mediaserver/Android.bp\n  media/mtp/Android.bp\n  media/mtp/tests/Android.bp\n  media/tests/benchmark/Android.bp\n  media/tests/benchmark/MediaBenchmarkTest/Android.bp\n  media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/Android.bp\n  media/tests/benchmark/src/native/common/Android.bp\n  media/tests/benchmark/src/native/decoder/Android.bp\n  media/tests/benchmark/src/native/encoder/Android.bp\n  media/tests/benchmark/src/native/extractor/Android.bp\n  media/tests/benchmark/src/native/muxer/Android.bp\n  media/tests/benchmark/tests/Android.bp\n  media/utils/Android.bp\n  media/utils/fuzzers/Android.bp\n  services/audioflinger/Android.bp\n  services/audiopolicy/Android.bp\n  services/audiopolicy/common/Android.bp\n  services/audiopolicy/common/managerdefinitions/Android.bp\n  services/audiopolicy/config/Android.bp\n  services/audiopolicy/engine/common/Android.bp\n  services/audiopolicy/engine/config/Android.bp\n  services/audiopolicy/engine/interface/Android.bp\n  services/audiopolicy/engineconfigurable/Android.bp\n  services/audiopolicy/engineconfigurable/config/Android.bp\n  services/audiopolicy/engineconfigurable/config/example/automotive/Android.bp\n  services/audiopolicy/engineconfigurable/config/example/caremu/Android.bp\n  services/audiopolicy/engineconfigurable/config/example/phone/Android.bp\n  services/audiopolicy/engineconfigurable/parameter-framework/Android.bp\n  services/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.bp\n  services/audiopolicy/engineconfigurable/tools/Android.bp\n  services/audiopolicy/engineconfigurable/wrapper/Android.bp\n  services/audiopolicy/enginedefault/Android.bp\n  services/audiopolicy/enginedefault/config/example/Android.bp\n  services/audiopolicy/manager/Android.mk\n  services/audiopolicy/managerdefault/Android.bp\n  services/audiopolicy/service/Android.mk\n  services/audiopolicy/tests/Android.bp\n  services/camera/libcameraservice/Android.bp\n  services/camera/libcameraservice/fuzzer/Android.bp\n  services/camera/libcameraservice/tests/Android.mk\n  services/mediacodec/Android.bp\n  services/mediacodec/registrant/Android.bp\n  services/mediaextractor/Android.bp\n  services/medialog/Android.bp\n  services/medialog/fuzzer/Android.bp\n  services/mediametrics/Android.bp\n  services/mediametrics/benchmarks/Android.bp\n  services/mediametrics/fuzzer/Android.bp\n  services/mediametrics/tests/Android.bp\n  services/mediaresourcemanager/Android.bp\n  services/mediaresourcemanager/fuzzer/Android.bp\n  services/mediaresourcemanager/test/Android.bp\n  services/mediatranscoding/Android.bp\n  services/mediatranscoding/tests/Android.bp\n  services/minijail/Android.bp\n  services/oboeservice/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD to:\n  media/codecs/amrnb/dec/Android.bp\n  media/codecs/amrnb/dec/test/Android.bp\n  media/codecs/amrnb/enc/Android.bp\n  media/codecs/amrnb/enc/test/Android.bp\n  media/codecs/amrwb/dec/Android.bp\n  media/codecs/amrwb/dec/test/Android.bp\n  media/codecs/m4v_h263/enc/Android.bp\n  media/codecs/m4v_h263/enc/test/Android.bp\n  media/codecs/mp3dec/Android.bp\n  media/codecs/mp3dec/test/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD\n    SPDX-license-identifier-MIT SPDX-license-identifier-Unicode-DFS\n    legacy_by_exception_only\nto:\n  Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-MIT\n    SPDX-license-identifier-Unicode-DFS\nto:\n  apex/testing/Android.bp\n  camera/Android.bp\n  camera/ndk/Android.bp\n  media/ndk/Android.bp\n  services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Android.bp\n  services/audiopolicy/engineconfigurable/parameter-framework/examples/CarEmu/Android.bp\n  services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Android.bp\n  services/audiopolicy/engineconfigurable/parameter-framework/examples/SettingsNoInput/Android.bp\n  services/audiopolicy/engineconfigurable/parameter-framework/examples/SettingsNoOutput/Android.bp\n  services/audiopolicy/tests/resources/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 legacy_by_exception_only\nto:\n  drm/mediadrm/plugins/clearkey/hidl/Android.bp\n\nBug: 68860345\nBug: 151177513\nBug: 151953481\n\nTest: m all\n\nExempt-From-Owner-Approval: janitorial work\n\nChange-Id: I8360756b326b891b56629127091540310851c941\nMerged-in: Ic169757d64ad8da7eebd0e1febdcbfb467fe81f4\nMerged-in: Ifa3fefe5dc12229e8043a54ffd1f3958d6b02310\nMerged-in: I1e32081a069c4c1b25aa200dcdb165c0feb07b8a\nMerged-in: Ib2050becaf89b8e4db5867bc601dedeb4eb8ebd2\nMerged-in: I5a4d51fb1244ed49bcd70e446aaa26e2aa8ed7b1\n"
    },
    {
      "commit": "2349b1a90de7a7f89185056abd17d9dae78c8c03",
      "tree": "2a1cc195ea3775fe6a4156dbd48c30e89570aec1",
      "parents": [
        "da86112baea3e27f5bfdee6c0732b0a6d476ff0e",
        "6dc4d54815fef551778caca0e5b234e36a3ba18e"
      ],
      "author": {
        "name": "Kris Alder",
        "email": "kalder@google.com",
        "time": "Thu Dec 17 19:08:52 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Dec 17 19:08:52 2020 +0000"
      },
      "message": "Merge \"libaaudioservice: Updated to build both static and shared library\" am: d295e4b4bd am: 6dc4d54815\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1522719\n\nMUST ONLY BE SUBMITTED BY AUTOMERGER\n\nChange-Id: I02a0256e292bca37d1d34415c7988b6d0a38708a\n"
    },
    {
      "commit": "3813f74c4e035da3e831ad14d6fe1910e52c5e55",
      "tree": "e780833025c08c7870d9cc9c3915fdeb8d9414b4",
      "parents": [
        "e9ebb9efbcac3a27a26cb068ac5e8fd187bcaaa2"
      ],
      "author": {
        "name": "Mufaddal Chakera",
        "email": "mufaddal.chakera@ittiam.com",
        "time": "Wed Nov 11 11:12:48 2020 +0530"
      },
      "committer": {
        "name": "Mufaddal Chakera",
        "email": "mufaddal.chakera@ittiam.com",
        "time": "Wed Dec 16 13:45:08 2020 +0530"
      },
      "message": "libaaudioservice: Updated to build both static and shared library\n\nTest: Build libaaudioservice\nBug: 174736869\n\nChange-Id: If2fbbe199314ad21ef08338b5aed9c8991031c15\n"
    },
    {
      "commit": "f74b8a59c3ef78654b9ca42e3d63a1b66e184e2a",
      "tree": "4c674388124bbfbfebc3e9c3ae2f3963f255a7dd",
      "parents": [
        "e80bee84eab70271ac3309301fb432ce10663eca",
        "fff9c8aa87a7c03e063cf6adeb4c63b895b6d145"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Dec 02 14:29:10 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Dec 02 14:29:10 2020 +0000"
      },
      "message": "Merge \"aaudio: use strong pointer to protect callback\" into rvc-qpr-dev am: fff9c8aa87\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/13150716\n\nChange-Id: I03ef28890bf44e5ee07d600e7c011693369e3a68\n"
    },
    {
      "commit": "49a6d9c78aaa07ab83494d628cc6b7a2386a2b55",
      "tree": "70acc7a3307c66d6ac1b7ee5cc59d88ebfacad34",
      "parents": [
        "9fa7856094a8705be2061e532c36e74d103719b8",
        "55f730f7c1a0b5f963f47fdd65c43609a143f18c"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Wed Dec 02 00:41:55 2020 -0800"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Wed Dec 02 00:41:55 2020 -0800"
      },
      "message": "Merge rvc-qpr-dev-plus-aosp-without-vendor@6881855\n\nBug: 172690556\nMerged-In: I72658443fde61aa5f10463fcc42772daf4143ed0\nChange-Id: Ifb9605a1f9407357ddc755551e2d1d51c7f09bfc\n"
    },
    {
      "commit": "f2d8470b1c8efe422f73adf682e7858810d7fa4a",
      "tree": "7277bc73082c1a200acf96ae779923467198bb11",
      "parents": [
        "763b935ef71fbe678d9c402b2c9f6cbefbdb68f6"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Oct 12 23:42:30 2020 +0000"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Dec 01 12:43:19 2020 -0800"
      },
      "message": "aaudio: use strong pointer to protect callback\n\nHold a strong pointer to the AudioStream so it cannot get deleted while\nthe MMAP callback is running.\n\nAlso fixes disconnect for shared streams, which was broken\nby a previous attempt to fix b/166877425\n\nBug: 166877425\nBug: 170551030\nTest: see bug for details\nTest: atest AAudioTestCases\nTest: OboeTester V1.5.30 or later, \"TEST DISCONNECT\"\nChange-Id: I236e2d68632070d253d14ddf7b9d7076e068830a\nMerged-In: I236e2d68632070d253d14ddf7b9d7076e068830a\n(cherry picked from commit e358ec63eedd7a6289984b1f2468c5c16c2ff6c8)\n"
    },
    {
      "commit": "8e654fb2bde447d96ffe40edf339fb12a83bafc7",
      "tree": "63d1de06e932b7d5850a2dbe79b2a98e3f795d24",
      "parents": [
        "ef888a66e6fc1013af4b24fed98f48dfb462ef01",
        "c410c10dfa725baf4307312d6c8abd8af02df3c5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 01 18:08:52 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Dec 01 18:08:52 2020 +0000"
      },
      "message": "Merge \"Convert mask types from uint32_t to enum type\" am: 7cd031828f am: c410c10dfa\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1510515\n\nChange-Id: I90c3487ebb936f37eb92bf862205c9bdb5eb1d09\n"
    },
    {
      "commit": "e3b59ac285356dfe1bd416d46672fe0b1f10dc6f",
      "tree": "cc260c7b2867101599cdba75b53b4e0578c7345f",
      "parents": [
        "7aacb78d8d049af5e9949de9fc34be4650b5b176"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 01 15:08:13 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Nov 24 22:56:29 2020 +0000"
      },
      "message": "Convert mask types from uint32_t to enum type\n\nThis applies to the following types:\n\n- audio_gain_mode_t;\n- audio_flags_mask_t;\n- audio_channel_representation_t;\n- audio_channel_mask_t;\n- audio_devices_t.\n\nEnum types are distinct thus proper overloading on the type\nis possible in C++. Also, assignments to enum types are\nless prone to errors.\n\nBug: 169889714\nTest: basic audio functionality\n      m stagefright\n      atest audiopolicy_tests\nChange-Id: I42506484b1d0b0482618b7314fad4c8012a06fb4\nMerged-In: I42506484b1d0b0482618b7314fad4c8012a06fb4\n"
    },
    {
      "commit": "1281c1d4ec7d5752d7c0981f32171a83f80b2438",
      "tree": "d62219e73d503ad08c4d60a3029d22e61b8309dd",
      "parents": [
        "af69d2203db2e0147f24c43486c36cf2b02c997f",
        "27514853147fb24d48af6a4f678c010e822b1c8e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 11 16:49:25 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Sep 11 16:49:25 2020 +0000"
      },
      "message": "Merge changes from topic \"aaudio-callback-close\" into rvc-qpr-dev am: 2751485314\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/12551623\n\nChange-Id: I520180492759313fd28baea43e43ec0af1f6c334\n"
    },
    {
      "commit": "af69d2203db2e0147f24c43486c36cf2b02c997f",
      "tree": "7795d5ebeaa82c7c18f3827b8e640f19a7a66e60",
      "parents": [
        "52bc293ab6d9b3e67c52fcc5fefd500060b4f6b9",
        "79224cacfbdb30956428bbe915323233949b768d"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 11 16:49:24 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Sep 11 16:49:24 2020 +0000"
      },
      "message": "aaudio: prevent onAudioDeviceUpdate past close am: 79224cacfb\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/12551622\n\nChange-Id: I9530b754c9b67f968ae9b0088e627fa6434172f3\n"
    },
    {
      "commit": "52bc293ab6d9b3e67c52fcc5fefd500060b4f6b9",
      "tree": "fad3d97e165d291264d510247d06fa1594b20f58",
      "parents": [
        "60669b443009fdaf85d3e5f4782baf7b6aaa3ab7",
        "4719048ce0e6f8656a417a2f2fe6fbb848ed2ba7"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 11 16:49:21 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Sep 11 16:49:21 2020 +0000"
      },
      "message": "aaudio: fix crash from callbacks during close am: 4719048ce0\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/12540591\n\nChange-Id: Ic046f39f0327c662362ceed7b090bb2cf91e2e1b\n"
    },
    {
      "commit": "5cad6399aaae8fd448f389967a30d00068b1efe0",
      "tree": "60cdccf08e4a665a3657a15303a525b934f36093",
      "parents": [
        "79224cacfbdb30956428bbe915323233949b768d"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Sep 01 20:55:18 2020 +0000"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Sep 10 14:55:00 2020 -0700"
      },
      "message": "aaudio: fix crash on disconnect for shared streams\n\nThis fixes a regression caused by ag/12396646\nThat CL changed the way that AudioStreams are managed\nusing android::sp\u003c\u003e. Unfortunately it caused\na crash in audioserver when shared streams were disconnected.\nThe root cause was calling disconnectedRegisteredStreams()\nfrom a data processing thread, which resulted\nin deleting the object while the thread was using it.\n\nThe call was unnecessary so it was removed.\n\nBug: 161914201\nBug: 163165126\nBug: 164411271\nBug: 166877425\nTest: adb logcat *:F\nTest: Use OboeTester TEST DISCONNECT\nTest: See b/166877425 for more details\nChange-Id: I30fc7f00061a9caf5e3d9f7c8e257102c34f9d92\nMerged-In: I30fc7f00061a9caf5e3d9f7c8e257102c34f9d92\n"
    },
    {
      "commit": "79224cacfbdb30956428bbe915323233949b768d",
      "tree": "3ff5396e1b0f316f25a4af8e48c9465d91cbc2a9",
      "parents": [
        "4719048ce0e6f8656a417a2f2fe6fbb848ed2ba7"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Aug 12 14:29:10 2020 +0000"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Sep 10 14:54:30 2020 -0700"
      },
      "message": "aaudio: prevent onAudioDeviceUpdate past close\n\nTo prevent late device update callbacks, the AudioStream\nwas made into a RefBase AudioDeviceCallback.\nSo now we can use a smart pointer to delay deletion of the\nstream if any callbacks are in flight while the stream is closed.\n\nSo an AudioStream is now a RefBased object and can be used with\nandroid::sp. That required some changes to the way it is referenced\nin several places.\n\nMyPlayerBase was modified to use a weak pointer to the parent stream.\n\nUse delete[] for mDistributionBuffer\n\nBug: 161914201\nBug: 163165126\nBug: 164411271\nTest: see bug for repro of the crash\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Ic24aca3eaf5d1610504bb89c06001a37d0d4a1c3\nMerged-In: Ic24aca3eaf5d1610504bb89c06001a37d0d4a1c3\n"
    },
    {
      "commit": "4719048ce0e6f8656a417a2f2fe6fbb848ed2ba7",
      "tree": "8feaf2f9358a3993b5077647ddcd8952c71f7798",
      "parents": [
        "e1f1cb5827a6c99d41e05e090b3b382f3598a58e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Aug 12 14:29:10 2020 +0000"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Sep 10 14:52:58 2020 -0700"
      },
      "message": "aaudio: fix crash from callbacks during close\n\nMove some code from release_l() into a new close_l().\nAlso stop callbacks before freeing memory in the\nFixedBlockReader.\n\nThe AudioTrack and AudioRecord callbacks can occur\nup until their destructors are called. This can lead\nto race conditions if the AAudio stream is dismantled\nwhile the AudioTrack or AudioRecord is still alive.\nThe AudioRecord was being deleted but not the AudioTrack.\nThat caused some streams to fail if they were using\na FixedBlockReader, which is used when the app\ncalls AAudioStreamBuilder_setFramesPerDataCallback().\n\nThere was also a problem with a few functions like\nAAudioStream_getFramesPerBurst() or AAudioStream_getTimestamp(),\nwhich would crash if called after AAudioStream_release( for\nINPUT streams.\n\nBug: 161914201\nBug: 163165126\nTest: see bug for repro of the crash\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: If8f6f6f17ffe06eae98eb8b3930bca08c49a15f8\nMerged-In: If8f6f6f17ffe06eae98eb8b3930bca08c49a15f8\n(cherry picked from commit 320910fcf1e7d7729f37f95f591093191414e73f)\n"
    },
    {
      "commit": "2e40c302d6117ec6eb65f25832a71488367b4dfb",
      "tree": "ce2cff004a09076114faabf595b1a116bcb461ff",
      "parents": [
        "054de8d6440fd30238fa9330bcc038cda745b244",
        "924eccfd6f6d3aaed5db627a0bdcfcaaf9b09a18"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Fri Aug 28 08:38:54 2020 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Fri Aug 28 21:23:54 2020 -0700"
      },
      "message": "Merge Android R (rvc-dev-plus-aosp-without-vendor@6692709)\n\nBug: 166295507\nMerged-In: Ie94127c1e981cb18671d5137ba0d39355d1353da\nChange-Id: Ib22ad33bda8d561af537499b6d31ab6134eeae02\n"
    },
    {
      "commit": "39075258a92d969a6ea438cfe2ad298de01de7ad",
      "tree": "bac30dc7c62357c1678fd8e1de89a8d3c6858411",
      "parents": [
        "86b249c78a265e37a9516a50aee17919b4b22c14",
        "63347a718527003a3a3516f2eebe962f6fee860d"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jul 30 18:33:52 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Jul 30 18:33:52 2020 +0000"
      },
      "message": "Merge \"aaudio: Update language to comply with Android\u0027s inclusive language guidance\" am: cf7197e3ce am: 63347a7185\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1375100\n\nChange-Id: I0c7f3a971c70e894f739ed4b6bf7c2d5959bc16c\n"
    },
    {
      "commit": "18142aed005974bf6bee76ece8afaff7c89d0b50",
      "tree": "9e2b532577c0164b0cd6291e86d1a1cd0c9957b0",
      "parents": [
        "3fd4dee8960cd6bccbb21227d43dfef839d33875"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jul 28 12:44:37 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jul 30 09:39:06 2020 -0700"
      },
      "message": "aaudio: Update language to comply with Android\u0027s inclusive language guidance\n\nSee https://source.android.com/setup/contribute/respectful-code for reference\n\nBUG: 161896447\nTest: all changes are in comments, so just build\nChange-Id: I53a4a4c2ade03dcde940e6611f7e6b46d12ffe71\n\nChange-Id: I90ebaea4731c6ca95f312b2176792d50dea862ad\n"
    },
    {
      "commit": "8ab3420d891d79859a97980eea821ce6e61b9d37",
      "tree": "a8025d964c111e4b2c2504c38201261eecd786a8",
      "parents": [
        "933b484fa7563c7ad2e990c61ad0051bb648eee0",
        "5a126eaf40f04ea4871f537d4cef50c15b0686de"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 05 23:49:51 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Jun 05 23:49:51 2020 +0000"
      },
      "message": "Merge \"aaudio: fix race when disconnecting\" into rvc-dev am: 5a126eaf40\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/11761087\n\nChange-Id: I1874731b58a7183af8307db2cf72993f25cfb10d\n"
    },
    {
      "commit": "8e2255ad97be8c5665b6bc8973d37c241fb5814b",
      "tree": "1131a333ad55726c9783e420d3a57f35bca18ad9",
      "parents": [
        "6d5a5c10a5b9389cd84b5a10d5814e65eeb004aa"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Jun 05 09:58:26 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Jun 05 13:08:09 2020 -0700"
      },
      "message": "aaudio: fix race when disconnecting\n\nWhen disconnecting more than one stream,\nand the apps reopen the streams,\nthere was a race condition that resulted\nin the first app getting a Legacy stream instead of an\nMMAP stream. That is because it was disconnected before the\nother streams had stopped.\n\nNow we run the stop loop before the disconnect loop\nto prevent the race.\n\nBug: 158316262\nTest: test_steal_exclusive -r0 -d0 -s\nChange-Id: Ib8efde9c2f94f6ab1ba3475d88b45d373cc8d3bb\n"
    },
    {
      "commit": "098f64da0f0c9e3c0be45eb51378a57321041633",
      "tree": "0c1c87a837223fbcc2a67d29db01aaff33085c60",
      "parents": [
        "1de621d426a18651ab90fc1703e928a9874b1f4c",
        "4e48c2477d084919f13ee191a6c36713d83063f3"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 03 01:05:51 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Jun 03 01:05:51 2020 +0000"
      },
      "message": "Merge \"aaudio: disable exclusive mode after steal\" into rvc-dev am: 4e48c2477d\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/11665503\n\nChange-Id: Id7c97dae3ac6c5b1abea55dfede6a3f9e8c7f6ed\n"
    },
    {
      "commit": "836f9df5638d4edc475a5a9a69f385ed83831da0",
      "tree": "f23d43481b747647e20936462c435149aabba323",
      "parents": [
        "d40bc7615ff9bb6aac308083c51980437a9c6a21"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri May 29 13:20:28 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Jun 01 15:24:44 2020 -0700"
      },
      "message": "aaudio: disable exclusive mode after steal\n\nPrevent a process that had its exclusive stream stolen\nfrom obtaining another exclusive stream.\nThis can prevent a collision between two processes after\nthey both try to open EXCLUSIVE streams after\na DISCONNECT event.\n\nBug: 157777324\nTest: adb shell test_steal_exclusive -r0 -d100\nChange-Id: I0fe12be95a8fbd05ed03f10796e1ca716025c885\n"
    },
    {
      "commit": "28ca11af8acbe777d2479ca6fc70c1a88f8bdb19",
      "tree": "f54ba1c086ec288224d787907f12c4975a987282",
      "parents": [
        "aed64eda19f76e9d5b68688c843ef6bc689490f4",
        "3bd241dcd726b2c4119a0b6bb1246bcdc513a912"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 19 03:46:34 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue May 19 03:46:34 2020 +0000"
      },
      "message": "Merge \"aaudio: lock transport methods\" into rvc-dev am: 3bd241dcd7\n\nChange-Id: Ifdf6cdb181af51382c9d2df36c73d8db2e0bd8a9\n"
    },
    {
      "commit": "3bd241dcd726b2c4119a0b6bb1246bcdc513a912",
      "tree": "54fe12c143c4045bc1fb35a52d62fe8858b65862",
      "parents": [
        "db0b34440ac627f7d153ec7849d7590ab199d334",
        "7ebbc11051f1af7a520e9ae7e582125c63e92f95"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 19 03:28:54 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 19 03:28:54 2020 +0000"
      },
      "message": "Merge \"aaudio: lock transport methods\" into rvc-dev"
    },
    {
      "commit": "7ebbc11051f1af7a520e9ae7e582125c63e92f95",
      "tree": "7605285baef0ae3c9e08a2a887af0fa4b4739628",
      "parents": [
        "05be7e510992ebf41919c84a26b38717a7f3211f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed May 13 15:55:17 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon May 18 16:23:28 2020 -0700"
      },
      "message": "aaudio: lock transport methods\n\nThe start/pause/stop/flush/close and other binder methods\nneed to be thread safe. They do not need to run\nin parallel. So a lock was added for each.\n\nWhere virtual methods are needed, the locked method calls\na corresponding _l submethod, eg. stop() calls stop_l().\n\nThe close logic was also simplified because the \"pending\"\ntechnique is not needed now that we have the locks.\nIt was only needed because a close could have occured\nwhile in the middle of another method.\n\nThis CL was merged with changes in RVC-DEV.\n\nBug: 153358911\nTest: adb logcat *:F\nTest: in another window:  test_binder_attack\nTest: There should be no fatal error in the logcat.\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: I5920cf78af4501856756c5c2fc8e77758232508a\n"
    },
    {
      "commit": "e5f6cd42a9f1e86a318e429fb9fdd956bcbcefe3",
      "tree": "7c8678fb84dcec99aa1408dc1cfc66b0c652e6bc",
      "parents": [
        "fc2a78ee9796a7ecb8436e7cbe884a1d90314a45",
        "09869a1c369e0edc421a379c2ffb3cb3afbbe392"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 13 22:32:49 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed May 13 22:32:49 2020 +0000"
      },
      "message": "Merge \"MediaMetrics: Prepare statistics for protos\" into rvc-dev am: 09869a1c36\n\nChange-Id: Ia61b527808d26235709725188cf1639c1cbe69a9\n"
    },
    {
      "commit": "ea84038803580b4c35ce4cb60918c0c384127417",
      "tree": "d8c91402af2f630e4f1c36f7798d161767d01301",
      "parents": [
        "38e65911a65a51edf2efd5ca63c4e00daac24852"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 05 21:50:17 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 13 11:15:49 2020 -0700"
      },
      "message": "MediaMetrics: Prepare statistics for protos\n\n1) Add AudioRecord to Analytics trigger.\n2) Log RecordThread statistics.\n3) Rename DURATIONNS to EXECUTETIMENS to avoid confusion.\n4) Use streamType from server not client.\n5) Split MMAP types to MMAP_PLAYBACK and MMAP_CAPTURE.\n6) Use string flags for AudioTrack and AudioRecord.\n7) Compute underrun frames for MixerThread.\n8) Log BT connection state.\n\nTest: adb shell dumpsys media.metrics\nTest: atest mediametrics_tests\nTest: adb shell dumpsys stats --metadata\nBug: 149850236\nChange-Id: Iacf3f117c00ec9f377e62862080252aef9dc084f\n"
    },
    {
      "commit": "d8d340537fa20c68cc0e615310f87fb7bb7678f0",
      "tree": "ef6dfbecd7ff476c5a6242c3bcb6516f3e1115ae",
      "parents": [
        "68f8d17c180bfb538f43635241bf6b66015ff504",
        "e3469d1d6d7a8a894064e925b0770765bbe4bea0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri May 08 00:55:04 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri May 08 00:55:04 2020 +0000"
      },
      "message": "Merge \"aaudio: process callbacks asynchronously\" into rvc-dev am: e3469d1d6d\n\nChange-Id: I3037510a5c7d268645dbe9dbab9f4e9352e476b1\n"
    },
    {
      "commit": "a77869d964afe3915ae6dfcb1b832a7ccb1fe308",
      "tree": "37a516c20dbd10c7575cbe1ce90cb352dd6b49a5",
      "parents": [
        "686dac0cdb04834b889b1264f7a41c5d6ce25d2a"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu May 07 10:39:47 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu May 07 14:33:39 2020 -0700"
      },
      "message": "aaudio: process callbacks asynchronously\n\nSpawn a thread to handle the disconnects for onRoutingChanged()\nand onTearDown(). This is to prevent deadlocks when calling back into\nAudioFlinger.\n\nBug: 155819038\nTest: See bug for repro steps with OboeTester\nTest: Also run TEST DISCONNECT in OboeTester. It was failing.\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: I83212fea140d3b6beca9aa737606a77a7c97b007\n"
    },
    {
      "commit": "cc2ebfc95d0925ad06cd368be6d7de557d1eaef5",
      "tree": "8ee765f8c2162282109abb22be7a1cb8df19caf2",
      "parents": [
        "303147efc0d6bd3f29e1da40720ddc175a78d388",
        "686dac0cdb04834b889b1264f7a41c5d6ce25d2a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 05 11:19:47 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue May 05 11:19:47 2020 +0000"
      },
      "message": "Merge changes I7f8339d8,Idff0c394 into rvc-dev am: 686dac0cdb\n\nChange-Id: If597e6b6a35e038c90090614dbdda35b0b5ce854\n"
    },
    {
      "commit": "6e463ce6fc456a3c185b80086d3605e2189eccd6",
      "tree": "5c897c19218b6ab714ad781076018079ef2b0240",
      "parents": [
        "4756a9f78b39c7aad0bd79c18b97bf8ed00b4bc6"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 13 10:20:20 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 05 02:54:41 2020 -0700"
      },
      "message": "aaudio: steal exclusive streams\n\nAn app (B) that asks for an exclusive stream can steal\nan exclusive stream from an earlier app (A).\nApp B will be given the MMAP resource as a SHARED stream.\nThe stream for app A will be disconnected and released\nby the service.\nIf app A reopens a stream then it will get a SHARED\nstream.\n\nThe order of the opening of the streams is controlled by using a\nrecursive_mutex in AAudioService::openStream().\n\nBug: 129846760\nTest: media/libaaudio/tests/test_steal_exclusive.cpp\nTest: also\nTest: Launch AudioTroubleMaker. It should say \"EXCLUSIVE\".\nTest: Press Home button.\nTest: Siren sound from AudioTroubleMaker should continue.\nTest: Launch OboeTester\nTest: TEST OUTPUT, then Open, Start\nTest: You should get an MMAP SHARED stream on Pixel.\nTest: Go back to AudioTroubleMaker. It should say \"SHARED\".\nChange-Id: I7f8339d8ed62546520a9b46ed398418b41ca2832\n"
    },
    {
      "commit": "76d7cc4578423dd14e4ccfd15cea1691108b1b37",
      "tree": "77e98ccb24caf0a5fb3693b8c538b9c33bf14717",
      "parents": [
        "f76edb9df96d63a33438e294ea0ece89e818ab9e",
        "5559ae7c9dabaf8b0bbfaf7553fef050f008f425"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Apr 28 15:29:31 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Apr 28 15:29:31 2020 +0000"
      },
      "message": "Merge \"MediaMetrics: Use AllowUid property for services to control client access\" into rvc-dev am: 5559ae7c9d\n\nChange-Id: I2d0505ebb6ba113cd4f53467943b498aca117c62\n"
    },
    {
      "commit": "d203eb6b3cd99af3c9616df2bd0d982796b0f918",
      "tree": "0f2cfa6c24a30d32913de484c6dd52514b37a9a3",
      "parents": [
        "2578a95a57dd9796b55095dc22b8171dd5da73c3"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 27 09:12:46 2020 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Apr 27 23:42:41 2020 -0700"
      },
      "message": "MediaMetrics: Use AllowUid property for services to control client access\n\nRemove implicit first client uid access.\n\nTest: adb shell dumpsys media.metrics\nBug: 149850236\nChange-Id: I4f953db4688bf5f174c3e1611f492f31d2926e96\n"
    },
    {
      "commit": "d74b9c0efbc0a7cce9c7aaa0204414612a64d8d9",
      "tree": "57e18d652a0daac9904248d4eb13fe0b18eeac39",
      "parents": [
        "3de3935a515ecefea19f5dbd251191fc63c20795",
        "cc40c5fa11767eb9a87cf6e1a5e8a99d6cec2847"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Apr 24 14:41:54 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Apr 24 14:41:54 2020 +0000"
      },
      "message": "Merge \"aaudio: add MediaMetrics for MMAP streams\" into rvc-dev am: cc40c5fa11\n\nChange-Id: I95149514982f70f1eb2cef58978a46ecf3bbb5dc\n"
    },
    {
      "commit": "a9876703e89afa6db42913d48e2360b7dad98725",
      "tree": "4e51b01b2fa4be83868318a1619e3b7c2f42f36e",
      "parents": [
        "6e89a0704605f4750f87a3243495b175c67e6fbb"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 20 18:16:15 2020 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 23 18:00:10 2020 -0700"
      },
      "message": "aaudio: add MediaMetrics for MMAP streams\n\nLog events from service.\nLog start, stop, disconnect and other events.\nLog underruns and bufferSize.\n\nBug: 154543374\nTest: adb shell dumpsys media.metrics --clear\nTest: run an app that uses MMAP, like OboeTester\nTest: adb shell dumpsys media.metrics\nTest: Expect to see lots of \"audio.stream\" events.\nChange-Id: I690e5226b695d53d038d644f4438c759e08f9fbb\n"
    },
    {
      "commit": "887b1a3719b31f605147c5ee580f42f769d3e9ee",
      "tree": "f76572a43fc4ebf5c967e5537cb8c45f7ded08b8",
      "parents": [
        "da4faa6c2e50b6ab28dfd9a40289313239319d16",
        "42c1c38d7f0340f448b38dcf228b2e7753a2bcd2"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Apr 14 02:10:00 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Apr 14 02:10:00 2020 +0000"
      },
      "message": "Merge \"Include what you use: \u003cunistd.h\u003e\" am: 8a71223d5a am: 42c1c38d7f\n\nChange-Id: I7487c7d3e566736733b6510072f6a32c2c4534ac\n"
    },
    {
      "commit": "7ae782545020eec1bfb9eb74e690ae26e2cca7fa",
      "tree": "b99f5db2f4d75aeddb175896c3fa67070b21154e",
      "parents": [
        "2ac41184ae00b2e99e55d995944288f33b2fce49"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Apr 13 15:20:50 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Apr 13 15:20:50 2020 -0700"
      },
      "message": "Include what you use: \u003cunistd.h\u003e\n\nThis was transitively included, but no longer is, so it must be\nexplicitly included.\n\nExempt-From-Owner-Approval: Janitorial\nTest: build\nChange-Id: I78268a4867697bf797d40b5fead3745fdd0cc807\n"
    },
    {
      "commit": "d1f1cb68f567363a0b1e4cd4db6286afc6c8a1e2",
      "tree": "3b32985218612d05bf95fed08c18025d1735b2d4",
      "parents": [
        "06675ff30f63323905ff18c3c4e0d34a9fee4c60"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Mar 24 11:57:57 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Mar 27 11:33:09 2020 -0700"
      },
      "message": "Add audio attributes info when starting aaudio tracks on MMAP mix.\n\nIn aaudio, when adding tracks to mixed stream, it is needed to update\naudio attributes to HAL whenever the tracks are added or removed.\nCurrently, only the audio attributes used to open the stream will be\nsent to the HAL. In that case, adding audio attributes of the clients\nwhen starting the stream can help solve the problem. In audio flinger,\nthe client\u0027s audio attributes will be used to create MmapTrack.\n\nTest: play multiple aaudio tracks, add log\nBug: 77279923\nChange-Id: Ic1c536049e194a2bb7513425ee4828d52769d27f\n"
    },
    {
      "commit": "8b4e05ecee60bf08c9121c61d69526e076495766",
      "tree": "9879d2a21175f35e47545c03ec1a2a2ba46de933",
      "parents": [
        "0bc6f60e1f036380bd48d022631e6561b90f210c"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Dec 17 12:12:09 2019 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jan 22 13:31:58 2020 -0800"
      },
      "message": "aaudio: add AAudioStream_release()\n\nSplit close into close and release phases.\nRelease() will release hardware and service resources.\nClose() will delete the stream object.\nThis allows us to defer the deletion and avoid race conditions.\n\nThe CLOSING state is used to indicate that a stream has been released.\n\nAdded some test cases to test_various.cpp.\nA lone call to close() will automatically call release() so we should\nhave good code coverage for testing.\n\nBug: 136288001\nTest: adb shell test_various\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Ia648838f30c521ba101f55259dbcd4594c1263cd\n"
    },
    {
      "commit": "a51151aacfc820122b45a875a0b6fe0dba60b756",
      "tree": "5250165a3a49942645caf75ade6634fa5c825e22",
      "parents": [
        "bd9f1ed08bb948af54600eb60f13fd6e05068375"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jan 07 13:37:47 2020 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Jan 08 11:21:31 2020 -0800"
      },
      "message": "Link with actual headers instead of symlinks\n\nand remove the symlinks.\n\nBug: 143245419\nTest: build\nChange-Id: I70e450d9db0f65048f86391c4d3f341659cd213f\n"
    },
    {
      "commit": "f7a18b2fe92a2f4b428b32794ef1d3a7d9db6949",
      "tree": "05888d1c6569ae104c0d97b24f7e903ab1f8272d",
      "parents": [
        "f6cd76eef99409ea943e995e3c8fae92a787fb36"
      ],
      "author": {
        "name": "Sasha Smundak",
        "email": "asmundak@google.com",
        "time": "Fri Dec 06 12:39:32 2019 -0800"
      },
      "committer": {
        "name": "Sasha Smundak",
        "email": "asmundak@google.com",
        "time": "Tue Dec 10 10:15:17 2019 -0800"
      },
      "message": "Remove setting LOCAL_MULTILIB from AUDIOSERVER_MULTILIB\n\nBug: 121208203\nTest: treehugger\nChange-Id: Ia8a640c4e59cd33281e88ab379a119e1d120f096\nMerged-In: I263b6b302f7220e4b712924d2df2fd2548af03b1\n"
    },
    {
      "commit": "630f74baaf5280a78350fa1ecb7283768a5c4bf9",
      "tree": "e20620e03a8ef5db88b55dfe70edfaa926ef6c43",
      "parents": [
        "643a5692fb1d1b7b0e2c90faa217816f7b524c51",
        "d17c85023ac2058233121b8a94603687c855c997"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 06 19:21:53 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 06 19:21:53 2019 +0000"
      },
      "message": "Merge \"Add explicit private audio recording request\""
    },
    {
      "commit": "56307881608d21b504437e51cea0806043f95a4b",
      "tree": "c0728d3ab5172b3af00bc0d1410b52cf559d4215",
      "parents": [
        "bbf2be940fdc28029d3fe76826271063cff9e675",
        "346f2cf971221d73ca84af752c4e6ec9ca247d2c"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Dec 06 00:15:34 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Dec 06 00:15:34 2019 -0800"
      },
      "message": "Merge \"oboeservice: hold onto linked binder\" am: 6a9d20eebf am: 51c29bd32d\nam: 346f2cf971\n\nChange-Id: Ia017c274871f38209fd8edb67153f852026c71ae\n"
    },
    {
      "commit": "d17c85023ac2058233121b8a94603687c855c997",
      "tree": "39fc63d6f1037eafb71dc8046aefedfadfee9b53",
      "parents": [
        "d203cb92c9c9628b3bead45ec08f826544c1d649"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 24 15:58:35 2019 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 04 17:58:34 2019 -0800"
      },
      "message": "Add explicit private audio recording request\n\nAdd the possibility for apps to indicate that their\ncapture use case is private and that a privileged Assistant\nshould not be able to capture concurrently.\nThis allows to override the default behavior tied to the audio\nsource (e.g VOICE_COMMUNICATION is private by default but\nUNPROCESSED is not).\n\n- Add AAudio API to set and get privacy sensitive mode on input stream\n- Add MediaRecorder API to set and get privacy sensitive mode\n- Modify AudioSource constructor to accept audio attributes instead of an\naudio source to specify the use case.\n- Modify audio policy concurrent capture logic to use audio attributes\nflag instead of audio source to decide of a capture client has\nrequested privacy mode or not.\n\nBug: 137850106\nTest: CTS AudioRecordTest and MediaRecorderTest, manual audio smoke tests\n\nChange-Id: I250ea5da4c1da809ceac0da22ae9bee15b937001\n"
    },
    {
      "commit": "37a6163f3f7e125f617ffed1d02b27dcd85b9b7f",
      "tree": "7f089e9b6ff73d7ea3fed249b5e70fccaca337e5",
      "parents": [
        "b2872d478fbb66eddd59d8a35d81796850927153"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 04 14:06:50 2019 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 04 23:29:21 2019 +0000"
      },
      "message": "oboeservice: hold onto linked binder\n\nBefore, in Android 10, this would have been a small leak because\nunlinkToDeath is not called, but now, objects are automatically\nunlinked. However, this presents a problem since you must hold onto\na binder in order to linkToDeath. This now holds onto the binder\nand is relying on the automatic-unlinkToDeath behavior.\n\nFixes: 145675653\nTest: atest CtsNativeMediaAAudioTestCases\narm64-v8a CtsNativeMediaAAudioTestCases: Passed: 122, Failed: 0, Ignored: 0, Assumption Failed: 0\nTest: after using app and killing which uses AAudio MMAP stream,\ndumpsys output for media.aaudio is cleaned up:\n\n------------ AAudio Service ------------\nStream Handles:\nAAudioClientTracker:\nAAudioEndpointManager:\nExclusive MMAP Endpoints: 0\n ExclusiveSearchCount:  3\n ExclusiveFoundCount:   0\n ExclusiveOpenCount:    1\n ExclusiveCloseCount:   1\n\nShared Endpoints: 0\n SharedSearchCount:     1\n SharedFoundCount:      0\n SharedOpenCount:       0\n SharedCloseCount:      0\n\nChange-Id: I2ef141320dc3ef0135fb7ef002d85377d06a75c2\n"
    },
    {
      "commit": "ef34be5426e96fa2fecc551e1fe196fbb862b220",
      "tree": "3335f4ce50a8307b0684a0c5a15fcf3b4ec84b52",
      "parents": [
        "b362012ad43022a0686cc2ca7fe2eb64d377a202"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Sep 26 13:45:25 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Oct 04 16:56:14 2019 -0700"
      },
      "message": "aaudio: add histogram to clock model\n\nMeasure distribution of MMAP timestamp lateness.\nThis is used to discover the actual DSP timing behavior.\nTurn histogram log on or off using a property.\n\nTest: adb root\nTest: adb shell setprop aaudio.log_mask 1\nTest: run an AAudio MMAP program\nTest: adb logcat | grep ClockModel\nChange-Id: I910831d1feee43c59d1af2ac3135a910fef36fb2\n"
    },
    {
      "commit": "42e1130e8be8b2527a8d17b1748592ae004e85c0",
      "tree": "61380db6ef5d30460357c8af0b962bed4c5d071a",
      "parents": [
        "c3af5ba966b7aaddfd96bac149f04a4f43c49f9c",
        "0db4d66d132006ab72f41ad76c7358e5cbae0a32"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Tue Jul 23 11:11:10 2019 +0200"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jul 23 10:48:45 2019 +0000"
      },
      "message": "resolve merge conflicts of 0db4d66d132006ab72f41ad76c7358e5cbae0a32 to stage-aosp-master\n\nTest: I did not test this\nMerged-In: If93118ed2c266faf2964abf21e17b0b13df493d2\nChange-Id: Iaba9829407bd2b625e91ac7a4c8bc8941fa7d569\n"
    },
    {
      "commit": "d81a84a886e13c61a613b35e4a998ad8e61a0d8f",
      "tree": "e1ca28f807ed6d384e3526de1f0f2049548f17b6",
      "parents": [
        "10b5ef5d180bc5b0a2116f112b87153b16c3de00"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Jul 17 13:55:16 2019 +0200"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Thu Jul 18 15:25:14 2019 +0200"
      },
      "message": "Split libaaudio.so to internal and NDK part\n\nThis change moves almost everything from libaadio.so to\nseparate libaaudio_internal.so library. This is done to\navoid exporting symbols which apps are not allowed to use\nbut have them available for platform libraries by exporting\nthem from libaaudio_internal.so\n\nBug: http://b/69603741\nTest: make\nMerged-In: If93118ed2c266faf2964abf21e17b0b13df493d2\nChange-Id: If93118ed2c266faf2964abf21e17b0b13df493d2\n"
    },
    {
      "commit": "2d2f17cc1e15b7a4a21c94d6c6d125eabf740fc9",
      "tree": "c1023826407ccf2d1f88fa1e8d69ee8cae579136",
      "parents": [
        "ed84e713b3b84aa189459c2412e65a4be257bc89"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Jul 17 13:55:16 2019 +0200"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Thu Jul 18 14:09:16 2019 +0200"
      },
      "message": "Split libaaudio.so to internal and NDK part\n\nThis change moves almost everything from libaadio.so to\nseparate libaaudio_internal.so library. This is done to\navoid exporting symbols which apps are not allowed to use\nbut have them available for platform libraries by exporting\nthem from libaaudio_internal.so\n\nBug: http://b/69603741\nTest: make\nChange-Id: If93118ed2c266faf2964abf21e17b0b13df493d2\n"
    },
    {
      "commit": "6bddd7d48f943b81c1789325478ea4e9f2b64ed9",
      "tree": "d256c13568c285104e786114c09f7004c131a151",
      "parents": [
        "17f60dd7c5b29f6d2d0f798fd01fb8ad61c3a1ef",
        "8c9e502267bcf9e61f9901e0c5820a3066986b9b"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed May 29 10:44:40 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 29 10:44:40 2019 -0700"
      },
      "message": "Merge \"Remove reference to non-existant directory\" am: d96e627971\nam: 8c9e502267\n\nChange-Id: I5dcfc42ce9160a878b4fce047ce2f681b27ea012\n"
    },
    {
      "commit": "30a1c51220085b32cfb3c413ff5b8831593ebac9",
      "tree": "185d3f6295b2310a054d3d5fff37da101082f310",
      "parents": [
        "60c33d85d08dae0a1fc33829ad0479950912151a"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue May 28 13:54:07 2019 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue May 28 13:54:07 2019 -0700"
      },
      "message": "Remove reference to non-existant directory\n\nThis was fixed when converting to Android.bp in internal master, so\nthat\u0027s the Merged-In reference.\n\nTest: treehugger\nChange-Id: I6a503ac7f3c283b7ef6a657c100901469447a22b\nMerged-In: I7061e99da18f5f7fad00527f01bf97ae6cebea2f\n"
    },
    {
      "commit": "a9e3a3cd8a6a70a5f8c18f9d11638f98404a2094",
      "tree": "7a6429dfd3e52d356b4a7d5cecc54b06c2af340c",
      "parents": [
        "19cd95e5038688a281bfb363a566d073bafb4a0c",
        "1209b4817ccc39b355fa90c8c741d83816d3fb97"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 07 17:00:25 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 07 17:00:25 2019 +0000"
      },
      "message": "Merge \"Convert aaudioservice (oboeservice) to Android.bp\""
    },
    {
      "commit": "0b22b6ba9bdc8e4322f8651d060e9319bc24af1e",
      "tree": "96ecedcfe01f570c6abaad0cf458eb8342a358f7",
      "parents": [
        "9a3ce7c3401cf161c5e2a6ecbe4c4ba3a4aa149e",
        "1b835f6a2f4b0945647a56c156f548407baf052d"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu May 02 20:22:06 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 02 20:22:06 2019 -0700"
      },
      "message": "aaudio: protect against null client am: ef7eaaf8d8\nam: 1b835f6a2f\n\nChange-Id: I09ad84bbdf85b3a8c57b8379a4d36f8c48707239\n"
    },
    {
      "commit": "ef7eaaf8d873e9d832673fd0a8e07371fa47a0a0",
      "tree": "16af72980d4c2e09fb45be30e44a52eb4575236a",
      "parents": [
        "2ddd17ca5c49fe02c459b7026d4c271bf76c4e3c"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed May 01 11:26:35 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu May 02 12:51:47 2019 -0700"
      },
      "message": "aaudio: protect against null client\n\nAAudioService would fail if a null client was passed.\nTwo null checks were added. One where we know the null\nclient first appears. And one where the client is first used\nin case other calls are passing null.\n\nBug: 116230453\nTest: Bug has a POC apk that triggers the bug.\nTest: Look for messages like:\nTest:      AAudio  : BnAAudioService::onTransact() client is NULL!\nChange-Id: Id9c4fc154226ab40df97335da8bc9361cfc99a73\n"
    },
    {
      "commit": "1209b4817ccc39b355fa90c8c741d83816d3fb97",
      "tree": "c9120fe362737b48f298c185e7b19a7ed8c32a78",
      "parents": [
        "1c2813bc5c609f1c3b59c92d086523a72e7b6e1e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Apr 26 16:20:57 2019 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Apr 26 16:20:57 2019 -0700"
      },
      "message": "Convert aaudioservice (oboeservice) to Android.bp\n\nRemoved additional includes previously added by LOCAL_C_INCLUDES,\nnone of them are actually needed.\n\nBug: 121208203\nTest: make\nChange-Id: I7061e99da18f5f7fad00527f01bf97ae6cebea2f\n"
    },
    {
      "commit": "f15051bd11214aa0dd4c1f911321386121d5cefb",
      "tree": "e6e407817e0047f6d2b14671eb77f5a97fc36381",
      "parents": [
        "657b64c7b9de71a26e61746ff444545db99baa22",
        "a10b3d52cbd1177050a00ae108d9c110e41bad88"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 23 20:27:14 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Apr 23 20:27:14 2019 -0700"
      },
      "message": "Merge \"aaudio: use actual DSP burst size in timing model\" into qt-dev am: bde241b71f\nam: a10b3d52cb\n\nChange-Id: I5fa54fd6be7e9d42e72cfd2a8511bd5e1f751bb4\n"
    },
    {
      "commit": "3c4e6b503848623a0ff9bb1bee78e5b0d7c248ea",
      "tree": "f9e53f6f37f77695bbc4d4576854d2cf3bb55935",
      "parents": [
        "9730f4d7d27c49bfdfa69f3b7555b5a641a8499d"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jan 22 15:53:36 2019 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 23 17:16:29 2019 +0000"
      },
      "message": "aaudio: use actual DSP burst size in timing model\n\nThis will more accurately track the read or write\nposition of the DSP.\n\nThe client sometimes aggregates multiple hardware bursts\nto avoid waking up too often. This can make it look like the DSP has\nprocessed a larger amount of memory than it really has.\nWith this change, the timing model will advance in sync with the hardware.\n\nBug: 117834966\nBug: 130911274\nTest: see bug for repro steps\nChange-Id: Id22f1f313e02f0514665ee5ac144cab4684e3bc1\n"
    },
    {
      "commit": "4e9661c889f728339f37cc2c16bdd9af4402dcff",
      "tree": "3601e838518c71859afff773997beb925ac41a35",
      "parents": [
        "df9167614fd36456c895881cd8f074e18bd7b519",
        "2ebf6629605a0d44cb83f3dfbd0130132a686cda"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 18 17:57:31 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 18 17:57:31 2019 +0000"
      },
      "message": "Merge \"AAudio: bump priority of AAudio Mixer to match FastMixer\""
    },
    {
      "commit": "2ebf6629605a0d44cb83f3dfbd0130132a686cda",
      "tree": "2190b4af2d71c552118c87c7f3c3861be8f09457",
      "parents": [
        "8946fa33044a8b216f85d962b49b52fe36642c0b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 17 11:10:25 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Apr 18 09:04:30 2019 -0700"
      },
      "message": "AAudio: bump priority of AAudio Mixer to match FastMixer\n\nService RT thread should run at a slightly higher priority because\nit generally does less work and is more critical.\n\nBug: 71817389\nTest: Run an AAudio stream in SHARED mode.\nTest:   adb shell ps -e -T -o uid,pid,tid,ppid,pri,ni,cmd| grep AAudio\nTest: See bug for more test instructions.\nChange-Id: I762af6ac1a9883d47b4c42bfe9f8455416251a12\n"
    },
    {
      "commit": "29ccc29d482b6e4a2c46c2b8e731d44938888e32",
      "tree": "84034c7928d373aec61f9076d26065197a541693",
      "parents": [
        "2cb1a8ccbd402d74a06ee34721f5dd787ecb396f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 15 08:58:08 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 17 18:22:37 2019 +0000"
      },
      "message": "aaudio: reduce error logging, improve security\n\nReduce log spam and error logging as part of the Green Log effort.\nReplace logging of addresses with integer IDs.\n\nBug: 36785118\nBug: 122073229\nBug: 130569151\nTest: Open an AAudio stream at 44100 and look at logcat.\nTest:   adb shell write_sine_callback -pl -r44100\nTest:   adb logcat | grep -i aaudio | grep \" E \"\nTest: Should see no \"E\" logs from AAudio.\nTest: Should see no addresses from AAudio.\nChange-Id: I1d4e0bc349095f818fad52603d2bb8e7317d3681\nMerged-In: I1d4e0bc349095f818fad52603d2bb8e7317d3681\n(cherry picked from commit 7ba46558fbd28b555ba751837cc9094a7c785f75)\n"
    },
    {
      "commit": "7ba46558fbd28b555ba751837cc9094a7c785f75",
      "tree": "b71f408fcd6398781692ea48ff4e0be6d066dba0",
      "parents": [
        "8946fa33044a8b216f85d962b49b52fe36642c0b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 15 08:58:08 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 16 15:59:36 2019 -0700"
      },
      "message": "aaudio: reduce error logging, improve security\n\nReduce log spam and error logging as part of the Green Log effort.\nReplace logging of addresses with integer IDs.\n\nBug: 36785118\nBug: 122073229\nBug: 130569151\nTest: Open an AAudio stream at 44100 and look at logcat.\nTest:   adb shell write_sine_callback -pl -r44100\nTest:   adb logcat | grep -i aaudio | grep \" E \"\nTest: Should see no \"E\" logs from AAudio.\nTest: Should see no addresses from AAudio.\nChange-Id: I1d4e0bc349095f818fad52603d2bb8e7317d3681\n"
    },
    {
      "commit": "f878a8dc99922d0af080bb7d5f61b00e62d00e65",
      "tree": "0edaab0445b841d11fe2c6a22551b6d243bdf2f2",
      "parents": [
        "235684f2c8d9f37c8a8358739a2c2c50164816b0"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 29 17:23:00 2019 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 02 13:52:51 2019 -0700"
      },
      "message": "aaudio: only send timestamps if queue less than half full\n\nThis prevents the stream from getting suspended\nif not read or written fast enough.\n\nBug: 129140370\nTest: test_full_queue\nChange-Id: Icc5ddc72c99fb3c518736f2a50d6c6a0276ee196\n"
    },
    {
      "commit": "68646ba64107a19ac0d1af781ddd0b1edd2ed57a",
      "tree": "ac3003975099bef26b63302164468b766c6c9aad",
      "parents": [
        "36b17553b2c3aad4d8f600edd2e82f9a583ee05a"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Mar 20 13:26:49 2019 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Mar 22 17:21:33 2019 -0700"
      },
      "message": "Add aaudio APC opt-out\n\nThe opt-out was only present in the java API but not on the native ones.\n\nTest: atest test_attributes\nChange-Id: I1b84f1a428508e00de65e615b59405b9ee2ba009\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "a53ffa67b35a7e57efec57811e4f915d1caac1eb",
      "tree": "bb234b23e9f5a749e490a84d9fe161195af8ece7",
      "parents": [
        "9f81192d77a62564dc1e2c7dad1afe601784a7b9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Oct 10 16:21:37 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Sat Jan 19 15:43:55 2019 +0000"
      },
      "message": "aaudio: rename timestamp variables\n\nThere were several different timestamp variables with slightly\ndifferent meaning but with the same name.\nThat made it hard to debug the code.\n\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Iebf438676925c698377abe02c81f3d559829318a\n"
    },
    {
      "commit": "762365c3ee5f212d4995e002e1c53b221b587c92",
      "tree": "ec2322a17d6bb3c9c741f0b6915239c70fa161a0",
      "parents": [
        "d00c4607a5f7d25dfe925a20a1fc5fd7cfcee67a"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Dec 10 16:02:16 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Dec 13 17:39:26 2018 -0800"
      },
      "message": "aaudio: suspend a stream when its queue is full\n\nThis will prevent log spam when AAUDIO_CALLBACK_RESULT_STOP\nis returned from an audio callback.\n\nBug: 120845500\nTest: test_return_stop.cpp\nChange-Id: Icfe1541d6fa7b045285ac3dfbb75dfed5424d49b\n"
    },
    {
      "commit": "ef4b27d1d1123b452316f722a0eacc282d3fa94a",
      "tree": "a0acf7f1501bebe58caa1fb15fc118072b71a305",
      "parents": [
        "dd44e3c5f2d199589c040a422b3e343c796bd362",
        "538d53267bee085e08d489546bde620520b5b188"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Dec 13 16:23:10 2018 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Dec 13 16:23:10 2018 -0800"
      },
      "message": "Merge \"Fix performance-for-range-copy warnings\" am: 1ce37f1de3 am: c9584831bc\nam: 538d53267b\n\nChange-Id: I15dfaa7eb997c7caf497b488384477952513cef7\n"
    },
    {
      "commit": "3ef324d11cc4b6f84c147998fcf02c3a528fc2b8",
      "tree": "9c31c781e4172fb511af7552838c6a63b0f04ac9",
      "parents": [
        "14c577fac81b8fdcc75e4bf9243f16bd624ba58b"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 11:48:12 2018 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 11:48:12 2018 -0800"
      },
      "message": "Fix performance-for-range-copy warnings\n\nBug: 30413223\nTest: make with WITH_TIDY\u003d1 DEFAULT_GLOBAL_TIDY_CHECKS\u003d-*,performance*\nChange-Id: Ia63c695575d2602ff7e67db874d423b99f4daeef\n"
    },
    {
      "commit": "a3901e95412eacedb5682eb4cda9d63d3ef9f734",
      "tree": "cbd706244c858d132efa8dd103be42b855ce4452",
      "parents": [
        "1268b28c5c65691532d3ffb503a199c677c801b9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Oct 08 13:54:38 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Dec 03 15:46:11 2018 -0800"
      },
      "message": "aaudio: reduce log spam\n\nRemove logging that is redundant or no longer needed.\n\nTest: write_sine_callback -pl\nTest: write_sine_callback -pl -r44100\nChange-Id: I9004d32509757847764b9533c5cda743c6bd81a0\n"
    },
    {
      "commit": "e816ba20c5e8bb1e5bd8cb9ee150445ae45dd5be",
      "tree": "1a8afb00bfab3bae82f0ed35aa59255be2224851",
      "parents": [
        "60109b6bf5fe16002da767bb92b7c7cbfd6a1790",
        "8f02e2d647a53bc24cc5a2341e625fedbd58a33d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Wed Nov 28 22:34:23 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 28 22:34:23 2018 +0000"
      },
      "message": "Merge \"aaudio: fix race condition in timestamp path\""
    },
    {
      "commit": "156dc25a705c77d50f1c6a3e422a8ceea37ffa13",
      "tree": "1f36e907f21d61ee476a95e681e9d823b6460b15",
      "parents": [
        "e4bd729a5dc10abb9619e427e90a8fe1f493db42",
        "5758fc4785d6cf0f84cad0174379012292684e63"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue Oct 23 10:09:06 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Oct 23 10:09:06 2018 -0700"
      },
      "message": "Merge \"AAudio: Change dumpsys denial to Denial\" am: 4cc8f84d26 am: e4814339b2\nam: 5758fc4785\n\nChange-Id: I21b5ebf6d2d781f926b39e14213801dfdf332aba\n"
    },
    {
      "commit": "6357b5f0788d54058cb740c8be96eb87b3fd2dba",
      "tree": "f9937c171a8e022681dbb74d10401805dc42f699",
      "parents": [
        "efd99ec863f5a69f20dfacea3f6f4835962c5362"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 22 19:47:04 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Mon Oct 22 19:54:14 2018 -0700"
      },
      "message": "AAudio: Change dumpsys denial to Denial\n\nSee android.security.cts.ServicePermissionsTest#testDumpProtected\n\nTest: compile\nBug: 117909592\nChange-Id: Ie9972e37b8c589630e24373945ee8eaa4216b542\n"
    },
    {
      "commit": "8f02e2d647a53bc24cc5a2341e625fedbd58a33d",
      "tree": "d3d7603c7e8332f151ad95ad0ea5e060a18da687",
      "parents": [
        "efd99ec863f5a69f20dfacea3f6f4835962c5362"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 11 13:30:56 2018 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Oct 22 11:45:13 2018 -0700"
      },
      "message": "aaudio: fix race condition in timestamp path\n\nThere was a potential race between setting the first timestamp\nand reading the first timestamp that could cause the timestamp service\nthread to exit. This would cause the client to not get any timestamps.\nThen the timing model would not advance and the stream would stall.\nThis could result in read() or write() returning zero,\nor a TIMEOUT error.\n\nThis was rare except for some devices that had different\ntiming in the HAL.\n\nBug: 68271891\nBug: 117557847\nTest: adb shell write_sine_callback -pl -m2 -n2 -s2 -c2 -l100\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Ib0974a576aaa17ff8de40899e60ed56015027bd7\n"
    },
    {
      "commit": "56d34f252ad803873fa4798b4cd0f4c6d28d2670",
      "tree": "9967806e97967f0ce9f06cabcb97ca0d2eea75d5",
      "parents": [
        "4cc873cc1dcf9e69572c2e52b68af1aebea0ad98"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 11 13:30:56 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 11 13:38:12 2018 -0700"
      },
      "message": "aaudio: fix race condition in timestamp path\n\nThere was a potential race between setting the first timestamp\nand reading the first timestamp that could cause the timestamp service\nthread to exit. This would cause the client to not get any timestamps.\nThen the timing model would not advance and the stream would stall.\nThis could result in read() or write() returning zero,\nor a TIMEOUT error.\n\nThis was rare except for some devices that had different\ntiming in the HAL.\n\nBug: 68271891\nBug: 117557847\nTest: adb shell write_sine_callback -pl -m2 -n2 -s2 -c2 -l100\nTest: atest CtsNativeMediaAAudioTestCases\nChange-Id: Ib0974a576aaa17ff8de40899e60ed56015027bd7\n"
    },
    {
      "commit": "0127c1be07d63e046e136126cd465c3fa8977768",
      "tree": "4eb611ec5d010becd3583f93c640cc9468acb3b3",
      "parents": [
        "fdfae2898f0785f19de198ed00488e03bf52bca9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 29 13:48:06 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Sep 07 11:08:24 2018 -0700"
      },
      "message": "aaudio: use new flowgraph to simplify processing\n\nConstruct a flowgraph based on the source and destination\nformat and channelCount. This is groundwork for supporting 24-bit\nPCM formats.\n\nAlso cleaned up handling of device related format.\n\nThis CL removes more code than it adds.\n\nBug: 65067568\nTest: write_sine_callback.cpp -pl\nTest: write_sine_callback.cpp -pl -x\nTest: input_monitor -pl\nTest: input_monitor -pl -x\nChange-Id: Ia155bff0164912011d09b61b54f983ccf4490bd1\n"
    },
    {
      "commit": "15f97c996f29c780f52fe3504fabd08dbde066ba",
      "tree": "8998772c04ba3863be56cc2c1c98c56f688dbf48",
      "parents": [
        "0d97cec0533f47237b16b294fd92a827f2ebdc6f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Sep 04 14:06:27 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Sep 05 09:25:11 2018 -0700"
      },
      "message": "aaudio: set to SHARED when EXCLUSIVE fails\n\nSHARED streams and endpoints were being created with sharing mode\nset to EXCLUSIVE. This was confusing the close() code and caused a hang.\n\nNow we create a modified Request object with the sharing mode set\ncorrectly.\n\nBug: 112709847\nTest: Hack AAudioServiceEndpointMMAP so isBufferShareable is false.\nTest: \u0027adb shell write_sine_callback -pl -x -s2\u0027 should not hang.\nChange-Id: I7a5c8260beaffdd706f34d35ef00a61b072adb1d\n"
    },
    {
      "commit": "882c520fd82ef5ce1420bb3eb6fc4bcbb205cb87",
      "tree": "ab17c80d971269c1f8e16b6b8011d37863b0a8e6",
      "parents": [
        "a11eb695cac183c629cab536d101e6667343992b"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Apr 23 10:32:45 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Aug 23 11:59:56 2018 -0700"
      },
      "message": "aaudio: cleanup FIFO\n\nRemove unused methods and fields.\nBetter code format and alignment.\nUse unique_ptr for mFifo.\nRemove getFifoController() method that exposed pointer.\nUpdates tests and calling code as needed.\n\nTest: test_atomic_fifo.cpp\nChange-Id: I1ea66beaadeb74083307835858b757e4753affda\n"
    },
    {
      "commit": "0b21bdd6bcc8d3177c171225ade60315750c2e7e",
      "tree": "86a2cc162f0a17e33520bd1db40143d58935af70",
      "parents": [
        "b9e732b490d1245bf562b4b145cfbb5237864fd7"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Jul 12 19:37:41 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Fri Aug 17 09:39:45 2018 -0700"
      },
      "message": "Aaudio: Implement app shareable flag instead of -size hack\n\nTest: adb shell data/nativetest64/write_sine/write_sine -pl -m3 -x\nBug: 38118159\nChange-Id: I349e10a00a5466f54e084f4745b1ed4776378c81\nMerged-In: I349e10a00a5466f54e084f4745b1ed4776378c81\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "734334fd0045bf7897a6d749c00204a784766a7e",
      "tree": "46178737bf3a89fd1623ebc1d5dddaad8f2e6cb5",
      "parents": [
        "f344afa981e537b5f354352284272a8a51cf6759"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Jul 12 19:37:41 2018 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Aug 02 23:48:54 2018 +0000"
      },
      "message": "Aaudio: Implement app shareable flag instead of -size hack\n\nTest: adb shell data/nativetest64/write_sine/write_sine -pl -m3\nBug: 38118159\nChange-Id: I349e10a00a5466f54e084f4745b1ed4776378c81\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "ab7ef300b74904bce6c5c810d9e5679abfa582e6",
      "tree": "dadb05ba8da176c046139ca43c3fae48a14191c3",
      "parents": [
        "1f2bfd3ac9d61982acb348d2c78f95c7d4b0bf05"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Tue May 15 19:35:29 2018 -0700"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed May 16 18:49:09 2018 -0700"
      },
      "message": "Move ServiceUtilities from audioflinger to libmediautils\n\nTest: Play Music, Play Movies, Camera, Photos\nBug: 79485140\nChange-Id: Ib8382547828e386024145c416321d24e4af182db\n"
    },
    {
      "commit": "2fe718b88ebc7e9f10e1195591dd62ae9e26ed8d",
      "tree": "de5712270006a8db8c1cdf2ba70253bffc789c4c",
      "parents": [
        "1267e887bd9d38e2785b601e872a26acf0ec17f9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon May 14 12:28:32 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 15 12:17:04 2018 -0700"
      },
      "message": "aaudio: fix possible race condition in close()\n\nMove increment and decrement of reference count under\nthe same lock used for finding the stream.\n\nBug: 79693915\nTest: run CTS tests\nChange-Id: I206eb09724a81f2d79a03fa756adbcbb8abf5efa\n"
    },
    {
      "commit": "6e2770ef771b7a3042d606c37f9c3af8a933439b",
      "tree": "502cf6cde6e624096f922f6dadf20a42870e2f04",
      "parents": [
        "e5a37268101a2c9d8019938f4e5ac9eec2e52fca"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 01 13:03:52 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue May 01 15:46:47 2018 -0700"
      },
      "message": "aaudio: use weak pointer to prevent UAF\n\nAvoid using the mServiceEndpoint smart pointer\nfrom multiple threads.\n\nBug: 74122779\nTest: see bug for test instructions\nChange-Id: Idaf9e32a163b25e51bde35d6f5ea10a372b5d916\n"
    },
    {
      "commit": "bbd5286e99bbacf9907e2ecf1f7181db17ee6e46",
      "tree": "b523037660dffe33c9aa1d8cb65938b934f16000",
      "parents": [
        "f255369091d48ba7475ee4aae840a8a9c7a15f07"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Apr 13 11:37:42 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Apr 18 10:18:49 2018 -0700"
      },
      "message": "aaudio: teardown stream based on a port handle\n\nNeeded for silencing specific input streams.\nPass AAudioService reference into AAudioServiceEndpointMMAP.\nUse it to find a specific stream by PortHandle then\nstop it and disconnect it.\n\nBug: 72134552\nTest: b/72134552#comment10\nChange-Id: Ibdf242f834c83b47c967c3cc634ed1083b019d4a\n"
    },
    {
      "commit": "331679c8a5cd21a0e6a7a1d851e965e4721f7420",
      "tree": "9e3835bb805631ca42a90ded01796b73307a4642",
      "parents": [
        "554e08c6b00b2a57348f4545d450915a9e8c870a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 17:03:16 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 17:08:06 2018 -0700"
      },
      "message": "Revert \"Revert \"audioflinger: implement silenced capture for mmap\"\"\n\nThis reverts commit 611ebb95e76c230214780b7b583b8a3c5277ac7a.\n\nBug: 78118584\nbug: 72134552\nTest: \u0027adb shell write_sine_callback -m3 -pl -s100 -x\u0027 and Plug headphones in and out.\nTest: AAudio CTS tests\nChange-Id: I7558ad7b9c6c2d352ebce105382fe914c26fd35e\n"
    },
    {
      "commit": "554e08c6b00b2a57348f4545d450915a9e8c870a",
      "tree": "b66615256ee7a7eeac8a7e54c54c2fd872a3fdd0",
      "parents": [
        "c620796251df712274c16858c76628d802bbb4b1",
        "611ebb95e76c230214780b7b583b8a3c5277ac7a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Apr 16 23:52:19 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 16 23:52:19 2018 +0000"
      },
      "message": "Merge \"Revert \"audioflinger: implement silenced capture for mmap\"\" into pi-dev"
    },
    {
      "commit": "611ebb95e76c230214780b7b583b8a3c5277ac7a",
      "tree": "1c8ef30309a0954a51a6b4c872f30ca399f064d2",
      "parents": [
        "a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 19:43:59 2018 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 16 19:43:59 2018 +0000"
      },
      "message": "Revert \"audioflinger: implement silenced capture for mmap\"\n\nThis reverts commit a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9.\n\nBug: 78118584\nChange-Id: Ie0da3dea445f2474c7a889c5f9919305c1c96d40\n"
    },
    {
      "commit": "55e5eabf96af5a2964bfab1e64d81ad9be9ac975",
      "tree": "46127c87c1c2100d983c4bfbb611ec85bc6067b8",
      "parents": [
        "b8bddf5ece276f01052ad9b706417fd8cfe72d90"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 10 15:16:38 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Apr 13 18:14:20 2018 +0000"
      },
      "message": "aaudio: cleanup logs and add counters to dumpsys\n\nCounters will give us some history for AAudio.\nRemoved some unneeded logs.\nAdded log to help debug intermittent volume problem.\n\nBug: 64310586\nTest: adb shell logcat\nTest: adb shell dumpsys media.aaudio\nChange-Id: I012361bb4d0d0bfdedfe5ceef856b59282c8d3f0\n"
    },
    {
      "commit": "a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9",
      "tree": "00e39e41acac99cc35c292c65c7bca60973fdd5a",
      "parents": [
        "9fc25229e0723c93b453ab34957f22a643e2b602"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 10 19:09:40 2018 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 11 19:07:45 2018 -0700"
      },
      "message": "audioflinger: implement silenced capture for mmap\n\nImplement silencing of audio capture for idle UIDs for\nMMAP streams.\n\nUse audio HAL setMicGain() API to silence the mmap buffer for\nexclusive mode and when only one client is active in shared mode.\n\nAdd new MmapStreamCallback method onStreamSilenced() for AAudio\nservice to selectively silence streams from silenced UIDs in\nshared mode.\n\nBug: 72134552\nTest: manual\nChange-Id: I7c92ba0002bc5ba003c1a3c887edddf9ae53b538\n"
    },
    {
      "commit": "19e990e480245af25ec03ff3a3f53b820b0732cd",
      "tree": "8eb6afdfc9a634c835c6cc0d8b28bd69ffbdd2f2",
      "parents": [
        "ce6c8479c587bf61dfbd7b050752fec54135ba1f"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 22 13:59:34 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 23 21:50:37 2018 +0000"
      },
      "message": "aaudio: improve logging to help debugging\n\nUse __func__ more often.\nShow thread entry and exit.\nLog illegal state transitions.\nRemove some unnecessary logs.\n\nBug: 64310586\nTest: use AAudio then look at the logs\nChange-Id: I2e289698efc897640588ba534b5513ac39b15043\n"
    },
    {
      "commit": "be645507a3ded6a481375419c8185e17c66dcb37",
      "tree": "d938ff05ee88f29968a6de963584e7b235f5f01a",
      "parents": [
        "142a00d21641393bb65a2484c0306f7c49ae9cb8"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 22 13:48:18 2018 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Fri Mar 23 11:10:30 2018 -0700"
      },
      "message": "aaudio: pass smart pointer to mixer thread\n\nBefore this, the mixer thread could close the stream using a stale pointer.\nThis could cause timeouts when plugging headphones in or out.\n\nBug: 76092458\nTest: write_sine_callback -m3 -pl -s1000\nTest: unplug and replug headphones many times on Marlin\nChange-Id: I437eb756686446a75fc5d04bc09d9408816585de\n"
    },
    {
      "commit": "41f19d8e9471945b358c9ae1dffda60f195d9f5b",
      "tree": "76116b8a7d57b4f696fa1bda0cbeda63fa208d45",
      "parents": [
        "54486dc5d502e563747ec5744f61af97ea9c9035"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Feb 13 14:59:10 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Mar 01 19:13:02 2018 -0800"
      },
      "message": "aaudio: convert mono output to stereo\n\nMMAP hardware streams are often stereo.\nBut apps often want to output a mono stream.\nSince converting from mono to stereo is easy,\nwe can go ahead and open a stereo hardware stream\nand then just convert the apps mono data to stereo for the HW.\n\nAdd getDeviceChannelCount().\n\nTest:  adb shell write_sine_callback -pl -s10 -c1 -m3\nTest:  adb shell write_sine_callback -pl -s10 -c1 -m3 -x\nChange-Id: I444a38c6f5cd32d1d6113f16aacec68285a1bc82\n"
    },
    {
      "commit": "5cc83c3b8acc43b760be23a4e3b96fbbb06d8e93",
      "tree": "81c8578d69173d3e948a938e46d54e8385d254c4",
      "parents": [
        "bb8ad0e6ebf1a74245929720fd6336feda926ea9"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Nov 28 15:43:18 2017 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jan 24 15:21:34 2018 +0000"
      },
      "message": "aaudio: fix some state transitions\n\nNow requestStop() and requestPause() do the appropriate thing\nbased on state.\nFlush is allowed when OPEN, PAUSED or STOPPED because there might\nbe pre-roll data.\n\nBug: 69810494\nTest: test_various.cpp\nChange-Id: Ie1b306b17734a58fa71b1742bb186482893656b7\n"
    },
    {
      "commit": "4e1af9fc9c1108d4514e92774f750bcd434dbbcc",
      "tree": "03dc781c49ae6b37c4661c591ece2c5a4eed8cfe",
      "parents": [
        "a11f9357196db29e6f8f05b91334524de4f3207e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Jan 03 15:54:35 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jan 18 19:48:46 2018 -0800"
      },
      "message": "aaudio: implement sessionId for effects\n\nIf a sessionID other than AAUDIO_SESSION_ID_NONE is requested\nthen legacy data path will be forced.\n\nSessionID is implemented for MMAP data path but not used.\nIt is easier to implement it now then try to figure\nit out later.\n\nBug: 33268927\nTest: test_session_id.cpp will be moved to CTS when stable\nChange-Id: I3ea67f57c1cbe24a512980f1352b917ab3cb6387\n"
    },
    {
      "commit": "3cf4c180de878a877b1de82404ba3c5537770fd6",
      "tree": "24b13d5cd7bc5bf372dd62d793b00dbd515371e4",
      "parents": [
        "aa50659081021a1708d9692be1c1576a939245b6",
        "a62fb9565d73d9ec9b56da65929afc0f686c696e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 18 01:34:13 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 18 01:34:13 2018 +0000"
      },
      "message": "Merge \"aaudio: fix USAGE, INPUT_PRESET and CONTENT_TYPE\""
    },
    {
      "commit": "a62fb9565d73d9ec9b56da65929afc0f686c696e",
      "tree": "f0291746c32af771178c350696f98bbac0f34c1f",
      "parents": [
        "d6be64a3f22be3eceb0d6209c88dcad573c08191"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jan 16 12:44:06 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jan 16 17:14:59 2018 -0800"
      },
      "message": "aaudio: fix USAGE, INPUT_PRESET and CONTENT_TYPE\n\nThe attributes were not propagating all the way down for MMAP\nstreams.\n\nBug: 72046612\nBug: 72049948\nTest: adb shell aaudio_loopback -te -pl -n1 -x -X -i6\nChange-Id: I41b592d0c3a9daef5070ad299198c8d6cd890cfc\n"
    },
    {
      "commit": "559788963268a0bc1e90e29c423ac78938c96b4a",
      "tree": "00ef867a4c27b5023d0909788ed7162bfca8f567",
      "parents": [
        "d6be64a3f22be3eceb0d6209c88dcad573c08191"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jan 11 14:56:09 2018 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Jan 16 16:33:25 2018 -0800"
      },
      "message": "aaudio: name threads for easier debugging\n\nName them \"AAudio_#\" where # is an increasing index.\nFor example AAudio_1, AAudio_2, etc.\n\nAlso name threads that are used for sending timestamps.\n\nTest: run write_sine_callback then dump the threads for that process.\nChange-Id: Ibd8c7be1109f6c15a4601ef154038cdce2e65e11\n"
    },
    {
      "commit": "d4ccc624201d5c74ff6e14db1b68743b41fe795c",
      "tree": "2f86fcbe969edd3e18a26863f6a5ecbf2b81a8ad",
      "parents": [
        "f9d1b99e6fb1af139604336863f6cb7d3c48510e"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Dec 20 15:32:44 2017 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Jan 11 18:47:47 2018 -0800"
      },
      "message": "aaudio: implement new USAGE, CONTENT_TYPE and INPUT_PRESET\n\nPass these audio attributes to AudioFlinger.\n\nBug: 68052449\nBug: 62104146\nTest: test_attributes.cpp will be moved to CTS when ready\nChange-Id: Ib8804614d95dcf1b85e51ec1f5569892e017a991\n"
    },
    {
      "commit": "94862529bf1d1506bc09a05788e56aafb5c6e7f5",
      "tree": "7eb5ea6b757f88bfb25f667a88ee684226243470",
      "parents": [
        "3a5608cf069994725f6e50950f0462e91dcd8c51"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Wed Sep 13 21:31:36 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Dec 05 09:28:38 2017 -0800"
      },
      "message": "aaudio: defer closing of stream until safe\n\nWhen a client asks to close the stream, we mark it as\ncloseable. When the last client finishes with the stream\nthen we actually close it.  References to the stream are counted.\n\nThis will prevent a stream from getting closed while another thread is\ntrying to start it or stop it, etc.\n\nTest: CTS nativemedia/aaudio\nChange-Id: Ic1c7eceded6bff9899f37a5e7d9f2b695b8cdc97\n"
    },
    {
      "commit": "2329638e097622653cb2c4acc145b996e317a38b",
      "tree": "d25dccdc184ac7ce8b7aceb227411592ff256484",
      "parents": [
        "10edfcf70857cc0a22afbbd3fc8f57f0c8a2953a"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Mon Nov 20 15:45:11 2017 -0800"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Nov 21 10:30:58 2017 -0800"
      },
      "message": "aaudio: use xruns detected in the service\n\nThe service knows when an actual xrun occurs so we pass\nthat value to the client.\n\nBug: 38512417\nTest: write_sine_callback -pl -n1 -s20 -c2 -u\nChange-Id: I9e5ff1edd2e9378957309280162d7cda855f5adb\n"
    },
    {
      "commit": "a75fdf5ff87a75a52e5d782d0169ca61fe39e95c",
      "tree": "0e1e51d1152539d1dfa90ac349ae8e7a3ac8fdf9",
      "parents": [
        "1052fb1dc71dbd62f7ff2b2227ed318ca9aea1e0",
        "fbf031e8f197c916ae9c399f42926494ebdeb497"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 01 01:29:52 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 01 01:29:52 2017 +0000"
      },
      "message": "Merge \"aaudio: cleanup logs and comments\""
    },
    {
      "commit": "fbf031e8f197c916ae9c399f42926494ebdeb497",
      "tree": "13578d14ca810aaa7629770b983b81641e0bd90f",
      "parents": [
        "442459bca04f95ef2acd34e3de01f55bd5ede132"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Thu Oct 12 15:58:31 2017 -0700"
      },
      "committer": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Oct 31 15:36:38 2017 -0700"
      },
      "message": "aaudio: cleanup logs and comments\n\nThis CL should not change any code behavior except for log text.\nMostly it removes redundant class names from the log.\n\nTest: CTS nativemedia/aaudio\nChange-Id: I6a6d01da080f536d5345f2b0deb32e92ed1e3d47\n"
    }
  ],
  "next": "73af62a5ff0577eec6ad1be2b45fc9a15eaba920"
}
