1aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara#include "android/dvr/parcelable_unique_fd.h"
2aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
3aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara#include <binder/Parcel.h>
4aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
5aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoaranamespace android {
6aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoaranamespace dvr {
7aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
8aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel NicoaraParcelableUniqueFd::ParcelableUniqueFd() {}
9aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
10aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel NicoaraParcelableUniqueFd::ParcelableUniqueFd(const base::unique_fd& fence)
11aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara    : fence_(dup(fence.get())) {}
12aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
13aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel NicoaraParcelableUniqueFd::~ParcelableUniqueFd() {}
14aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
15aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoarastatus_t ParcelableUniqueFd::writeToParcel(Parcel* parcel) const {
16aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  status_t ret = parcel->writeBool(fence_.get() >= 0);
17aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
18aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
19aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (fence_.get() >= 0)
20aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara    ret = parcel->writeUniqueFileDescriptor(fence_);
21aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
22aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  return ret;
23aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara}
24aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
25aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoarastatus_t ParcelableUniqueFd::readFromParcel(const Parcel* parcel) {
26aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  bool has_fence = 0;
27aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  status_t ret = parcel->readBool(&has_fence);
28aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
29aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
30aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (has_fence)
31aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara    ret = parcel->readUniqueFileDescriptor(&fence_);
32aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
33aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  return ret;
34aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara}
35aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
36aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara}  // namespace dvr
37aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara}  // namespace android
38