Surface.java revision 0db3aef9f81b056c57b2331dd2750958c9341fdf
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; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 26334031cd07c3bd09d23fce0ebaf946fc6ecfee26Glenn Kasten * Handle onto a raw buffer that is being managed by the screen compositor. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Surface implements Parcelable { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String LOG_TAG = "Surface"; 30f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian private static final boolean DEBUG_RELEASE = false; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* orientations for setOrientation() */ 33b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int ROTATION_0 = 0; 34b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int ROTATION_90 = 1; 35b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int ROTATION_180 = 2; 36b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int ROTATION_270 = 3; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 390db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * Create Surface from a {@link SurfaceTexture}. 40df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis * 410db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * Images drawn to the Surface will be made available to the {@link 420db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * SurfaceTexture}, which can attach them an OpenGL ES texture via {@link 430db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * SurfaceTexture#updateTexImage}. 440db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * 450db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * @param surfaceTexture The {@link SurfaceTexture} that is updated by this 460db3aef9f81b056c57b2331dd2750958c9341fdfJamie Gennis * Surface. 47df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis */ 48df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis public Surface(SurfaceTexture surfaceTexture) { 49df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis if (DEBUG_RELEASE) { 50df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis mCreationStack = new Exception(); 51df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis } 52df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis mCanvas = new CompatibleCanvas(); 53df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis initFromSurfaceTexture(surfaceTexture); 54df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis } 55df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis 56df0c84f90894c677c50bdc967a0598f516ac86d7Jamie Gennis /** 57b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Does this object hold a valid surface? Returns true if it holds 58b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * a physical surface, so lockCanvas() will succeed. Otherwise 59b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * returns false. 60b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 61b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native boolean isValid(); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 63b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Release the local reference to the server-side surface. 64b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Always call release() when you're done with a Surface. This will 65b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * make the surface invalid. 66317a6280cc109e873646e4652be1582d870eedfdMathias Agopian */ 67b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void release(); 68b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 69b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** draw into a surface */ 70b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public Canvas lockCanvas(Rect dirty) throws OutOfResourcesException, IllegalArgumentException { 71b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 72b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the dirty rectangle may be expanded to the surface's size, if for 73b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * instance it has been resized or if the bits were lost, since the last 74b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * call. 75b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 76b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return lockCanvasNative(dirty); 77b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 78b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 79b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** unlock the surface and asks a page flip */ 80b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void unlockCanvasAndPost(Canvas canvas); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 82b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 83b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * unlock the surface. the screen won't be updated until 84b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * post() or postAll() is called 85317a6280cc109e873646e4652be1582d870eedfdMathias Agopian */ 86b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void unlockCanvas(Canvas canvas); 87b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 88b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian @Override 89b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public String toString() { 90b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return "Surface(name=" + mName + ", identity=" + getIdentity() + ")"; 91b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 92b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 93b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public int describeContents() { 94b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return 0; 95b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 96b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 97b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void readFromParcel(Parcel source); 98b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void writeToParcel(Parcel dest, int flags); 99b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 100b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 101b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Exception thrown when a surface couldn't be created or resized 102b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 103b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static class OutOfResourcesException extends Exception { 104b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public OutOfResourcesException() { 105b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 106b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public OutOfResourcesException(String name) { 107b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian super(name); 108b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 109b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 110b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 111b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 112b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * ----------------------------------------------------------------------- 113b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * No user serviceable parts beyond this point 114b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * ----------------------------------------------------------------------- 115b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 116b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 117b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* flags used in constructor (keep in sync with ISurfaceComposer.h) */ 118b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 119b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Surface is created hidden @hide */ 120b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int HIDDEN = 0x00000004; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The surface contains secure content, special measures will 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be taken to disallow the surface's content to be copied from 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another process. In particular, screenshots and VNC servers will 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be disabled, but other measures can take place, for instance the 126b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * surface might not be hardware accelerated. 127b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide*/ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SECURE = 0x00000080; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a surface where color components are interpreted as 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "non pre-multiplied" by their alpha channel. Of course this flag is 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meaningless for surfaces without an alpha channel. By default 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * surfaces are pre-multiplied, which means that each color component is 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * already multiplied by its alpha value. In this case the blending 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * equation used is: 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DEST = SRC + DEST * (1-SRC_ALPHA) 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * By contrast, non pre-multiplied surfaces use the following equation: 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DEST = SRC * SRC_ALPHA * DEST * (1-SRC_ALPHA) 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pre-multiplied surfaces must always be used if transparent pixels are 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * composited on top of each-other into the surface. A pre-multiplied 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * surface can never lower the value of the alpha component of a given 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pixel. 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In some rare situations, a non pre-multiplied surface is preferable. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 150b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NON_PREMULTIPLIED = 0x00000100; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 155d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * Indicates that the surface must be considered opaque, even if its 156d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * pixel format is set to translucent. This can be useful if an 157d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * application needs full RGBA 8888 support for instance but will 158d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * still draw every pixel opaque. 159d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * 160d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * @hide 161d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy */ 162d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy public static final int OPAQUE = 0x00000400; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 164d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten /** 165d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * Application requires a hardware-protected path to an 166d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * external display sink. If a hardware-protected path is not available, 167d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * then this surface will not be displayed on the external sink. 168d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * 169d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * @hide 170d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten */ 171d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten public static final int PROTECTED_APP = 0x00000800; 172d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten 173d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten // 0x1000 is reserved for an independent DRM protected flag in framework 174d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten 175b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Creates a normal surface. This is the default. @hide */ 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_NORMAL = 0x00000000; 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a Blur surface. Everything behind this surface is blurred 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by some amount. The quality and refresh speed of the blur effect 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is not settable or guaranteed. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is an error to lock a Blur surface, since it doesn't have 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a backing store. 183b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 18467403e096e6f59b7cd18a90d0d3f5c3d17c31407Mathias Agopian * @deprecated 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18667403e096e6f59b7cd18a90d0d3f5c3d17c31407Mathias Agopian @Deprecated 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_BLUR = 0x00010000; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a Dim surface. Everything behind this surface is dimmed 190334031cd07c3bd09d23fce0ebaf946fc6ecfee26Glenn Kasten * by the amount specified in {@link #setAlpha}. 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is an error to lock a Dim surface, since it doesn't have 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a backing store. 193b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_DIM = 0x00020000; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 197b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Mask used for FX values above @hide */ 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_MASK = 0x000F0000; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* flags used with setFlags() (keep in sync with ISurfaceComposer.h) */ 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 202b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Hide the surface. Equivalent to calling hide(). @hide */ 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SURFACE_HIDDEN = 0x01; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 205b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Freeze the surface. Equivalent to calling freeze(). @hide */ 206c87c4a3e3b3c3949ae3c6f8fd245b71691d5ca3bMathias Agopian public static final int SURFACE_FROZEN = 0x02; 207c87c4a3e3b3c3949ae3c6f8fd245b71691d5ca3bMathias Agopian 208b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Enable dithering when compositing this surface @hide */ 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SURFACE_DITHER = 0x04; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 211b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Disable the orientation animation @hide */ 212eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian public static final int FLAGS_ORIENTATION_ANIMATION_DISABLE = 0x000000001; 213eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian 2140de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg // The mSurfaceControl will only be present for Surfaces used by the window 2150de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg // server or system processes. When this class is parceled we defer to the 216b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian // mSurfaceControl to do the parceling. Otherwise we parcel the 217b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian // mNativeSurface. 21817f638b39f2e8b610ecfa1290e5bc42ab7700c98Mathias Agopian private int mSurfaceControl; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mSaveCount; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Canvas mCanvas; 2218b138323d54e36fd66b22a634494648e20c53373Mathias Agopian private int mNativeSurface; 2222a83f001fdb189f945e82e81e717ba204824b112Romain Guy private int mSurfaceGenerationId; 2238138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen private String mName; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2255be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn // The Translator for density compatibility mode. This is used for scaling 2265be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn // the canvas to perform the appropriate density transformation. 2275be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn private Translator mCompatibilityTranslator; 228240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 229240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // A matrix to scale the matrix set by application. This is set to null for 230240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // non compatibility mode. 231240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private Matrix mCompatibleMatrix; 23238ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima 233f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian private Exception mCreationStack; 234f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * We use a class initializer to allow the native code to cache some 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * field offsets. 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static void nativeClassInit(); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { nativeClassInit(); } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 243b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** create a surface @hide */ 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface(SurfaceSession s, 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pid, int display, int w, int h, int format, int flags) 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws OutOfResourcesException { 247f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 248f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 249f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 2500586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn mCanvas = new CompatibleCanvas(); 2515d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian init(s,pid,null,display,w,h,format,flags); 2525d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian } 2535d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian 254b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** create a surface with a name @hide */ 2555d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian public Surface(SurfaceSession s, 2565d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian int pid, String name, int display, int w, int h, int format, int flags) 2575d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian throws OutOfResourcesException { 258f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 259f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 260f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 2615d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian mCanvas = new CompatibleCanvas(); 2625d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian init(s,pid,name,display,w,h,format,flags); 2638138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen mName = name; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create an empty surface, which will later be filled in by 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * readFromParcel(). 269b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface() { 272f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 273f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 274f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 275240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCanvas = new CompatibleCanvas(); 276240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 277240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 278b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian private Surface(Parcel source) throws OutOfResourcesException { 279b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian init(source); 280b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 281b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 282240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima /** 283b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Copy another surface to this one. This surface now holds a reference 284b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * to the same data as the original surface, and is -not- the owner. 285b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 286b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 287b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void copyFrom(Surface o); 288b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 289b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 290b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public int getGenerationId() { 291b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return mSurfaceGenerationId; 292b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 293b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 294b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 295b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * A Canvas class that can handle the compatibility mode. This does two 296b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * things differently. 297240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima * <ul> 298b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * <li>Returns the width and height of the target metrics, rather than 299b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * native. For example, the canvas returns 320x480 even if an app is running 300b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * in WVGA high density. 301b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * <li>Scales the matrix in setMatrix by the application scale, except if 302b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the matrix looks like obtained from getMatrix. This is a hack to handle 303b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the case that an application uses getMatrix to keep the original matrix, 304b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * set matrix of its own, then set the original matrix back. There is no 305b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * perfect solution that works for all cases, and there are a lot of cases 306b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * that this model does not work, but we hope this works for many apps. 307240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima * </ul> 308240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima */ 309240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private class CompatibleCanvas extends Canvas { 310240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // A temp matrix to remember what an application obtained via {@link getMatrix} 311240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private Matrix mOrigMatrix = null; 312240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 313240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 314240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public int getWidth() { 3155be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn int w = super.getWidth(); 3165be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn if (mCompatibilityTranslator != null) { 3175be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn w = (int)(w * mCompatibilityTranslator.applicationInvertedScale + .5f); 3185be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn } 3195be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn return w; 320240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 321240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 322240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 323240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public int getHeight() { 3245be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn int h = super.getHeight(); 3255be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn if (mCompatibilityTranslator != null) { 3265be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn h = (int)(h * mCompatibilityTranslator.applicationInvertedScale + .5f); 3275be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn } 3285be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn return h; 329240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 330240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 331240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 332240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public void setMatrix(Matrix matrix) { 333240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (mCompatibleMatrix == null || mOrigMatrix == null || mOrigMatrix.equals(matrix)) { 334240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // don't scale the matrix if it's not compatibility mode, or 335240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // the matrix was obtained from getMatrix. 336240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.setMatrix(matrix); 337240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } else { 338240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima Matrix m = new Matrix(mCompatibleMatrix); 339240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima m.preConcat(matrix); 340240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.setMatrix(m); 34138ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima } 342240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 343240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 344240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 345240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public void getMatrix(Matrix m) { 346240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.getMatrix(m); 347240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (mOrigMatrix == null) { 348240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mOrigMatrix = new Matrix(); 34938ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima } 350240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mOrigMatrix.set(m); 351240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 352d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } 35338ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima 35438ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima /** 355b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Sets the translator used to scale canvas's width/height in compatibility 356b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * mode. 35738ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima */ 3585be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn void setCompatibilityTranslator(Translator translator) { 359240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (translator != null) { 360240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima float appScale = translator.applicationScale; 361240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCompatibleMatrix = new Matrix(); 362240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCompatibleMatrix.setScale(appScale, appScale); 363240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3660586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn /** Free all server-side state associated with this surface and 367b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * release this object's reference. @hide */ 3680586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn public native void destroy(); 3690586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn 370b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian private native Canvas lockCanvasNative(Rect dirty); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 372b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 373b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * set display parameters & screenshots 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Freezes the specified display, No updating of the screen will occur 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * until unfreezeDisplay() is called. Everything else works as usual though, 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in particular transactions. 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 381b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native void freezeDisplay(int display); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resume updating the specified display. 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 388b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native void unfreezeDisplay(int display); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set the orientation of the given display. 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param orientation 396eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * @param flags 397b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 399eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian public static native void setOrientation(int display, int orientation, int flags); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 402eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * set the orientation of the given display. 403eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * @param display 404eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * @param orientation 405b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 406eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian */ 407eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian public static void setOrientation(int display, int orientation) { 408eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian setOrientation(display, orientation, 0); 409eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian } 410eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian 411eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian /** 412d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Like {@link #screenshot(int, int, int, int)} but includes all 413d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Surfaces in the screenshot. 414d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * 415d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @hide 416d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn */ 417d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn public static native Bitmap screenshot(int width, int height); 418d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 419d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn /** 420a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * Copy the current screen contents into a bitmap and return it. 421a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * 422a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @param width The desired width of the returned bitmap; the raw 423a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * screen will be scaled down to this size. 424a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @param height The desired height of the returned bitmap; the raw 425a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * screen will be scaled down to this size. 426d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @param minLayer The lowest (bottom-most Z order) surface layer to 427d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * include in the screenshot. 428d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @param maxLayer The highest (top-most Z order) surface layer to 429d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * include in the screenshot. 430a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @return Returns a Bitmap containing the screen contents. 431a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * 432a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @hide 433a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn */ 434d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn public static native Bitmap screenshot(int width, int height, int minLayer, int maxLayer); 435a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn 436b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 437b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set surface parameters. 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * needs to be inside open/closeTransaction block 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 441b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 442b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** start a transaction @hide */ 443b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static native void openTransaction(); 444b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** end a transaction @hide */ 445b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static native void closeTransaction(); 446b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setLayer(int zorder); 448b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setPosition(int x, int y); 450b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setSize(int w, int h); 452b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void hide(); 454b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void show(); 456b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setTransparentRegionHint(Region region); 458b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setAlpha(float alpha); 460b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 461b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); 462b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void freeze(); 464b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void unfreeze(); 466b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFreezeTint(int tint); 468b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFlags(int flags, int mask); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 472b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Surface> CREATOR 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Surface>() 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface createFromParcel(Parcel source) { 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Surface(source); 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "Exception creating surface from parcel", e); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface[] newArray(int size) { 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Surface[size]; 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable { 492d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy try { 493d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy super.finalize(); 494d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } finally { 495d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy if (mNativeSurface != 0 || mSurfaceControl != 0) { 496d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy if (DEBUG_RELEASE) { 497d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy Log.w(LOG_TAG, "Surface.finalize() has work. You should have called release() (" 498d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy + mNativeSurface + ", " + mSurfaceControl + ")", mCreationStack); 499d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } else { 500d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy Log.w(LOG_TAG, "Surface.finalize() has work. You should have called release() (" 501d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy + mNativeSurface + ", " + mSurfaceControl + ")"); 502d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } 503f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 504d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy release(); 505f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private native void init(SurfaceSession s, 5095d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian int pid, String name, int display, int w, int h, int format, int flags) 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws OutOfResourcesException; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private native void init(Parcel source); 5138138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen 5140de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg private native void initFromSurfaceTexture(SurfaceTexture surfaceTexture); 5150de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg 5168138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen private native int getIdentity(); 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 518