aboutsummaryrefslogtreecommitdiff
path: root/libshims/camera_shim.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libshims/camera_shim.cpp')
-rw-r--r--libshims/camera_shim.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/libshims/camera_shim.cpp b/libshims/camera_shim.cpp
index ec8b580..68e8ccc 100644
--- a/libshims/camera_shim.cpp
+++ b/libshims/camera_shim.cpp
@@ -16,8 +16,18 @@
#include <string>
+#include <utils/Errors.h>
+
#include <ui/GraphicBuffer.h>
+#include "gui/DisplayEventReceiver.h"
+#include <gui/IDisplayEventConnection.h>
+#include <gui/ISurfaceComposer.h>
+
+#include <private/gui/ComposerService.h>
+
+#include <private/gui/BitTube.h>
+
extern "C" void _ZN7android13GraphicBufferC1EjjijjjP13native_handleb(
const native_handle_t* handle,
android::GraphicBuffer::HandleWrapMethod method,
@@ -43,8 +53,18 @@ extern "C" void _ZN7android13GraphicBufferC1EjjijjP13native_handleb(
inFormat, static_cast<uint32_t>(1), static_cast<uint64_t>(inUsage), inStride);
}
-extern "C" void _ZN7android20DisplayEventReceiverC1ENS_16ISurfaceComposer11VsyncSourceE();
+namespace android {
-extern "C" void _ZN7android20DisplayEventReceiverC1Ev() {
- _ZN7android20DisplayEventReceiverC1ENS_16ISurfaceComposer11VsyncSourceE();
+DisplayEventReceiver::DisplayEventReceiver() {
+ status_t err;
+ sp<ISurfaceComposer> sf(ComposerService::getComposerService());
+ if (sf != NULL) {
+ mEventConnection = sf->createDisplayEventConnection(ISurfaceComposer::eVsyncSourceApp);
+ if (mEventConnection != NULL) {
+ mDataChannel = std::make_unique<gui::BitTube>();
+ err = mEventConnection->stealReceiveChannel(mDataChannel.get());
+ }
+ }
}
+
+}; // namespace android