LayerState.cpp revision 8b33f032327f8de0dcc0e6d0d43ed80f834b51f6
1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include <utils/Errors.h> 18#include <binder/Parcel.h> 19#include <gui/ISurfaceComposerClient.h> 20#include <gui/ISurfaceTexture.h> 21#include <private/gui/LayerState.h> 22 23namespace android { 24 25status_t layer_state_t::write(Parcel& output) const 26{ 27 status_t err; 28 29 size_t len = transparentRegion.write(NULL, 0); 30 err = output.writeInt32(len); 31 if (err < NO_ERROR) return err; 32 33 void* buf = output.writeInplace(len); 34 if (buf == NULL) return NO_MEMORY; 35 36 err = transparentRegion.write(buf, len); 37 if (err < NO_ERROR) return err; 38 39 // NOTE: regions are at the end of the structure 40 size_t size = sizeof(layer_state_t); 41 size -= sizeof(transparentRegion); 42 err = output.write(this, size); 43 return err; 44} 45 46status_t layer_state_t::read(const Parcel& input) 47{ 48 status_t err; 49 size_t len = input.readInt32(); 50 void const* buf = input.readInplace(len); 51 if (buf == NULL) return NO_MEMORY; 52 53 err = transparentRegion.read(buf); 54 if (err < NO_ERROR) return err; 55 56 // NOTE: regions are at the end of the structure 57 size_t size = sizeof(layer_state_t); 58 size -= sizeof(transparentRegion); 59 input.read(this, size); 60 return NO_ERROR; 61} 62 63status_t ComposerState::write(Parcel& output) const { 64 output.writeStrongBinder(client->asBinder()); 65 return state.write(output); 66} 67 68status_t ComposerState::read(const Parcel& input) { 69 client = interface_cast<ISurfaceComposerClient>(input.readStrongBinder()); 70 return state.read(input); 71} 72 73 74status_t DisplayState::write(Parcel& output) const { 75 output.writeStrongBinder(surface->asBinder()); 76 output.writeInt32(displayId); 77 output.writeInt32(layerStack); 78 output.writeInt32(orientation); 79 memcpy(output.writeInplace(sizeof(Rect)), &viewport, sizeof(Rect)); 80 memcpy(output.writeInplace(sizeof(Rect)), &frame, sizeof(Rect)); 81 return NO_ERROR; 82} 83 84status_t DisplayState::read(const Parcel& input) { 85 surface = interface_cast<ISurfaceTexture>(input.readStrongBinder()); 86 displayId = input.readInt32(); 87 layerStack = input.readInt32(); 88 orientation = input.readInt32(); 89 memcpy(&viewport, input.readInplace(sizeof(Rect)), sizeof(Rect)); 90 memcpy(&frame, input.readInplace(sizeof(Rect)), sizeof(Rect)); 91 return NO_ERROR; 92} 93 94 95}; // namespace android 96