aboutsummaryrefslogtreecommitdiff
path: root/plugin_store/DrmGrallocHelpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugin_store/DrmGrallocHelpers.cpp')
-rw-r--r--plugin_store/DrmGrallocHelpers.cpp110
1 files changed, 0 insertions, 110 deletions
diff --git a/plugin_store/DrmGrallocHelpers.cpp b/plugin_store/DrmGrallocHelpers.cpp
deleted file mode 100644
index 0e2cca9..0000000
--- a/plugin_store/DrmGrallocHelpers.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "DrmGrallocHelper"
-
-#include <v4l2_codec2/plugin_store/DrmGrallocHelpers.h>
-
-#include <fcntl.h>
-#include <glob.h>
-
-#include <string>
-#include <vector>
-
-#include <cutils/properties.h>
-#include <drm/drm.h>
-#include <log/log.h>
-
-namespace android {
-namespace {
-
-// Return a list of paths that matches |pattern|, the unix style pathname pattern.
-std::vector<std::string> glob(const std::string& pattern) {
- glob_t glob_result;
- memset(&glob_result, 0, sizeof(glob_result));
-
- std::vector<std::string> paths;
- if (glob(pattern.c_str(), GLOB_ERR | GLOB_NOESCAPE, NULL, &glob_result) == 0) {
- for (size_t i = 0; i < glob_result.gl_pathc; ++i) {
- paths.emplace_back(glob_result.gl_pathv[i]);
- }
- }
-
- globfree(&glob_result);
- return paths;
-}
-
-std::optional<std::string> propertyGetString(const char* key) {
- char buf[PROPERTY_VALUE_MAX];
- int len = property_get(key, buf, nullptr);
- if (len == 0) {
- return std::nullopt;
- }
- return std::string(buf, len);
-}
-
-} // namespace
-
-std::optional<int> openRenderFd() {
- constexpr char kDevNamePropertyKey[] = "ro.vendor.v4l2_codec2.drm_device_name";
- constexpr char kDevPathPropertyKey[] = "ro.vendor.v4l2_codec2.drm_device_path";
-
- const auto devName = propertyGetString(kDevNamePropertyKey);
- if (!devName) {
- ALOGE("Failed to get DRM device name from Android property");
- return std::nullopt;
- }
-
- const auto devPath = propertyGetString(kDevPathPropertyKey).value_or("/dev/dri/renderD*");
- for (const auto filePath : glob(devPath)) {
- int fd = open(filePath.c_str(), O_RDWR | O_CLOEXEC);
- if (fd < 0) {
- continue;
- }
-
- char name[32];
- struct drm_version v;
- memset(&v, 0, sizeof(v));
- v.name = name;
- v.name_len = sizeof(name);
-
- if (ioctl(fd, static_cast<int>(DRM_IOCTL_VERSION), &v)) {
- close(fd);
- continue;
- }
- if (devName->size() != v.name_len || *devName != name) {
- close(fd);
- continue;
- }
- return fd;
- }
- return std::nullopt;
-}
-
-std::optional<uint32_t> getDrmHandle(int renderFd, int primeFd) {
- ALOGV("%s(renderFd=%d, primeFd=%u)", __func__, renderFd, primeFd);
-
- struct drm_prime_handle prime;
- memset(&prime, 0, sizeof(prime));
- prime.fd = primeFd;
-
- if (ioctl(renderFd, static_cast<int>(DRM_IOCTL_PRIME_FD_TO_HANDLE), &prime)) {
- ALOGE("Can't translate prime fd %d to handle", prime.fd);
- return std::nullopt;
- }
- return prime.handle;
-}
-
-void closeDrmHandle(int renderFd, uint32_t handle) {
- ALOGV("%s(renderFd=%d, handle=%u)", __func__, renderFd, handle);
-
- struct drm_gem_close gem;
- memset(&gem, 0, sizeof(gem));
- gem.handle = handle;
-
- ioctl(renderFd, DRM_IOCTL_GEM_CLOSE, &gem);
-}
-
-} // namespace android