diff options
author | Robin Lee <rgl@google.com> | 2021-10-28 15:21:46 +0200 |
---|---|---|
committer | Robin Lee <rgl@google.com> | 2021-10-28 17:55:11 +0200 |
commit | 604d040c2ceb2dc6abd2615e49dfa0e94272a42f (patch) | |
tree | eac8acd201e2928c485aded3fd894852e262366d /blur_sysprop_notifier | |
parent | 29ff5d318260bfd3886385622f31073ddf91ee10 (diff) | |
download | atv-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.bp | 24 | ||||
-rw-r--r-- | blur_sysprop_notifier/blur_sysprop_notifier.cpp | 57 | ||||
-rw-r--r-- | blur_sysprop_notifier/blur_sysprop_notifier.rc | 9 |
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 |