Loading libs/gui/Surface.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -881,6 +881,10 @@ int Surface::query(int what, int* value) const { *value = mGraphicBufferProducer != nullptr ? 1 : 0; return NO_ERROR; } case NATIVE_WINDOW_DATASPACE: { *value = static_cast<int>(mDataSpace); return NO_ERROR; } } } return mGraphicBufferProducer->query(what, value); Loading libs/nativewindow/ANativeWindow.cpp +43 −4 Original line number Diff line number Diff line Loading @@ -33,6 +33,27 @@ static int32_t query(ANativeWindow* window, int what) { return res < 0 ? res : value; } static bool isDataSpaceValid(ANativeWindow* window, int32_t dataSpace) { bool supported = false; switch (dataSpace) { case HAL_DATASPACE_UNKNOWN: case HAL_DATASPACE_V0_SRGB: return true; // These data space need wide gamut support. case HAL_DATASPACE_V0_SCRGB_LINEAR: case HAL_DATASPACE_V0_SCRGB: case HAL_DATASPACE_DISPLAY_P3: native_window_get_wide_color_support(window, &supported); return supported; // These data space need HDR support. case HAL_DATASPACE_BT2020_PQ: native_window_get_hdr_support(window, &supported); return supported; default: return false; } } /************************************************************************************************** * NDK **************************************************************************************************/ Loading Loading @@ -101,6 +122,28 @@ int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transfo return native_window_set_buffers_transform(window, transform); } int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace) { static_assert(ADATASPACE_UNKNOWN == HAL_DATASPACE_UNKNOWN); static_assert(ADATASPACE_SCRGB_LINEAR == HAL_DATASPACE_V0_SCRGB_LINEAR); static_assert(ADATASPACE_SRGB == HAL_DATASPACE_V0_SRGB); static_assert(ADATASPACE_SCRGB == HAL_DATASPACE_V0_SCRGB); static_assert(ADATASPACE_DISPLAY_P3 == HAL_DATASPACE_DISPLAY_P3); static_assert(ADATASPACE_BT2020_PQ == HAL_DATASPACE_BT2020_PQ); if (!window || !query(window, NATIVE_WINDOW_IS_VALID) || !isDataSpaceValid(window, dataSpace)) { return -EINVAL; } return native_window_set_buffers_data_space(window, static_cast<android_dataspace_t>(dataSpace)); } int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window) { if (!window || !query(window, NATIVE_WINDOW_IS_VALID)) return -EINVAL; return query(window, NATIVE_WINDOW_DATASPACE); } /************************************************************************************************** * vndk-stable **************************************************************************************************/ Loading Loading @@ -209,10 +252,6 @@ int ANativeWindow_setBuffersTimestamp(ANativeWindow* window, int64_t timestamp) return native_window_set_buffers_timestamp(window, timestamp); } int ANativeWindow_setBufferDataSpace(ANativeWindow* window, android_dataspace_t dataSpace) { return native_window_set_buffers_data_space(window, dataSpace); } int ANativeWindow_setSharedBufferMode(ANativeWindow* window, bool sharedBufferMode) { return native_window_set_shared_buffer_mode(window, sharedBufferMode); } Loading libs/nativewindow/include/android/data_space.h 0 → 100644 +108 −0 Original line number Diff line number Diff line /* * Copyright 2018 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. */ /** * @file data_space.h */ #ifndef ANDROID_DATA_SPACE_H #define ANDROID_DATA_SPACE_H #include <inttypes.h> #include <sys/cdefs.h> __BEGIN_DECLS /** * ADataSpace. */ enum ADataSpace { /** * Default-assumption data space, when not explicitly specified. * * It is safest to assume the buffer is an image with sRGB primaries and * encoding ranges, but the consumer and/or the producer of the data may * simply be using defaults. No automatic gamma transform should be * expected, except for a possible display gamma transform when drawn to a * screen. */ ADATASPACE_UNKNOWN = 0, /** * scRGB linear encoding: * * The red, green, and blue components are stored in extended sRGB space, * but are linear, not gamma-encoded. * The RGB primaries and the white point are the same as BT.709. * * The values are floating point. * A pixel value of 1.0, 1.0, 1.0 corresponds to sRGB white (D65) at 80 nits. * Values beyond the range [0.0 - 1.0] would correspond to other colors * spaces and/or HDR content. */ ADATASPACE_SCRGB_LINEAR = 406913024, // STANDARD_BT709 | TRANSFER_LINEAR | RANGE_EXTENDED /** * sRGB gamma encoding: * * The red, green and blue components are stored in sRGB space, and * converted to linear space when read, using the SRGB transfer function * for each of the R, G and B components. When written, the inverse * transformation is performed. * * The alpha component, if present, is always stored in linear space and * is left unmodified when read or written. * * Use full range and BT.709 standard. */ ADATASPACE_SRGB = 142671872, // STANDARD_BT709 | TRANSFER_SRGB | RANGE_FULL /** * scRGB: * * The red, green, and blue components are stored in extended sRGB space, * but are linear, not gamma-encoded. * The RGB primaries and the white point are the same as BT.709. * * The values are floating point. * A pixel value of 1.0, 1.0, 1.0 corresponds to sRGB white (D65) at 80 nits. * Values beyond the range [0.0 - 1.0] would correspond to other colors * spaces and/or HDR content. */ ADATASPACE_SCRGB = 411107328, // STANDARD_BT709 | TRANSFER_SRGB | RANGE_EXTENDED /** * Display P3 * * Use same primaries and white-point as DCI-P3 * but sRGB transfer function. */ ADATASPACE_DISPLAY_P3 = 143261696, // STANDARD_DCI_P3 | TRANSFER_SRGB | RANGE_FULL /** * ITU-R Recommendation 2020 (BT.2020) * * Ultra High-definition television * * Use full range, SMPTE 2084 (PQ) transfer and BT2020 standard */ ADATASPACE_BT2020_PQ = 163971072, // STANDARD_BT2020 | TRANSFER_ST2084 | RANGE_FULL }; __END_DECLS #endif // ANDROID_DATA_SPACE_H libs/nativewindow/include/android/native_window.h +28 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <sys/cdefs.h> #include <android/data_space.h> #include <android/hardware_buffer.h> #include <android/rect.h> Loading Loading @@ -189,6 +190,33 @@ int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transfo #endif // __ANDROID_API__ >= __ANDROID_API_O__ #if __ANDROID_API__ >= __ANDROID_API_P__ /** * All buffers queued after this call will be associated with the dataSpace * parameter specified. * * dataSpace specifies additional information about the buffer. * For example, it can be used to convey the color space of the image data in * the buffer, or it can be used to indicate that the buffers contain depth * measurement data instead of color images. The default dataSpace is 0, * ADATASPACE_UNKNOWN, unless it has been overridden by the producer. * * \param dataSpace data space of all buffers queued after this call. * \return 0 for success, -EINVAL if window is invalid or the dataspace is not * supported. */ int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace); /** * Get the dataspace of the buffers in window. * \return the dataspace of buffers in window, ADATASPACE_UNKNOWN is returned if * dataspace is unknown, or -EINVAL if window is invalid. */ int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window); #endif // __ANDROID_API__ >= __ANDROID_API_P__ #ifdef __cplusplus }; #endif Loading libs/nativewindow/include/system/window.h +5 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,11 @@ enum { * with GRALLOC_USAGE_PROTECTED usage bits on. */ NATIVE_WINDOW_CONSUMER_IS_PROTECTED = 19, /* * Returns data space for the buffers. */ NATIVE_WINDOW_DATASPACE = 20, }; /* Valid operations for the (*perform)() hook. Loading Loading
libs/gui/Surface.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -881,6 +881,10 @@ int Surface::query(int what, int* value) const { *value = mGraphicBufferProducer != nullptr ? 1 : 0; return NO_ERROR; } case NATIVE_WINDOW_DATASPACE: { *value = static_cast<int>(mDataSpace); return NO_ERROR; } } } return mGraphicBufferProducer->query(what, value); Loading
libs/nativewindow/ANativeWindow.cpp +43 −4 Original line number Diff line number Diff line Loading @@ -33,6 +33,27 @@ static int32_t query(ANativeWindow* window, int what) { return res < 0 ? res : value; } static bool isDataSpaceValid(ANativeWindow* window, int32_t dataSpace) { bool supported = false; switch (dataSpace) { case HAL_DATASPACE_UNKNOWN: case HAL_DATASPACE_V0_SRGB: return true; // These data space need wide gamut support. case HAL_DATASPACE_V0_SCRGB_LINEAR: case HAL_DATASPACE_V0_SCRGB: case HAL_DATASPACE_DISPLAY_P3: native_window_get_wide_color_support(window, &supported); return supported; // These data space need HDR support. case HAL_DATASPACE_BT2020_PQ: native_window_get_hdr_support(window, &supported); return supported; default: return false; } } /************************************************************************************************** * NDK **************************************************************************************************/ Loading Loading @@ -101,6 +122,28 @@ int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transfo return native_window_set_buffers_transform(window, transform); } int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace) { static_assert(ADATASPACE_UNKNOWN == HAL_DATASPACE_UNKNOWN); static_assert(ADATASPACE_SCRGB_LINEAR == HAL_DATASPACE_V0_SCRGB_LINEAR); static_assert(ADATASPACE_SRGB == HAL_DATASPACE_V0_SRGB); static_assert(ADATASPACE_SCRGB == HAL_DATASPACE_V0_SCRGB); static_assert(ADATASPACE_DISPLAY_P3 == HAL_DATASPACE_DISPLAY_P3); static_assert(ADATASPACE_BT2020_PQ == HAL_DATASPACE_BT2020_PQ); if (!window || !query(window, NATIVE_WINDOW_IS_VALID) || !isDataSpaceValid(window, dataSpace)) { return -EINVAL; } return native_window_set_buffers_data_space(window, static_cast<android_dataspace_t>(dataSpace)); } int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window) { if (!window || !query(window, NATIVE_WINDOW_IS_VALID)) return -EINVAL; return query(window, NATIVE_WINDOW_DATASPACE); } /************************************************************************************************** * vndk-stable **************************************************************************************************/ Loading Loading @@ -209,10 +252,6 @@ int ANativeWindow_setBuffersTimestamp(ANativeWindow* window, int64_t timestamp) return native_window_set_buffers_timestamp(window, timestamp); } int ANativeWindow_setBufferDataSpace(ANativeWindow* window, android_dataspace_t dataSpace) { return native_window_set_buffers_data_space(window, dataSpace); } int ANativeWindow_setSharedBufferMode(ANativeWindow* window, bool sharedBufferMode) { return native_window_set_shared_buffer_mode(window, sharedBufferMode); } Loading
libs/nativewindow/include/android/data_space.h 0 → 100644 +108 −0 Original line number Diff line number Diff line /* * Copyright 2018 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. */ /** * @file data_space.h */ #ifndef ANDROID_DATA_SPACE_H #define ANDROID_DATA_SPACE_H #include <inttypes.h> #include <sys/cdefs.h> __BEGIN_DECLS /** * ADataSpace. */ enum ADataSpace { /** * Default-assumption data space, when not explicitly specified. * * It is safest to assume the buffer is an image with sRGB primaries and * encoding ranges, but the consumer and/or the producer of the data may * simply be using defaults. No automatic gamma transform should be * expected, except for a possible display gamma transform when drawn to a * screen. */ ADATASPACE_UNKNOWN = 0, /** * scRGB linear encoding: * * The red, green, and blue components are stored in extended sRGB space, * but are linear, not gamma-encoded. * The RGB primaries and the white point are the same as BT.709. * * The values are floating point. * A pixel value of 1.0, 1.0, 1.0 corresponds to sRGB white (D65) at 80 nits. * Values beyond the range [0.0 - 1.0] would correspond to other colors * spaces and/or HDR content. */ ADATASPACE_SCRGB_LINEAR = 406913024, // STANDARD_BT709 | TRANSFER_LINEAR | RANGE_EXTENDED /** * sRGB gamma encoding: * * The red, green and blue components are stored in sRGB space, and * converted to linear space when read, using the SRGB transfer function * for each of the R, G and B components. When written, the inverse * transformation is performed. * * The alpha component, if present, is always stored in linear space and * is left unmodified when read or written. * * Use full range and BT.709 standard. */ ADATASPACE_SRGB = 142671872, // STANDARD_BT709 | TRANSFER_SRGB | RANGE_FULL /** * scRGB: * * The red, green, and blue components are stored in extended sRGB space, * but are linear, not gamma-encoded. * The RGB primaries and the white point are the same as BT.709. * * The values are floating point. * A pixel value of 1.0, 1.0, 1.0 corresponds to sRGB white (D65) at 80 nits. * Values beyond the range [0.0 - 1.0] would correspond to other colors * spaces and/or HDR content. */ ADATASPACE_SCRGB = 411107328, // STANDARD_BT709 | TRANSFER_SRGB | RANGE_EXTENDED /** * Display P3 * * Use same primaries and white-point as DCI-P3 * but sRGB transfer function. */ ADATASPACE_DISPLAY_P3 = 143261696, // STANDARD_DCI_P3 | TRANSFER_SRGB | RANGE_FULL /** * ITU-R Recommendation 2020 (BT.2020) * * Ultra High-definition television * * Use full range, SMPTE 2084 (PQ) transfer and BT2020 standard */ ADATASPACE_BT2020_PQ = 163971072, // STANDARD_BT2020 | TRANSFER_ST2084 | RANGE_FULL }; __END_DECLS #endif // ANDROID_DATA_SPACE_H
libs/nativewindow/include/android/native_window.h +28 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <sys/cdefs.h> #include <android/data_space.h> #include <android/hardware_buffer.h> #include <android/rect.h> Loading Loading @@ -189,6 +190,33 @@ int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transfo #endif // __ANDROID_API__ >= __ANDROID_API_O__ #if __ANDROID_API__ >= __ANDROID_API_P__ /** * All buffers queued after this call will be associated with the dataSpace * parameter specified. * * dataSpace specifies additional information about the buffer. * For example, it can be used to convey the color space of the image data in * the buffer, or it can be used to indicate that the buffers contain depth * measurement data instead of color images. The default dataSpace is 0, * ADATASPACE_UNKNOWN, unless it has been overridden by the producer. * * \param dataSpace data space of all buffers queued after this call. * \return 0 for success, -EINVAL if window is invalid or the dataspace is not * supported. */ int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace); /** * Get the dataspace of the buffers in window. * \return the dataspace of buffers in window, ADATASPACE_UNKNOWN is returned if * dataspace is unknown, or -EINVAL if window is invalid. */ int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window); #endif // __ANDROID_API__ >= __ANDROID_API_P__ #ifdef __cplusplus }; #endif Loading
libs/nativewindow/include/system/window.h +5 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,11 @@ enum { * with GRALLOC_USAGE_PROTECTED usage bits on. */ NATIVE_WINDOW_CONSUMER_IS_PROTECTED = 19, /* * Returns data space for the buffers. */ NATIVE_WINDOW_DATASPACE = 20, }; /* Valid operations for the (*perform)() hook. Loading