diff options
Diffstat (limited to 'src/common/QuirksManager.cpp')
-rw-r--r-- | src/common/QuirksManager.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/common/QuirksManager.cpp b/src/common/QuirksManager.cpp index aa285de0..5d35c71b 100644 --- a/src/common/QuirksManager.cpp +++ b/src/common/QuirksManager.cpp @@ -20,10 +20,6 @@ #include "OboeDebug.h" #include "QuirksManager.h" -#ifndef __ANDROID_API_R__ -#define __ANDROID_API_R__ 30 -#endif - using namespace oboe; int32_t QuirksManager::DeviceQuirks::clipBufferSize(AudioStream &stream, @@ -74,6 +70,9 @@ public: std::string chipname = getPropertyString("ro.hardware.chipname"); isExynos9810 = (chipname == "exynos9810"); + isExynos990 = (chipname == "exynos990"); + + mBuildChangelist = getPropertyInteger("ro.build.changelist", 0); } virtual ~SamsungDeviceQuirks() = default; @@ -98,6 +97,17 @@ public: && builder.getInputPreset() != oboe::InputPreset::Camcorder; } + bool isMMapSafe(const AudioStreamBuilder &builder) override { + const bool isInput = builder.getDirection() == Direction::Input; + // This detects b/159066712 , S20 LSI has corrupt low latency audio recording + // and turns off MMAP. + // See also https://github.com/google/oboe/issues/892 + bool mRecordingCorrupted = isInput + && isExynos990 + && mBuildChangelist < 19350896; + return !mRecordingCorrupted; + } + private: // Stay farther away from DSP position on Exynos devices. static constexpr int32_t kBottomMarginExynos = 2; @@ -105,6 +115,8 @@ private: static constexpr int32_t kTopMargin = 1; bool isExynos = false; bool isExynos9810 = false; + bool isExynos990 = false; + int mBuildChangelist = 0; }; QuirksManager::QuirksManager() { @@ -203,3 +215,8 @@ bool QuirksManager::isConversionNeeded( return conversionNeeded; } + +bool QuirksManager::isMMapSafe(AudioStreamBuilder &builder) { + if (!OboeGlobals::areWorkaroundsEnabled()) return true; + return mDeviceQuirks->isMMapSafe(builder); +} |