2 * Copyright (C) 2015 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef ANDROID_DRM_FRAMEBUFFER_
18 #define ANDROID_DRM_FRAMEBUFFER_
22 #include <sync/sync.h>
24 #include <ui/GraphicBuffer.h>
28 struct DrmFramebuffer {
29 DrmFramebuffer() : release_fence_fd_(-1) {
33 if (release_fence_fd() >= 0)
34 close(release_fence_fd());
38 return buffer_ != NULL;
41 sp<GraphicBuffer> buffer() {
45 int release_fence_fd() {
46 return release_fence_fd_;
49 void set_release_fence_fd(int fd) {
50 if (release_fence_fd_ >= 0)
51 close(release_fence_fd_);
52 release_fence_fd_ = fd;
55 bool Allocate(uint32_t w, uint32_t h) {
57 if (buffer_->getWidth() == w && buffer_->getHeight() == h)
60 if (release_fence_fd_ >= 0) {
61 if (sync_wait(release_fence_fd_, kReleaseWaitTimeoutMs) != 0) {
62 ALOGE("Wait for release fence failed\n");
68 buffer_ = new GraphicBuffer(w, h, PIXEL_FORMAT_RGBA_8888,
69 GRALLOC_USAGE_HW_FB | GRALLOC_USAGE_HW_RENDER |
70 GRALLOC_USAGE_HW_COMPOSER);
71 release_fence_fd_ = -1;
79 if (release_fence_fd_ >= 0) {
80 close(release_fence_fd_);
81 release_fence_fd_ = -1;
87 int WaitReleased(int timeout_milliseconds) {
90 if (release_fence_fd_ < 0)
93 int ret = sync_wait(release_fence_fd_, timeout_milliseconds);
97 // Somewhat arbitrarily chosen, but wanted to stay below 3000ms, which is the
99 static const int kReleaseWaitTimeoutMs = 1500;
102 sp<GraphicBuffer> buffer_;
103 int release_fence_fd_;
107 #endif // ANDROID_DRM_FRAMEBUFFER_