blob: 2cee42d2905807c97b0d53137f0c037a33db6319 [file] [log] [blame]
#ifndef I_HIDL_BINDER_MappableRegion_H
#define I_HIDL_BINDER_MappableRegion_H
#include "binder/Parcel.h"
#include "binder/Parcelable.h"
namespace android {
namespace service {
namespace media {
namespace rtstreams {
class MappableRegion : public Parcelable {
public:
enum class MappingType : int32_t {
UNDEFINED_MAPPING, ASHMEM_MAPPING, FILE_MAPPING
};
MappableRegion() {}
MappableRegion(int fd, MappingType regionType, off64_t offset, size_t size) : mFd(
fd), mRegionType(regionType), mOffset(offset), mSize(size) { }
int getFd() const {
return mFd;
}
MappingType getRegionType() const {
return mRegionType;
}
off64_t getOffset() const {
return mOffset;
}
size_t getSize() const {
return mSize;
}
bool operator == (const MappableRegion& other) const {
return (mFd == other.mFd
&& mRegionType == other.mRegionType
&& mOffset == other.mOffset
&& mSize == other.mSize);
}
bool isValid() {
return mRegionType != MappingType::UNDEFINED_MAPPING;
}
virtual status_t writeToParcel(Parcel* parcel) const override {
parcel->writeFileDescriptor(mFd, false);
parcel->writeInt32((int32_t) mRegionType);
parcel->writeInt64(mOffset);
parcel->writeUint64(mSize);
return parcel->errorCheck();
}
virtual status_t readFromParcel(const Parcel* parcel) override {
mFd = parcel->readFileDescriptor();
mRegionType = (MappingType) parcel->readInt32();
mOffset = parcel->readInt64();
mSize = parcel->readUint64();
return parcel->errorCheck();
}
private:
int mFd = -1;
MappingType mRegionType = MappingType::UNDEFINED_MAPPING;
off64_t mOffset;
size_t mSize = 0;
};
}
}
}
}
#endif // I_HIDL_BINDER_MappableRegion_H