PixelFormat.h revision acb7b5dfc804d2e6b2e75b688f536fd38d75641a
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Pixel formats used across the system. 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// These formats might not all be supported by all renderers, for instance 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// skia or SurfaceFlinger are not required to support all of these formats 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// (either as source or destination) 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// XXX: we should consolidate these formats and skia's 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef UI_PIXELFORMAT_H 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define UI_PIXELFORMAT_H 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h> 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <pixelflinger/format.h> 3354ed4f6282bdea251455f39b978626026affdbefMathias Agopian#include <hardware/hardware.h> 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectenum { 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // these constants need to match those 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // in graphics/PixelFormat.java & pixelflinger/format.h 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_UNKNOWN = 0, 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_NONE = 0, 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // logical pixel formats used by the SurfaceFlinger ----------------------- 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_CUSTOM = -4, 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Custom pixel-format described by a PixelFormatInfo structure 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_TRANSLUCENT = -3, 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // System chooses a format that supports translucency (many alpha bits) 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_TRANSPARENT = -2, 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // System chooses a format that supports transparency 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // (at least 1 alpha bit) 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_OPAQUE = -1, 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // System chooses an opaque format (no alpha bits required) 58acb7b5dfc804d2e6b2e75b688f536fd38d75641aPannag Sanketi 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // real pixel formats supported for rendering ----------------------------- 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 6154ed4f6282bdea251455f39b978626026affdbefMathias Agopian PIXEL_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA 6254ed4f6282bdea251455f39b978626026affdbefMathias Agopian PIXEL_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0 6354ed4f6282bdea251455f39b978626026affdbefMathias Agopian PIXEL_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB 6454ed4f6282bdea251455f39b978626026affdbefMathias Agopian PIXEL_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, // 16-bit RGB 6554ed4f6282bdea251455f39b978626026affdbefMathias Agopian PIXEL_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA 6654ed4f6282bdea251455f39b978626026affdbefMathias Agopian PIXEL_FORMAT_RGBA_5551 = HAL_PIXEL_FORMAT_RGBA_5551, // 16-bit ARGB 6754ed4f6282bdea251455f39b978626026affdbefMathias Agopian PIXEL_FORMAT_RGBA_4444 = HAL_PIXEL_FORMAT_RGBA_4444, // 16-bit ARGB 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_A_8 = GGL_PIXEL_FORMAT_A_8, // 8-bit A 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_L_8 = GGL_PIXEL_FORMAT_L_8, // 8-bit L (R=G=B=L) 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_LA_88 = GGL_PIXEL_FORMAT_LA_88, // 16-bit LA 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PIXEL_FORMAT_RGB_332 = GGL_PIXEL_FORMAT_RGB_332, // 8-bit RGB 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // New formats can be added if they're also defined in 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // pixelflinger/format.h 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttypedef int32_t PixelFormat; 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct PixelFormatInfo 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 81076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian enum { 82076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian INDEX_ALPHA = 0, 83076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian INDEX_RED = 1, 84076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian INDEX_GREEN = 2, 85076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian INDEX_BLUE = 3 86076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 87acb7b5dfc804d2e6b2e75b688f536fd38d75641aPannag Sanketi 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { // components 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ALPHA = 1, 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project RGB = 2, 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project RGBA = 3, 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project LUMINANCE = 4, 933db21640519541141137166ce55627cf76e1974bMathias Agopian LUMINANCE_ALPHA = 5, 943db21640519541141137166ce55627cf76e1974bMathias Agopian OTHER = 0xFF 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 97076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian struct szinfo { 98076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t h; 99076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t l; 100076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 101acb7b5dfc804d2e6b2e75b688f536fd38d75641aPannag Sanketi 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline PixelFormatInfo() : version(sizeof(PixelFormatInfo)) { } 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t getScanlineSize(unsigned int width) const; 104acb7b5dfc804d2e6b2e75b688f536fd38d75641aPannag Sanketi size_t getSize(size_t ci) const { 105076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return (ci <= 3) ? (cinfo[ci].h - cinfo[ci].l) : 0; 106076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t version; 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat format; 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t bytesPerPixel; 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t bitsPerPixel; 111076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian union { 112076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian szinfo cinfo[4]; 113076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian struct { 114076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t h_alpha; 115acb7b5dfc804d2e6b2e75b688f536fd38d75641aPannag Sanketi uint8_t l_alpha; 116076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t h_red; 117076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t l_red; 118076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t h_green; 119076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t l_green; 120076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t h_blue; 121076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian uint8_t l_blue; 122076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 123076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t components; 125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t reserved0[3]; 126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t reserved1; 127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Consider caching the results of these functions are they're not 130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// guaranteed to be fast. 131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t bytesPerPixel(PixelFormat format); 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t bitsPerPixel(PixelFormat format); 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t getPixelFormatInfo(PixelFormat format, PixelFormatInfo* info); 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // UI_PIXELFORMAT_H 138