PersistentSurface.h revision d3663c97fb8bd44877e07a753a12b838a780b69c
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
21addf2cbb120346ae42e78fa739245a353db5edadChong Zhang#include <android/IGraphicBufferSource.h>
22addf2cbb120346ae42e78fa739245a353db5edadChong Zhang#include <binder/Parcel.h>
23d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar#include <hidl/HidlSupport.h>
24d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar#include <gui/IGraphicBufferProducer.h>
25d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar#include <media/stagefright/foundation/ABase.h>
26d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar
27d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnarusing android::hidl::base::V1_0::IBase;
28d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
29d291c222357303b9611cab89d0c3b047584ef377Chong Zhangnamespace android {
30d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
31d291c222357303b9611cab89d0c3b047584ef377Chong Zhangstruct PersistentSurface : public RefBase {
32addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    PersistentSurface() {}
33addf2cbb120346ae42e78fa739245a353db5edadChong Zhang
34d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar    // create an OMX persistent surface
35d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    PersistentSurface(
36d291c222357303b9611cab89d0c3b047584ef377Chong Zhang            const sp<IGraphicBufferProducer>& bufferProducer,
37addf2cbb120346ae42e78fa739245a353db5edadChong Zhang            const sp<IGraphicBufferSource>& bufferSource) :
38d291c222357303b9611cab89d0c3b047584ef377Chong Zhang        mBufferProducer(bufferProducer),
39addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        mBufferSource(bufferSource) { }
40d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
41d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar    // create a HIDL persistent surface
42d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar    PersistentSurface(
43d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar            const sp<IGraphicBufferProducer>& bufferProducer,
44d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar            const sp<IBase>& hidlTarget) :
45d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar        mBufferProducer(bufferProducer),
46d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar        mHidlTarget(hidlTarget) { }
47d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar
48d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    sp<IGraphicBufferProducer> getBufferProducer() const {
49d291c222357303b9611cab89d0c3b047584ef377Chong Zhang        return mBufferProducer;
50d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    }
51d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
52addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    sp<IGraphicBufferSource> getBufferSource() const {
53addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        return mBufferSource;
54addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    }
55addf2cbb120346ae42e78fa739245a353db5edadChong Zhang
56d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar    sp<IBase> getHidlTarget() const {
57d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar        return mHidlTarget;
58d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar    }
59d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar
60addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    status_t writeToParcel(Parcel *parcel) const {
61addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        parcel->writeStrongBinder(IInterface::asBinder(mBufferProducer));
62addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        parcel->writeStrongBinder(IInterface::asBinder(mBufferSource));
63addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        return NO_ERROR;
64addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    }
65addf2cbb120346ae42e78fa739245a353db5edadChong Zhang
66addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    status_t readFromParcel(const Parcel *parcel) {
67addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        mBufferProducer = interface_cast<IGraphicBufferProducer>(
68addf2cbb120346ae42e78fa739245a353db5edadChong Zhang                parcel->readStrongBinder());
69addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        mBufferSource = interface_cast<IGraphicBufferSource>(
70addf2cbb120346ae42e78fa739245a353db5edadChong Zhang                parcel->readStrongBinder());
71addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        return NO_ERROR;
72d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    }
73d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
74d291c222357303b9611cab89d0c3b047584ef377Chong Zhangprivate:
75addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    sp<IGraphicBufferProducer> mBufferProducer;
76addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    sp<IGraphicBufferSource> mBufferSource;
77d3663c97fb8bd44877e07a753a12b838a780b69cLajos Molnar    sp<IBase> mHidlTarget;
78d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
79d291c222357303b9611cab89d0c3b047584ef377Chong Zhang    DISALLOW_EVIL_CONSTRUCTORS(PersistentSurface);
80d291c222357303b9611cab89d0c3b047584ef377Chong Zhang};
81d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
82d291c222357303b9611cab89d0c3b047584ef377Chong Zhang}  // namespace android
83d291c222357303b9611cab89d0c3b047584ef377Chong Zhang
84d291c222357303b9611cab89d0c3b047584ef377Chong Zhang#endif  // PERSISTENT_SURFACE_H_
85