Loading libs/vr/libdvr/dvr_hardware_composer_client.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -100,10 +100,13 @@ DvrHwcClient* dvrHwcClientCreate(DvrHwcOnFrameCallback callback, void* data) { } void dvrHwcClientDestroy(DvrHwcClient* client) { client->composer->clearObserver(); // NOTE: Deleting DvrHwcClient* isn't enough since DvrHwcClient::callback is a // shared pointer that could be referenced from a binder thread. But the // client callback isn't valid past this calls so that needs to be reset. client->callback->Shutdown(); delete client; } Loading services/vr/hardware_composer/aidl/android/dvr/IVrComposer.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -17,4 +17,9 @@ interface IVrComposer * Registers a callback used to receive frame notifications. */ void registerObserver(in IVrComposerCallback callback); /** * Clears a previously registered frame notification callback. */ void clearObserver(); } services/vr/hardware_composer/vr_composer.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,12 @@ binder::Status VrComposer::registerObserver( return binder::Status::ok(); } binder::Status VrComposer::clearObserver() { std::lock_guard<std::mutex> guard(mutex_); callback_ = nullptr; return binder::Status::ok(); } base::unique_fd VrComposer::OnNewFrame(const ComposerView::Frame& frame) { std::lock_guard<std::mutex> guard(mutex_); Loading services/vr/hardware_composer/vr_composer.h +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ class VrComposer binder::Status registerObserver( const sp<IVrComposerCallback>& callback) override; binder::Status clearObserver() override; // ComposerView::Observer: base::unique_fd OnNewFrame(const ComposerView::Frame& frame) override; Loading Loading
libs/vr/libdvr/dvr_hardware_composer_client.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -100,10 +100,13 @@ DvrHwcClient* dvrHwcClientCreate(DvrHwcOnFrameCallback callback, void* data) { } void dvrHwcClientDestroy(DvrHwcClient* client) { client->composer->clearObserver(); // NOTE: Deleting DvrHwcClient* isn't enough since DvrHwcClient::callback is a // shared pointer that could be referenced from a binder thread. But the // client callback isn't valid past this calls so that needs to be reset. client->callback->Shutdown(); delete client; } Loading
services/vr/hardware_composer/aidl/android/dvr/IVrComposer.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -17,4 +17,9 @@ interface IVrComposer * Registers a callback used to receive frame notifications. */ void registerObserver(in IVrComposerCallback callback); /** * Clears a previously registered frame notification callback. */ void clearObserver(); }
services/vr/hardware_composer/vr_composer.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,12 @@ binder::Status VrComposer::registerObserver( return binder::Status::ok(); } binder::Status VrComposer::clearObserver() { std::lock_guard<std::mutex> guard(mutex_); callback_ = nullptr; return binder::Status::ok(); } base::unique_fd VrComposer::OnNewFrame(const ComposerView::Frame& frame) { std::lock_guard<std::mutex> guard(mutex_); Loading
services/vr/hardware_composer/vr_composer.h +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ class VrComposer binder::Status registerObserver( const sp<IVrComposerCallback>& callback) override; binder::Status clearObserver() override; // ComposerView::Observer: base::unique_fd OnNewFrame(const ComposerView::Frame& frame) override; Loading