diff options
author | ziadb <ziadb@google.com> | 2018-07-11 10:16:49 -0400 |
---|---|---|
committer | Ziad Ben Hadj-Alouane <ziadb@google.com> | 2018-07-12 17:32:54 +0000 |
commit | 4cb6520bd0f0b65b29b02d8fa95afea689ae592b (patch) | |
tree | 040a4c0e21eecc056d8f91fd65ff17b5d3e6fe78 | |
parent | e346b1eea442065261c14f92b304031e1330e491 (diff) |
SkArCamera* files
Bug: skia:
Change-Id: I711143c53bf66ebc8130b2401738da3cde644fbe
Reviewed-on: https://skia-review.googlesource.com/140560
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
3 files changed, 109 insertions, 1 deletions
diff --git a/platform_tools/android/apps/arcore/CMakeLists.txt b/platform_tools/android/apps/arcore/CMakeLists.txt index 92c5968c95..6bfe1b7bef 100644 --- a/platform_tools/android/apps/arcore/CMakeLists.txt +++ b/platform_tools/android/apps/arcore/CMakeLists.txt @@ -33,7 +33,9 @@ add_library(hello_ar_native SHARED "src/main/cpp/point_cloud_renderer.cc" "src/main/cpp/util.cc" "src/main/cpp/pending_anchor.cc" - "src/main/cpp/anchor_wrapper.cc") + "src/main/cpp/anchor_wrapper.cc" + + "src/main/cpp/SkArCamera.cpp") target_include_directories(hello_ar_native PRIVATE #BASIC AR NATIVE CODE diff --git a/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.cpp b/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.cpp new file mode 100644 index 0000000000..f27aebbffa --- /dev/null +++ b/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.cpp @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include <arcore_c_api.h> +#include "SkArCamera.h" +#include "SkArUtil.h" + +std::unique_ptr<SkArCamera> SkArCamera::Make(SkArSession* session, SkArFrame* frame) { + return std::unique_ptr<SkArCamera>(new SkArCamera(session, frame)); +} + +SkArCamera::~SkArCamera() { + ArCamera_release(fArCamera); +} + +SkArCamera::SkArCamera(SkArSession* session, SkArFrame* frame) : fArCamera(nullptr) { + ArFrame_acquireCamera(session->getArSession(), frame->getArFrame(), &fArCamera); +} + +void SkArCamera::getViewMatrix(const SkArSession* session, float outColMajor[16]) { + ArCamera_getViewMatrix(session->getArSession(), fArCamera, outColMajor); +} + +void SkArCamera::getProjectionMatrix(const SkArSession* session, float nearClip, + float farClip, float outColMajor[16]) { + ArCamera_getProjectionMatrix(session->getArSession(), fArCamera, nearClip, farClip, + outColMajor); +} + +SkArTrackingState SkArCamera::getTrackingState(const SkArSession* session) { + ArTrackingState arTrackingState; + ArCamera_getTrackingState(session->getArSession(), fArCamera, &arTrackingState); + return SkArUtil::MakeSkArTrackingState(arTrackingState); +} diff --git a/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.h b/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.h new file mode 100644 index 0000000000..0cf8f3c449 --- /dev/null +++ b/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.h @@ -0,0 +1,68 @@ +/* + * Copyright 2018 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkArCamera_DEFINED +#define SkArCamera_DEFINED + +#include <memory> +#include "SkArTrackingState.h" + +class ArCamera; +class SkArFrame; +class SkArSession; + +/** + * Provides information about the camera that is used to capture images. Such information + * includes projection matrices, pose of camera... + */ + +class SkArCamera { + +public: + /** + * Factory method used to construct an SkArCamera from the current frame, using the current + * session + * @param session raw pointer to the current SkArSession + * @param frame raw pointer to the current SkArFrame + * @return unique pointer to an SkArCamera. Never nullptr + */ + static std::unique_ptr<SkArCamera> Make(SkArSession* session, SkArFrame* frame); + + ~SkArCamera(); + + /** + * Fills outColMajor with the values of the camera's current View matrix in column-major order + * @param session current SkArSession + * @param outColMajor 16-float array that will contain the View matrix content + */ + void getViewMatrix(const SkArSession* session, float outColMajor[16]); + + /** + * Fills outColMajor with the values of the camera's current Projection matrix in + * column-major order + * @param session current SkArSession + * @param nearClip wanted near clip value for the camera + * @param farClip wanted far clip value for the camera + * @param outColMajor 16-float array that will contain the Projection matrix content + */ + void getProjectionMatrix(const SkArSession* session, float nearClip, float farClip, + float outColMajor[16]); + + /** + * Used to check the current SkArTrackingState of the camera + * @param session current SkArSession + * @return tracking state of the SkArCamera described by the SkArTrackingState enum + */ + SkArTrackingState getTrackingState(const SkArSession* session); + +private: + SkArCamera(SkArSession* session, SkArFrame* frame); + + // This is a raw pointer. Its lifetime matches that of this class (SkArCamera) + ArCamera* fArCamera; +}; +#endif // SkArCamera_DEFINED |