summaryrefslogtreecommitdiff
path: root/blur_sysprop_notifier
diff options
context:
space:
mode:
authorRobin Lee <rgl@google.com>2021-10-28 15:21:46 +0200
committerRobin Lee <rgl@google.com>2021-10-28 17:55:11 +0200
commit604d040c2ceb2dc6abd2615e49dfa0e94272a42f (patch)
treeeac8acd201e2928c485aded3fd894852e262366d /blur_sysprop_notifier
parent29ff5d318260bfd3886385622f31073ddf91ee10 (diff)
downloadatv-604d040c2ceb2dc6abd2615e49dfa0e94272a42f.tar.gz
Add a script to reset blur on changed sysprop
This triggers on vendor.media.gpu_readable changing value. This is a temporary solution for the problem that some TV devices silently use GPU-unreadable formats for video playback and this breaks the blur implementation of Android 12. Bug: 187937968 Test: adb root; adb shell setprop vendor.media.gpu_readable 0 Test: Manually verify that blur falls back to simple translucency Change-Id: Ic93d85deec74f9f840896f36e36a7b0f61afdae5
Diffstat (limited to 'blur_sysprop_notifier')
-rw-r--r--blur_sysprop_notifier/Android.bp24
-rw-r--r--blur_sysprop_notifier/blur_sysprop_notifier.cpp57
-rw-r--r--blur_sysprop_notifier/blur_sysprop_notifier.rc9
3 files changed, 90 insertions, 0 deletions
diff --git a/blur_sysprop_notifier/Android.bp b/blur_sysprop_notifier/Android.bp
new file mode 100644
index 0000000..dcfbe1b
--- /dev/null
+++ b/blur_sysprop_notifier/Android.bp
@@ -0,0 +1,24 @@
+package {
+ default_applicable_licenses: ["device_google_atv_license"],
+}
+
+cc_binary {
+ name: "blur_sysprop_notifier",
+ system_ext_specific: true,
+
+ srcs: ["blur_sysprop_notifier.cpp"],
+
+ init_rc: ["blur_sysprop_notifier.rc"],
+
+ shared_libs: [
+ "libcutils",
+ "libutils",
+ "libbinder",
+ ],
+
+ cflags: [
+ "-DXP_UNIX",
+ "-Wall",
+ "-Werror",
+ ],
+}
diff --git a/blur_sysprop_notifier/blur_sysprop_notifier.cpp b/blur_sysprop_notifier/blur_sysprop_notifier.cpp
new file mode 100644
index 0000000..039d627
--- /dev/null
+++ b/blur_sysprop_notifier/blur_sysprop_notifier.cpp
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <binder/Parcel.h>
+#include <binder/ProcessState.h>
+#include <binder/IServiceManager.h>
+#include <binder/TextOutput.h>
+#include <cutils/ashmem.h>
+
+#include <getopt.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+using namespace android;
+
+/**
+ * This is a small program designed to trigger notifySyspropsChanged in the system
+ * server. This exists in order to fix an issue with missing callbacks for unreadable
+ * GPU buffers on TV devices and should be removed as soon as possible.
+ */
+int main() {
+ sp<IServiceManager> sm = defaultServiceManager();
+
+ if (sm == nullptr) {
+ aerr << "service: Unable to get default service manager!" << endl;
+ return 20;
+ }
+
+ sp<IBinder> service = sm->checkService(String16("activity"));
+ if (service != nullptr) {
+ Parcel data;
+ service->transact(IBinder::SYSPROPS_TRANSACTION, data, NULL, 0);
+ } else {
+ aout << "ActivityManagerService not found" << endl;
+ return 10;
+ }
+ return 0;
+}
diff --git a/blur_sysprop_notifier/blur_sysprop_notifier.rc b/blur_sysprop_notifier/blur_sysprop_notifier.rc
new file mode 100644
index 0000000..92089e3
--- /dev/null
+++ b/blur_sysprop_notifier/blur_sysprop_notifier.rc
@@ -0,0 +1,9 @@
+service blur_sysprop_notifier /system_ext/bin/blur_sysprop_notifier
+ class core
+ user shell
+ group shell
+ oneshot
+ disabled
+
+on property:vendor.media.gpu.readable=*
+ start blur_sysprop_notifier