1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/* 2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright (C) 2016 The Android Open Source Project 3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License"); 5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License. 6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at 7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * http://www.apache.org/licenses/LICENSE-2.0 9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software 11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS, 12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and 14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License. 15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */ 16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef _OMX_FENCE_PARCELABLE_ 18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define _OMX_FENCE_PARCELABLE_ 19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <binder/Parcel.h> 21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android { 23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct OMXFenceParcelable; 25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// This is needed temporarily for the OMX HIDL transition. 27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace hardware { 28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman struct hidl_handle; 29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace media { namespace omx { namespace V1_0 { 30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace implementation { 31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void wrapAs(::android::OMXFenceParcelable* l, 32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ::android::hardware::hidl_handle const& t); 33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman bool convertTo(::android::OMXFenceParcelable* l, 34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ::android::hardware::hidl_handle const& t); 35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman} 36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace utils { 37e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void wrapAs(::android::OMXFenceParcelable* l, 38e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ::android::hardware::hidl_handle const& t); 39e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman bool convertTo(::android::OMXFenceParcelable* l, 40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ::android::hardware::hidl_handle const& t); 41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman} 42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}}}} 43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct OMXFenceParcelable : public Parcelable { 45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman OMXFenceParcelable() : mFenceFd(-1) {} 46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman OMXFenceParcelable(int fenceFd) : mFenceFd(fenceFd) {} 47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int get() const { return mFenceFd; } 49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t readFromParcel(const Parcel* parcel) override; 51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t writeToParcel(Parcel* parcel) const override; 52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanprivate: 54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Disable copy ctor and operator= 55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman OMXFenceParcelable(const OMXFenceParcelable &); 56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman OMXFenceParcelable &operator=(const OMXFenceParcelable &); 57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mFenceFd; 59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // This is needed temporarily for OMX HIDL transition. 61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman friend void (::android::hardware::media::omx::V1_0::implementation:: 62e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman wrapAs)(OMXFenceParcelable* l, 63e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ::android::hardware::hidl_handle const& t); 64e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman friend bool (::android::hardware::media::omx::V1_0::implementation:: 65e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman convertTo)(OMXFenceParcelable* l, 66e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ::android::hardware::hidl_handle const& t); 67e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman friend void (::android::hardware::media::omx::V1_0::utils:: 68e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman wrapAs)(OMXFenceParcelable* l, 69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ::android::hardware::hidl_handle const& t); 70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman friend bool (::android::hardware::media::omx::V1_0::utils:: 71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman convertTo)(OMXFenceParcelable* l, 72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ::android::hardware::hidl_handle const& t); 73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramaninline status_t OMXFenceParcelable::readFromParcel(const Parcel* parcel) { 76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int32_t haveFence; 77e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t err = parcel->readInt32(&haveFence); 78e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman if (err == OK && haveFence) { 79e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int fd = ::dup(parcel->readFileDescriptor()); 80e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman if (fd < 0) { 81e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman return fd; 82e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman } 83e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman mFenceFd = fd; 84e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman } 85e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman return err; 86e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman} 87e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 88e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramaninline status_t OMXFenceParcelable::writeToParcel(Parcel* parcel) const { 89e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t err = parcel->writeInt32(mFenceFd >= 0); 90e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman if (err == OK && mFenceFd >= 0) { 91e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman err = parcel->writeFileDescriptor(mFenceFd, true /* takeOwnership */); 92e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman } 93e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman return err; 94e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman} 95e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 96e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman} // namespace android 97e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 98e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // _OMX_FENCE_PARCELABLE_ 99