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