1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
/*
* 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
/** @} */
|