diff options
Diffstat (limited to 'bufferinfo/BufferInfoGetter.h')
-rw-r--r-- | bufferinfo/BufferInfoGetter.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/bufferinfo/BufferInfoGetter.h b/bufferinfo/BufferInfoGetter.h new file mode 100644 index 0000000..fad3d16 --- /dev/null +++ b/bufferinfo/BufferInfoGetter.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2020 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. + */ + +#ifndef ANDROID_BUFFERINFOGETTER_H_ +#define ANDROID_BUFFERINFOGETTER_H_ + +#include <drm/drm_fourcc.h> +#include <hardware/gralloc.h> + +#include "drm/DrmDevice.h" +#include "drmhwcgralloc.h" + +#ifndef DRM_FORMAT_INVALID +#define DRM_FORMAT_INVALID 0 +#endif + +namespace android { + +class BufferInfoGetter { + public: + virtual ~BufferInfoGetter() { + } + + virtual int ConvertBoInfo(buffer_handle_t handle, hwc_drm_bo_t *bo) = 0; + + bool IsHandleUsable(buffer_handle_t handle); + + static BufferInfoGetter *GetInstance(); + + static bool IsDrmFormatRgb(uint32_t drm_format); +}; + +class LegacyBufferInfoGetter : public BufferInfoGetter { + public: + using BufferInfoGetter::BufferInfoGetter; + + int Init(); + + int ConvertBoInfo(buffer_handle_t handle, hwc_drm_bo_t *bo) override = 0; + + static LegacyBufferInfoGetter *CreateInstance(); + + static uint32_t ConvertHalFormatToDrm(uint32_t hal_format); + const gralloc_module_t *gralloc_; +}; + +#define LEGACY_BUFFER_INFO_GETTER(getter_) \ + LegacyBufferInfoGetter *LegacyBufferInfoGetter::CreateInstance() { \ + auto *instance = new getter_(); \ + if (!instance) \ + return NULL; \ + \ + int ret = instance->Init(); \ + if (ret) { \ + ALOGE("Failed to initialize the " #getter_ " getter %d", ret); \ + delete instance; \ + return NULL; \ + } \ + return instance; \ + } + +} // namespace android +#endif |