1d291c222357303b9611cab89d0c3b047584ef377Chong Zhang/*
2d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * Copyright 2015 The Android Open Source Project
3d291c222357303b9611cab89d0c3b047584ef377Chong Zhang *
4d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * you may not use this file except in compliance with the License.
6d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * You may obtain a copy of the License at
7d291c222357303b9611cab89d0c3b047584ef377Chong Zhang *
8d291c222357303b9611cab89d0c3b047584ef377Chong Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9d291c222357303b9611cab89d0c3b047584ef377Chong Zhang *
10d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * Unless required by applicable law or agreed to in writing, software
11d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * See the License for the specific language governing permissions and
14d291c222357303b9611cab89d0c3b047584ef377Chong Zhang * limitations under the License.
15d291c222357303b9611cab89d0c3b047584ef377Chong Zhang */
16d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
17d291c222357303b9611cab89d0c3b047584ef377Chong Zhang#ifndef PERSISTENT_SURFACE_H_
18d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
19d291c222357303b9611cab89d0c3b047584ef377Chong Zhang#define PERSISTENT_SURFACE_H_
20d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
21d291c222357303b9611cab89d0c3b047584ef377Chong Zhang#include <gui/IGraphicBufferProducer.h>
22addf2cbb120346ae42e78fa739245a353db5edadChong Zhang#include <android/IGraphicBufferSource.h>
23d291c222357303b9611cab89d0c3b047584ef377Chong Zhang#include <media/stagefright/foundation/ABase.h>
24addf2cbb120346ae42e78fa739245a353db5edadChong Zhang#include <binder/Parcel.h>
25d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
26d291c222357303b9611cab89d0c3b047584ef377Chong Zhangnamespace android {
27d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
28d291c222357303b9611cab89d0c3b047584ef377Chong Zhangstruct PersistentSurface : public RefBase {
29addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    PersistentSurface() {}
30addf2cbb120346ae42e78fa739245a353db5edadChong Zhang
31d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    PersistentSurface(
32d291c222357303b9611cab89d0c3b047584ef377Chong Zhang            const sp<IGraphicBufferProducer>& bufferProducer,
33addf2cbb120346ae42e78fa739245a353db5edadChong Zhang            const sp<IGraphicBufferSource>& bufferSource) :
34d291c222357303b9611cab89d0c3b047584ef377Chong Zhang        mBufferProducer(bufferProducer),
35addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        mBufferSource(bufferSource) { }
36d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
37d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    sp<IGraphicBufferProducer> getBufferProducer() const {
38d291c222357303b9611cab89d0c3b047584ef377Chong Zhang        return mBufferProducer;
39d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    }
40d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
41addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    sp<IGraphicBufferSource> getBufferSource() const {
42addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        return mBufferSource;
43addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    }
44addf2cbb120346ae42e78fa739245a353db5edadChong Zhang
45addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    status_t writeToParcel(Parcel *parcel) const {
46addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        parcel->writeStrongBinder(IInterface::asBinder(mBufferProducer));
47addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        parcel->writeStrongBinder(IInterface::asBinder(mBufferSource));
48addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        return NO_ERROR;
49addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    }
50addf2cbb120346ae42e78fa739245a353db5edadChong Zhang
51addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    status_t readFromParcel(const Parcel *parcel) {
52addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        mBufferProducer = interface_cast<IGraphicBufferProducer>(
53addf2cbb120346ae42e78fa739245a353db5edadChong Zhang                parcel->readStrongBinder());
54addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        mBufferSource = interface_cast<IGraphicBufferSource>(
55addf2cbb120346ae42e78fa739245a353db5edadChong Zhang                parcel->readStrongBinder());
56addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        return NO_ERROR;
57d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    }
58d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
59d291c222357303b9611cab89d0c3b047584ef377Chong Zhangprivate:
60addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    sp<IGraphicBufferProducer> mBufferProducer;
61addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    sp<IGraphicBufferSource> mBufferSource;
62d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
63d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    DISALLOW_EVIL_CONSTRUCTORS(PersistentSurface);
64d291c222357303b9611cab89d0c3b047584ef377Chong Zhang};
65d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
66d291c222357303b9611cab89d0c3b047584ef377Chong Zhang}  // namespace android
67d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
68d291c222357303b9611cab89d0c3b047584ef377Chong Zhang#endif  // PERSISTENT_SURFACE_H_
69