)]}'
{
  "log": [
    {
      "commit": "00191e208e6794fe09a98da7433a69897e869b21",
      "tree": "040f23f973f223caa6a5de331dedd1519f7a6a6f",
      "parents": [
        "95650cfab65a3229c0cff9415baf57781ef9a3db",
        "bda4575c36ad11b0870ccdb50dcb3a04573d6782"
      ],
      "author": {
        "name": "Nate Myren",
        "email": "ntmyren@google.com",
        "time": "Thu Mar 11 23:48:48 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 11 23:48:48 2021 +0000"
      },
      "message": "Merge \"Add attributionTag to audio-recordings\" into sc-dev"
    },
    {
      "commit": "bda4575c36ad11b0870ccdb50dcb3a04573d6782",
      "tree": "9e5e3ed6228395c814e390c464e09b3d5922cf29",
      "parents": [
        "6d988df316533c7e189b266ad01e66356b6992d1"
      ],
      "author": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Fri Jul 17 16:41:18 2020 -0700"
      },
      "committer": {
        "name": "Nate Myren",
        "email": "ntmyren@google.com",
        "time": "Thu Mar 11 08:35:04 2021 -0800"
      },
      "message": "Add attributionTag to audio-recordings\n\n... by replacing packageName/uid/pid by the Identity class.\n\nThis allows us to track which parts of the app trigger audio-recordings.\n90% of the code is just sending around the additional parameters.\n\nThis adds it for the Java and native API.\n\nTest: atest CtsAppOpsTestCases\n            CtsNativeMediaAAudioTestCases\nFixes: 160150145\nChange-Id: Ibd7b884f7fcd4668a4e27f997e59cfc3217a9e89\n"
    },
    {
      "commit": "914c4f6fa355285a48aa08e40c6d2cd5f06431dd",
      "tree": "87c832fd892b54650992e2ae9f28820aef60e010",
      "parents": [
        "020bad28891e95877faf38ebb6a9197d0baa608e",
        "6537defa5f37719396964ba5e0fac5d53cf8f6fd"
      ],
      "author": {
        "name": "Kriti Dang",
        "email": "kritidang@google.com",
        "time": "Thu Mar 11 10:12:28 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 11 10:12:28 2021 +0000"
      },
      "message": "Merge \"Split getSurroundSound method in 2 methods.\" into sc-dev"
    },
    {
      "commit": "2c90a4a4f35bbd6084372a337da4f3a85bd087a4",
      "tree": "c8835ee433f0c6b4416e333ad9ac2219842a3a3a",
      "parents": [
        "42a578a3b59e1af639c64e38f921f96593369d8b",
        "19fd6c584e86ea62f8ba43265361151bbbdfcb71"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Mar 08 16:07:22 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 08 16:07:22 2021 +0000"
      },
      "message": "Merge \"[AudioPolicyManager] Voice Downlink Sink device selection\" into sc-dev"
    },
    {
      "commit": "19fd6c584e86ea62f8ba43265361151bbbdfcb71",
      "tree": "28f1da6a5fd453d70c0936794638213de825358e",
      "parents": [
        "4c8abb48d820d3e4012c81f2b297079f0cd317c3"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Feb 04 17:02:59 2021 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 08 14:06:14 2021 +0000"
      },
      "message": "[AudioPolicyManager] Voice Downlink Sink device selection\n\nAudio Policy selects the downlink sink device through the primary\noutput of the primary module.\nIt uses getNewOutputDevices on this output. If any routing strategy is\nactive on this output with an higher priority than voice call (it may\nhappen as order is defined in engine configuration file), downlink may\nbe temporarilly routed on this sink until the other client stops.\n\nThis CL changes the downlink sink device selection by\n-checking if a HW bridge is possible between the selected sink device\nfor voice call strategy and telephony RX device\n-falling back on \"legacy\" behavior if no HW bridge possible.\n\nBug: 182148766\nTest: call with and without music active.\n\nChange-Id: I8b6a6648a72f6f69abdf4d49c205ccbd0efeb082\n"
    },
    {
      "commit": "6537defa5f37719396964ba5e0fac5d53cf8f6fd",
      "tree": "3fe4c420b6416176c84ea637fa8690804e55c949",
      "parents": [
        "c74fd5f5f0477cf2b2304c44969e7028fdb19096"
      ],
      "author": {
        "name": "Kriti Dang",
        "email": "kritidang@google.com",
        "time": "Tue Mar 02 13:46:59 2021 +0100"
      },
      "committer": {
        "name": "Kriti Dang",
        "email": "kritidang@google.com",
        "time": "Thu Mar 04 12:03:15 2021 +0100"
      },
      "message": "Split getSurroundSound method in 2 methods.\n\nSplit getSurroundSound in:\ngetSurroundSound for formats supported by source android device\ngetReportedSurroundSound for formats reported by any connected sound\ndevice like soundbar etc.\n\nBug: 177990551\nTest: atest AudioPolicyManagerTestForHdmi\nChange-Id: Iac811315049f0598c930afd75f069f058080dad4\n"
    },
    {
      "commit": "56786ac1035b158c23c150884d2d6415f9fbd1ea",
      "tree": "309e190927e12f9076359905ea5e2258f25700a1",
      "parents": [
        "445b895828747b82170610a75598a0615025918c"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Thu Feb 25 15:24:36 2021 -0800"
      },
      "committer": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Thu Feb 25 15:24:36 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  apex/testing/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.bp\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/plugin/Android.bp\n  media/codec2/hidl/plugin/samples/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/fuzzer/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/hapticgenerator/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.bp\n  media/libheif/Android.bp\n  media/libmedia/Android.bp\n  media/libmedia/tests/codeclist/Android.bp\n  media/libmedia/tests/mediaplayer/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/libmediatranscoding/transcoder/Android.bp\n  media/libmediatranscoding/transcoder/benchmark/Android.bp\n  media/libmediatranscoding/transcoder/tests/Android.bp\n  media/libmediatranscoding/transcoder/tests/fuzzer/Android.bp\n  media/libnbaio/Android.bp\n  media/libnblog/Android.bp\n  media/libshmem/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/renderfright/Android.bp\n  media/libstagefright/renderfright/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/MtpFfsHandleTest/Android.bp\n  media/mtp/tests/MtpFuzzer/Android.bp\n  media/mtp/tests/PosixAsyncIOTest/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  media/utils/tests/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/config/tests/Android.bp\n  services/audiopolicy/engine/config/tests/resources/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/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/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/fuzzer/Android.bp\n  services/audiopolicy/fuzzer/resources/Android.bp\n  services/audiopolicy/managerdefault/Android.bp\n  services/audiopolicy/service/Android.bp\n  services/audiopolicy/tests/Android.bp\n  services/audiopolicy/tests/resources/Android.bp\n  services/camera/libcameraservice/Android.bp\n  services/camera/libcameraservice/fuzzer/Android.bp\n  services/camera/libcameraservice/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/mediatranscoding/tests/TranscodingUidPolicyTestApp/Android.bp\n  services/minijail/Android.bp\n  services/oboeservice/Android.bp\n  services/tuner/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  camera/Android.bp\n  camera/ndk/Android.bp\n  media/ndk/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\nChange-Id: I4e4ecdbb43c90f5c3cd8e5ccec51b39fa0b5ae9b\n"
    },
    {
      "commit": "5739fff71185219a5dcc56a12620948164287608",
      "tree": "8f123bc9e9ad5d3ebc0aee78a2ed7bb3b1dbc07b",
      "parents": [
        "5530dd3df904c1b22ee4098bec1b801c379b8d4f"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Thu Feb 25 11:40:14 2021 -0800"
      },
      "committer": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Thu Feb 25 11:45:35 2021 -0800"
      },
      "message": "Revert \"[LSC] Add LOCAL_LICENSE_KINDS to frameworks/av\"\n\nThis reverts commit 3908e7be0b90e95ffb1f0e3db9274b2cbef57728.\n\nThis reverts commit c837504ed5b9c708896bb97b1ef9225c376816a7.\n\nThis reverts commit 948e6aace91d16acfaa97763c7228029a1c2afe0.\n\nChange-Id: Ib53daa5debdae7062155add5a70a5b3d5fcd1050\n"
    },
    {
      "commit": "8bee85ac7e015a03a7cd2e37e07453a36cc4e84a",
      "tree": "7470e99b8c9de6c18fd41434987baa78d132b8c8",
      "parents": [
        "4c8abb48d820d3e4012c81f2b297079f0cd317c3"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Wed Feb 10 16:02:23 2021 +1100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Feb 24 13:46:16 2021 +0100"
      },
      "message": "Support source device to MSD sink device direct patching\n\nCurrently, device to device software patches between different\nhardware modules route to a sink\u0027s PCM opened output stream. To\nsupport compressed / direct audio patching from HDMI inputs to MSD,\nbuild an explicit MSD patch between the source device and MSD, which\nhas the advantage of supporting preferential audio configuration\nselection (e.g. IEC60958 over PCM).\n\nThis change also updates existing MSD methods to reflect that they\noperate on MSD output (MSD source to downstream) patches only.\n\nThis change also adds IEC60958 as the most preferred MSD patch format\nas it is suitable for transmission of both PCM and compressed audio.\n\nBug: 181102125\nTest: atest audiopolicy_tests\nChange-Id: I259a15ac88e45f6bef5180a44967a58facfcfb56\n"
    },
    {
      "commit": "bbc56fda5e18be89bc015b8eb66b24d0abf4754b",
      "tree": "2bb799ccd6c3dcbde9118087a648626f3620b1ce",
      "parents": [
        "2de24fa72f87fd5b24420ea3588a048c3340cc97",
        "b7d2078c3fbfe0cbfcb7ca734cb45faf8be45493"
      ],
      "author": {
        "name": "Alden DSouza",
        "email": "aldend@google.com",
        "time": "Mon Feb 22 18:27:33 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 22 18:27:33 2021 +0000"
      },
      "message": "Merge \"audio: Add device definitions for Echo Reference\" into sc-dev"
    },
    {
      "commit": "c837504ed5b9c708896bb97b1ef9225c376816a7",
      "tree": "4b86c06c7fd70680e0482475807ca8f19f00502b",
      "parents": [
        "6d858b5665aeea773ce10d81fd875a80fdb09b85"
      ],
      "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": "Wed Feb 17 12:43:41 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: I8360756b326b891b56629127091540310851c941\n"
    },
    {
      "commit": "788fa3fdf283c6aae27ea86dac80bcaf0ad9493c",
      "tree": "847696fceabe1387a5c4bccd7e7d2164f7f76655",
      "parents": [
        "1dff892a340323ad53b661a33c32e1c2a3da51b7",
        "11b6592323f9d3f9a68ef557893c90e391e79111"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 15 08:45:19 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 15 08:45:19 2021 +0000"
      },
      "message": "Merge \"audiopolicy: allows to fallback or not on default strategy/group\" into sc-dev"
    },
    {
      "commit": "11b6592323f9d3f9a68ef557893c90e391e79111",
      "tree": "4a68483b3bb1728ed0779f9e53971285321e57db",
      "parents": [
        "25521834a63d67308520da5bced97ed517a30a72"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Sep 24 16:59:08 2020 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 11 09:44:25 2021 +0100"
      },
      "message": "audiopolicy: allows to fallback or not on default strategy/group\n\nWhen attributes does not match a group or strategy, it falls back on\nrespectively default group or strategy.\n\nThis CL allows to control whether fallback shall be done or not.\nIt allows for example to detect orphans attributes and prevent from\noverwritting volume for example.\n\nBug: 179759299\nTest: make\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: Ieeeab48ca3ec2b031b7a99e2e7ab26d2e4d70535\n"
    },
    {
      "commit": "fecbceb656b787e5765cf7607c49c9e789545639",
      "tree": "72c3e9d6aebe33386510bb500845c615bcf7204c",
      "parents": [
        "25521834a63d67308520da5bced97ed517a30a72"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 09 14:46:43 2021 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Feb 09 17:41:47 2021 +0000"
      },
      "message": "audio policy: reduce log spam\n\nChange some non critical log levels from I/E to V in\nAudioPolicyManager.\n\nTest: test \u0026 flash \u0026 boot\nBug: 143204848\nChange-Id: I3d2d8c16772ef45b91544b3bd46fed5c13e7ed71\n"
    },
    {
      "commit": "b7d2078c3fbfe0cbfcb7ca734cb45faf8be45493",
      "tree": "197b9cd02cded6529593ebc7aa9989f21c36afb9",
      "parents": [
        "83b5d499f239a8fea781447d924df42b14312396"
      ],
      "author": {
        "name": "Alden DSouza",
        "email": "aldend@google.com",
        "time": "Mon Feb 08 08:51:42 2021 -0800"
      },
      "committer": {
        "name": "Alden DSouza",
        "email": "aldend@google.com",
        "time": "Mon Feb 08 08:51:42 2021 -0800"
      },
      "message": "audio: Add device definitions for Echo Reference\n\nThis enum exists in AudioSystem, adding to AudioDeviceInfo.\n\nBug: 178379355\nTest: Build and flash on Yukawa device.\nChange-Id: I4a4aade913c0823a20a538cb740b2a83f775415c\n"
    },
    {
      "commit": "408349af5960baa7886d5c1f8a199a80efb0a804",
      "tree": "03ceb3cf0d348340a1b8934a7b9ab8f9f441e18c",
      "parents": [
        "07c990148f79e5ca58f406b15114eb1ccc2a0812"
      ],
      "author": {
        "name": "Jaideep Sharma",
        "email": "quic_jaidshar@quicinc.com",
        "time": "Fri Nov 27 14:47:17 2020 +0530"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 04 20:31:24 2021 +0100"
      },
      "message": "audiopolicy: avoid unnecessary closure of HOTWORD recording.\n\nWhen the new selected input device is not supported by current\ninput handle, normally it needs to be closed and then create\na new one to capture with the new device.\nWhile for HOTWORD recording, as the data will either be captured\nfrom handset mic or headset mic, recording can be continued on\nthe original input handle.\n\nBug: 179399190\nTest: audio smoke tests\nChange-Id: I01ad15fa2bb383979250399fe2b8903965bb6aa9\n"
    },
    {
      "commit": "e4d123ad8c6d43108ea1a7a04a1b92b98e9e367f",
      "tree": "bb59a885bd576bcce51d5d08862ca30eafa35ed1",
      "parents": [
        "89b5b85fcd98bc2330924e00b51126cd63a11f68"
      ],
      "author": {
        "name": "Jaideep Sharma",
        "email": "quic_jaidshar@quicinc.com",
        "time": "Tue Nov 24 15:14:03 2020 +0530"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 04 20:26:10 2021 +0100"
      },
      "message": "audiopolicy: Wrong device selection for music during concurrency.\n\nMusic playback is switching from proxy device to speaker when more than\none touch tone/notification streams are started after music and one of\nthe low latency streams is stopped.\n\nConsider low latency streams playing on speaker and music playing\non WiFi display (proxy device).\n\nWhen the first low latency output is stopped, getNewOutputDevices checks\nfor a product strategy from the list. STRATEGY_SONIFICATION comes prior to\nSTRATEGY_MEDIA in the list of product strategies. If an ALARM or\nENFORCED_AUDIBLE stream is supported by the product strategy, devices are\nreturned for STRATEGY_SONIFICATION without checking whether the stream is\nassociated to the output descriptor for which we are querying devices.\n\nAs a solution, we check if ALARM or ENFORCED_AUDIBLE streams are active\non the queried output descriptor and return devices accordingly.\n\nBug: 137907302\nTest: manual audio smoke tests.\n\nauthored-by: Manisha Agarwal \u003cmaniagar@codeaurora.org\u003e\nChange-Id: I49ea4d01290b4a611df281681c0db9fe3f7957fc\n"
    },
    {
      "commit": "89b5b85fcd98bc2330924e00b51126cd63a11f68",
      "tree": "cc34bb945b0ec88fde4d266ecf7a2b7bdfab6a69",
      "parents": [
        "18a79124503d4aa07ba3f81d467fa65dfbc12d51"
      ],
      "author": {
        "name": "Jaideep Sharma",
        "email": "quic_jaidshar@quicinc.com",
        "time": "Mon Nov 23 16:41:33 2020 +0530"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Feb 04 20:26:10 2021 +0100"
      },
      "message": "audiopolicy: fix voice volume mismatch after headset removal.\n\nDuring voice call, when headset is removed, new device of primary\noutput is first set to handset, and voice volume is also\ncalculated in handset. Later other outputs loop to select new\ndevice and calculate volume in new device, due to inactive output\nselects AUDIO_DEVICE_NONE, it uses previous device and set wrong\nvoice volume.\n\nFix it by add check to avoid applying volume for inactive output.\n\nBug: 111196161\nTest: manual audio smoke tests.\n\nChange-Id: I4dcc9f6d3442ce5a0a8235c04b4156ad17d373db\n"
    },
    {
      "commit": "6fb3449ee5694fd46503d3c9aa4ab4114fb5fd74",
      "tree": "7d3c9ff78a9b220a9e886e94657091ea0bba57ab",
      "parents": [
        "40e3a7a239895c1407eb420f19e85d091d2d785b"
      ],
      "author": {
        "name": "Michael Chan",
        "email": "michael.chan@dolby.com",
        "time": "Tue Dec 08 15:44:49 2020 +1100"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Jan 28 11:19:27 2021 -0800"
      },
      "message": "APM: Create multiple MSD patches\n\nThis change modifies setMsdPatch() by first renaming to setMsdPatches()\nand replaces its parameter with a pointer to DeviceVector, so that\nmultiple devices can be patched from MSD. If none are specified it will\nestablish MSD patches with all reported downstream output devices. It\ntears down existing MSD patches and creates new ones for those MSD\npatches that do not support new patch requests. We retain the existing\nMSD patches that already support new patch requests.\n\nIn getBestMsdAudioProfileFor(), ensure output profiles considered for\nevaluating the best matching audio profile is supported by the output\ndevice under consideration.\n\nRefactor by placing common code that tears down current MSD patches into\na new function called releaseMsdPatches().\n\nWhen obtaining an output, getOutputForAttrInt() returns device ID of the\ndefault device if its ID matches that of one of the output devices\nprovided by the engine.\n\nAdd testing for dual MSD patch creation by parameterizing existing MSD\ntests for single and dual MSD patch cases. Add new unit test to exercise\nsetMsdPatches and releaseMsdPatches. Make private MSD module member\nfunctions protected to enable testing.\n\nBug: 135620198\nTest: audiopolicy_tests\nChange-Id: I59a8976ce82dba04ca69347afc192e9143ef3629\n"
    },
    {
      "commit": "0a4904a12ded2c89e2cae4a7dc46730726cf9abd",
      "tree": "82da7b9713645ba4970114857119bdf21dc40f54",
      "parents": [
        "08c7d9e6ceb83134b7d6d6b56e686cfb54dd43f3"
      ],
      "author": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Wed Jan 06 12:57:05 2021 -0800"
      },
      "committer": {
        "name": "Ytai Ben-Tsvi",
        "email": "ytai@google.com",
        "time": "Thu Jan 21 10:44:07 2021 -0800"
      },
      "message": "Convert IAudioPolicyService to AIDL\n\nTest: Audio tests from CtsMediaTests\nTest: Audio smoke tests\nBug: 160253486\n\nChange-Id: I5ecee56f71a959d2fd75714ba95d7653af0c98bc\n"
    },
    {
      "commit": "943654450365fa24962a7ae7c1373a7f5ff3bd37",
      "tree": "a27299c603ce7fa4882dc14ffc65b70c5c5d1b56",
      "parents": [
        "5feac6b66fbb1dbd258b660dd8a52f241368778b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 08 18:36:05 2021 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jan 15 10:22:17 2021 +0000"
      },
      "message": "audio policy: minor log and dump fixes\n\nFix DeviceDescriptorBase dump formatting and add more\ninfo to getOffoadSupport() verbose log.\n\nTest: adb shell dumpsys media.audio_policy\nChange-Id: Ibbc4f80305d5b326c316f7510a03688ebeadb33a\n"
    },
    {
      "commit": "51c9ccd1b696cfcec82915aa3a7ed5bd5b24a3fb",
      "tree": "7c6d36c78dbc7b7d37ceeb7f078fcfa241ed6f92",
      "parents": [
        "bce7cd48b7c1afe6271c8596ebec03e4b71be249"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Oct 14 18:02:07 2020 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 14 09:19:41 2021 +0000"
      },
      "message": "AudioPolicyManager: keep track of activity for HW Audio Patches\n\nIn order to allow volume management for all volume sources, this\nCL adds Source Clients even in case of HW AudioPatches.\nIt uses the mixPort declared to reach the sink involved in the\nHW Audio Patch to add this client.\n\nTest: Manual: build \u0026 call \u0026 plays with HW / SW AudioBridges.\nAuto: (Non-regression on emulator)\nadb shell ./data/AudioPolicyEmulatorTests --gtest_filter\u003d*AudioPatchTest*\nadb shell ./data/AudioPolicyEmulatorTests --gtest_filter\u003d*AudioSourceTest*\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: Iaf44db2fd9a90dde9ef8160869af73983a5feae4\n"
    },
    {
      "commit": "bce7cd48b7c1afe6271c8596ebec03e4b71be249",
      "tree": "69cc4c93f923bdad74bb50191956e75b6ad4d612",
      "parents": [
        "a0e5c99752cebfdbd56a70bb97e12ed7cedc4a70"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed Oct 14 16:13:20 2020 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 14 09:19:34 2021 +0000"
      },
      "message": "audiopolicy: Primary Output runtime management\n\nIn case of unavailability of device(s) attached to the primary output,\nthis output can be disconnected.\nThe cache variable must be resetted, then restored when at least one\ndevice supported by one profile of the primary output is made\navailable again.\n\nTest: adb shell /data/nativetest64/AudioPolicyEmulatorTests/AudioPolicyEmulatorTests --gtest_filter\u003dAudioSourceTest*\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: Iae8937cad3d70b0e8c7ff4516c27aa8eff231eaa\n"
    },
    {
      "commit": "a0e5c99752cebfdbd56a70bb97e12ed7cedc4a70",
      "tree": "bf2e3e487cc587960cb5c0008ad75b49a9f0f9cb",
      "parents": [
        "ff1eb52316ca4eff24735029829a177530e27f06"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Tue Sep 29 16:05:07 2020 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 14 09:19:25 2021 +0000"
      },
      "message": "audio policy: audio source automatic re-connection\n\nWhen an audio source is started, if either the sink or the source\nbecomes unavailable, the audio source is stopped.\nIt implies that the client must listen to patch/ports to become\naware that the source has been stopped.\n\nIn order to prevent this, it is possible to allow automatic re-connection\nof audio source as APM already keeps track of AudioSource.\n\nIn case of unavailability, source is only disconnected, not stopped to prevent\nfrom removing from tracking list.\n\nTest: adb shell /data/nativetest64/AudioPolicyEmulatorTests/AudioPolicyEmulatorTests --gtest_filter\u003d*AudioSourceBridgingTest*\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: I414195a85a06c9212420e3b51bf2863f3e08c755\n"
    },
    {
      "commit": "ff1eb52316ca4eff24735029829a177530e27f06",
      "tree": "fe8e9567669e0fe4e1c3ee6a85a4bd838b135456",
      "parents": [
        "89a23220d54f71c8577e8fa5098850c9c1ce5ce8"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Wed May 06 18:37:04 2020 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jan 14 09:19:01 2021 +0000"
      },
      "message": "AudioPolicy: remove devices while Sw bridge established\n\nWhen devices are disconnected while involved in a SwBridge,\nthe connectAudioSource function may be called while the cache\nof the engine has not yet been updated with availability of devices.\n\nThis CL forces to retrieve sinkDevices from engine without using\nthe cache.\n\nIt also ensures that Audio Source using Direct Output are also\nre routed while sink device has been made UNAVAILABLE then AVAILABLE\nagain. In this case, no SwOutput will keep track of the AudioSource.\nOrphans Audio Source shall be handled independantly.\n\nSo far, robustness cases added to the following test.\nIn some case, fallback on speaker is allowed, in other,\ndevice none is selected while given sink has been made unavailable:\n\nTest: So far: adb shell /data/nativetest64/AudioPolicyEmulatorTests/AudioPolicyEmulatorTests --gtest_filter\u003dAudioPatchTest/AudioModeBridgingTest.\nadb shell /data/nativetest64/AudioPolicyEmulatorTests/AudioPolicyEmulatorTests --gtest_filter\u003dAudioSourceTest/AudioSourceBridgingTest.UsingAudioSourceAPI/\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: I2663d10f08de3191de4d95bc81749ede9b8a360f\n"
    },
    {
      "commit": "a3412b0d3e8ecfffa5863ae52aabfbcc4c381b94",
      "tree": "3da69f4b0554dd82fd9a9e3e2e3b6cd94f781e7d",
      "parents": [
        "7649c3fa73dda03d9646ccfc70e32e21c5c0bb6e",
        "1d69c872f223273847fe82086384c8ad343a781b"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jan 11 19:46:39 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 11 19:46:39 2021 +0000"
      },
      "message": "Merge \"audio policy: fix spurious error log at init\""
    },
    {
      "commit": "1d69c872f223273847fe82086384c8ad343a781b",
      "tree": "7d66bac1a55041c74353606886d2c2315503a621",
      "parents": [
        "95f8fd2c6296cb00927d393a5870cc54bb73fd22"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 11 18:53:01 2021 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 11 18:53:01 2021 +0100"
      },
      "message": "audio policy: fix spurious error log at init\n\nMove initialization of communication strategy in AudioPolicyManager::initialize()\nbefore loading HW modules to avoid calling Engine::getDevicesForRoleAndStrategy()\nwith an unknown strategy.\n\nTest: boot.\nChange-Id: I156441aca09807ee4569eb81e3cb7b903a325184\n"
    },
    {
      "commit": "952d043eb973a3918bbef95789505d5eb756c58f",
      "tree": "a6289989a4e8a1a38226fa9c9af3104187961a28",
      "parents": [
        "95f8fd2c6296cb00927d393a5870cc54bb73fd22",
        "bce0c1de61558b0d10aa88ec84c4175ef03432ce"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jan 11 17:32:03 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 11 17:32:03 2021 +0000"
      },
      "message": "Merge \"Support connecting multiple devices to APM.\""
    },
    {
      "commit": "bce0c1de61558b0d10aa88ec84c4175ef03432ce",
      "tree": "47dc4664f78e6f0bf5ce9a38fe80da3d44bf8bf6",
      "parents": [
        "471ab9669e1d288d4dc5fe927cebfcb0198f94cd"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Mon Oct 05 11:20:18 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Thu Jan 07 09:28:55 2021 -0800"
      },
      "message": "Support connecting multiple devices to APM.\n\nWhen connecting multiple devices with the same type to APM, APM will\nneed to support enumerating capabilities of the device. When a device is\nconnected/disconnected, the active devices may be updated. If an output\nsupports the active devices and dynamic profiles, it will be reopened to\nquery to dynamic profiles.\n\nTest: atest AudioTrackTest AudioRecordTest AudioManagerTest\nTest: atest AudioPlaybackCaptureTest audiopolicy_tests\nTest: audio smoke test\nBug: 160352965\nChange-Id: I52577ae26dd4073673025fe3286a58c047a35965\n"
    },
    {
      "commit": "74c38dc7e39125a9ae17daa3b810324621c0fad2",
      "tree": "55b4d2bfdb04674b707e07e1a7d15723684f1e74",
      "parents": [
        "dc66d284ad1cdfffc3e65cf352e270e43dc47ff8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 23 18:19:44 2020 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 05 08:37:54 2021 +0000"
      },
      "message": "audio flinger: report actual sink device for MSD playback threads\n\nWhen a playback thread is routed to an MSD module, make sure that the\nactual sink device selected by the software patch at the output of the\nMSD module is reported to AudioTrack clients.\n\nBug: 139894721\nTest: atest AudioTrackTest\nTest: atest RoutingTest\nChange-Id: Ie52ebe198e9ebdfe5f2a38dcd44c551c705a7931\n"
    },
    {
      "commit": "9a6b9adb0de5f6fc3cf39e369c6a6ed447823469",
      "tree": "969cf83987ea9ce0bd5fb9e458af8cc6c8d68267",
      "parents": [
        "27fe43ec5915fd93539c17444102d0c9cfdd6732"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Oct 22 16:46:43 2020 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Dec 23 08:57:48 2020 -0800"
      },
      "message": "Audio policy: notify system_server of routing change\n\nCallback into AudioPolicyClientInterface to notify of routing\nupdate whenever output is re-evaluated.\nAdd native test to verify callback is invoked on device\n(dis)connection and setForceUse.\n\nBug: 162448412\nTest: atest AudioServiceHostTest#testPreferredDeviceRouting\nTest: atest AudioServiceHostTest#testDevicesForAttributes\nTest: atest audiopolicy_tests:AudioPolicyManagerTestDeviceConnection#RoutingUpdate\nChange-Id: Ia1a985b996bf8f2f63e72c4110f62f65f9f42f21\n"
    },
    {
      "commit": "2517af3ee8caec6d6de4c9e8f052d0579b6ec1b2",
      "tree": "27b3f3937ab07c4b40eee50b4e10659437feb810",
      "parents": [
        "f224b6d5c39e435038789e12162fb90459ca36ab"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 25 15:31:27 2020 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 17 21:47:58 2020 +0100"
      },
      "message": "audio policy: phone strategy routing based on preferred device API\n\nUse preferred device API instead of forced usage to select\naudio route for phone strategy in default audio policy engine.\n\nAlso remove use of forced usage for record which was redundant with\nforced usage for communication (never used independently).\n\nBug: 161358428\nTest: audio smoke tests\nChange-Id: Ie0c36b69ae6849c6efe7b5602dc9d0322856f561\n"
    },
    {
      "commit": "e13404b67042b964b2f3e8e17ce526bd2a4f8c55",
      "tree": "106b26c67cff2690bf6c3760f1999ff23d7f609d",
      "parents": [
        "5998a63a10bfd79a5e060f9669c40e45752a9e59",
        "90fe31c88aa787c5ab83df2672969cf2ee11f263"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Dec 11 07:09:29 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 11 07:09:29 2020 +0000"
      },
      "message": "Merge \"audio: add reporting of gapless playback support\""
    },
    {
      "commit": "19cdba55d6d981658dd43e1599e5449f40b4693f",
      "tree": "f174d85a015ede83ae5ce94b6c0109812a48fad1",
      "parents": [
        "b7e454991efc5bb053435d23695bfbedc83be84b"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Nov 24 11:28:58 2020 -0800"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Dec 09 11:05:15 2020 -0800"
      },
      "message": "Use audio_port_v7 in audio policy.\n\naudio_port_v7 is a struct that uses audio profile to describe an audio\nport. Compared to audio_port, audio_port_v7 can better describe the\ncapabilities of the audio port. In that case, use audio_port_v7 in audio\npolicy APIs getAudioPort and listAudioPort.\n\nTest: atest audio_health_tests audiopolicy_tests AudioManagerTest\nBug: 160352965\nBug: 25994457\nChange-Id: I16fb024f309e33f48ce2ae8f8d37dd58e74f781d\n"
    },
    {
      "commit": "a07f0ea5f3cbeba72470f5faacfcb4c30ff5b88e",
      "tree": "2502ed5d6469bf270c6b992202cf866320ae6585",
      "parents": [
        "f065626880e97170ac9f55c9fc499253a6207287",
        "ef6be8f48bc63f5082e06545c48858cd1e9d55af"
      ],
      "author": {
        "name": "Kriti Dang",
        "email": "kritidang@google.com",
        "time": "Wed Dec 09 08:49:16 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 09 08:49:16 2020 +0000"
      },
      "message": "Merge \"Refreshed UX for Audio Formats Setting [Backend]\""
    },
    {
      "commit": "ef6be8f48bc63f5082e06545c48858cd1e9d55af",
      "tree": "9242a92b3515adf47e6a8f0911c782c5636541c8",
      "parents": [
        "c34294f8c8b6a79b243d7c0ce8d9fa9d51590392"
      ],
      "author": {
        "name": "Kriti Dang",
        "email": "kritidang@google.com",
        "time": "Thu Nov 05 11:58:19 2020 +0100"
      },
      "committer": {
        "name": "Kriti Dang",
        "email": "kritidang@google.com",
        "time": "Tue Dec 08 12:15:50 2020 +0100"
      },
      "message": "Refreshed UX for Audio Formats Setting [Backend]\n\nThis CL modifies getSurroundSound(reported\u003dtrue) to always return formats\nsupported by device irrespective of mode.\nThis also adds unit tests to verify the APIs getSurroundSound and\nsetSurroundFormatEnabled.\n\nBug:171785330\n\nTest: atest audiopolicy_tests\nTest: Tested manually\n\nChange-Id: Id309cc864fd380d7600c19e1839a63dd5756879f\n"
    },
    {
      "commit": "7bf382e5199e3e5e8cdf9dd444188b0303589cd8",
      "tree": "679ba278dd81bf6b0f98e2ed518381e6c6909676",
      "parents": [
        "7c1a5353dae19cf4f34a3fdfdfce0191b9b35a2d"
      ],
      "author": {
        "name": "Jaideep Sharma",
        "email": "quic_jaidshar@quicinc.com",
        "time": "Thu Nov 26 17:07:29 2020 +0530"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 01 15:07:21 2020 +0000"
      },
      "message": "audiopolicy: stop output if it\u0027s still active before being released.\n\nThere\u0027s an assertion in outputDesc-\u003eremoveClient assuming client\nis inactive before removed, which is not always true.\n\nFix by stoping the output before being released.\n\nBug: 140221629\nTest: make\nChange-Id: Ifd7ee020ee4e392d80e93763e078d363a62ec8c4\n"
    },
    {
      "commit": "90fe31c88aa787c5ab83df2672969cf2ee11f263",
      "tree": "831c146e3ef02a460b13ce977ebd83894c1de920",
      "parents": [
        "5876ab7451acebdd0a772163e913058f6a505fc0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 26 20:06:35 2020 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Dec 01 11:38:48 2020 +0100"
      },
      "message": "audio: add reporting of gapless playback support\n\nAdd reporting of gapless playback support via\ngetOffloadSupport() method which replaces isOffloadSupported().\nThe audio HAL implementation indicates gapless support by setting flag\nAUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD on an output profile in addition to\nflag AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD.\n\nBug: 158191844\nTest: make\nChange-Id: I7a8fa284c2486fd7a74782acb1ac7537d1534e49\n"
    },
    {
      "commit": "b4fed19dd0c7ccbcd476e74ff123165ec315d8dd",
      "tree": "bd9c475e7ab5b6a7d562bf5b98407af0002ccafd",
      "parents": [
        "b1c141b95ac1d2fb14d371e6dae530a841a13cb4"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 22 14:45:40 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Nov 18 08:43:29 2020 -0800"
      },
      "message": "Call getAudioPort to get supported attributes for audio devices.\n\nGetAudioPort API will return the supported attributes for the devices.\nCall getAudioPort to get the supported attributes for the audio\ndevices so that it is no needed to get supported attributes via\ngetParameters API.\n\nBug: 160352965\nTest: make\nTest: atest audiopolicy_tests AudioPlaybackCaptureTest\nChange-Id: Icdfe76e15066bbff10308d6dfd1cf742da33fec9\n"
    },
    {
      "commit": "e8c355b11ff8378f81c711f45139a2b890e737af",
      "tree": "7f897bd895ca2b50f582021ebfbee1af88e1e9fc",
      "parents": [
        "42a46e90c0299f5bc83f3d882f3d211f613a9ad2",
        "3a0cf4747666fd0d38c7b95f3cbaee094ce6b9e8"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 03 20:45:00 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Nov 03 20:45:00 2020 +0000"
      },
      "message": "Merge \"Revert \"Call getAudioPort to get supported attributes for audio devices.\"\""
    },
    {
      "commit": "3a0cf4747666fd0d38c7b95f3cbaee094ce6b9e8",
      "tree": "38537e76b2e160c2041098d6e7854b000ebcf451",
      "parents": [
        "3b4270ecbebad2b5c0d6733eee3fb52e1ddb76aa"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Tue Nov 03 17:29:35 2020 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Tue Nov 03 17:29:35 2020 +0000"
      },
      "message": "Revert \"Call getAudioPort to get supported attributes for audio devices.\"\n\nThis reverts commit 3b4270ecbebad2b5c0d6733eee3fb52e1ddb76aa.\n\nReason for revert: b/172307055\n\nChange-Id: Ic22dad674bbd9eee9d3b24308e2a2e964c6406f2\n"
    },
    {
      "commit": "3e0188ff41dd932d2395d3de2d9d736f72930417",
      "tree": "205f1ba5b00f2c888982fb7e6f26a97cbe5b14f3",
      "parents": [
        "5f5c07b599ebc067ef04fe565c8567542127af2d",
        "3b4270ecbebad2b5c0d6733eee3fb52e1ddb76aa"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 02 20:48:40 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 02 20:48:40 2020 +0000"
      },
      "message": "Merge \"Call getAudioPort to get supported attributes for audio devices.\""
    },
    {
      "commit": "23c292430ce90152d03ceca3cc6b3a678626d854",
      "tree": "50c7728807bbbaf08b26ede890f639cf0ac2b48b",
      "parents": [
        "c9ae6a729ac7dfc87e969bd4693d33287edc0bf1",
        "f33115ddd726e1bb3b76565b7350a49c433afe40"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Oct 26 18:24:08 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 26 18:24:08 2020 +0000"
      },
      "message": "Merge \"Use system/audio to/from string converters in TypeConverter\""
    },
    {
      "commit": "f33115ddd726e1bb3b76565b7350a49c433afe40",
      "tree": "69db6ec5330f39b9ae64cdf65deafe04b404d617",
      "parents": [
        "d6fe406c865072f4d139756a48487d34fed0f07f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 25 23:03:05 2020 +0000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 23 00:04:22 2020 +0000"
      },
      "message": "Use system/audio to/from string converters in TypeConverter\n\nUse of system functions eliminates the need for listing all enum\nvalues in TypeConverter tables.\n\nSlight changes in the converting functions:\n\n1. \u0027channelMaskFromString\u0027 function now also accepts indexed\n   masks.\n2. Fixed UB in \u0027formatFromString\u0027 function.\n3. Removed \u0027deviceFromString\u0027 function, use\n   \u0027DeviceConverter::fromString\u0027 instead.\n\nReplaced direct includes of \u0027system/audio-base.h\u0027 with\nincludes of \u0027system/audio.h\u0027.\n\nBug: 142480271\nTest: m\nTest: atest libmedia_helper_tests\nChange-Id: Ia0e725026be80621bdc797299e63e134419b2b3d\n"
    },
    {
      "commit": "946c0035d19f2bb6bdab038e5243c67592e28017",
      "tree": "3ca3ec5dc7f4f6192a7f37edde9c7727c55c38d2",
      "parents": [
        "d6fe406c865072f4d139756a48487d34fed0f07f"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Wed Oct 21 13:04:58 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Thu Oct 22 15:13:24 2020 -0700"
      },
      "message": "APM: Fix config de-serialization\n\nAudio Policy Manager and EngineConfig now try to load only one\nreadable APM config file. Previously they could try several\nuntil one of them parses successfully. This could result in\nloading of different files by APM and EC due to use of different\nparts of the config.\n\nCentralize finding of APM config file in audio_config.h.\nThis allows using the same logic in AudioPolicyManager.cpp\nand EngineConfig.cpp which previously got duplicated\nand later diverged.\n\nEnsure that failed attempts to de-serialize config do not leave\nAPM or EC in a \"dirty\" state.\n\nBug: 171339398\nTest: check audio on the device\nTest: atest audiopolicy_engineconfig_tests\nTest: atest audiopolicy_tests\nChange-Id: I98c21ab03d869eb5f4259ea12cd433632cf6da5d\n"
    },
    {
      "commit": "9bcf4989bf3e09167503e94571b15626e56f4453",
      "tree": "f469a96aac072841fc39bc8710002b4e25a4ccd8",
      "parents": [
        "14a1a17354d3ab55804ec688051a405dc0c320d6",
        "78d02237ebe6c90d36dca7b6da5e867ac6295318"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 20 03:29:05 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 20 03:29:05 2020 +0000"
      },
      "message": "Merge \"Revert \"Use system/audio to/from string converters in TypeConverter\"\""
    },
    {
      "commit": "78d02237ebe6c90d36dca7b6da5e867ac6295318",
      "tree": "fb81c7a5bacfec08f2d9c4d71f0559a26c95d8e3",
      "parents": [
        "0f243bbaf628bf8aa873e978feb720d3354b476c"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 20 01:29:53 2020 +0000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Oct 20 01:29:53 2020 +0000"
      },
      "message": "Revert \"Use system/audio to/from string converters in TypeConverter\"\n\nRevert \"audio: Align lists of enum values between framework and HAL\"\n\nRevert submission 12851233-hal-enum-strings\n\nReason for revert: breaks slider device\nReverted Changes:\nI4f64a8b61:Use system/audio to/from string converters in Type...\nIddaa92bf2:Move enums shared with HAL to audio-hal-enums.h\nIe5896775b:audio: Align lists of enum values between framewor...\n\nBug: 171262726\nChange-Id: I7568c41c5641cf120ffacbfda4751c3bb1c4e4f8\n"
    },
    {
      "commit": "2254ae51fa1c681eb39a79a2d60f36c5d48ad0ee",
      "tree": "b36d18312a4cb3d2149a3ca02bf17d4c94d3d682",
      "parents": [
        "7bebd206b9a0366e659e7f0bf332c69fb2da2336",
        "0f243bbaf628bf8aa873e978feb720d3354b476c"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Oct 19 21:36:43 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 19 21:36:43 2020 +0000"
      },
      "message": "Merge \"Use system/audio to/from string converters in TypeConverter\""
    },
    {
      "commit": "0f243bbaf628bf8aa873e978feb720d3354b476c",
      "tree": "3c065d2ff4b39a12ea3b830e82ada2597e907ece",
      "parents": [
        "e3bca196dbe931f0d7c26394c6224784224da459"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Sep 25 23:03:05 2020 +0000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Oct 16 23:00:44 2020 +0000"
      },
      "message": "Use system/audio to/from string converters in TypeConverter\n\nUse of system functions eliminates the need for listing all enum\nvalues in TypeConverter tables.\n\nSlight changes in the converting functions:\n\n1. \u0027channelMaskFromString\u0027 function now also accepts indexed\n   masks.\n2. Fixed UB in \u0027formatFromString\u0027 function.\n3. Removed \u0027deviceFromString\u0027 function, use\n   \u0027DeviceConverter::fromString\u0027 instead.\n\nReplaced direct includes of \u0027system/audio-base.h\u0027 with\nincludes of \u0027system/audio.h\u0027.\n\nBug: 142480271\nTest: m\nChange-Id: I4f64a8b6164bb5ad94cbf1da1709cb379f4a75fa\n"
    },
    {
      "commit": "3b4270ecbebad2b5c0d6733eee3fb52e1ddb76aa",
      "tree": "863c12584b2c54fc3539bfbb85e29e670a41e740",
      "parents": [
        "29ac42b5105591c64454e06bf81b7b6782e54e81"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Sep 22 14:45:40 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Oct 14 18:19:49 2020 -0700"
      },
      "message": "Call getAudioPort to get supported attributes for audio devices.\n\nGetAudioPort API will return the supported attributes for the devices.\nCall getAudioPort to get the supported attributes for the audio\ndevices so that it is no needed to get supported attributes via\ngetParameters API.\n\nBug: 160352965\nTest: make\nTest: atest audiopolicy_tests\nChange-Id: I6bd109fcb6ffb825cbb9cf539d569e9cad44bb37\n"
    },
    {
      "commit": "9698a4cc636ac348f67fb48700c07b49cc6e4797",
      "tree": "cae27a69a92d90e6474885c38815cdd496a026a5",
      "parents": [
        "0d9a3e146f349f57024c32354fba3b2aea985af4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Oct 12 17:10:23 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Oct 13 16:44:15 2020 +0000"
      },
      "message": "audio policy manager: fix BT SCO stream mute\n\nAllow setting voice and bluetooth SCO stream volume to 0\nin checkAndSetVolume() even when the selected device is\nbluetooth SCO to allow muting VoIP call downlink.\n\nBug: 170489272\nTest: repro steps in bug.\nChange-Id: If8b2d225742f9589cd21718d8a439531996434f9\n"
    },
    {
      "commit": "55773033ed1f23c4e8f3d2704002fbd0cedbf7a5",
      "tree": "54bc894243fa3c52e611c85aed75ee6677056c13",
      "parents": [
        "7aed66e788c8955ddd22a1235856bb9dac34d82a"
      ],
      "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": "Thu Oct 08 18:12:55 2020 -0700"
      },
      "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\n"
    },
    {
      "commit": "f4de36d17ea278672c61fd1be94d36bc3ea5c340",
      "tree": "17eb2dc1f7c5b7cc4c7b1773ba6ad8684ab5d89d",
      "parents": [
        "a7f98a1ea6d6896673fa7f027c1ff3fc321f6a32"
      ],
      "author": {
        "name": "yucliu",
        "email": "yucliu@google.com",
        "time": "Mon Sep 14 14:57:56 2020 -0700"
      },
      "committer": {
        "name": "Yuchen Liu",
        "email": "yucliu@google.com",
        "time": "Tue Sep 15 17:24:47 2020 +0000"
      },
      "message": "Invalidate stream when unregistering audio policy mix\n\nInvalidate the stream if the audio policy mix on the client is removed,\nso that the client can reconnect to another output stream.\n\nBug: 167605686\nTest: Unregister audio policy by killing the app. Audio resumes.\nChange-Id: I9a00311142613df8c019206c9b7c873ec8f42b88\n"
    },
    {
      "commit": "ac744ad46d3f98c2fc1e888981cd5b8dafea5991",
      "tree": "38d068655137f9ce33e2ce42630c19843c85691e",
      "parents": [
        "72c38cc36232d08f481b234924c920fe00f06afb",
        "3b98d3208183a6a2ec4d3eb2b24a1cd53cf15c46"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 08 22:46:28 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 08 22:46:28 2020 +0000"
      },
      "message": "Merge \"Revert^2 \"Support device role for capture preset.\"\""
    },
    {
      "commit": "3b98d3208183a6a2ec4d3eb2b24a1cd53cf15c46",
      "tree": "40d78318ee59cb23fa5cfbd53fdff57035fe8b32",
      "parents": [
        "bcfb2ce24a4eb736d701197293d4337f23ba59c4"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Thu Sep 03 17:54:16 2020 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Thu Sep 03 17:54:16 2020 +0000"
      },
      "message": "Revert^2 \"Support device role for capture preset.\"\n\nbcfb2ce24a4eb736d701197293d4337f23ba59c4\n\nChange-Id: I368d562ec2aae68aa239dce75d54ca2772b30e76\n"
    },
    {
      "commit": "8dbd241e279e1a637502e38af32ef6ead483768f",
      "tree": "733edec2f52c4eadf28d30ce670bcdc848cb7fe7",
      "parents": [
        "bf1d0a629c1a606757de52b3e47785bb3304b239",
        "bcfb2ce24a4eb736d701197293d4337f23ba59c4"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Thu Sep 03 17:25:20 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 03 17:25:20 2020 +0000"
      },
      "message": "Merge \"Revert \"Support device role for capture preset.\"\""
    },
    {
      "commit": "bcfb2ce24a4eb736d701197293d4337f23ba59c4",
      "tree": "e4a01d8d1e3c5ccbd3ab7db611315a1b5ea97239",
      "parents": [
        "dddc2aef4e5f9f27a79909f475c31c96eb688200"
      ],
      "author": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Thu Sep 03 02:45:05 2020 +0000"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Thu Sep 03 02:45:05 2020 +0000"
      },
      "message": "Revert \"Support device role for capture preset.\"\n\nRevert \"Support set/clear/get preferred device for capture preset.\"\n\nRevert submission 12409575-devicesRoleForCapturePreset\n\nReason for revert: break CarAudioZonesHelperTest\nReverted Changes:\nI92fdb2cbd:Support set/clear/get preferred device for capture...\nI44e67d5b0:Add a helper function of checking if an audio sour...\nIb16ab2ec8:Support device role for capture preset.\nI46bd8dfb5:Add tests for set/get/clearPreferredDeviceForCaptu...\n\nChange-Id: I80f5267a01b48d01681a2d97cf3eb9de573ca6b5\n"
    },
    {
      "commit": "42c0447db6f279e23cf4a3dabf4e0a6764277b6b",
      "tree": "5586a760a9464d5a3617fd942f8c1967fa130dbf",
      "parents": [
        "a85c486cc4226cf2cb63c7f1542d436b6610ab86",
        "dddc2aef4e5f9f27a79909f475c31c96eb688200"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 02 16:12:47 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 02 16:12:47 2020 +0000"
      },
      "message": "Merge \"Support device role for capture preset.\""
    },
    {
      "commit": "d52a28ca2c19db7d10bc6c4639a8bd78e1afd5f1",
      "tree": "c687eda00e2c45823cdb1857c64ad48b67578819",
      "parents": [
        "615364792b6fe07869c685e4bccbf7837e1ba97b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 21 17:10:39 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 25 13:33:12 2020 -0700"
      },
      "message": "audio flinger: handle race condition in AudioRecord creation\n\nA rare race condition can cause a failure to create an AudioRecord if\ntwo creation requests are processed concurrently and thread preemption happens\nat a specific time within the sequence between audioflinger and\naudio policy manager.\n\nThis CL implements a retry mechanism on client side when this particular failure\nis detected.\n\nBug: 161656190\nTest: Regression tests for audio capture use cases.\nTest: CTS tests for AudiRecord\nChange-Id: I155ee4899baeec21e10a1141cb9e323cbc8aa23b\n"
    },
    {
      "commit": "dddc2aef4e5f9f27a79909f475c31c96eb688200",
      "tree": "40d78318ee59cb23fa5cfbd53fdff57035fe8b32",
      "parents": [
        "4a603cd0594d22d1a3a2bae5bb22009343d4b5bb"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 19 11:20:48 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Aug 25 09:42:58 2020 -0700"
      },
      "message": "Support device role for capture preset.\n\nSupport set/add/remove/clear/get device role for capture preset. The\ndevice role can be DEVICE_ROLE_PREFERRED and DEVICE_ROLE_DISABLED. The\npreferred and disabled devices can be multiple devices. In this CL,\nonly cache preferred devices in engine but not use for audio routing.\n\nBug: 160352965\nTest: atest AudioServiceHostTest\nTest: atest audiopolicy_tests\nChange-Id: Ib16ab2ec82bc288421c20df9470ac3835c71b1e8\n"
    },
    {
      "commit": "b36b4accf36ba413529a0b6735802a65f42c2f7c",
      "tree": "2a2ed23141d96dc9e9b64b2ff5d3ccbe05af5ac8",
      "parents": [
        "36f99424e9904b39adeb193273083db176ce9fd9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 21 12:50:41 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 21 12:50:41 2020 -0700"
      },
      "message": "audio policy: correct force use touch sound delay\n\nDo not apply the special delay added in setForceUse() multiple times.\nThis delay was meant to be applied only once to avoid truncating touch\nsounds but is actually used multiple times when updating routes on all\noutput streams, thus lengthening the call audio path switch time\nunnecessarily.\n\nBug: 163537547\nTest: manual call routing test\nChange-Id: I6fe15d4ed9b1f37452921585e9f7684637e8a30b\n"
    },
    {
      "commit": "47480fbfc2346a541b4513d93553a08bc6273f47",
      "tree": "bee95b2c1c98576f056a91299cd24c7ee9e11fe4",
      "parents": [
        "8dff4ae2e40d385869cdb28be4af50b615af37a2",
        "cbf9fbdcb5739b88c2f8b81ed2f7ad98071ad405"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 20 19:24:20 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Aug 20 19:24:20 2020 +0000"
      },
      "message": "Merge \"AudioPolicy: manager: force gain on startSource when using HW Gain\" am: ae1df9155c am: be7cabc2e0 am: a818367360 am: ac71d9d2e5 am: cbf9fbdcb5\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1296441\n\nChange-Id: Id874fbf1875ab66c5ba241a8194f307bab4cae2e\n"
    },
    {
      "commit": "a818367360c9262c56d0317d4f2ee76057d8c606",
      "tree": "ffa16c1cc2bd1a706fc6c08ba13e0c34f55061eb",
      "parents": [
        "693f515a9ee576dbad44413c06802a8aafbe4ccb",
        "be7cabc2e0681e4b30afed1587be71f3c3e90b25"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 20 18:40:32 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Aug 20 18:40:32 2020 +0000"
      },
      "message": "Merge \"AudioPolicy: manager: force gain on startSource when using HW Gain\" am: ae1df9155c am: be7cabc2e0\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1296441\n\nChange-Id: I6a5ad41a3b34ca3a2ca209352100c868b277b007\n"
    },
    {
      "commit": "ae1df9155cd8244cc716a2b1fdfca9975220453d",
      "tree": "0736254f088e27512ee83a33a2e73c727ed27f7d",
      "parents": [
        "246b31dc7641b7e57f113fb89e429c75ed3d5b68",
        "d11442b6e4521d825779dd55494509e046f2c9f8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 20 18:13:16 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 20 18:13:16 2020 +0000"
      },
      "message": "Merge \"AudioPolicy: manager: force gain on startSource when using HW Gain\""
    },
    {
      "commit": "c9ad9878f49137b748ec5dfcf905e778e99441c8",
      "tree": "871d3b03564f3c94570cffa87a2dfcb1b7bf4786",
      "parents": [
        "32ec02978e0b9f943795070120c2eee04427802d",
        "0f109dd701e3d326e6c0369f3fb3cbf028b9fa09"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 14 01:43:30 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Aug 14 01:43:30 2020 +0000"
      },
      "message": "Merge \"audio: add device definitions for BLE Audio\" am: 3ce5f38a37 am: 0f109dd701\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1398473\n\nChange-Id: I923a8efdf00dc6249c28576ec3972d8a2d80437c\n"
    },
    {
      "commit": "7a62f2936519104f93dc9015df22369127b37803",
      "tree": "33a0d431ef21fd9e9dce4d74981c1800dc186506",
      "parents": [
        "8debb9f333ed410669e3acbd0fb5cb7d694a2bad"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 07 10:51:53 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 13 20:19:00 2020 +0000"
      },
      "message": "audio: add device definitions for BLE Audio\n\nAdd support for device type enums for BLE Audio.\nThis CL just adds basic support in parsers and voloume curve\ncategories.\nNo policy implemented yet for the new devices.\n(cherry picked from commit c42df45d4b99c06391bca841638563335d0f59ef)\n\nBug: 161358428\nTest: make flash and boot\nChange-Id: I86134ea8436b24f817a9fe0f856e3489dd22fcc8\nMerged-In: I86134ea8436b24f817a9fe0f856e3489dd22fcc8\n"
    },
    {
      "commit": "d11442b6e4521d825779dd55494509e046f2c9f8",
      "tree": "e0aab3cd028428ddb9266ef55d98486cfd4fc59a",
      "parents": [
        "8debb9f333ed410669e3acbd0fb5cb7d694a2bad"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Apr 27 11:51:09 2020 +0200"
      },
      "committer": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Thu Aug 13 13:04:39 2020 +0200"
      },
      "message": "AudioPolicy: manager: force gain on startSource when using HW Gain\n\nWhen a setVolume is called for a given volume source on a SwOutput,\nand if the SwOutput is connected to a device using HW Gain, the sync\nof the gain on AudioHAL is guarded by the activity of this volume source.\n\nWhen a new index is applied on a given volume source, if this source is\nnot active, the new index is cached but is not synced on AudioHAL.\n\nHence, once a client (aka a source) starts on a SwOutput,\nSwAudioOutputDescriptor::setVolume is called, but as index has not changed,\nsetVolume will bail out before applying the gain to the AudioHAL.\n\nThis CL forces to sync the volume upon startSource event if the SwOutput\ninvolved is connected to a device with HW Gain enabled.\n\nTest: build \u0026 basic audio tests.\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: Ief1d5314b7970de78298750550320e329283ee1a\n"
    },
    {
      "commit": "f9cddbfe7dd95817c26b513ce6b0eecd6ec1bdfa",
      "tree": "d561c698108b245469a558f1266d39154bd54068",
      "parents": [
        "242cf3379de223e0ae5c9ceeba05e6a397b44e2d",
        "0a488938fa1c1b2b0c02b1c101281c01ff8ed103"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 13 02:24:42 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 13 02:24:42 2020 +0000"
      },
      "message": "Merge changes from topics \"devicesRoleForStrategy\", \"useAudioDevicesTypeAddrVector\"\n\n* changes:\n  Introduce device(s) role for strategy.\n  Use AudioDeviceTypeAddrVector instead of Vector\u003cAudioDeviceTypeAddr\u003e\n"
    },
    {
      "commit": "0a488938fa1c1b2b0c02b1c101281c01ff8ed103",
      "tree": "4686aa2bca38cccbbc572bbb75a2bd82d2b9153b",
      "parents": [
        "6a02d53b76d0a3ccb234a3e3d56318883cadd733"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Aug 07 17:32:40 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 12 16:19:35 2020 -0700"
      },
      "message": "Introduce device(s) role for strategy.\n\nAdding interface to get/set/removeDevicesRoleForStrategy. The interfaces\nallows to modify the devices\u0027 role, such as preferred, for strategy.\nGet/set/removePreferredDeviceForStrategy is reimplemented by the new\ninterfaces.\n\nTest: atest AudioHostTest\nTest: atest AudioServiceHostTest\nTest: atest AudioServiceTest\nTest: atest audiopolicy_tests\nBug: 160352965\nChange-Id: I0af737542a8599938cae4e142b733159f21ed5a8\n"
    },
    {
      "commit": "6a02d53b76d0a3ccb234a3e3d56318883cadd733",
      "tree": "4bd9652fccb6530787e8a25292aeb81c1d93c612",
      "parents": [
        "1d2a159395df0767ecb2320aff4dd4db3d26e6b2"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Fri Aug 07 11:56:38 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Wed Aug 12 11:24:46 2020 -0700"
      },
      "message": "Use AudioDeviceTypeAddrVector instead of Vector\u003cAudioDeviceTypeAddr\u003e\n\nAudioDeviceTypeAddrVector is std::vector\u003cAudioDeviceTypeAddr\u003e. In that\ncase, it is not needed to use Vector\u003cAudioDeviceTypeAddr\u003e. It is also\nsuggested to use the std::vector instead of Vector.\n\nTest: atest AudioHostTest\nTest: atest AudioServiceHostTest\nTest: atest audiopolicy_tests\nBug: 160352965\nChange-Id: Ibcd91fcba95c53e3c172ae62fc6f30e70509de51\n"
    },
    {
      "commit": "5ce77ca4aaa406fd3d21b86c82f0d847ad4b39fb",
      "tree": "212b27f783be6c16aa9f73b5a2c5becd863f67b4",
      "parents": [
        "dabaf72cf774fefcd788f9f057214d8bfde3f471",
        "c42df45d4b99c06391bca841638563335d0f59ef"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 10 21:25:55 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 10 21:25:55 2020 +0000"
      },
      "message": "Merge \"audio: add device definitions for BLE Audio\""
    },
    {
      "commit": "dabaf72cf774fefcd788f9f057214d8bfde3f471",
      "tree": "845ec4b18d7077f86ad05705286edb0f5cb65a9b",
      "parents": [
        "fa273c148ccca300dd85135079825573d1869aa4",
        "94c4d97bcdfa068d44d27f5164d5e13ddb07dc7f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 10 19:01:22 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Mon Aug 10 19:01:22 2020 +0000"
      },
      "message": "Merge \"Fix music output to speaker\" am: fc9e26a3e9 am: af034fc9cb am: 23b282c9f9 am: cdf738e373 am: 94c4d97bcd\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1360120\n\nChange-Id: Id5add51825a810ec1038b9baf3441692b39e8ce8\n"
    },
    {
      "commit": "23b282c9f9a7dacb0cc9000940c755a21970f1b6",
      "tree": "601935ac55c38bd96ed660bbeac909d2c8d0f263",
      "parents": [
        "85bf50bfc09cf24d8454015e7553ab31f1946ff2",
        "af034fc9cb1d3de4334bb303d53b5dc8f83aa6f5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 10 17:53:53 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Mon Aug 10 17:53:53 2020 +0000"
      },
      "message": "Merge \"Fix music output to speaker\" am: fc9e26a3e9 am: af034fc9cb\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1360120\n\nChange-Id: I84066fdea62f4ac3f559ddb7c7b1c37f5880e0fb\n"
    },
    {
      "commit": "bd2dcc4d0d6cf0ba6d7663bfb7ccfc60b9292f10",
      "tree": "ff0ee2efcda5b139f75dda189547424b241d633d",
      "parents": [
        "7c44826eaba2e3ff4483b127c6bc091e46d0604c"
      ],
      "author": {
        "name": "cnx421",
        "email": "cnx421@gmail.com",
        "time": "Sat Jul 11 14:58:44 2020 +0800"
      },
      "committer": {
        "name": "恶魔 地狱",
        "email": "cnx421@gmail.com",
        "time": "Mon Aug 10 01:24:35 2020 +0000"
      },
      "message": "Fix music output to speaker\n\nThis CL fixes a bug in audio policy where music switches to speaker when A2DP output mode switches from software encoder to offloaded encoder.\n\nBug: 153895044\n\nChange-Id: I15f707c9e96294b6cd6f21c0821c795d0570c39a\n"
    },
    {
      "commit": "c42df45d4b99c06391bca841638563335d0f59ef",
      "tree": "e5dd396d67122456532e0b9ca6fee8d19871273e",
      "parents": [
        "a524c363821353a541442e3b23449875b797b09d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 07 10:51:53 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 07 11:05:01 2020 -0700"
      },
      "message": "audio: add device definitions for BLE Audio\n\nAdd support for device type enums for BLE Audio.\nThis CL just adds basic support in parsers and voloume curve\ncategories.\nNo policy implemented yet for the new devices.\n\nBug: 161358428\nTest: make flash and boot\nChange-Id: I86134ea8436b24f817a9fe0f856e3489dd22fcc8\n"
    },
    {
      "commit": "d4ae33f6f8860c9011cafc720ffd65ea826b66b0",
      "tree": "23f3882504aa97136b87b24f99e5c14d5b5e5ca6",
      "parents": [
        "610ee6d10b62796a04f94fef253b70e55b27d2e6",
        "571ef96c1d93a19e152e06b8b4c1f1face7496db"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Aug 01 01:33:25 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Aug 01 01:33:25 2020 +0000"
      },
      "message": "Merge \"audio policy: remove log spam for voice and sco volumes\""
    },
    {
      "commit": "571ef96c1d93a19e152e06b8b4c1f1face7496db",
      "tree": "ed7f9ede52ef0957a91967983188aafaa3269588",
      "parents": [
        "04698a346d637e4db1fc400b102f04fdfa9b5835"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 24 11:43:48 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 24 13:51:35 2020 -0700"
      },
      "message": "audio policy: remove log spam for voice and sco volumes\n\nDo not return an error in checkAndSetVolume() when SCO volume is modified\nwhile SCO is not active as AudioService will always set both voice call\nand SCO volumes at the same time regardless of SCO activity.\n\nTest: Use call screening to check downlink mute.\nChange-Id: I7501b28266ec4d591378d7bc4453bb5840e03af1\n"
    },
    {
      "commit": "cdb2b35c0f159a1a244599010ee9210d1e34c71d",
      "tree": "b939b6b611f12a4fa7dffb396fe85bd148d55151",
      "parents": [
        "04698a346d637e4db1fc400b102f04fdfa9b5835"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 23 10:57:02 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 23 10:57:02 2020 -0700"
      },
      "message": "audio policy: fix beacon mute delay\n\nOnly take output latency into account when the output is active\nwhen muting TTS stream. This avoid a systematic long delay the\nfirst time we play audio due to first beacon mute state change.\n\nBug: 37923452\nTest: repro steps in bug\nChange-Id: I10b21a55c0fad28344108b67756f600a29e41fea\n"
    },
    {
      "commit": "2fc9d15ee62c7291c30c33dd82c386bf8e071f07",
      "tree": "7b8034a795fd0cc519d80992c292f1c8e658f1fb",
      "parents": [
        "c19184310b3e24433d23658e4f2e72314b557225",
        "ebb6af45d3741a33259ea6bf8a5fc87881982943"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 07 00:06:16 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 07 00:06:16 2020 +0000"
      },
      "message": "Merge \"Select haptic output when haptic-generating effect exists.\""
    },
    {
      "commit": "7997351bc447cbbff9dc255faf62bc89c1c180c6",
      "tree": "c7c20ace22c488e57290f9f51ea4c599e4acc5c2",
      "parents": [
        "40eb0159372c16376a0755e5b86a3f7586fc3294",
        "e9458106aa39881cfa08673faf752f6ca6ea8e94"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@android.com",
        "time": "Wed Jul 01 23:11:06 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Jul 01 23:11:06 2020 +0000"
      },
      "message": "Merge \"Include what you use: \u003ccutils/bitops.h\u003e for popcount\" am: a4d629d311 am: e9458106aa\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1354145\n\nChange-Id: I1613f16bdb589ab57f6d687578b0af9cbc7c664b\n"
    },
    {
      "commit": "76a13443cbfc7af0561522af166937ef370e2b68",
      "tree": "ce5cd8c1203122b61d05e446929977a85856c4b3",
      "parents": [
        "dbb9895007a7ecee6e2cc62705b24ba08b09932d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 01 12:10:59 2020 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 01 12:14:19 2020 -0700"
      },
      "message": "Include what you use: \u003ccutils/bitops.h\u003e for popcount\n\nTest: builds OK\nChange-Id: Ie717272df285303a63518f0342e1a4d2f41362c3\n"
    },
    {
      "commit": "456051d0b9f41986e982b07d4b5462e377534bfe",
      "tree": "78cb394b36e0265d54823dff9d826f582951acf6",
      "parents": [
        "04435f6bec3e65c1d4cfd0e356b89a2d025fb696",
        "5f829dead32af6da25656e77203f4ca59e578ba5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 30 16:39:05 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Jun 30 16:39:05 2020 +0000"
      },
      "message": "Merge \"Fix direct/offload thread output devices into MSD\" am: 24c46f1741 am: 5f829dead3\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1340017\n\nChange-Id: Ib15f682b137b827cd6d3cdf4ff75803ed06bf17c\n"
    },
    {
      "commit": "514b431cac26626260df703a7b1504717b948e22",
      "tree": "15050e1e0fd465901076dfc1fa8a65b9179bd7cf",
      "parents": [
        "c1d40b64b1ee652f173153fb2520201bbed56679"
      ],
      "author": {
        "name": "Dean Wheatley",
        "email": "dwhea@dolby.com",
        "time": "Wed Jun 17 21:45:00 2020 +1000"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Mon Jun 29 23:13:56 2020 +0000"
      },
      "message": "Fix direct/offload thread output devices into MSD\n\nWithout this change, direct/offload threads show\n\"Output devices:  (Empty device types)\". Empty device\ncauses timestamp correction to always be disabled for\noutput threads requiring timestamp correction.\n\nTest: check direct/offload output into MSD dumpsys output devices\n      atest audiopolicy_tests\nBug: 159948389\nChange-Id: I7006c9da2f0a228dd49ce0297c30035fef983090\n"
    },
    {
      "commit": "ebb6af45d3741a33259ea6bf8a5fc87881982943",
      "tree": "f4ce87071a3b0a650d5dc12d9301436417c58e09",
      "parents": [
        "1495d23d7b282a1e9a5d522eafe565a924667351"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Jun 09 17:31:17 2020 -0700"
      },
      "committer": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue Jun 23 15:25:17 2020 -0700"
      },
      "message": "Select haptic output when haptic-generating effect exists.\n\nHaptic-generating effect must be attached to haptic output thread as it\nrequires writing haptic channels. In that case, when haptic-generating\neffect exist, try to select the output that it is attatched to.\n\nBug: 136490803\nTest: make\nChange-Id: I6be84a3edac1094d6e457b3226c3930f28219167\n"
    },
    {
      "commit": "79ea958e3bedbdfe625fffdd0423a4b94dfc1182",
      "tree": "bf4ff094fd9c8e233c4db2fc9f9bde4cf128ebbf",
      "parents": [
        "3244d0db9d52223d417df71b6343064adbcad957"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 11 18:49:24 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 12 17:26:33 2020 -0700"
      },
      "message": "Audio policy: fix failure to unmute strategy.\n\nWhen setOutputDevices() is called with a device not supported by the\noutput profile, checkDeviceMuteStrategies() was not called.\nIf a strategy was muted by this output because of a previous\ndevice combination, it will never be unmuted.\nA typical repro scenario is:\n1) music plays over A2DP via offload path\n2) incoming call: ringtone plays over speaker + A2DP\n   \u003d\u003e music is paused by audio focus\n3) music manually resumed\n   \u003d\u003e media strategy is muted because it cannot play over\na2dp + speaker\n4) call answered and routed to earpiece\n   a) offload output is routed to earpiece which is not\nsupported by offload output profile\n   \u003d\u003e we fail to unmute media\n   b) music stream is invalidated because earpiece is\n   not supported by offload output\n   \u003d\u003e offload output is closed and we will never unmute media strategy\n\nFixed by calling checkDeviceMuteStrategies() before exiting in\ncase of unsupported device.\n\nBug: 157344812\nTest: repro steps in bug\nTest: audio regression tests\nChange-Id: I0c1c189c038803a584dc222aee50c3a99c572263\n"
    },
    {
      "commit": "c209fe49e74dc30100a6f409c616f04382d48f05",
      "tree": "afa05faf2118a2f09b308341a9d227df57bcb723",
      "parents": [
        "ea5f4133c7c029ffb988f4aa454c45c86294531c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 05 18:11:23 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 08 18:56:15 2020 -0700"
      },
      "message": "audio policy: output selection upon dynamic policy registration\n\nForce reevalution of output selection for AudioTrack clients when a\ndynamic audio policy (DAP) of type RENDER is registered or unregistered.\nFor LOOPBACK policies, this is not needed because the remote submix\ndevice is connected or disconnected triggering output reevaluation.\n\nAlso refactor checkOutputForAttributes to take actual output selection\nfor each client associated to a DAP instead of blindly forcing stream\ninvalidation as soon as an output associated with a DAP is found.\nThis covers direct outputs as the output is not opened when the DAP\nis registered.\n\nBug: 130296239\nTest: AudioHostTest\nTest: AudioServiceHostTest\nTest: audiopolicy_tests\nTest: regression with auto projected mode and live caption\nChange-Id: I07977e7902eb31c59621462a8fe2d7d1a4b1ba36\n"
    },
    {
      "commit": "8e544543add8e4e0e53f6b27a265254e6af2422b",
      "tree": "00175e73755007accffd18f0b48d40a2360bc303",
      "parents": [
        "e0c3d791757109b0302cf74e7027bcada2221b1f"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon May 11 14:12:53 2020 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 02 14:17:13 2020 -0700"
      },
      "message": "AudioPolicy: manager: fix patch list growing up\n\ncommit 3b17354a caused potential stale audio patches\nrecords in audio policy manager for patches associated\nwith audio flinger software patches sharing an output mixer.\n\nBug: 136121584\nTest: dumpsys media.audio_policy \u0026\u0026\nadb shell /data/nativetest64/AudioPolicyEmulatorTests/AudioPolicyEmulatorTests --gtest_filter\u003dAudioPatchTest/AudioModeBridgingTest.\n\u0026\u0026 dumpsys media.audio_policy:\nensure list of patches did not grow up\nTest: atest audiopolicy_tests\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: Ife8035dc2d2d9c0b568d6847ca5eb0d2cba77cea\n"
    },
    {
      "commit": "1c4794bfdee92c9491312432bd966d2439c49179",
      "tree": "0947f6dea04e00753357a87d2ab38cb9d6fd13e4",
      "parents": [
        "eaad70fbfcec64206f42a11071efa683efe0c3ab"
      ],
      "author": {
        "name": "jiabin",
        "email": "jiabin@google.com",
        "time": "Tue May 05 10:08:05 2020 -0700"
      },
      "committer": {
        "name": "Jiabin Huang",
        "email": "jiabin@google.com",
        "time": "Fri May 08 00:37:55 2020 +0000"
      },
      "message": "Support query encapsualtion modes and metadata types.\n\nWhen a new device is attached to hardware module, query the HAL to get\nthe supported encapsulation modes and metadata types.\n\nTest: atest EnumDevicesTest, manually\nTest: atest audiofoundation_parcelable_test\nBug: 155799506\nChange-Id: I903e46e35a44416c9f2d206c128face8a6c61dcb\n"
    },
    {
      "commit": "c64e0ab206323877dc4bc6cdefa509c0e8f5e08f",
      "tree": "e52e7cac0bccd47305ab7e571d132c8f9737c8a2",
      "parents": [
        "199012b0c66d555207d81fedb7cce16305c865f8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 30 15:59:34 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 30 15:59:34 2020 -0700"
      },
      "message": "audio policy: fix crash if output for DAP is not opened\n\nFix crash in getOutputForAttrInt() if the output corresponding to\nthe mix returned by AudioPolicyMix is not opened and the device\nselected by the mix is not attached.\nBefore commit c529cf6f, a policy mix without opened output would not\nbe retuned by AudioPolicyMix.getOutputForAttr(). With direct\noutput suppoort, this is possible but should be ignored if the device\nselected by the policy mix is not attached.\n\nBug: 155430290\nTest: AudioHostTest\nTest: AudioServiceHostTest\nTest: audiopolicy_tests\nTest: manual mirroring and car projection tests\nChange-Id: I66be4a3c5fb8b9ae0674c0f1e6e39de7f18ed2fb\n"
    },
    {
      "commit": "0e26e3f980a9904f23f24b0390844dcfeedd1418",
      "tree": "537c172187d9dd6bf3155c0a2a9c85c7b0a06669",
      "parents": [
        "ec660f185a1e212b1d22125de81e9bd1d0ff58a3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 29 14:24:16 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Apr 30 00:15:50 2020 +0000"
      },
      "message": "Audio policy: fix areAllDevicesSupported()\n\nFix areAllDevicesSupported() where HwModules.getDeviceDescriptor()\nmust be called with matchAddress \u003d\u003d true: if the caller does not want to\ndistinguish on address it can leave the address field empty in the\nAudioDeviceTypeAddr passed which has the same effect as using\nmatchAddress \u003d\u003d false.\n\nAlso fix places where device_distinguishes_on_address() was improperly\nused in place of audio_is_remote_submix_device().\n\nBug: 155224229\nTest: build and launch car emulator\nTest: AudioHostTest\nTest: AudioServiceHostTest\nTest: audiopolicy_tests\nTest: manual mirroring and car projection tests\nChange-Id: I74295de95bcd82e7fa439c396ae32749b9c70c05\n"
    },
    {
      "commit": "c529cf6fa9b500506d675ec971909dba18cfb71b",
      "tree": "ebd662d9270ac9ca37849fa7a44b16fe73cd4abd",
      "parents": [
        "02d69c15b683418de39901a74f1eea8ddbfcbf40"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 17 18:19:10 2020 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 27 14:42:06 2020 -0700"
      },
      "message": "audio policy: allow direct outputs for dynamic audio policies\n\nAdd support for direct outputs with RENDER audio policy mixes.\nA mix of type render can be registered even if no corresponding\noutput is opened to reach targeted device provided a direct output\nprofile exist for this device.\n\nAlso:\n- Fix setUidDeviceAffinities(): was not closing direct outputs\nopened by checkOutputsForDevice() and was not re-evaluating routes\n\n- Fix removeUidDeviceAffinities(): was not re-evaluating routes\n\n- Implement consistent sanity checks on selected devices in\nsetUidDeviceAffinities(), setUserIdDeviceAffinities() and\nsetPreferredDeviceForStrategy().\n\n- Fix onNewAudioModulesAvailableInt(): attached devices reachable only\nvia direct outputs were not loaded.\n\nBug: 130296239\nTest: AudioHostTest\nTest: AudioServiceHostTest\nTest: audiopolicy_tests\nTest: manual test: Auto projection over USB, screen mirroring\nChange-Id: I54470b61b4bc7e041e3a295764d368c5ded21268\n"
    },
    {
      "commit": "27cf37ca3ed87077c4beaceb2f7373c98e16737c",
      "tree": "f22fffa28ae98f0bb8319aaa0a5a82f15ed8fb89",
      "parents": [
        "a6127a935639f127db56974851abc2dda360eca2"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Apr 14 14:47:01 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Fri Apr 17 01:54:47 2020 +0000"
      },
      "message": "audio: Centralize audio configuration paths specification\n\nThe list of possible paths for the audio configuration\nfiles is now retrieved using audio_get_configuration_paths()\nfunction. All duplicated lists of known configuration\ndirectories have been removed.\n\nBug: 153680356\nTest: test audio on built image working\n      atest VtsHalAudioV6_0TargetTest VtsHalAudioPolicyV6_0TargetTest\nChange-Id: I8c369442f5ca7baa17df95e6a001396fc9de5681\nMerged-In: I8c369442f5ca7baa17df95e6a001396fc9de5681\n"
    },
    {
      "commit": "a89bd207aad8de70d4376ec7108306f18fcc8133",
      "tree": "75372d956702224c0f0624d2d7ee4e486b493e5a",
      "parents": [
        "a85def6612ade71bd31a0d60e45ee7e0068af638",
        "c0884de8b9a3c7ba3755356717b94bfdfc5eb31d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 16 23:21:24 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Apr 16 23:21:24 2020 +0000"
      },
      "message": "Merge \"audio: Centralize audio configuration paths specification\" am: c0884de8b9\n\nChange-Id: I4efd1b4423efe2734c7ba79a3bac75ceb78f0036\n"
    },
    {
      "commit": "c0884de8b9a3c7ba3755356717b94bfdfc5eb31d",
      "tree": "79fd2da36b706d97e239e988221cfd34069d24d6",
      "parents": [
        "ada7c446d5579a57238a2fd89bcee6ca32c68786",
        "edc0ae1ebc8ec716f327269552ceaf81fbd874a0"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 16 23:05:30 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 16 23:05:30 2020 +0000"
      },
      "message": "Merge \"audio: Centralize audio configuration paths specification\""
    },
    {
      "commit": "edc0ae1ebc8ec716f327269552ceaf81fbd874a0",
      "tree": "f393c230c74478be53856618c5169998f0ff71b0",
      "parents": [
        "04f759bfd400f64bd7d17e9e3fd725d1e2cea31e"
      ],
      "author": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Apr 14 14:47:01 2020 -0700"
      },
      "committer": {
        "name": "Mikhail Naganov",
        "email": "mnaganov@google.com",
        "time": "Tue Apr 14 14:47:01 2020 -0700"
      },
      "message": "audio: Centralize audio configuration paths specification\n\nThe list of possible paths for the audio configuration\nfiles is now retrieved using audio_get_configuration_paths()\nfunction. All duplicated lists of known configuration\ndirectories have been removed.\n\nBug: 153680356\nTest: test audio on built image working\n      atest VtsHalAudioV5_0TargetTest VtsHalAudioPolicyV1_0TargetTest\nChange-Id: I8c369442f5ca7baa17df95e6a001396fc9de5681\n"
    },
    {
      "commit": "2beb1dedfdc0c7f92fa4dc4628795578291dc7ad",
      "tree": "1332ca819b7e2d3f222a4afbd39d3585320b87aa",
      "parents": [
        "19b1a8e0b729d0fc06518e5c5619950b747aaaab",
        "8607a8bae7da02e77166da6079f4a1ff24261919"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 14 21:16:47 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Apr 14 21:16:47 2020 +0000"
      },
      "message": "Merge \"AudioPolicy: managerdefault: fix onAudioDeviceUpdate callback\" am: 8607a8bae7\n\nChange-Id: Ie17695801cdb5266c8dd8cb816ced979ae2095f5\n"
    },
    {
      "commit": "8607a8bae7da02e77166da6079f4a1ff24261919",
      "tree": "31b3c6faab94e2e0de3c044bcaa177092ef07055",
      "parents": [
        "a224da5c41cc54a526bfed7a2027223557167f89",
        "3b17354a89c230442c81211ccdb64653a4defa12"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 14 21:00:06 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 14 21:00:06 2020 +0000"
      },
      "message": "Merge \"AudioPolicy: managerdefault: fix onAudioDeviceUpdate callback\""
    },
    {
      "commit": "3b17354a89c230442c81211ccdb64653a4defa12",
      "tree": "1898597d4c8bcfcf90acea0ca40ae47575d2cf88",
      "parents": [
        "6861be79547c425ee21370bef55adbdd7bcb54c3"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Apr 06 17:39:47 2020 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 13 20:25:00 2020 +0000"
      },
      "message": "AudioPolicy: managerdefault: fix onAudioDeviceUpdate callback\n\nScenario: startAudioSource (SW bridge) started, then stopped.\nAF patch is released, so PlaybackThread has empty patch.\n\nNext playback using the same sink will not recreate any patch\non AF as same device (and output desc has still valid patch handle)\n\nHence, ioconfichanged will get PORT NONE as sink device, no\nonAudioDeviceUpdate cb can be fired.\n\nThis CL fixes this issue by reset of patch handle on the output\n\nTest: startAudioSource / stopAudioSource then playback on the same\nsink. Ensure onAudioDeviceUpdate is fired\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: Ia9c2570f687166f38335ed7efae28920f7acc474\nMerged-In: Ia9c2570f687166f38335ed7efae28920f7acc474\n"
    },
    {
      "commit": "7feb854e9ff78e8ca64e012af874503569905924",
      "tree": "5fc22308c6ebd0a7f2066a8d7acf19a18e4347a5",
      "parents": [
        "141095dce0006e73b7941367c4b03f64c6ae997d"
      ],
      "author": {
        "name": "Francois Gaffie",
        "email": "francois.gaffie@renault.com",
        "time": "Mon Apr 06 17:39:47 2020 +0200"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 13 13:21:15 2020 -0700"
      },
      "message": "AudioPolicy: managerdefault: fix onAudioDeviceUpdate callback\n\nScenario: startAudioSource (SW bridge) started, then stopped.\nAF patch is released, so PlaybackThread has empty patch.\n\nNext playback using the same sink will not recreate any patch\non AF as same device (and output desc has still valid patch handle)\n\nHence, ioconfichanged will get PORT NONE as sink device, no\nonAudioDeviceUpdate cb can be fired.\n\nThis CL fixes this issue by reset of patch handle on the output\n\nBug: 136121584\nTest: startAudioSource / stopAudioSource then playback on the same\nsink. Ensure onAudioDeviceUpdate is fired\nTest: atest RoutingTest\n\nSigned-off-by: Francois Gaffie \u003cfrancois.gaffie@renault.com\u003e\nChange-Id: Ia9c2570f687166f38335ed7efae28920f7acc474\n"
    },
    {
      "commit": "4da6b39d74fb762d06cda16762514b11df098954",
      "tree": "712d62f18fa99438e6669351161327d2ecf62526",
      "parents": [
        "b3358b86368d4b4bd52bf5ab1b9495c39465b435",
        "674ce2363382aced0104f52addf191364aa4e6a5"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Tue Apr 07 11:26:39 2020 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Tue Apr 07 11:26:39 2020 -0700"
      },
      "message": "DO NOT MERGE - Merge QQ2A.200405.005 into master\n\nBug: 150877681\nMerged-In: I9425baa21c82d5a5edf37c87989adbade0428b67\nChange-Id: I1bb8ab72286578d07cfd23fdad1f0ddc17949db6\n"
    }
  ],
  "next": "2e717a0265d6b95094946fb5ca41035019fa9716"
}
