1a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai#ifndef ANDROID_DVR_BUFFER_HUB_QUEUE_PARCELABLE_H_ 2a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai#define ANDROID_DVR_BUFFER_HUB_QUEUE_PARCELABLE_H_ 3a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 4dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai#if defined(__clang__) 5dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai#pragma clang diagnostic push 6dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai#pragma clang diagnostic ignored "-Weverything" 7dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai#endif 8dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai 9dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai// The following headers are included without checking every warning. 10dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai// TODO(b/72172820): Remove the workaround once we have enforced -Weverything 11dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai// in these headers and their dependencies. 12a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai#include <pdx/channel_parcelable.h> 13a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 14dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai#if defined(__clang__) 15dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai#pragma clang diagnostic pop 16dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai#endif 17dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai 18a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cainamespace android { 19a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cainamespace dvr { 20a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 21a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Caienum BufferHubQueueParcelableMagic : uint32_t { 22a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai Producer = 0x62687170, // 'bhqp' 23a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai Consumer = 0x62687163, // 'bhqc' 24a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai}; 25a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 26a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Caitemplate <BufferHubQueueParcelableMagic Magic> 27a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Caiclass BufferHubQueueParcelable : public Parcelable { 28a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai public: 29a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai BufferHubQueueParcelable() = default; 30a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 31a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai BufferHubQueueParcelable(BufferHubQueueParcelable&& other) = default; 32dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai BufferHubQueueParcelable& operator=(BufferHubQueueParcelable&& other) { 33dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai channel_parcelable_ = std::move(other.channel_parcelable_); 34dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai return *this; 35dc82be74c578c982d1ca8dcbbdbf2fe24f00f94dJiwen 'Steve' Cai } 36a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 37a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // Constructs an parcelable contains the channel parcelable. 38a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai BufferHubQueueParcelable( 39a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai std::unique_ptr<pdx::ChannelParcelable> channel_parcelable) 40a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai : channel_parcelable_(std::move(channel_parcelable)) {} 41a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 42a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai BufferHubQueueParcelable(const BufferHubQueueParcelable&) = delete; 43a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai void operator=(const BufferHubQueueParcelable&) = delete; 44a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 45a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai bool IsValid() const; 46a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 47a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // Returns a channel handle constructed from this parcelable object and takes 48a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // the ownership of all resources from the parcelable object. 49a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai pdx::LocalChannelHandle TakeChannelHandle(); 50a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 51a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // Serializes the queue parcelable into the given parcel. Note that no system 52a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // resources are getting duplicated, nor did the parcel takes ownership of the 53a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // queue parcelable. Thus, the parcelable object must remain valid for the 54a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // lifetime of the parcel. 55a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai status_t writeToParcel(Parcel* parcel) const override; 56a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 57a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // Deserialize the queue parcelable from the given parcel. Note that system 58a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // resources are duplicated from the parcel into the queue parcelable. Returns 59a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai // error if the targeting parcelable object is already valid. 60a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai status_t readFromParcel(const Parcel* parcel) override; 61a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 62a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai private: 63a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai std::unique_ptr<pdx::ChannelParcelable> channel_parcelable_; 64a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai}; 65a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 66a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Caiusing ProducerQueueParcelable = 67a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai BufferHubQueueParcelable<BufferHubQueueParcelableMagic::Producer>; 68a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Caiusing ConsumerQueueParcelable = 69a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai BufferHubQueueParcelable<BufferHubQueueParcelableMagic::Consumer>; 70a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 71a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai} // namespace dvr 72a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai} // namespace android 73a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai 74a88e3ee3a33a60e72bd976cfb5b9fc0bd15a1078Jiwen 'Steve' Cai#endif // ANDROID_DVR_BUFFER_HUB_QUEUE_PARCELABLE_H_ 75