blob: eae2bfd35143600431d86d3247b99838f59153c3 [file] [log] [blame]
/*
* 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,
};
typedef enum ADisplayLuts_Dimension ADisplayLuts_Dimension;
/**
* The sampling key used by the lut
*/
enum ADisplayLuts_SamplingKey : int32_t {
ADISPLAYLUTS_SAMPLINGKEY_RGB = 0,
ADISPLAYLUTS_SAMPLINGKEY_MAX_RGB = 1,
ADISPLAYLUTS_SAMPLINGKEY_CIE_Y = 2,
};
typedef enum ADisplayLuts_SamplingKey ADisplayLuts_SamplingKey;
/**
* 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, ADisplayLuts_Dimension dimension, ADisplayLuts_SamplingKey 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
/** @} */