Home | History | Annotate | Download | only in bufferhubd
      1 #ifndef ANDROID_DVR_BUFFERHUBD_CONSUMER_CHANNEL_H_
      2 #define ANDROID_DVR_BUFFERHUBD_CONSUMER_CHANNEL_H_
      3 
      4 #include "buffer_hub.h"
      5 
      6 #include <pdx/rpc/buffer_wrapper.h>
      7 #include <private/dvr/bufferhub_rpc.h>
      8 
      9 namespace android {
     10 namespace dvr {
     11 
     12 // Consumer channels are attached to a Producer channel
     13 class ConsumerChannel : public BufferHubChannel {
     14  public:
     15   using Channel = pdx::Channel;
     16   using Message = pdx::Message;
     17 
     18   ConsumerChannel(BufferHubService* service, int buffer_id, int channel_id,
     19                   const std::shared_ptr<Channel> producer);
     20   ~ConsumerChannel() override;
     21 
     22   bool HandleMessage(Message& message) override;
     23   void HandleImpulse(Message& message) override;
     24 
     25   BufferInfo GetBufferInfo() const override;
     26 
     27   bool OnProducerPosted();
     28   void OnProducerClosed();
     29 
     30  private:
     31   using MetaData = pdx::rpc::BufferWrapper<std::uint8_t*>;
     32 
     33   std::shared_ptr<ProducerChannel> GetProducer() const;
     34 
     35   pdx::Status<std::pair<BorrowedFence, MetaData>> OnConsumerAcquire(
     36       Message& message, std::size_t metadata_size);
     37   pdx::Status<void> OnConsumerRelease(Message& message,
     38                                       LocalFence release_fence);
     39   pdx::Status<void> OnConsumerSetIgnore(Message& message, bool ignore);
     40 
     41   bool handled_;  // True if we have processed RELEASE.
     42   bool ignored_;  // True if we are ignoring events.
     43   std::weak_ptr<Channel> producer_;
     44 
     45   ConsumerChannel(const ConsumerChannel&) = delete;
     46   void operator=(const ConsumerChannel&) = delete;
     47 };
     48 
     49 }  // namespace dvr
     50 }  // namespace android
     51 
     52 #endif  // ANDROID_DVR_BUFFERHUBD_CONSUMER_CHANNEL_H_
     53