blob: 3f7c00c9ff0166e0e6627dc9d84afb973e024536 [file] [log] [blame]
Dianne Hackborn54a181b2010-06-30 18:35:14 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _ANDROID_VIEW_SURFACE_H
18#define _ANDROID_VIEW_SURFACE_H
19
20#include <android/native_window.h>
Mathias Agopiane68b4f72017-02-08 18:48:32 -080021#include <system/graphics.h>
Dianne Hackborn54a181b2010-06-30 18:35:14 -070022
23#include "jni.h"
24
25namespace android {
26
tedbo4e8a5c92011-06-22 15:52:53 -070027class Surface;
Andy McFaddend47f7d82012-12-18 09:48:38 -080028class IGraphicBufferProducer;
tedbo4e8a5c92011-06-22 15:52:53 -070029
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080030/**
31 * Enum mirroring the public API definitions for image and pixel formats.
32 * Some of these are hidden in the public API
33 *
34 * Keep up to date with android.graphics.ImageFormat and
35 * android.graphics.PixelFormat
36 */
37enum class PublicFormat {
38 UNKNOWN = 0x0,
39 RGBA_8888 = 0x1,
40 RGBX_8888 = 0x2,
41 RGB_888 = 0x3,
42 RGB_565 = 0x4,
43 NV16 = 0x10,
44 NV21 = 0x11,
45 YUY2 = 0x14,
Romain Guyf7e79d62016-12-16 10:23:21 -080046 RGBA_FP16 = 0x16,
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080047 RAW_SENSOR = 0x20,
Zhijun He2f174312015-03-20 11:39:55 -070048 PRIVATE = 0x22,
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080049 YUV_420_888 = 0x23,
Yin-Chia Yeh44581ff2015-12-07 17:15:24 -080050 RAW_PRIVATE = 0x24,
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080051 RAW10 = 0x25,
Yin-Chia Yeh44581ff2015-12-07 17:15:24 -080052 RAW12 = 0x26,
Romain Guy8ec21062017-02-10 18:49:33 -080053 RGBA_1010102 = 0x2b,
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080054 JPEG = 0x100,
55 DEPTH_POINT_CLOUD = 0x101,
Emilian Peevf7fec732017-03-17 19:54:30 +000056 RAW_DEPTH = 0x1002, // @hide
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080057 YV12 = 0x32315659,
Shuzhen Wangf655b1c2018-12-28 15:40:36 -080058 Y8 = 0x20203859,
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080059 Y16 = 0x20363159, // @hide
Emilian Peev934ffa62019-01-04 17:48:31 +000060 DEPTH16 = 0x44363159,
61 DEPTH_JPEG = 0x69656963,
Shuzhen Wangf655b1c2018-12-28 15:40:36 -080062 HEIC = 0x48454946,
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080063};
64
Jeff Brown64a55af2012-08-26 02:47:39 -070065/* Gets the underlying ANativeWindow for a Surface. */
66extern sp<ANativeWindow> android_view_Surface_getNativeWindow(
67 JNIEnv* env, jobject surfaceObj);
68
69/* Returns true if the object is an instance of Surface. */
70extern bool android_view_Surface_isInstanceOf(JNIEnv* env, jobject obj);
Dianne Hackborn54a181b2010-06-30 18:35:14 -070071
tedbo4e8a5c92011-06-22 15:52:53 -070072/* Gets the underlying Surface from a Surface Java object. */
Jeff Brown64a55af2012-08-26 02:47:39 -070073extern sp<Surface> android_view_Surface_getSurface(JNIEnv* env, jobject surfaceObj);
tedbo4e8a5c92011-06-22 15:52:53 -070074
Jiwen 'Steve' Caid28e8282017-03-31 11:19:50 -070075/* Creates a Surface from an android::Surface. */
76extern jobject android_view_Surface_createFromSurface(JNIEnv* env,
77 const sp<Surface>& surface);
78
Andy McFaddend47f7d82012-12-18 09:48:38 -080079/* Creates a Surface from an IGraphicBufferProducer. */
Mathias Agopian29479eb2013-02-14 14:36:04 -080080extern jobject android_view_Surface_createFromIGraphicBufferProducer(JNIEnv* env,
Andy McFaddend47f7d82012-12-18 09:48:38 -080081 const sp<IGraphicBufferProducer>& bufferProducer);
Jeff Browncbad9762012-09-04 21:57:59 -070082
Eino-Ville Talvala805f3c92015-02-26 10:57:55 -080083/* Convert from android.graphics.ImageFormat/PixelFormat enums to graphics.h HAL
84 * format */
85extern int android_view_Surface_mapPublicFormatToHalFormat(PublicFormat f);
86
87/* Convert from android.graphics.ImageFormat/PixelFormat enums to graphics.h HAL
88 * dataspace */
89extern android_dataspace android_view_Surface_mapPublicFormatToHalDataspace(
90 PublicFormat f);
91
92/* Convert from HAL format, dataspace pair to
93 * android.graphics.ImageFormat/PixelFormat.
94 * For unknown/unspecified pairs, returns PublicFormat::UNKNOWN */
95extern PublicFormat android_view_Surface_mapHalFormatDataspaceToPublicFormat(
96 int format, android_dataspace dataSpace);
97
Dianne Hackborn54a181b2010-06-30 18:35:14 -070098} // namespace android
99
100#endif // _ANDROID_VIEW_SURFACE_H