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
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h>
18c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/Parcel.h>
1990ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <gui/ISurfaceComposerClient.h>
208b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian#include <gui/ISurfaceTexture.h>
2190ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <private/gui/LayerState.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t layer_state_t::write(Parcel& output) const
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
27b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian    status_t err;
28b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian
298683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    err = output.write(transparentRegion);
30b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian    if (err < NO_ERROR) return err;
31b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian
32b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian    // NOTE: regions are at the end of the structure
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t size = sizeof(layer_state_t);
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size -= sizeof(transparentRegion);
35b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian    err = output.write(this, size);
36b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian    return err;
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t layer_state_t::read(const Parcel& input)
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
41b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian    status_t err;
42b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian
438683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    err = input.read(transparentRegion);
44b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian    if (err < NO_ERROR) return err;
45b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian
46b6121422ef641dc7317d1c3bf1d38b7d73922250Mathias Agopian    // NOTE: regions are at the end of the structure
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t size = sizeof(layer_state_t);
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size -= sizeof(transparentRegion);
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    input.read(this, size);
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return NO_ERROR;
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
53698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianstatus_t ComposerState::write(Parcel& output) const {
54698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian    output.writeStrongBinder(client->asBinder());
55698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian    return state.write(output);
56698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian}
57698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian
58698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianstatus_t ComposerState::read(const Parcel& input) {
59698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian    client = interface_cast<ISurfaceComposerClient>(input.readStrongBinder());
60698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian    return state.read(input);
61698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian}
62698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian
638b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian
648b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopianstatus_t DisplayState::write(Parcel& output) const {
65e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    output.writeStrongBinder(token);
668b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian    output.writeStrongBinder(surface->asBinder());
67e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    output.writeInt32(what);
688b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian    output.writeInt32(layerStack);
698b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian    output.writeInt32(orientation);
708683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    output.write(viewport);
718683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    output.write(frame);
728b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian    return NO_ERROR;
738b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian}
748b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian
758b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopianstatus_t DisplayState::read(const Parcel& input) {
76e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    token = input.readStrongBinder();
778b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian    surface = interface_cast<ISurfaceTexture>(input.readStrongBinder());
78e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    what = input.readInt32();
798b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian    layerStack = input.readInt32();
808b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian    orientation = input.readInt32();
818683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    input.read(viewport);
828683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    input.read(frame);
838b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian    return NO_ERROR;
848b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian}
858b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian
868b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
88