1#ifndef ANDROID_DVR_HARDWARE_COMPOSER_AIDL_ANDROID_DVR_PARCELABLE_UNIQUE_FD_H 2#define ANDROID_DVR_HARDWARE_COMPOSER_AIDL_ANDROID_DVR_PARCELABLE_UNIQUE_FD_H 3 4#include <android-base/unique_fd.h> 5#include <binder/Parcelable.h> 6 7namespace android { 8namespace dvr { 9 10// Provide a wrapper to serialized base::unique_fd. The wrapper also handles the 11// case where the FD is invalid (-1), unlike FileDescriptor which expects a 12// valid FD. 13class ParcelableUniqueFd : public Parcelable { 14 public: 15 ParcelableUniqueFd(); 16 ParcelableUniqueFd(const base::unique_fd& fence); 17 ~ParcelableUniqueFd() override; 18 19 void set_fence(const base::unique_fd& fence) { 20 fence_.reset(dup(fence.get())); 21 } 22 base::unique_fd fence() const { return base::unique_fd(dup(fence_.get())); } 23 24 status_t writeToParcel(Parcel* parcel) const override; 25 status_t readFromParcel(const Parcel* parcel) override; 26 27 private: 28 base::unique_fd fence_; 29}; 30 31} // namespace dvr 32} // namespace android 33 34#endif // ANDROID_DVR_HARDWARE_COMPOSER_AIDL_ANDROID_DVR_PARCELABLE_UNIQUE_FD_H 35