| #ifndef ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H |
| #define ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H |
| |
| #include <android/dvr/BnVrComposer.h> |
| #include <impl/vr_hwc.h> |
| |
| namespace android { |
| namespace dvr { |
| |
| class VrComposerCallback; |
| |
| // Implementation of the IVrComposer service used to notify VR Window Manager |
| // when SurfaceFlinger presents 2D UI changes. |
| // |
| // VR HWC updates the presented frame via the ComposerView::Observer interface. |
| // On notification |callback_| is called to update VR Window Manager. |
| // NOTE: If VR Window Manager isn't connected, the notification is a no-op. |
| class VrComposer |
| : public BnVrComposer, |
| public ComposerView::Observer, |
| public IBinder::DeathRecipient { |
| public: |
| explicit VrComposer(ComposerView* composer_view); |
| ~VrComposer() override; |
| |
| // BnVrComposer: |
| binder::Status registerObserver( |
| const sp<IVrComposerCallback>& callback) override; |
| |
| binder::Status clearObserver() override; |
| |
| // ComposerView::Observer: |
| base::unique_fd OnNewFrame(const ComposerView::Frame& frame) override; |
| |
| private: |
| // IBinder::DeathRecipient: |
| void binderDied(const wp<IBinder>& who) override; |
| |
| std::mutex mutex_; |
| |
| sp<IVrComposerCallback> callback_; |
| |
| ComposerView* composer_view_; // Not owned. |
| |
| VrComposer(const VrComposer&) = delete; |
| void operator=(const VrComposer&) = delete; |
| }; |
| |
| } // namespace dvr |
| } // namespace android |
| |
| #endif // ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H |