Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5357214a authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 12702769 from 7ff68ce0 to 25Q1-release

Change-Id: I679d733c824aa5117b02aa47039623f5de5b9f80
parents affe981b 7ff68ce0
Loading
Loading
Loading
Loading
+165 −0
Original line number Diff line number Diff line
/*
 * 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,
};
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, 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

/** @} */
 No newline at end of file
+17 −9
Original line number Diff line number Diff line
@@ -90,20 +90,23 @@ enum {
    ALOOPER_POLL_WAKE = -1,

    /**
     * Result from ALooper_pollOnce() and ALooper_pollAll():
     * One or more callbacks were executed.
     * Result from ALooper_pollOnce():
     * One or more callbacks were executed. The poll may also have been
     * explicitly woken by ALooper_wake().
     */
    ALOOPER_POLL_CALLBACK = -2,

    /**
     * Result from ALooper_pollOnce() and ALooper_pollAll():
     * The timeout expired.
     * The timeout expired. The poll may also have been explicitly woken by
     * ALooper_wake().
     */
    ALOOPER_POLL_TIMEOUT = -3,

    /**
     * Result from ALooper_pollOnce() and ALooper_pollAll():
     * An error occurred.
     * An error occurred. The poll may also have been explicitly woken by
     * ALooper_wake(()).
     */
    ALOOPER_POLL_ERROR = -4,
};
@@ -182,10 +185,13 @@ typedef int (*ALooper_callbackFunc)(int fd, int events, void* data);
 * If the timeout is zero, returns immediately without blocking.
 * If the timeout is negative, waits indefinitely until an event appears.
 *
 * **All return values may also imply ALOOPER_POLL_WAKE.** If you call this in a
 * loop, you must treat all return values as if they also indicated
 * ALOOPER_POLL_WAKE.
 *
 * Returns ALOOPER_POLL_WAKE if the poll was awoken using ALooper_wake() before
 * the timeout expired and no callbacks were invoked and no other file
 * descriptors were ready. **All return values may also imply
 * ALOOPER_POLL_WAKE.**
 * descriptors were ready.
 *
 * Returns ALOOPER_POLL_CALLBACK if one or more callbacks were invoked. The poll
 * may also have been explicitly woken by ALooper_wake.
@@ -214,9 +220,9 @@ int ALooper_pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outDa
 * data has been consumed or a file descriptor is available with no callback.
 * This function will never return ALOOPER_POLL_CALLBACK.
 *
 * This API cannot be used safely, but a safe alternative exists (see below). As
 * such, new builds will not be able to call this API and must migrate to the
 * safe API. Binary compatibility is preserved to support already-compiled apps.
 * This API will not reliably respond to ALooper_wake. As such, this API is
 * hidden and callers should migrate to ALooper_pollOnce. Binary compatibility
 * is preserved to support already-compiled apps.
 *
 * \bug ALooper_pollAll will not wake in response to ALooper_wake calls if it
 * also handles another event at the same time.
@@ -235,6 +241,8 @@ int ALooper_pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outDat
 *
 * This method can be called on any thread.
 * This method returns immediately.
 *
 * \bug ALooper_pollAll will not reliably wake in response to ALooper_wake.
 */
void ALooper_wake(ALooper* looper);

+18 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@

#include <sys/cdefs.h>

#include <android/display_luts.h>
#include <android/choreographer.h>
#include <android/data_space.h>
#include <android/hardware_buffer.h>
@@ -712,6 +713,23 @@ void ASurfaceTransaction_setDesiredHdrHeadroom(ASurfaceTransaction* _Nonnull tra
                                               float desiredHeadroom)
        __INTRODUCED_IN(__ANDROID_API_V__);

/**
 * Sets the Lut(s) to be applied for the layer.
 *
 * The function makes a deep copy of the provided `luts`.
 * Any modifications made to the `luts` object after calling this function
 * will not affect the Lut(s) applied to the layer.
 *
 * @param surface_control The layer where Lut(s) is being applied
 * @param luts The Lut(s) to be applied
 *
 * Available since API level 36.
 */
void ASurfaceTransaction_setLuts(ASurfaceTransaction* _Nonnull transaction,
                                 ASurfaceControl* _Nonnull surface_control,
                                 const struct ADisplayLuts* _Nullable luts)
        __INTRODUCED_IN(36);

/**
 * Same as ASurfaceTransaction_setFrameRateWithChangeStrategy(transaction, surface_control,
 * frameRate, compatibility, ANATIVEWINDOW_CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS).
+5 −5
Original line number Diff line number Diff line
@@ -111,12 +111,12 @@ enum class InputDeviceSensorType : int32_t {
};

enum class InputDeviceSensorAccuracy : int32_t {
    ACCURACY_NONE = 0,
    ACCURACY_LOW = 1,
    ACCURACY_MEDIUM = 2,
    ACCURACY_HIGH = 3,
    NONE = 0,
    LOW = 1,
    MEDIUM = 2,
    HIGH = 3,

    ftl_last = ACCURACY_HIGH,
    ftl_last = HIGH,
};

enum class InputDeviceSensorReportingMode : int32_t {
+65 −0
Original line number Diff line number Diff line
/*
 * 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.
 */

#pragma once

#include <stdint.h>
#include <vector>
#include <utils/RefBase.h>

using namespace android;

__BEGIN_DECLS

struct ADisplayLutsEntry_buffer {
    std::vector<float> data;
};

struct ADisplayLutsEntry_properties {
    int32_t dimension;
    int32_t size;
    int32_t samplingKey;
};

struct ADisplayLutsEntry: public RefBase {
    struct ADisplayLutsEntry_buffer buffer;
    struct ADisplayLutsEntry_properties properties;
    ADisplayLutsEntry() {}

    // copy constructor
    ADisplayLutsEntry(const ADisplayLutsEntry& other) :
        buffer(other.buffer),
        properties(other.properties) {}

    // copy operator
    ADisplayLutsEntry& operator=(const ADisplayLutsEntry& other) {
        if (this != &other) { // Protect against self-assignment
            buffer = other.buffer;
            properties = other.properties;
        }
        return *this;
    }
};

struct ADisplayLuts: public RefBase {
    int32_t totalBufferSize;
    std::vector<int32_t> offsets;
    std::vector<sp<ADisplayLutsEntry>> entries;

    ADisplayLuts() : totalBufferSize(0) {}
};

__END_DECLS
 No newline at end of file
Loading