diff options
author | Sean Callanan <spyffe@google.com> | 2021-06-18 15:31:40 -0700 |
---|---|---|
committer | Sean Callanan <spyffe@google.com> | 2021-06-18 15:31:40 -0700 |
commit | 9d59748ced4a3c6dd27e74c0f98db1a22d9aaec2 (patch) | |
tree | b700c4479fcf8cf01fdbd895bc6585c4929e488e | |
parent | e37cdac52a575a68934af58b47767219a91acf07 (diff) | |
download | gchips-9d59748ced4a3c6dd27e74c0f98db1a22d9aaec2.tar.gz |
Define SBWC sizing macros if UAPI isn't available
Some older kernels don't have this UAPI. Fall back to a local version
if and only if absolutely necessary.
Fixes: 191494136
Test: build
Change-Id: I76879c009903cf2886cee6cc6d339c9c85d72080
-rw-r--r-- | gralloc4/src/core/exynos_format_allocation.h | 4 | ||||
-rw-r--r-- | gralloc4/src/core/mfc_macros_local.h | 59 |
2 files changed, 63 insertions, 0 deletions
diff --git a/gralloc4/src/core/exynos_format_allocation.h b/gralloc4/src/core/exynos_format_allocation.h index 099e732..30b2c15 100644 --- a/gralloc4/src/core/exynos_format_allocation.h +++ b/gralloc4/src/core/exynos_format_allocation.h @@ -16,7 +16,11 @@ #pragma once +#if __has_include(<video/mfc_macros.h>) #include <video/mfc_macros.h> +#else +#include "mfc_macros_local.h" +#endif #define PLANE_SIZE(w, h) ((w) * (h)) #define S2B_PLANE_SIZE(w, h) (GRALLOC_ALIGN((w) / 4, 16) * (GRALLOC_ALIGN(h, 16))) diff --git a/gralloc4/src/core/mfc_macros_local.h b/gralloc4/src/core/mfc_macros_local.h new file mode 100644 index 0000000..ab66d17 --- /dev/null +++ b/gralloc4/src/core/mfc_macros_local.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2020 Samsung Electronics Co. Ltd. + * Copyright (C) 2021 Google LLC. + * + * 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. + */ + +#pragma once + +#if __has_include(<video/mfc_macros.h>) +#error "This header should not be included if mfc_macros is available in UAPI" +#endif + +/* helper macros */ +#ifndef __ALIGN_UP +#define __ALIGN_UP(x, a) (((x) + ((a) - 1)) & ~((a) - 1)) +#endif + +/* SBWC align macros */ +#define SBWC_8B_STRIDE(w) (128 * (((w) + 31) / 32)) +#define SBWC_10B_STRIDE(w) (160 * (((w) + 31) / 32)) +#define SBWC_HEADER_STRIDE(w) ((((((w) + 63) / 64) + 15) / 16) * 16) + +#define SBWC_Y_VSTRIDE_BLOCKS(h) ((__ALIGN_UP((h), 16) + 3) / 4) +#define SBWC_CBCR_VSTRIDE_BLOCKS(h) (((__ALIGN_UP((h), 16) / 2) + 3) / 4) + +#define SBWC_8B_Y_SIZE(w, h) ((SBWC_8B_STRIDE(w) * ((__ALIGN_UP((h), 16) + 3) / 4)) + 64) +#define SBWC_8B_Y_HEADER_SIZE(w, h) __ALIGN_UP(((SBWC_HEADER_STRIDE(w) * ((__ALIGN_UP((h), 16) + 3) / 4)) + 256), 32) +#define SBWC_8B_CBCR_SIZE(w, h) ((SBWC_8B_STRIDE(w) * (((__ALIGN_UP((h), 16) / 2) + 3) / 4)) + 64) +#define SBWC_8B_CBCR_HEADER_SIZE(w, h) ((SBWC_HEADER_STRIDE(w) * (((__ALIGN_UP((h), 16) / 2) + 3) / 4)) + 128) + +#define SBWC_10B_Y_SIZE(w, h) ((SBWC_10B_STRIDE(w) * ((__ALIGN_UP((h), 16) + 3) / 4)) + 64) +#define SBWC_10B_Y_HEADER_SIZE(w, h) __ALIGN_UP((((__ALIGN_UP((w), 32) * __ALIGN_UP((h), 16) * 2) + 256) - SBWC_10B_Y_SIZE(w, h)), 32) +#define SBWC_10B_CBCR_SIZE(w, h) ((SBWC_10B_STRIDE(w) * (((__ALIGN_UP((h), 16) / 2) + 3) / 4)) + 64) +#define SBWC_10B_CBCR_HEADER_SIZE(w, h) (((__ALIGN_UP((w), 32) * __ALIGN_UP((h), 16)) + 256) - SBWC_10B_CBCR_SIZE(w, h)) + +/* SBWC Lossy align macros */ +#define SBWCL_8B_STRIDE(w, r) (((128 * (r)) / 100) * (((w) + 31) / 32)) +#define SBWCL_10B_STRIDE(w, r) (((160 * (r)) / 100) * (((w) + 31) / 32)) + +#define SBWCL_8B_Y_SIZE(w, h, r) ((SBWCL_8B_STRIDE(w, r) * ((__ALIGN_UP((h), 8) + 3) / 4)) + 64) +#define SBWCL_8B_CBCR_SIZE(w, h, r) ((SBWCL_8B_STRIDE(w, r) * (((__ALIGN_UP((h), 8) / 2) + 3) / 4)) + 64) + +#define SBWCL_10B_Y_SIZE(w, h, r) ((SBWCL_10B_STRIDE(w, r) * ((__ALIGN_UP((h), 8) + 3) / 4)) + 64) +#define SBWCL_10B_CBCR_SIZE(w, h, r) ((SBWCL_10B_STRIDE(w, r) * (((__ALIGN_UP((h), 8) / 2) + 3) / 4)) + 64) + +#define SBWCL_8B_CBCR_BASE(base, w, h, r) ((base) + SBWCL_8B_Y_SIZE(w, h, r)) +#define SBWCL_10B_CBCR_BASE(base, w, h, r) ((base) + SBWCL_10B_Y_SIZE(w, h, r)) + |