graphics.h revision c9b06951e0349244fdca7401e7bcc54c538dce62
166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev/*
266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * Copyright (C) 2011 The Android Open Source Project
366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev *
466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License");
566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * you may not use this file except in compliance with the License.
666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * You may obtain a copy of the License at
766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev *
866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev *      http://www.apache.org/licenses/LICENSE-2.0
966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev *
1066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * Unless required by applicable law or agreed to in writing, software
1166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS,
1266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * See the License for the specific language governing permissions and
1466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * limitations under the License.
1566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev */
1666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
1766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev#ifndef SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H
1866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev#define SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H
1966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
20c9b06951e0349244fdca7401e7bcc54c538dce62Mathias Agopian#ifdef __cplusplus
21c9b06951e0349244fdca7401e7bcc54c538dce62Mathias Agopianextern "C" {
22c9b06951e0349244fdca7401e7bcc54c538dce62Mathias Agopian#endif
2366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
245c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian/*
255c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian * If the HAL needs to create service threads to handle graphics related
265c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian * tasks, these threads need to run at HAL_PRIORITY_URGENT_DISPLAY priority
275c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian * if they can block the main rendering thread in any way.
285c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian *
295c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian * the priority of the current thread can be set with:
305c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian *
315c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian *      #include <sys/resource.h>
325c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian *      setpriority(PRIO_PROCESS, 0, HAL_PRIORITY_URGENT_DISPLAY);
335c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian *
345c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian */
355c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian
365c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian#define HAL_PRIORITY_URGENT_DISPLAY     (-8)
375c9be402a4d934b678fe6609b6cc4d488d6ddaa4Mathias Agopian
3866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev/**
3966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * pixel format definitions
4066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev */
4166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
4266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchevenum {
4366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_RGBA_8888          = 1,
4466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_RGBX_8888          = 2,
4566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_RGB_888            = 3,
4666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_RGB_565            = 4,
4766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_BGRA_8888          = 5,
4866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_RGBA_5551          = 6,
4966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_RGBA_4444          = 7,
5066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
5166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /* 0x8 - 0xFF range unavailable */
5266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
5366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /*
5466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * 0x100 - 0x1FF
5566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *
5666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * This range is reserved for pixel formats that are specific to the HAL
5766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * implementation.  Implementations can use any value in this range to
5866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * communicate video pixel formats between their HAL modules.  These formats
5966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * must not have an alpha channel.  Additionally, an EGLimage created from a
6066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * gralloc buffer of one of these formats must be supported for use with the
6166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * GL_OES_EGL_image_external OpenGL ES extension.
6266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     */
6366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
6466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /*
6566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * Android YUV format:
6666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *
67da1a1f629b0f3b3a63d9951de4381a41bc31fb91Jamie Gennis     * This format is exposed outside of the HAL to software decoders and
68da1a1f629b0f3b3a63d9951de4381a41bc31fb91Jamie Gennis     * applications.  EGLImageKHR must support it in conjunction with the
6966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * OES_EGL_image_external extension.
7066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *
71da1a1f629b0f3b3a63d9951de4381a41bc31fb91Jamie Gennis     * YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed
7266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * by (W/2) x (H/2) Cr and Cb planes.
7366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *
7466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * This format assumes
7566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * - an even width
7666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * - an even height
7766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * - a horizontal stride multiple of 16 pixels
7866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     * - a vertical stride equal to the height
7966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *
8066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *   y_size = stride * height
8166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *   c_size = ALIGN(stride/2, 16) * height/2
8266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *   size = y_size + c_size * 2
8366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *   cr_offset = y_size
8466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *   cb_offset = y_size + c_size
8566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     *
8666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev     */
8766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_YV12   = 0x32315659, // YCrCb 4:2:0 Planar
8866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
8966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
9066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
9166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /* Legacy formats (deprecated), used by ImageFormat.java */
9266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_YCbCr_422_SP       = 0x10, // NV16
9366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_YCrCb_420_SP       = 0x11, // NV21
9466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_PIXEL_FORMAT_YCbCr_422_I        = 0x14, // YUY2
9566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev};
9666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
9766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
9866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev/**
9966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * Transformation definitions
10066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev *
10166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * IMPORTANT NOTE:
10266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev * HAL_TRANSFORM_ROT_90 is applied CLOCKWISE and AFTER HAL_TRANSFORM_FLIP_{H|V}.
10366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev *
10466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev */
10566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
10666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchevenum {
10766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /* flip source image horizontally (around the vertical axis) */
10866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_TRANSFORM_FLIP_H    = 0x01,
10966ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /* flip source image vertically (around the horizontal axis)*/
11066ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_TRANSFORM_FLIP_V    = 0x02,
11166ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /* rotate source image 90 degrees clockwise */
11266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_TRANSFORM_ROT_90    = 0x04,
11366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /* rotate source image 180 degrees */
11466ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_TRANSFORM_ROT_180   = 0x03,
11566ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    /* rotate source image 270 degrees clockwise */
11666ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev    HAL_TRANSFORM_ROT_270   = 0x07,
11766ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev};
11866ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
119c9b06951e0349244fdca7401e7bcc54c538dce62Mathias Agopian#ifdef __cplusplus
120c9b06951e0349244fdca7401e7bcc54c538dce62Mathias Agopian}
121c9b06951e0349244fdca7401e7bcc54c538dce62Mathias Agopian#endif
12266ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev
12366ea3574b6383e4107c74a192cadda1427320375Iliyan Malchev#endif /* SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H */
124