| /* |
| * Copyright (C) 2024 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. |
| */ |
| |
| /** |
| * @addtogroup NativeActivity Native Activity |
| * @{ |
| */ |
| |
| /** |
| * @file display_luts.h |
| */ |
| #pragma once |
| |
| #include <inttypes.h> |
| |
| __BEGIN_DECLS |
| |
| /** |
| * The dimension of the lut |
| */ |
| enum ADisplayLuts_Dimension : int32_t { |
| ADISPLAYLUTS_ONE_DIMENSION = 1, |
| ADISPLAYLUTS_THREE_DIMENSION = 3, |
| }; |
| |
| /** |
| * The sampling key used by the lut |
| */ |
| enum ADisplayLuts_SamplingKey : int32_t { |
| ADISPLAYLUTS_SAMPLINGKEY_RGB = 0, |
| ADISPLAYLUTS_SAMPLINGKEY_MAX_RGB = 1, |
| }; |
| |
| /** |
| * Used to get and set display luts entry |
| */ |
| typedef struct ADisplayLutsEntry ADisplayLutsEntry; |
| |
| /** |
| * Used to get and set display luts |
| */ |
| typedef struct ADisplayLuts ADisplayLuts; |
| |
| /** |
| * Creates a \a ADisplayLutsEntry entry. |
| * |
| * You are responsible for mamanging the memory of the returned object. |
| * Always call \a ADisplayLutsEntry_destroy to release it after use. |
| * |
| * Functions like \a ADisplayLuts_set create their own copies of entries, |
| * therefore they don't take the ownership of the instance created by |
| * \a ADisplayLutsEntry_create. |
| * |
| * @param buffer The lut raw buffer. The function creates a copy of it and does not need to |
| * outlive the life of the ADisplayLutsEntry. |
| * @param length The length of lut raw buffer |
| * @param dimension The dimension of the lut. see \a ADisplayLuts_Dimension |
| * @param key The sampling key used by the lut. see \a ADisplayLuts_SamplingKey |
| * @return a new \a ADisplayLutsEntry instance. |
| */ |
| ADisplayLutsEntry* _Nonnull ADisplayLutsEntry_createEntry(float* _Nonnull buffer, |
| int32_t length, int32_t dimension, int32_t key) __INTRODUCED_IN(36); |
| |
| /** |
| * Destroy the \a ADisplayLutsEntry instance. |
| * |
| * @param entry The entry to be destroyed |
| */ |
| void ADisplayLutsEntry_destroy(ADisplayLutsEntry* _Nullable entry) __INTRODUCED_IN(36); |
| |
| /** |
| * Gets the dimension of the entry. |
| * |
| * The function is only valid for the lifetime of the `entry`. |
| * |
| * @param entry The entry to query |
| * @return the dimension of the lut |
| */ |
| ADisplayLuts_Dimension ADisplayLutsEntry_getDimension(const ADisplayLutsEntry* _Nonnull entry) |
| __INTRODUCED_IN(36); |
| |
| /** |
| * Gets the size for each dimension of the entry. |
| * |
| * The function is only valid for the lifetime of the `entry`. |
| * |
| * @param entry The entry to query |
| * @return the size of each dimension of the lut |
| */ |
| int32_t ADisplayLutsEntry_getSize(const ADisplayLutsEntry* _Nonnull entry) |
| __INTRODUCED_IN(36); |
| |
| /** |
| * Gets the sampling key used by the entry. |
| * |
| * The function is only valid for the lifetime of the `entry`. |
| * |
| * @param entry The entry to query |
| * @return the sampling key used by the lut |
| */ |
| ADisplayLuts_SamplingKey ADisplayLutsEntry_getSamplingKey(const ADisplayLutsEntry* _Nonnull entry) |
| __INTRODUCED_IN(36); |
| |
| /** |
| * Gets the lut buffer of the entry. |
| * |
| * The function is only valid for the lifetime of the `entry`. |
| * |
| * @param entry The entry to query |
| * @return a pointer to the raw lut buffer |
| */ |
| const float* _Nonnull ADisplayLutsEntry_getBuffer(const ADisplayLutsEntry* _Nonnull entry) |
| __INTRODUCED_IN(36); |
| |
| /** |
| * Creates a \a ADisplayLuts instance. |
| * |
| * You are responsible for mamanging the memory of the returned object. |
| * Always call \a ADisplayLuts_destroy to release it after use. E.g., after calling |
| * the function \a ASurfaceTransaction_setLuts. |
| * |
| * @return a new \a ADisplayLuts instance |
| */ |
| ADisplayLuts* _Nonnull ADisplayLuts_create() __INTRODUCED_IN(36); |
| |
| /** |
| * Sets Luts in order to be applied. |
| * |
| * The function accepts a single 1D Lut, or a single 3D Lut or both 1D and 3D Lut in order. |
| * And the function will replace any previously set lut(s). |
| * If you want to clear the previously set lut(s), set `entries` to be nullptr, |
| * and `numEntries` will be internally ignored. |
| * |
| * @param luts the pointer of the \a ADisplayLuts instance |
| * @param entries the pointer of the array of lut entries to be applied |
| * @param numEntries the number of lut entries. The value should be either 1 or 2. |
| */ |
| void ADisplayLuts_setEntries(ADisplayLuts* _Nonnull luts, |
| ADisplayLutsEntry* _Nullable *_Nullable entries, int32_t numEntries) __INTRODUCED_IN(36); |
| |
| /** |
| * Deletes the \a ADisplayLuts instance. |
| * |
| * @param luts The luts to be destroyed |
| */ |
| void ADisplayLuts_destroy(ADisplayLuts* _Nullable luts) __INTRODUCED_IN(36); |
| |
| __END_DECLS |
| |
| /** @} */ |