Surface.java revision 67403e096e6f59b7cd18a90d0d3f5c3d17c31407
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 /** 39b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Does this object hold a valid surface? Returns true if it holds 40b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * a physical surface, so lockCanvas() will succeed. Otherwise 41b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * returns false. 42b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 43b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native boolean isValid(); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Release the local reference to the server-side surface. 46b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Always call release() when you're done with a Surface. This will 47b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * make the surface invalid. 48317a6280cc109e873646e4652be1582d870eedfdMathias Agopian */ 49b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void release(); 50b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 51b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** draw into a surface */ 52b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public Canvas lockCanvas(Rect dirty) throws OutOfResourcesException, IllegalArgumentException { 53b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 54b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the dirty rectangle may be expanded to the surface's size, if for 55b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * instance it has been resized or if the bits were lost, since the last 56b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * call. 57b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 58b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return lockCanvasNative(dirty); 59b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 60b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 61b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** unlock the surface and asks a page flip */ 62b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void unlockCanvasAndPost(Canvas canvas); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 64b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 65b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * unlock the surface. the screen won't be updated until 66b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * post() or postAll() is called 67317a6280cc109e873646e4652be1582d870eedfdMathias Agopian */ 68b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void unlockCanvas(Canvas canvas); 69b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 70b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian @Override 71b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public String toString() { 72b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return "Surface(name=" + mName + ", identity=" + getIdentity() + ")"; 73b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 74b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 75b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public int describeContents() { 76b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return 0; 77b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 78b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 79b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void readFromParcel(Parcel source); 80b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void writeToParcel(Parcel dest, int flags); 81b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 82b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 83b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Exception thrown when a surface couldn't be created or resized 84b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 85b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static class OutOfResourcesException extends Exception { 86b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public OutOfResourcesException() { 87b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 88b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public OutOfResourcesException(String name) { 89b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian super(name); 90b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 91b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 92b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 93b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 94b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * ----------------------------------------------------------------------- 95b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * No user serviceable parts beyond this point 96b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * ----------------------------------------------------------------------- 97b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 98b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 99b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* flags used in constructor (keep in sync with ISurfaceComposer.h) */ 100b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 101b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Surface is created hidden @hide */ 102b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static final int HIDDEN = 0x00000004; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The surface contains secure content, special measures will 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be taken to disallow the surface's content to be copied from 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another process. In particular, screenshots and VNC servers will 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be disabled, but other measures can take place, for instance the 108b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * surface might not be hardware accelerated. 109b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide*/ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SECURE = 0x00000080; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a surface where color components are interpreted as 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "non pre-multiplied" by their alpha channel. Of course this flag is 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meaningless for surfaces without an alpha channel. By default 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * surfaces are pre-multiplied, which means that each color component is 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * already multiplied by its alpha value. In this case the blending 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * equation used is: 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DEST = SRC + DEST * (1-SRC_ALPHA) 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * By contrast, non pre-multiplied surfaces use the following equation: 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DEST = SRC * SRC_ALPHA * DEST * (1-SRC_ALPHA) 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pre-multiplied surfaces must always be used if transparent pixels are 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * composited on top of each-other into the surface. A pre-multiplied 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * surface can never lower the value of the alpha component of a given 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pixel. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In some rare situations, a non pre-multiplied surface is preferable. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 132b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NON_PREMULTIPLIED = 0x00000100; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 137d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * Indicates that the surface must be considered opaque, even if its 138d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * pixel format is set to translucent. This can be useful if an 139d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * application needs full RGBA 8888 support for instance but will 140d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * still draw every pixel opaque. 141d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * 142d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy * @hide 143d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy */ 144d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy public static final int OPAQUE = 0x00000400; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 146d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten /** 147d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * Application requires a hardware-protected path to an 148d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * external display sink. If a hardware-protected path is not available, 149d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * then this surface will not be displayed on the external sink. 150d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * 151d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten * @hide 152d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten */ 153d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten public static final int PROTECTED_APP = 0x00000800; 154d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten 155d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten // 0x1000 is reserved for an independent DRM protected flag in framework 156d6f5bde96b2fe82bc7e5d4e64266d585108c4648Glenn Kasten 157b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Creates a normal surface. This is the default. @hide */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_NORMAL = 0x00000000; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a Blur surface. Everything behind this surface is blurred 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by some amount. The quality and refresh speed of the blur effect 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is not settable or guaranteed. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is an error to lock a Blur surface, since it doesn't have 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a backing store. 165b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 16667403e096e6f59b7cd18a90d0d3f5c3d17c31407Mathias Agopian * @deprecated 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16867403e096e6f59b7cd18a90d0d3f5c3d17c31407Mathias Agopian @Deprecated 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_BLUR = 0x00010000; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Creates a Dim surface. Everything behind this surface is dimmed 172334031cd07c3bd09d23fce0ebaf946fc6ecfee26Glenn Kasten * by the amount specified in {@link #setAlpha}. 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is an error to lock a Dim surface, since it doesn't have 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a backing store. 175b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_DIM = 0x00020000; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Mask used for FX values above @hide */ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FX_SURFACE_MASK = 0x000F0000; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* flags used with setFlags() (keep in sync with ISurfaceComposer.h) */ 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 184b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Hide the surface. Equivalent to calling hide(). @hide */ 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SURFACE_HIDDEN = 0x01; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 187b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Freeze the surface. Equivalent to calling freeze(). @hide */ 188c87c4a3e3b3c3949ae3c6f8fd245b71691d5ca3bMathias Agopian public static final int SURFACE_FROZEN = 0x02; 189c87c4a3e3b3c3949ae3c6f8fd245b71691d5ca3bMathias Agopian 190b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Enable dithering when compositing this surface @hide */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SURFACE_DITHER = 0x04; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 193b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** Disable the orientation animation @hide */ 194eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian public static final int FLAGS_ORIENTATION_ANIMATION_DISABLE = 0x000000001; 195eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian 1960de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg // The mSurfaceControl will only be present for Surfaces used by the window 1970de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg // server or system processes. When this class is parceled we defer to the 198b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian // mSurfaceControl to do the parceling. Otherwise we parcel the 199b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian // mNativeSurface. 20017f638b39f2e8b610ecfa1290e5bc42ab7700c98Mathias Agopian private int mSurfaceControl; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mSaveCount; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Canvas mCanvas; 2038b138323d54e36fd66b22a634494648e20c53373Mathias Agopian private int mNativeSurface; 2042a83f001fdb189f945e82e81e717ba204824b112Romain Guy private int mSurfaceGenerationId; 2058138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen private String mName; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2075be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn // The Translator for density compatibility mode. This is used for scaling 2085be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn // the canvas to perform the appropriate density transformation. 2095be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn private Translator mCompatibilityTranslator; 210240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 211240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // A matrix to scale the matrix set by application. This is set to null for 212240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // non compatibility mode. 213240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private Matrix mCompatibleMatrix; 21438ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima 215f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian private Exception mCreationStack; 216f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * We use a class initializer to allow the native code to cache some 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * field offsets. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static void nativeClassInit(); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { nativeClassInit(); } 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2250de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg /** 2260de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg * Create Surface from a SurfaceTexture. 2270de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg * 2280de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg * @param surfaceTexture The {@link SurfaceTexture} that is updated by this Surface. 2290de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg * @hide 2300de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg */ 2310de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg public Surface(SurfaceTexture surfaceTexture) { 2320de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg if (DEBUG_RELEASE) { 2330de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg mCreationStack = new Exception(); 2340de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg } 2350de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg mCanvas = new CompatibleCanvas(); 2360de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg initFromSurfaceTexture(surfaceTexture); 2370de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** create a surface @hide */ 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface(SurfaceSession s, 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pid, int display, int w, int h, int format, int flags) 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws OutOfResourcesException { 243f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 244f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 245f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 2460586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn mCanvas = new CompatibleCanvas(); 2475d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian init(s,pid,null,display,w,h,format,flags); 2485d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian } 2495d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian 250b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** create a surface with a name @hide */ 2515d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian public Surface(SurfaceSession s, 2525d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian int pid, String name, int display, int w, int h, int format, int flags) 2535d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian throws OutOfResourcesException { 254f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 255f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 256f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 2575d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian mCanvas = new CompatibleCanvas(); 2585d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian init(s,pid,name,display,w,h,format,flags); 2598138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen mName = name; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create an empty surface, which will later be filled in by 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * readFromParcel(). 265b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface() { 268f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian if (DEBUG_RELEASE) { 269f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian mCreationStack = new Exception(); 270f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 271240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCanvas = new CompatibleCanvas(); 272240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 273240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 274b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian private Surface(Parcel source) throws OutOfResourcesException { 275b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian init(source); 276b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 277b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 278240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima /** 279b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Copy another surface to this one. This surface now holds a reference 280b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * to the same data as the original surface, and is -not- the owner. 281b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 282b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian */ 283b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void copyFrom(Surface o); 284b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 285b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 286b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public int getGenerationId() { 287b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian return mSurfaceGenerationId; 288b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian } 289b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 290b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** 291b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * A Canvas class that can handle the compatibility mode. This does two 292b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * things differently. 293240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima * <ul> 294b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * <li>Returns the width and height of the target metrics, rather than 295b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * native. For example, the canvas returns 320x480 even if an app is running 296b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * in WVGA high density. 297b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * <li>Scales the matrix in setMatrix by the application scale, except if 298b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the matrix looks like obtained from getMatrix. This is a hack to handle 299b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * the case that an application uses getMatrix to keep the original matrix, 300b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * set matrix of its own, then set the original matrix back. There is no 301b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * perfect solution that works for all cases, and there are a lot of cases 302b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * that this model does not work, but we hope this works for many apps. 303240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima * </ul> 304240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima */ 305240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private class CompatibleCanvas extends Canvas { 306240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // A temp matrix to remember what an application obtained via {@link getMatrix} 307240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima private Matrix mOrigMatrix = null; 308240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 309240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 310240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public int getWidth() { 3115be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn int w = super.getWidth(); 3125be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn if (mCompatibilityTranslator != null) { 3135be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn w = (int)(w * mCompatibilityTranslator.applicationInvertedScale + .5f); 3145be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn } 3155be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn return w; 316240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 317240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 318240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 319240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public int getHeight() { 3205be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn int h = super.getHeight(); 3215be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn if (mCompatibilityTranslator != null) { 3225be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn h = (int)(h * mCompatibilityTranslator.applicationInvertedScale + .5f); 3235be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn } 3245be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn return h; 325240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 326240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 327240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 328240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public void setMatrix(Matrix matrix) { 329240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (mCompatibleMatrix == null || mOrigMatrix == null || mOrigMatrix.equals(matrix)) { 330240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // don't scale the matrix if it's not compatibility mode, or 331240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima // the matrix was obtained from getMatrix. 332240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.setMatrix(matrix); 333240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } else { 334240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima Matrix m = new Matrix(mCompatibleMatrix); 335240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima m.preConcat(matrix); 336240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.setMatrix(m); 33738ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima } 338240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 339240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima 340240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima @Override 341240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima public void getMatrix(Matrix m) { 342240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima super.getMatrix(m); 343240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (mOrigMatrix == null) { 344240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mOrigMatrix = new Matrix(); 34538ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima } 346240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mOrigMatrix.set(m); 347240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 348d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } 34938ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima 35038ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima /** 351b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * Sets the translator used to scale canvas's width/height in compatibility 352b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * mode. 35338ed7d7701514ee7127d0430e952930854608c4fMitsuru Oshima */ 3545be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn void setCompatibilityTranslator(Translator translator) { 355240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima if (translator != null) { 356240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima float appScale = translator.applicationScale; 357240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCompatibleMatrix = new Matrix(); 358240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima mCompatibleMatrix.setScale(appScale, appScale); 359240f8a7532a024e36998bdbe87cff2ef080d75deMitsuru Oshima } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3620586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn /** Free all server-side state associated with this surface and 363b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * release this object's reference. @hide */ 3640586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn public native void destroy(); 3650586a1b77a788a119166a37fccd909bf9ed65f23Dianne Hackborn 366b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian private native Canvas lockCanvasNative(Rect dirty); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 368b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 369b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * set display parameters & screenshots 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Freezes the specified display, No updating of the screen will occur 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * until unfreezeDisplay() is called. Everything else works as usual though, 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in particular transactions. 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 377b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native void freezeDisplay(int display); 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resume updating the specified display. 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 384b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native void unfreezeDisplay(int display); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set the orientation of the given display. 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param display 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param orientation 392eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * @param flags 393b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 395eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian public static native void setOrientation(int display, int orientation, int flags); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 398eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * set the orientation of the given display. 399eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * @param display 400eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian * @param orientation 401b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian * @hide 402eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian */ 403eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian public static void setOrientation(int display, int orientation) { 404eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian setOrientation(display, orientation, 0); 405eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian } 406eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian 407eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian /** 408d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Like {@link #screenshot(int, int, int, int)} but includes all 409d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Surfaces in the screenshot. 410d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * 411d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @hide 412d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn */ 413d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn public static native Bitmap screenshot(int width, int height); 414d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 415d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn /** 416a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * Copy the current screen contents into a bitmap and return it. 417a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * 418a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @param width The desired width of the returned bitmap; the raw 419a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * screen will be scaled down to this size. 420a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @param height The desired height of the returned bitmap; the raw 421a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * screen will be scaled down to this size. 422d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @param minLayer The lowest (bottom-most Z order) surface layer to 423d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * include in the screenshot. 424d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @param maxLayer The highest (top-most Z order) surface layer to 425d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * include in the screenshot. 426a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @return Returns a Bitmap containing the screen contents. 427a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * 428a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn * @hide 429a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn */ 430d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn public static native Bitmap screenshot(int width, int height, int minLayer, int maxLayer); 431a111187a5b4dc5d287e29ced7d65e8d20edca140Dianne Hackborn 432b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 433b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /* 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set surface parameters. 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * needs to be inside open/closeTransaction block 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 437b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 438b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** start a transaction @hide */ 439b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static native void openTransaction(); 440b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** end a transaction @hide */ 441b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public static native void closeTransaction(); 442b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setLayer(int zorder); 444b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setPosition(int x, int y); 446b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setSize(int w, int h); 448b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void hide(); 450b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void show(); 452b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setTransparentRegionHint(Region region); 454b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setAlpha(float alpha); 456b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 457b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian public native void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); 458b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void freeze(); 460b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void unfreeze(); 462b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFreezeTint(int tint); 464b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian /** @hide */ 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFlags(int flags, int mask); 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 468b923066deeffbbaad14a117bd56259bd6ee20a08Mathias Agopian 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Surface> CREATOR 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Surface>() 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface createFromParcel(Parcel source) { 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Surface(source); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "Exception creating surface from parcel", e); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Surface[] newArray(int size) { 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Surface[size]; 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable { 488d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy try { 489d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy super.finalize(); 490d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } finally { 491d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy if (mNativeSurface != 0 || mSurfaceControl != 0) { 492d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy if (DEBUG_RELEASE) { 493d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy Log.w(LOG_TAG, "Surface.finalize() has work. You should have called release() (" 494d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy + mNativeSurface + ", " + mSurfaceControl + ")", mCreationStack); 495d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } else { 496d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy Log.w(LOG_TAG, "Surface.finalize() has work. You should have called release() (" 497d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy + mNativeSurface + ", " + mSurfaceControl + ")"); 498d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy } 499f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 500d10cd5765a2b706fc174f16b951d6b0a5d3740d3Romain Guy release(); 501f5e32f33eddc6e22edee1df486b38294ddc76cc3Mathias Agopian } 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private native void init(SurfaceSession s, 5055d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693Mathias Agopian int pid, String name, int display, int w, int h, int format, int flags) 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws OutOfResourcesException; 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private native void init(Parcel source); 5098138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen 5100de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg private native void initFromSurfaceTexture(SurfaceTexture surfaceTexture); 5110de171b0d490a5928d54d2fb67c912d140aac643Ted Bonkenburg 5128138cb49e47f9a9905a316a217757710185c66aaMarco Nelissen private native int getIdentity(); 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 514