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> 270d48072f6047140119ff194c1194ce402fca2c0bRobert Carr#include <gui/IGraphicBufferProducer.h> 289cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Parcel; 32698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianclass ISurfaceComposerClient; 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 344125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden/* 354125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden * Used to communicate layer information between SurfaceFlinger and its clients. 364125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden */ 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct layer_state_t { 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 393165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 403165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian enum { 414125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden eLayerHidden = 0x01, // SURFACE_HIDDEN in SurfaceControl.java 424125a4ffaf374ca9c0773f256998557d3325343eAndy McFadden eLayerOpaque = 0x02, // SURFACE_OPAQUE 43231160866738f6ed2175701f300fed1a8e8e02b0Dan Stoza eLayerSecure = 0x80, // SECURE 443165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian }; 453165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 463165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian enum { 473165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian ePositionChanged = 0x00000001, 483165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eLayerChanged = 0x00000002, 493165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eSizeChanged = 0x00000004, 503165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eAlphaChanged = 0x00000008, 513165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eMatrixChanged = 0x00000010, 523165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eTransparentRegionChanged = 0x00000020, 53231160866738f6ed2175701f300fed1a8e8e02b0Dan Stoza eFlagsChanged = 0x00000040, 543165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eLayerStackChanged = 0x00000080, 553165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eCropChanged = 0x00000100, 56acbe67888f0bd65d5400400f0115bae6bd6199dcPablo Ceballos eDeferTransaction = 0x00000200, 57c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr eFinalCropChanged = 0x00000400, 5882364e3cea0bf88fa8147766433329b3dd5148b8Robert Carr eOverrideScalingModeChanged = 0x00000800, 5999e27f0bc236e38d88ff4f9912ede514a729b8ebRobert Carr eGeometryAppliesWithResize = 0x00001000, 60479c60c85c40fd3536b0c88036e838dc1a4c56a0Albert Chaulk eReparentChildren = 0x00002000, 61db66e627ad8904491e384c64f82fc77a939b9705Robert Carr eDetachChildren = 0x00004000, 62db66e627ad8904491e384c64f82fc77a939b9705Robert Carr eRelativeLayerChanged = 0x00008000 633165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian }; 643165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project layer_state_t() 66ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian : what(0), 678785578391eacd4192333d7b0ce3afedd7d163e6Mathias Agopian x(0), y(0), z(0), w(0), h(0), layerStack(0), 686501e9944df131b3b7e293007084735dfa217f24Jeff Brown alpha(0), flags(0), mask(0), 69acbe67888f0bd65d5400400f0115bae6bd6199dcPablo Ceballos reserved(0), crop(Rect::INVALID_RECT), 70c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr finalCrop(Rect::INVALID_RECT), frameNumber(0), 71479c60c85c40fd3536b0c88036e838dc1a4c56a0Albert Chaulk overrideScalingMode(-1) 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project { 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project matrix.dsdx = matrix.dtdy = 1.0f; 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project matrix.dsdy = matrix.dtdx = 0.0f; 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t write(Parcel& output) const; 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t read(const Parcel& input); 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct matrix22_t { 81bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos float dsdx{0}; 82bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos float dtdx{0}; 83bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos float dtdy{0}; 84cb6e1e385edd44fbc68718e792b7180b1015d438Robert Carr float dsdy{0}; 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 86ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian sp<IBinder> surface; 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t what; 8841b6aabf356d8a505da37b1d046bc9010028fe8bMathias Agopian float x; 8941b6aabf356d8a505da37b1d046bc9010028fe8bMathias Agopian float y; 90ae0608381b2b4699218febd6d45ad9d307544d55Robert Carr int32_t z; 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t w; 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t h; 938785578391eacd4192333d7b0ce3afedd7d163e6Mathias Agopian uint32_t layerStack; 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float alpha; 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t flags; 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t mask; 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t reserved; 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project matrix22_t matrix; 99f15a83f5814219c167f87cb8aaea622fc8493499Jamie Gennis Rect crop; 100acbe67888f0bd65d5400400f0115bae6bd6199dcPablo Ceballos Rect finalCrop; 1010d48072f6047140119ff194c1194ce402fca2c0bRobert Carr sp<IBinder> barrierHandle; 1021db73f66624e7d151710483dd58e03eed672f064Robert Carr sp<IBinder> reparentHandle; 1037dde599bf1a0dbef7390d91c2689d506371cdbd7Dan Stoza uint64_t frameNumber; 104c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr int32_t overrideScalingMode; 1050d48072f6047140119ff194c1194ce402fca2c0bRobert Carr 1060d48072f6047140119ff194c1194ce402fca2c0bRobert Carr sp<IGraphicBufferProducer> barrierGbp; 1070d48072f6047140119ff194c1194ce402fca2c0bRobert Carr 108db66e627ad8904491e384c64f82fc77a939b9705Robert Carr sp<IBinder> relativeLayerHandle; 109db66e627ad8904491e384c64f82fc77a939b9705Robert Carr 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // non POD must be last. see write/read 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region transparentRegion; 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 114698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianstruct ComposerState { 115698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian sp<ISurfaceComposerClient> client; 116698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian layer_state_t state; 117698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian status_t write(Parcel& output) const; 118698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian status_t read(const Parcel& input); 119698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian}; 120698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian 1218b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopianstruct DisplayState { 1223165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 1233165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian enum { 1243165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientationDefault = 0, 1253165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientation90 = 1, 1263165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientation180 = 2, 1273165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientation270 = 3, 1283165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientationUnchanged = 4, 1293165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eOrientationSwapMask = 0x01 1303165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian }; 1313165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian 132e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian enum { 13300e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian eSurfaceChanged = 0x01, 13400e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian eLayerStackChanged = 0x02, 1351f6078aef71b1d3f080cd565adbec350c71088ddMichael Wright eDisplayProjectionChanged = 0x04, 1361f6078aef71b1d3f080cd565adbec350c71088ddMichael Wright eDisplaySizeChanged = 0x08 137e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian }; 138e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 13960d6922a011fe18c111b8d30fb6ef1f655b6b15ePablo Ceballos DisplayState(); 14060d6922a011fe18c111b8d30fb6ef1f655b6b15ePablo Ceballos 141e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian uint32_t what; 142e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian sp<IBinder> token; 1432adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<IGraphicBufferProducer> surface; 144e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian uint32_t layerStack; 145e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian uint32_t orientation; 146e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian Rect viewport; 147e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian Rect frame; 1481f6078aef71b1d3f080cd565adbec350c71088ddMichael Wright uint32_t width, height; 149e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian status_t write(Parcel& output) const; 150e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian status_t read(const Parcel& input); 1518b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian}; 1528b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian 153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1559cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#endif // ANDROID_SF_LAYER_STATE_H 156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 157