53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
#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
|