1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 179cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#ifndef ANDROID_SF_LAYER_STATE_H 189cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#define ANDROID_SF_LAYER_STATE_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Region.h> 26f15a83f5814219c167f87cb8aaea622fc8493499Jamie Gennis#include <ui/Rect.h> 279cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Parcel; 31698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianclass ISurfaceComposerClient; 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 334125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden/* 344125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden * Used to communicate layer information between SurfaceFlinger and its clients. 354125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden */ 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct layer_state_t { 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 383165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 393165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian enum { 404125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden eLayerHidden = 0x01, // SURFACE_HIDDEN in SurfaceControl.java 414125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden eLayerOpaque = 0x02, // SURFACE_OPAQUE 42231160866738f6ed2175701f300fed1a8e8e02b0Dan Stoza eLayerSecure = 0x80, // SECURE 433165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian }; 443165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 453165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian enum { 463165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian ePositionChanged = 0x00000001, 473165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eLayerChanged = 0x00000002, 483165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eSizeChanged = 0x00000004, 493165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eAlphaChanged = 0x00000008, 503165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eMatrixChanged = 0x00000010, 513165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eTransparentRegionChanged = 0x00000020, 52231160866738f6ed2175701f300fed1a8e8e02b0Dan Stoza eFlagsChanged = 0x00000040, 533165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eLayerStackChanged = 0x00000080, 543165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eCropChanged = 0x00000100, 55acbe67888f0bd65d5400400f0115bae6bd6199dcPablo Ceballos eDeferTransaction = 0x00000200, 56c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr eFinalCropChanged = 0x00000400, 5782364e3cea0bf88fa8147766433329b3dd5148b8Robert Carr eOverrideScalingModeChanged = 0x00000800, 5899e27f0bc236e38d88ff4f9912ede514a729b8ebRobert Carr eGeometryAppliesWithResize = 0x00001000, 593165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian }; 603165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project layer_state_t() 62ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian : what(0), 638785578391eacd4192333d7b0ce3afedd7d163e6Mathias Agopian x(0), y(0), z(0), w(0), h(0), layerStack(0), 646501e9944df131b3b7e293007084735dfa217f24Jeff Brown alpha(0), flags(0), mask(0), 65acbe67888f0bd65d5400400f0115bae6bd6199dcPablo Ceballos reserved(0), crop(Rect::INVALID_RECT), 66c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr finalCrop(Rect::INVALID_RECT), frameNumber(0), 67c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr overrideScalingMode(-1) 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project { 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project matrix.dsdx = matrix.dtdy = 1.0f; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project matrix.dsdy = matrix.dtdx = 0.0f; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t write(Parcel& output) const; 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t read(const Parcel& input); 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct matrix22_t { 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float dsdx; 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float dtdx; 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float dsdy; 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float dtdy; 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 82ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian sp<IBinder> surface; 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t what; 8441b6aabf356d8a505da37b1d046bc9010028fe8bMathias Agopian float x; 8541b6aabf356d8a505da37b1d046bc9010028fe8bMathias Agopian float y; 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t z; 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t w; 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t h; 898785578391eacd4192333d7b0ce3afedd7d163e6Mathias Agopian uint32_t layerStack; 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float alpha; 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t flags; 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t mask; 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t reserved; 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project matrix22_t matrix; 95f15a83f5814219c167f87cb8aaea622fc8493499Jamie Gennis Rect crop; 96acbe67888f0bd65d5400400f0115bae6bd6199dcPablo Ceballos Rect finalCrop; 977dde599bf1a0dbef7390d91c2689d506371cdbd7Dan Stoza sp<IBinder> handle; 987dde599bf1a0dbef7390d91c2689d506371cdbd7Dan Stoza uint64_t frameNumber; 99c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr int32_t overrideScalingMode; 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // non POD must be last. see write/read 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region transparentRegion; 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 104698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianstruct ComposerState { 105698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian sp<ISurfaceComposerClient> client; 106698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian layer_state_t state; 107698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian status_t write(Parcel& output) const; 108698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian status_t read(const Parcel& input); 109698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian}; 110698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian 1118b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopianstruct DisplayState { 1123165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 1133165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian enum { 1143165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientationDefault = 0, 1153165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientation90 = 1, 1163165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientation180 = 2, 1173165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientation270 = 3, 1183165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientationUnchanged = 4, 1193165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientationSwapMask = 0x01 1203165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian }; 1213165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 122e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian enum { 12300e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian eSurfaceChanged = 0x01, 12400e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian eLayerStackChanged = 0x02, 1251f6078aef71b1d3f080cd565adbec350c71088ddMichael Wright eDisplayProjectionChanged = 0x04, 1261f6078aef71b1d3f080cd565adbec350c71088ddMichael Wright eDisplaySizeChanged = 0x08 127e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian }; 128e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 12960d6922a011fe18c111b8d30fb6ef1f655b6b15ePablo Ceballos DisplayState(); 13060d6922a011fe18c111b8d30fb6ef1f655b6b15ePablo Ceballos 131e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian uint32_t what; 132e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian sp<IBinder> token; 1332adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<IGraphicBufferProducer> surface; 134e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian uint32_t layerStack; 135e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian uint32_t orientation; 136e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian Rect viewport; 137e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian Rect frame; 1381f6078aef71b1d3f080cd565adbec350c71088ddMichael Wright uint32_t width, height; 139e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian status_t write(Parcel& output) const; 140e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian status_t read(const Parcel& input); 1418b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian}; 1428b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1459cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#endif // ANDROID_SF_LAYER_STATE_H 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 147