diff options
| -rw-r--r-- | cmds/ip-up-vpn/ip-up-vpn.c | 4 | ||||
| -rw-r--r-- | libs/ui/Android.bp | 3 | ||||
| -rw-r--r-- | libs/ui/PublicFormat.cpp | 130 | ||||
| -rw-r--r-- | libs/ui/include/ui/PublicFormat.h | 74 |
4 files changed, 211 insertions, 0 deletions
diff --git a/cmds/ip-up-vpn/ip-up-vpn.c b/cmds/ip-up-vpn/ip-up-vpn.c index 3b8955b166..71f08375f7 100644 --- a/cmds/ip-up-vpn/ip-up-vpn.c +++ b/cmds/ip-up-vpn/ip-up-vpn.c @@ -95,6 +95,7 @@ int main(int argc, char **argv) strncpy(ifr.ifr_name, interface, IFNAMSIZ); if (ioctl(s, SIOCSIFFLAGS, &ifr)) { ALOGE("Cannot bring up %s: %s", interface, strerror(errno)); + fclose(state); return 1; } @@ -102,6 +103,7 @@ int main(int argc, char **argv) if (!set_address(&ifr.ifr_addr, address) || ioctl(s, SIOCSIFADDR, &ifr)) { ALOGE("Cannot set address: %s", strerror(errno)); + fclose(state); return 1; } @@ -109,6 +111,7 @@ int main(int argc, char **argv) if (set_address(&ifr.ifr_netmask, env("INTERNAL_NETMASK4"))) { if (ioctl(s, SIOCSIFNETMASK, &ifr)) { ALOGE("Cannot set netmask: %s", strerror(errno)); + fclose(state); return 1; } } @@ -123,6 +126,7 @@ int main(int argc, char **argv) fprintf(state, "%s\n", env("REMOTE_ADDR")); } else { ALOGE("Cannot parse parameters"); + fclose(state); return 1; } diff --git a/libs/ui/Android.bp b/libs/ui/Android.bp index d25ad1a46d..ec7f9275e2 100644 --- a/libs/ui/Android.bp +++ b/libs/ui/Android.bp @@ -45,6 +45,8 @@ cc_library_shared { // Don't warn about struct padding "-Wno-padded", + + "-Wno-switch-enum", ], sanitize: { @@ -63,6 +65,7 @@ cc_library_shared { "GraphicBufferMapper.cpp", "HdrCapabilities.cpp", "PixelFormat.cpp", + "PublicFormat.cpp", "Rect.cpp", "Region.cpp", "UiConfig.cpp", diff --git a/libs/ui/PublicFormat.cpp b/libs/ui/PublicFormat.cpp new file mode 100644 index 0000000000..26eb771d73 --- /dev/null +++ b/libs/ui/PublicFormat.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2019 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. + */ + +#include <ui/PublicFormat.h> + +// ---------------------------------------------------------------------------- +namespace android { +// ---------------------------------------------------------------------------- + +int mapPublicFormatToHalFormat(PublicFormat f) { + switch (f) { + case PublicFormat::JPEG: + case PublicFormat::DEPTH_POINT_CLOUD: + return HAL_PIXEL_FORMAT_BLOB; + case PublicFormat::DEPTH16: + return HAL_PIXEL_FORMAT_Y16; + case PublicFormat::RAW_SENSOR: + case PublicFormat::RAW_DEPTH: + return HAL_PIXEL_FORMAT_RAW16; + default: + // Most formats map 1:1 + return static_cast<int>(f); + } +} + +android_dataspace mapPublicFormatToHalDataspace(PublicFormat f) { + switch (f) { + case PublicFormat::JPEG: + return HAL_DATASPACE_V0_JFIF; + case PublicFormat::DEPTH_POINT_CLOUD: + case PublicFormat::DEPTH16: + case PublicFormat::RAW_DEPTH: + return HAL_DATASPACE_DEPTH; + case PublicFormat::RAW_SENSOR: + case PublicFormat::RAW_PRIVATE: + case PublicFormat::RAW10: + case PublicFormat::RAW12: + return HAL_DATASPACE_ARBITRARY; + case PublicFormat::YUV_420_888: + case PublicFormat::NV21: + case PublicFormat::YV12: + return HAL_DATASPACE_V0_JFIF; + default: + // Most formats map to UNKNOWN + return HAL_DATASPACE_UNKNOWN; + } +} + +PublicFormat mapHalFormatDataspaceToPublicFormat(int format, android_dataspace dataSpace) { + switch (format) { + case HAL_PIXEL_FORMAT_RGBA_8888: + case HAL_PIXEL_FORMAT_RGBX_8888: + case HAL_PIXEL_FORMAT_RGBA_FP16: + case HAL_PIXEL_FORMAT_RGBA_1010102: + case HAL_PIXEL_FORMAT_RGB_888: + case HAL_PIXEL_FORMAT_RGB_565: + case HAL_PIXEL_FORMAT_Y8: + case HAL_PIXEL_FORMAT_RAW10: + case HAL_PIXEL_FORMAT_RAW12: + case HAL_PIXEL_FORMAT_YCbCr_420_888: + case HAL_PIXEL_FORMAT_YV12: + // Enums overlap in both name and value + return static_cast<PublicFormat>(format); + case HAL_PIXEL_FORMAT_RAW16: + switch (dataSpace) { + case HAL_DATASPACE_DEPTH: + return PublicFormat::RAW_DEPTH; + default: + return PublicFormat::RAW_SENSOR; + } + case HAL_PIXEL_FORMAT_RAW_OPAQUE: + // Name differs, though value is the same + return PublicFormat::RAW_PRIVATE; + case HAL_PIXEL_FORMAT_YCbCr_422_SP: + // Name differs, though the value is the same + return PublicFormat::NV16; + case HAL_PIXEL_FORMAT_YCrCb_420_SP: + // Name differs, though the value is the same + return PublicFormat::NV21; + case HAL_PIXEL_FORMAT_YCbCr_422_I: + // Name differs, though the value is the same + return PublicFormat::YUY2; + case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: + // Name differs, though the value is the same + return PublicFormat::PRIVATE; + case HAL_PIXEL_FORMAT_Y16: + // Dataspace-dependent + switch (dataSpace) { + case HAL_DATASPACE_DEPTH: + return PublicFormat::DEPTH16; + default: + // Assume non-depth Y16 is just Y16. + return PublicFormat::Y16; + } + case HAL_PIXEL_FORMAT_BLOB: + // Dataspace-dependent + switch (dataSpace) { + case HAL_DATASPACE_DEPTH: + return PublicFormat::DEPTH_POINT_CLOUD; + case HAL_DATASPACE_V0_JFIF: + return PublicFormat::JPEG; + default: + // Assume otherwise-marked blobs are also JPEG + return PublicFormat::JPEG; + } + case HAL_PIXEL_FORMAT_BGRA_8888: + // Not defined in public API + return PublicFormat::UNKNOWN; + + default: + return PublicFormat::UNKNOWN; + } +} + +// ---------------------------------------------------------------------------- +}; // namespace android +// ---------------------------------------------------------------------------- diff --git a/libs/ui/include/ui/PublicFormat.h b/libs/ui/include/ui/PublicFormat.h new file mode 100644 index 0000000000..75b6705779 --- /dev/null +++ b/libs/ui/include/ui/PublicFormat.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2019 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. + */ + +#ifndef UI_PUBLICFORMAT_H +#define UI_PUBLICFORMAT_H + +#include <system/graphics.h> + +namespace android { + +/** + * Enum mirroring the public API definitions for image and pixel formats. + * Some of these are hidden in the public API + * + * Keep up to date with android.graphics.ImageFormat and + * android.graphics.PixelFormat + * + * TODO: PublicFormat is going to be deprecated(b/126594675) + */ +enum class PublicFormat { + UNKNOWN = 0x0, + RGBA_8888 = 0x1, + RGBX_8888 = 0x2, + RGB_888 = 0x3, + RGB_565 = 0x4, + NV16 = 0x10, + NV21 = 0x11, + YUY2 = 0x14, + RGBA_FP16 = 0x16, + RAW_SENSOR = 0x20, + PRIVATE = 0x22, + YUV_420_888 = 0x23, + RAW_PRIVATE = 0x24, + RAW10 = 0x25, + RAW12 = 0x26, + RGBA_1010102 = 0x2b, + JPEG = 0x100, + DEPTH_POINT_CLOUD = 0x101, + RAW_DEPTH = 0x1002, // @hide + YV12 = 0x32315659, + Y8 = 0x20203859, // @hide + Y16 = 0x20363159, // @hide + DEPTH16 = 0x44363159 +}; + +/* Convert from android.graphics.ImageFormat/PixelFormat enums to graphics.h HAL + * format */ +extern int mapPublicFormatToHalFormat(PublicFormat f); + +/* Convert from android.graphics.ImageFormat/PixelFormat enums to graphics.h HAL + * dataspace */ +extern android_dataspace mapPublicFormatToHalDataspace(PublicFormat f); + +/* Convert from HAL format, dataspace pair to + * android.graphics.ImageFormat/PixelFormat. + * For unknown/unspecified pairs, returns PublicFormat::UNKNOWN */ +extern PublicFormat mapHalFormatDataspaceToPublicFormat(int format, android_dataspace dataSpace); + +}; // namespace android + +#endif // UI_PUBLICFORMAT_H |