Home | History | Annotate | Download | only in hardware_composer
      1 #ifndef ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H
      2 #define ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H
      3 
      4 #include <android/dvr/BnVrComposer.h>
      5 #include <impl/vr_hwc.h>
      6 
      7 namespace android {
      8 namespace dvr {
      9 
     10 class VrComposerCallback;
     11 
     12 // Implementation of the IVrComposer service used to notify VR Window Manager
     13 // when SurfaceFlinger presents 2D UI changes.
     14 //
     15 // VR HWC updates the presented frame via the ComposerView::Observer interface.
     16 // On notification |callback_| is called to update VR Window Manager.
     17 // NOTE: If VR Window Manager isn't connected, the notification is a no-op.
     18 class VrComposer
     19     : public BnVrComposer,
     20       public ComposerView::Observer,
     21       public IBinder::DeathRecipient {
     22  public:
     23   explicit VrComposer(ComposerView* composer_view);
     24   ~VrComposer() override;
     25 
     26   // BnVrComposer:
     27   binder::Status registerObserver(
     28       const sp<IVrComposerCallback>& callback) override;
     29 
     30   binder::Status clearObserver() override;
     31 
     32   // ComposerView::Observer:
     33   base::unique_fd OnNewFrame(const ComposerView::Frame& frame) override;
     34 
     35  private:
     36   // IBinder::DeathRecipient:
     37   void binderDied(const wp<IBinder>& who) override;
     38 
     39   std::mutex mutex_;
     40 
     41   sp<IVrComposerCallback> callback_;
     42 
     43   ComposerView* composer_view_;  // Not owned.
     44 
     45   VrComposer(const VrComposer&) = delete;
     46   void operator=(const VrComposer&) = delete;
     47 };
     48 
     49 }  // namespace dvr
     50 }  // namespace android
     51 
     52 #endif  //  ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H
     53