aboutsummaryrefslogtreecommitdiff
path: root/src/common/QuirksManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/QuirksManager.cpp')
-rw-r--r--src/common/QuirksManager.cpp25
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);
+}