Skip to content
Steven Lovegrove edited this page Mar 5, 2019 · 3 revisions

Display

Update Android Display code path

Background

Pangolin previously supported Android, but that support was broken with the introduction of the pangolin::WindowInterface in an attempt to componentize windowing code. The android NDK (Native Development Kit) makes it quite straight-forward to create native android windows in C++ and create an OpenGL context.

Tasks

  • Refactor (or perhaps simpler is to rewrite) the Android windowing code-path to implement pangolin::WindowInterface
  • Use the NDK's ANativeWindow / EGL.
  • If it is possible to create an EGL only path, that is the preferred solution.
  • The android-cmake toolchain file should be used to cross-compile Pangolin, ensuring that Pangolin's AndroidUtils.cmake still works with build and ADB deployment etc.
  • Create a wiki page documenting the process of installing android's NDK and compiling Pangolin.

Video and IO

Add Video support for OSX AvFoundation framework, supporting iSight cameras

Background

Pangolin offers a unified interface for a number of video capture devices on multiple platforms. The webcam on popular Macbook pros and iMacs are notably missing (since I hate writing Objective C)

Tasks

  • Implement pangolin::VideoInterface for the AvFoundation on OSX.
  • The derived class should also implement pangolin::VideoPropertiesInterface to populate available meta data
  • The implementation should be tested and must work on OSX High Siera with a built-in macbook pro 2017 webcam.

Add native USB3Vision support to Pangolin

Background

Pangolin offers a unified interface for a number of video capture devices on multiple platforms. The USB3Vision standard has gained considerably in popularity but is only implemented in bespoke camera vendors drivers which are often tied to their device manufacturer ID's.

Tasks

  • Implement or find an opensource USB3Vision driver with compatible licence (Linux, OSX, optionally Windows)
  • https://github.com/AravisProject/aravis looks promising.
  • Implement pangolin::VideoInterface for the USB3Vision driver
  • Must support 8, 10 and 12 bit grayscale and color
  • Must implement VideoPropertiesInterface for populating meta-information like exposure and capture time.

Build

Emscripten Port (WIP)

Background

Pangolin aims to offer a platform independent environment for prototyping with good support on Linux, OSX and Windows, with rusty support on IOS and Android, but the difficulty of distributing native apps limits some applications. Emscipten (https://kripken.github.io/emscripten-site/index.html) is a C++ to Javascript compiler that allows native C++ applications to be deployed on the web, including rich applications that use things like OpenGL.

I would like to enable emscripten as a supported platform for Pangolin, supporting the majority of features. Importantly, interactive 3D rendering, Vars, Plotting, mouse and keyboard input are all critical. Clearly many of the video input libraries will not work from within a Javascript sandbox, but ideally Pangolin should support alternate methods appropriate for the web, such as YouTube streaming, perhaps.

Tasks

  • Demonstrate that the HelloPangolin example in Pangolin can be cross-compiled with emscripton with their toolchain. The biggest hurdles will be in OpenGL compatibility. Parts of Pangolin that are irrelevent to display can be disabled for this example (e.g. Video, all optional dependencies). The Pangolin OpenGLES defines may be useful, though the standard OpenGL path would be preferred.
  • Enable more of the library such that all examples compile and can run (with the exception of SimpleVideo)
  • Document how to Cross-compile Pangolin with emscripten and incorporate any changes upstream in a clean manner
  • Add support for video input and write a sample web VideoInput driver.