Surface.java revision c14bacf1fb511472138eeb5dc84a9423fc003214
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshimaimport android.content.res.CompatibilityInfo.Translator; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.*; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 23b85c933d850286874005f97a9764c9b22e49a597Kevin Hesterimport android.os.SystemProperties; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 27334031cd07c3bd09d23fce0ebaf946fc6ecfee26Glenn Kasten * Handle onto a raw buffer that is being managed by the screen compositor. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Surface implements Parcelable { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String LOG_TAG = "Surface"; 31f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian private static final boolean DEBUG_RELEASE = false; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* orientations for setOrientation() */ 34b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int ROTATION_0 = 0; 35b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int ROTATION_90 = 1; 36b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int ROTATION_180 = 2; 37b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int ROTATION_270 = 3; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39b85c933d850286874005f97a9764c9b22e49a597Kevin Hester private static final boolean headless = "1".equals( 40b85c933d850286874005f97a9764c9b22e49a597Kevin Hester SystemProperties.get("ro.config.headless", "0")); 41b85c933d850286874005f97a9764c9b22e49a597Kevin Hester 42b85c933d850286874005f97a9764c9b22e49a597Kevin Hester private static void checkHeadless() { 43b85c933d850286874005f97a9764c9b22e49a597Kevin Hester if(headless) { 44b85c933d850286874005f97a9764c9b22e49a597Kevin Hester throw new UnsupportedOperationException("Device is headless"); 45b85c933d850286874005f97a9764c9b22e49a597Kevin Hester } 46b85c933d850286874005f97a9764c9b22e49a597Kevin Hester } 47b85c933d850286874005f97a9764c9b22e49a597Kevin Hester 48b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 490db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * Create Surface from a {@link SurfaceTexture}. 50df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis * 510db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * Images drawn to the Surface will be made available to the {@link 520db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * SurfaceTexture}, which can attach them an OpenGL ES texture via {@link 530db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * SurfaceTexture#updateTexImage}. 540db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * 550db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * @param surfaceTexture The {@link SurfaceTexture} that is updated by this 560db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * Surface. 57df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis */ 58df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis public Surface(SurfaceTexture surfaceTexture) { 59b85c933d850286874005f97a9764c9b22e49a597Kevin Hester checkHeadless(); 60b85c933d850286874005f97a9764c9b22e49a597Kevin Hester 61df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis if (DEBUG_RELEASE) { 62df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis mCreationStack = new Exception(); 63df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis } 64df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis mCanvas = new CompatibleCanvas(); 65df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis initFromSurfaceTexture(surfaceTexture); 66df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis } 67df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis 68df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis /** 69b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Does this object hold a valid surface? Returns true if it holds 70b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * a physical surface, so lockCanvas() will succeed. Otherwise 71b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * returns false. 72b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 73b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native boolean isValid(); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 75b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Release the local reference to the server-side surface. 76b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Always call release() when you're done with a Surface. This will 77b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * make the surface invalid. 78317a6280cc109e873646e4652be1582d870eedfdMathias Agopian */ 79b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void release(); 80b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 81b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** draw into a surface */ 82b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public Canvas lockCanvas(Rect dirty) throws OutOfResourcesException, IllegalArgumentException { 83b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 84b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the dirty rectangle may be expanded to the surface's size, if for 85b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * instance it has been resized or if the bits were lost, since the last 86b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * call. 87b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 88b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return lockCanvasNative(dirty); 89b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 90b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 91b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** unlock the surface and asks a page flip */ 92b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void unlockCanvasAndPost(Canvas canvas); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 94b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 95b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * unlock the surface. the screen won't be updated until 96b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * post() or postAll() is called 97317a6280cc109e873646e4652be1582d870eedfdMathias Agopian */ 98b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void unlockCanvas(Canvas canvas); 99b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 100b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian @Override 101b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public String toString() { 102b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return "Surface(name=" + mName + ", identity=" + getIdentity() + ")"; 103b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 104b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 105b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public int describeContents() { 106b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return 0; 107b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 108b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 109b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void readFromParcel(Parcel source); 110b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void writeToParcel(Parcel dest, int flags); 111b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 112b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 113b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Exception thrown when a surface couldn't be created or resized 114b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 115b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static class OutOfResourcesException extends Exception { 116b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public OutOfResourcesException() { 117b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 118b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public OutOfResourcesException(String name) { 119b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian super(name); 120b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 121b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 122b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 123b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 124b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * ----------------------------------------------------------------------- 125b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * No user serviceable parts beyond this point 126b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * ----------------------------------------------------------------------- 127b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 128b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 129b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* flags used in constructor (keep in sync with ISurfaceComposer.h) */ 130b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 131b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Surface is created hidden @hide */ 132b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int HIDDEN = 0x00000004; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The surface contains secure content, special measures will 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be taken to disallow the surface's content to be copied from 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another process. In particular, screenshots and VNC servers will 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be disabled, but other measures can take place, for instance the 138b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * surface might not be hardware accelerated. 139b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide*/ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SECURE = 0x00000080; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a surface where color components are interpreted as 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "non pre-multiplied" by their alpha channel. Of course this flag is 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meaningless for surfaces without an alpha channel. By default 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * surfaces are pre-multiplied, which means that each color component is 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * already multiplied by its alpha value. In this case the blending 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * equation used is: 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DEST = SRC + DEST * (1-SRC_ALPHA) 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * By contrast, non pre-multiplied surfaces use the following equation: 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DEST = SRC * SRC_ALPHA * DEST * (1-SRC_ALPHA) 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pre-multiplied surfaces must always be used if transparent pixels are 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * composited on top of each-other into the surface. A pre-multiplied 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * surface can never lower the value of the alpha component of a given 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pixel. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In some rare situations, a non pre-multiplied surface is preferable. 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 162b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NON_PREMULTIPLIED = 0x00000100; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 167d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * Indicates that the surface must be considered opaque, even if its 168d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * pixel format is set to translucent. This can be useful if an 169d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * application needs full RGBA 8888 support for instance but will 170d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * still draw every pixel opaque. 171d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * 172d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * @hide 173d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy */ 174d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy public static final int OPAQUE = 0x00000400; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 176d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten /** 177d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * Application requires a hardware-protected path to an 178d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * external display sink. If a hardware-protected path is not available, 179d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * then this surface will not be displayed on the external sink. 180d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * 181d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * @hide 182d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten */ 183d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten public static final int PROTECTED_APP = 0x00000800; 184d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten 185d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten // 0x1000 is reserved for an independent DRM protected flag in framework 186d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten 187b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Creates a normal surface. This is the default. @hide */ 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_NORMAL = 0x00000000; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a Blur surface. Everything behind this surface is blurred 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by some amount. The quality and refresh speed of the blur effect 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is not settable or guaranteed. 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is an error to lock a Blur surface, since it doesn't have 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a backing store. 195b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 19667403e096e6f59b7cd18a90d0d3f5c3d17c31407Mathias Agopian * @deprecated 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19867403e096e6f59b7cd18a90d0d3f5c3d17c31407Mathias Agopian @Deprecated 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_BLUR = 0x00010000; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a Dim surface. Everything behind this surface is dimmed 202334031cd07c3bd09d23fce0ebaf946fc6ecfee26Glenn Kasten * by the amount specified in {@link #setAlpha}. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is an error to lock a Dim surface, since it doesn't have 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a backing store. 205b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_DIM = 0x00020000; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2090ab84ef507f23505a72798fbe25cf4bb2c507ea3Mathias Agopian /** @hide */ 2100ab84ef507f23505a72798fbe25cf4bb2c507ea3Mathias Agopian public static final int FX_SURFACE_SCREENSHOT = 0x00030000; 2110ab84ef507f23505a72798fbe25cf4bb2c507ea3Mathias Agopian 212b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Mask used for FX values above @hide */ 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_MASK = 0x000F0000; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* flags used with setFlags() (keep in sync with ISurfaceComposer.h) */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 217b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Hide the surface. Equivalent to calling hide(). @hide */ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SURFACE_HIDDEN = 0x01; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 220b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Freeze the surface. Equivalent to calling freeze(). @hide */ 221c87c4a3e3b3c3949ae3c6f8fd245b71691d5ca3bMathias Agopian public static final int SURFACE_FROZEN = 0x02; 222c87c4a3e3b3c3949ae3c6f8fd245b71691d5ca3bMathias Agopian 223b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Enable dithering when compositing this surface @hide */ 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SURFACE_DITHER = 0x04; 225eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian 2260de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg // The mSurfaceControl will only be present for Surfaces used by the window 2270de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg // server or system processes. When this class is parceled we defer to the 228b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian // mSurfaceControl to do the parceling. Otherwise we parcel the 229b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian // mNativeSurface. 23017f638b39f2e8b610ecfa1290e5bc42ab7700c98Mathias Agopian private int mSurfaceControl; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mSaveCount; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Canvas mCanvas; 2338b138323d54e36fd66b22a634494648e20c53373Mathias Agopian private int mNativeSurface; 2342a83f001fdb189f945e82e81e717ba204824b112Romain Guy private int mSurfaceGenerationId; 2358138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen private String mName; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2375be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn // The Translator for density compatibility mode. This is used for scaling 2385be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn // the canvas to perform the appropriate density transformation. 2395be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn private Translator mCompatibilityTranslator; 240240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 241240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // A matrix to scale the matrix set by application. This is set to null for 242240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // non compatibility mode. 243240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private Matrix mCompatibleMatrix; 24438ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima 245f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian private Exception mCreationStack; 246f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * We use a class initializer to allow the native code to cache some 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * field offsets. 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static void nativeClassInit(); 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { nativeClassInit(); } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 255b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** create a surface @hide */ 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface(SurfaceSession s, 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pid, int display, int w, int h, int format, int flags) 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws OutOfResourcesException { 259b85c933d850286874005f97a9764c9b22e49a597Kevin Hester checkHeadless(); 260b85c933d850286874005f97a9764c9b22e49a597Kevin Hester 261f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 262f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 263f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 2640586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn mCanvas = new CompatibleCanvas(); 2655d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian init(s,pid,null,display,w,h,format,flags); 2665d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian } 2675d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian 268b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** create a surface with a name @hide */ 2695d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian public Surface(SurfaceSession s, 2705d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian int pid, String name, int display, int w, int h, int format, int flags) 2715d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian throws OutOfResourcesException { 272b85c933d850286874005f97a9764c9b22e49a597Kevin Hester checkHeadless(); 273b85c933d850286874005f97a9764c9b22e49a597Kevin Hester 274f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 275f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 276f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 2775d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian mCanvas = new CompatibleCanvas(); 2785d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian init(s,pid,name,display,w,h,format,flags); 2798138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen mName = name; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create an empty surface, which will later be filled in by 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * readFromParcel(). 285b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface() { 288b85c933d850286874005f97a9764c9b22e49a597Kevin Hester checkHeadless(); 289b85c933d850286874005f97a9764c9b22e49a597Kevin Hester 290f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 291f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 292f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 293240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCanvas = new CompatibleCanvas(); 294240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 295240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 296b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian private Surface(Parcel source) throws OutOfResourcesException { 297b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian init(source); 298b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 299b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 300240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima /** 301b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Copy another surface to this one. This surface now holds a reference 302b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * to the same data as the original surface, and is -not- the owner. 30361566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * This is for use by the window manager when returning a window surface 30461566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * back from a client, converting it from the representation being managed 30561566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * by the window manager to the representation the client uses to draw 30661566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * in to it. 307b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 308b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 309b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void copyFrom(Surface o); 31061566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn 31161566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn /** 31261566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * Transfer the native state from 'o' to this surface, releasing it 31361566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * from 'o'. This is for use in the client side for drawing into a 31461566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * surface; not guaranteed to work on the window manager side. 31561566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * This is for use by the client to move the underlying surface from 31661566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * one Surface object to another, in particular in SurfaceFlinger. 31761566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn * @hide. 31861566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn */ 31961566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn public native void transferFrom(Surface o); 32061566cc1932468720a831ad5cbc68ee080d613c9Dianne Hackborn 321b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 322b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public int getGenerationId() { 323b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return mSurfaceGenerationId; 324b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 325b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 326c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian 327c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian /** 328c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian * Whether the consumer of this Surface is running behind the producer; 329c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian * that is, isConsumerRunningBehind() returns true if the consumer is more 330c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian * than one buffer ahead of the producer. 331c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian * @hide 332c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian */ 333c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian public native boolean isConsumerRunningBehind(); 334c14bacf1fb511472138eeb5dc84a9423fc003214Mathias Agopian 335b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 336b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * A Canvas class that can handle the compatibility mode. This does two 337b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * things differently. 338240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima * <ul> 339b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * <li>Returns the width and height of the target metrics, rather than 340b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * native. For example, the canvas returns 320x480 even if an app is running 341b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * in WVGA high density. 342b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * <li>Scales the matrix in setMatrix by the application scale, except if 343b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the matrix looks like obtained from getMatrix. This is a hack to handle 344b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the case that an application uses getMatrix to keep the original matrix, 345b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * set matrix of its own, then set the original matrix back. There is no 346b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * perfect solution that works for all cases, and there are a lot of cases 347b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * that this model does not work, but we hope this works for many apps. 348240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima * </ul> 349240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima */ 350240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private class CompatibleCanvas extends Canvas { 351240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // A temp matrix to remember what an application obtained via {@link getMatrix} 352240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private Matrix mOrigMatrix = null; 353240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 354240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 355240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public int getWidth() { 3565be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn int w = super.getWidth(); 3575be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn if (mCompatibilityTranslator != null) { 3585be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn w = (int)(w * mCompatibilityTranslator.applicationInvertedScale + .5f); 3595be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn } 3605be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn return w; 361240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 362240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 363240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 364240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public int getHeight() { 3655be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn int h = super.getHeight(); 3665be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn if (mCompatibilityTranslator != null) { 3675be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn h = (int)(h * mCompatibilityTranslator.applicationInvertedScale + .5f); 3685be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn } 3695be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn return h; 370240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 371240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 372240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 373240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public void setMatrix(Matrix matrix) { 374240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (mCompatibleMatrix == null || mOrigMatrix == null || mOrigMatrix.equals(matrix)) { 375240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // don't scale the matrix if it's not compatibility mode, or 376240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // the matrix was obtained from getMatrix. 377240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.setMatrix(matrix); 378240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } else { 379240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima Matrix m = new Matrix(mCompatibleMatrix); 380240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima m.preConcat(matrix); 381240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.setMatrix(m); 38238ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima } 383240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 384240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 385240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 386240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public void getMatrix(Matrix m) { 387240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.getMatrix(m); 388240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (mOrigMatrix == null) { 389240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mOrigMatrix = new Matrix(); 39038ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima } 391240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mOrigMatrix.set(m); 392240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 393d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } 39438ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima 39538ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima /** 396b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Sets the translator used to scale canvas's width/height in compatibility 397b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * mode. 39838ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima */ 3995be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn void setCompatibilityTranslator(Translator translator) { 400240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (translator != null) { 401240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima float appScale = translator.applicationScale; 402240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCompatibleMatrix = new Matrix(); 403240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCompatibleMatrix.setScale(appScale, appScale); 404240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4070586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn /** Free all server-side state associated with this surface and 408b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * release this object's reference. @hide */ 4090586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn public native void destroy(); 4100586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn 411b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian private native Canvas lockCanvasNative(Rect dirty); 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 413b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 414b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * set display parameters & screenshots 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Freezes the specified display, No updating of the screen will occur 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * until unfreezeDisplay() is called. Everything else works as usual though, 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in particular transactions. 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 422b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native void freezeDisplay(int display); 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resume updating the specified display. 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 429b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native void unfreezeDisplay(int display); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set the orientation of the given display. 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param orientation 43701a98ddbdfbaf1f0d2bc602537e6e314364902a3Jeff Brown * @param flags Currently unused, set to 0. 438b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 440eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian public static native void setOrientation(int display, int orientation, int flags); 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 443eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * set the orientation of the given display. 444eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * @param display 445eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * @param orientation 446b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 447eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian */ 448eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian public static void setOrientation(int display, int orientation) { 449eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian setOrientation(display, orientation, 0); 450eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian } 451eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian 452eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian /** 453d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Like {@link #screenshot(int, int, int, int)} but includes all 454d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Surfaces in the screenshot. 455d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * 456d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @hide 457d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn */ 458d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn public static native Bitmap screenshot(int width, int height); 459d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 460d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn /** 461a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * Copy the current screen contents into a bitmap and return it. 462a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * 463a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @param width The desired width of the returned bitmap; the raw 464a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * screen will be scaled down to this size. 465a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @param height The desired height of the returned bitmap; the raw 466a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * screen will be scaled down to this size. 467d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @param minLayer The lowest (bottom-most Z order) surface layer to 468d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * include in the screenshot. 469d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @param maxLayer The highest (top-most Z order) surface layer to 470d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * include in the screenshot. 471a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @return Returns a Bitmap containing the screen contents. 472a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * 473a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @hide 474a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn */ 475d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn public static native Bitmap screenshot(int width, int height, int minLayer, int maxLayer); 476a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn 477b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 478b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set surface parameters. 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * needs to be inside open/closeTransaction block 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 482b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 483b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** start a transaction @hide */ 484b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static native void openTransaction(); 485b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** end a transaction @hide */ 486b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static native void closeTransaction(); 487b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setLayer(int zorder); 489b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 49034cb9f2a960c4173bdafb4b8a2444c1bca4c5f0dMathias Agopian public void setPosition(int x, int y) { setPosition((float)x, (float)y); } 49134cb9f2a960c4173bdafb4b8a2444c1bca4c5f0dMathias Agopian /** @hide */ 49234cb9f2a960c4173bdafb4b8a2444c1bca4c5f0dMathias Agopian public native void setPosition(float x, float y); 493b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setSize(int w, int h); 495b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void hide(); 497b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void show(); 499b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setTransparentRegionHint(Region region); 501b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setAlpha(float alpha); 503b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 504b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); 505b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void freeze(); 507b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void unfreeze(); 509b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFreezeTint(int tint); 511b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFlags(int flags, int mask); 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 515b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Surface> CREATOR 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Surface>() 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface createFromParcel(Parcel source) { 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Surface(source); 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "Exception creating surface from parcel", e); 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface[] newArray(int size) { 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Surface[size]; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable { 535d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy try { 536d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy super.finalize(); 537d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } finally { 538d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy if (mNativeSurface != 0 || mSurfaceControl != 0) { 539d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy if (DEBUG_RELEASE) { 540d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy Log.w(LOG_TAG, "Surface.finalize() has work. You should have called release() (" 541d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy + mNativeSurface + ", " + mSurfaceControl + ")", mCreationStack); 542d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } else { 543d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy Log.w(LOG_TAG, "Surface.finalize() has work. You should have called release() (" 544d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy + mNativeSurface + ", " + mSurfaceControl + ")"); 545d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } 546f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 547d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy release(); 548f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private native void init(SurfaceSession s, 5525d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian int pid, String name, int display, int w, int h, int format, int flags) 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws OutOfResourcesException; 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private native void init(Parcel source); 5568138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen 5570de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg private native void initFromSurfaceTexture(SurfaceTexture surfaceTexture); 5580de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg 5598138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen private native int getIdentity(); 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 561