#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