Retrieves positions of two corners that define location and shape of a mesh
segment. Dimensions are in meters. Note that this is not necessarily the
minimum bounding box, but the upper bound of mesh segment vertex positions.
Adjacent bounding boxes do not overlap and do not have space between them.

Removed the Tango3DR_createTrajectoryFromDataset function.
The functionality is now available by calling
Tango3DR_AreaDescription_createFromDataset and
Tango3DR_Trajectory_createFromAreaDescription in conjunction.

May 2017: Hopak

Note: All Tango Java libraries are now distributed from a Maven respository
and you no longer need to download the Java SDK files from the Tango
developer website. Instead you can directly reference the Tango
dependency from your gradle.build file in your project as demonstrated
in this example.

Marker Detection API

A new API is introduced in TangoSupport SDK to provide marker detection
functionality. The API is able to detect single or multiple markers within an
input image buffer. The marker can be either a QR code or an AR tag. For each of
the markers, corners and poses of the marker are detected. This API is available
in C SDK, Java SDK and Unity plugin.

Setting up and updating callbacks from Tango service

Note: The following is not a change - we're simply providing documentation
to explicitly explain this behavior.
* Any callbacks registered through APIs, such as
TangoService_connectOnPoseAvailable (C) or Tango.connectListener
(Java), will persist after disconnecting from Tango (e.g.
TangoService_disconnect).
They may receive events immediately after the next connection.
* If this is not the desired behavior, we recommend clearing callbacks
before or after disconnection. To clear callbacks, use the same API
as registration, but pass null as the callback function.

Sample Apps

Java and C sample app no longer support x86.

Added a new cpp app (cpp_marker_detection_example) to demonstrate the
marker detection API.

Major Bug Fixes

Improved error-handling and lifecycle when rapidly
switching between apps.

Fixes

Fixed a bug that occurred when initializing a Tango3DR_TexturingContext
using a default Tango3DR_ConfigH.

Fixed a bug where the wrong pose was used in calls to
Tango3DR_updateTexture and Tango3DR_updateTextureGl. The API now
correctly interprets the pose as the image pose, as the documentation
suggests.

Tango3DR_update and Tango3DR_updateTexture now support the RGB and
RGBA image format (TANGO_3DR_HAL_PIXEL_FORMAT_YCrCb_420_SP,
TANGO_3DR_HAL_PIXEL_FORMAT_RGB_888, TANGO_3DR_HAL_PIXEL_FORMAT_RGBA_8888)
, in addition to YUV. Removed TANGO_3DR_HAL_PIXEL_FORMAT_YCrCb_420_SP.

Fixed a bug so that the texturing parameter max_num_textures actually
limits the number of created texture images (in combination with the
min_resolution parameter).

April 2017: Gankino

Image API

A change in Android N has mandated that the image planes of planar YUV images be
padded to a certain size. The data structure which we provide to apps as part of
our API, TangoImageBuffer, has no way to indicate to apps that there is now
padding in the data where there wasn’t before.

To prevent apps from breaking, this API on Android N now copies the image
into an intermediate buffer without the padding. This has a negative impact on
performance, thermals and power consumption.

To help mitigate this, we’ve introduced a new API,
TangoService_connectOnImageAvailable with a data structureTangoImage that
contains separate pointers to the start of each plane in the image, along with
plane specific data like plane size, row stride and pixel stride. Apps which
switch to this new API won’t incur the performance penalty now associated with
the old API on Android N devices.

The API has been fully backported to Android M, so it’s possible to switch to
the new API even if you don’t have an Android N device yet.

Multithreaded rendering

The C API now supports getting the latest camera image's timestamp outside a GL
thread. Previously you had to call TangoService_updateTextureExternalOes
inside the GL thread, whereas now you can call TangoService_lockCameraBuffer
in any thread, and pass the TangoBufferId to
TangoService_updateTextureExternalOesForBuffer and
TangoService_unlockCameraBuffer inside a GL thread.

Unity multithreaded rendering support will get added in a future release.

SDK updates

The Tango Unity SDK now has a single TangoCamera prefab that supports the
TangoARCamera and TangoDeltaCamera use cases.

The TangoSupport_getPoseAtTime engine parameter split into two parameters:
base_engine and target_engine.

Added TangoSupport_fitMultiplePlaneModelsNearPoint, which fits and returns
multiple planes, if found, instead of just one, and updated
cpp_plane_fitting_example to display this capability.

March 2017: Farandole

Warning: The UX Framework has been deprecated, with its core functionality
moving to the Support Library. Read on for more details.

UX Framework (deprecated)

In order to reduce the complexity of the SDK and give developers more control,
we are replacing the predefined behavior of the Java UX Framework with callbacks
in the Support Library. It supports a similar set of sensor events and
callbacks, but without the UI. For more information, see our updated UX
overview and the documentation for the Support Library
UX functions.

3D Reconstruction API

Added a new mesh texturing backend implemented in OpenGL which is faster but
lower quality than the default CPU pipeline. You can define the backend to use
as part of TANGO_3DR_CONFIG_TEXTURING.

February 2017: Eisa

Platform

Point cloud changes

Warning: This change requires existing Java applications using depth to
recompile against the E-release SDK to continue working properly.

To support upcoming changes in Android N, we made a few improvements to how our
depth APIs work under the hood. These changes improve performance and ensure
that your apps will continue to run smoothly across all supported Android
platforms.

Unfortunately, this change is not compatible with some Java apps compiled with
older versions of Tango. If your app is using the Java APIs with depth, you
must recompile your app with the latest Tango SDK and push an update to Play
Store. Recompiling may require some code changes, given the Java callback
changes (see below) and earlier deprecation of XYZij in favor of XYZC.

The minimum version of Tango Core for Java has been updated to require the
E-release or newer to accommodate this change. Running an updated Java app but
an older version of Tango Core will trigger an out-of-date exception.

Apps using other platforms (C, Unity, Unreal), are not impacted and no action is
required.

Java callback changes

Warning: This change requires some Java apps that recompile against the
E-release SDK to make some small code changes.

We are simplifying the Tango callbacks in the Java API. The
OnTangoUpdateListener interface is changing to an abstract class
TangoUpdateCallback. These changes mean you only need to implement callbacks
for the functions you use, and allow us to easily make non-breaking additions
in the future. Existing apps will continue to function.

Unity SDK:

Changed Tango3DRExtractWholeMesh to always get entire mesh in one call.
The method signature has changed to accommodate this.

The TangoPointCloud prefab now exposes the depth timestamp field and
added depth estimation method.

Tango Support Library

The getPoseAtTime and getMatrixAtTime functions now expect the
display_rotation parameter to be the display rotation between the default
and current orientation, not the display to camera rotation as it was
before. Existing applications that use these functions will need to update
their code after updating the support library.

When you call any of the Tango3DR_extractMesh functions, you get an
extruded 3D mesh of the floor plan.

To get a vectorized 2D version of the floor plan, call
Tango3DR_extractFullFloorplan / Tango3DR_extractFloorplanSegment, which
returns a freshly allocated Tango3DR_VectorGraphics object.

Finally, call Tango3DR_VectorGraphics_destroy to free the memory of the
vector graphics object.

Tango Support Library

[C, Java]fitPlaneModelNearPoint, getDepthAtPointNearestNeighbor,
getDepthAtPointBilateral, and [C]findEdgesNearPoint now accept
transformations (as a translation/orientation pair) from the point cloud
and/or color camera frame of reference to a user-specified frame.

Unity SDK

Changed OnUxExceptionEventHandler to be executed on Unity's main thread.

Samples

September 2016: Wasat

Platform

The feature detection system has been improved. This should increase system
stability and improve performance for motion tracking and area learning. The
changes are backwards compatible with existing ADFs.

September 2016: Vega

Java

Support Library

[C, Java] The fitPlaneModelNearClick function has been renamed to
fitPlaneModelNearPoint.

August 2016: Unukalhai

Known issues

If you are a longtime user of the development kit and are having issues saving
or reading ADFs, go to Settings > Apps > [Project] Tango Core and uninstall
updates, then reinstall the latest version from the Play Store.

Unity

Unity 5.4 is now supported.

The Unity SDK has been migrated to use Tango Point Cloud.

Support Library

[C] Tango Point Cloud is now supported.

August 2016: Tania Borealis

Platform

Important: The format for depth data is changing to Tango Point Cloud, and new
callbacks are being added to use it. The XYZij format is now deprecated.

You can now query for the exposure time of a TangoImageBuffer.

Unity

Important: The Tango Unity SDK now requires Unity 5.2 or higher.

The AR screen prefab and scripts have changed to use the
GL_TEXTURE_EXTERNAL_OES GL extension, which is up to 4 ms faster than the
previous implementation. It also eliminates camera issues related to app
suspend and resume. The previous YUV texture is now deprecated.

Unity now includes an option for Environmental Lighting, which causes the
real-world lighting conditions to impact how virtual objects are rendered
in AR. For more information, see our blog post.

Options to adjust screen resolution have been added to the Tango Application
prefab. See the flags for adjustScreenResolution and targetResolution
for more information.

The OnDisplayChanged callback has been added to help you detect and handle
screen rotations.

Support Library

The previously-deprecated function getPoseInEngineFrame has been removed.
Its functionality is available through TangoSupport_getPoseAtTime.

July 2016: Qianru

The Qianru release includes a mandatory OTA update.

Platform

Warning: All applications must be recompiled to run on consumer hardware.

The TangoService namespace was updated to com.google.tango. To use the
new namespace, update your Tango libraries/SDK to the latest version and
recompile your application. This change does not require modifications to
application code in most cases. The Tango Development Kit tablet is backwards
compatible with the original namespace, but consumer devices like the Lenovo
Phab 2 Pro will only support apps using the new namespace and the previous
changeover to libtango_device2.

Unity

Warning: The minimum supported version of Unity is changing to 5.2 in a future
release.

In order to improve the performance of the Tango platform on Unity, we are
changing the minimum version to 5.2, the earliest version which supports these
optimizations. In the near future we will no longer distribute a version of the
SDK for Unity 4, and all samples will be updated to Unity 5.2.

3D Reconstruction

Important: The 3D Reconstruction C API will be changing in a future release to
improve performance. You will no longer pass in the camera calibration in each
call to update.

June 6, 2016: Okul

Platform

A regression causing the color camera texture to be incorrect in some cases
has been fixed.

Unity

Experimental Tango emulation is available in the Unity editor

While in Play mode, you can emulate movement and depth data, allowing you to
test your application without building an APK and running on a device every
time.

Motion tracking movement can be emulated in Play mode with WASD and mouse look.
Because the mouse has only two axes, it only emulates yaw and pitch with the X
and Y axes respectively. Roll is emulated by holding left-Shift and moving the
mouse along the X axis. To move the mouse without rotating the camera, hold
down left-Alt (left-Cmd on Mac).

Depth sensing is emulated by setting a mesh on the Tango Application in the
Inspector. Sensor error is not emulated, you always get perfectly accurate
points. Depth Sensing emulation can have a significant performance impact so
you can disable Depth Sensing in the Inspector if necessary.

Video overlay is emulated in the same way as Depth Sensing. The mesh can
optionally have vertex colors (like from Constructor). Additionally, you can add
a single directional light to the video overlay emulation in case the mesh does
not have any vertex colors. Video overlay emulation currently has significant
impact on performance in Windows.

May 9, 2016: Mira

Important: The Mira release includes a system update with major changes to how
Tango works under the hood. After installing the OTA update, make sure
to update your Tango
Core and
any other apps you have installed from
Tango. If you
update the apps before installing the system update, they may not function
correctly.Important: The Mira release introduces changes required to make Tango
applications work on future devices. If you do not migrate your application,
it will not work on future devices. While the development kit will be
backwards compatible, all future devices will only work with the new form of
integrating with the Tango service. See the
migration guide for details.

Platform

Tango now runs as a normal Android Service instead of as a system service.
You must migrate your app to use Tango as a service or it will not work on
future devices. See the migration guide
for details.

The 3D Reconstruction library is now distributed as a stand-alone library
in C. See the reference
page for more details, and visit the downloads
page to get the files.

Unity

The struct APISignedDistanceVoxel has been renamed to
SignedDistanceVoxel. This impacts the function
Tango3DRExtractSignedDistanceVoxel.

Samples

All samples have been updated to use Tango as a standard Android
service.

April 25, 2016: Lucida Anseris

Unity

The FindFloorPlane function has been added to the PointCloud prefab.
This function attempts to automatically find the floor without user
interaction.

Support Library

[C] Edge detection has been added to the support library. The function
finds edges near the specified location on the same plane as the specified
location. Edge detection uses the color camera image, with the depth data
used to confirm the edge is on the same plane.

Samples

[Unity] The ExperimentalMeshOcclusion example has been added to the
Unity SDK. This example uses the meshing interface to implement occlusion
based on static objects in the real world. The mesh is aligned to an ADF
which is created with the mesh and can be loaded together.

March 30, 2016: Kajam

Samples

[Java] Refactored the Java augmented reality sample to better separate
Tango from the rendering engine code. Specifically, we have
separated out the
code
to synchronize camera frames with pose updates based on timestamps, which is
needed for well-registered augmented reality.

[Java] The findCorrespondenceSimilarityTransform() method has been
added to the
TangoSupport
class.

Samples

[Unity] A new scene TangoCardboardWithMeshing has been added to
TangoWithCardboardExperiments.
The example uses 3D Reconstruction to display a mesh of your environment
within Cardboard.

March 3, 2016: Izar

Important: The Izar release includes a system update with major changes to how
Tango works under the hood. After installing the OTA update, make sure
to update your Tango
Core and
any other apps you have installed from Project
Tango. If you
update the apps before installing the system update, they may not function
correctly.

Platform

The Tango Hardware Abstraction Layer (HAL) has been released.
Similar to the Android HAL, this is a layer that sits between the hardware
and the APIs which allows Tango to be agnostic about the hardware a
particular device uses. This also enables the same application to work
similarly across all current and future Tango devices.

The area learning pipeline has been improved. The new pipeline is more
robust and designed to make area descriptions more compatible between
different devices.

These changes are backwards compatible, but your app may perform differently.

Unity SDK

3D Reconstruction features have been released (experimental). The 3D
Reconstruction options allow you to create 3D meshes of your environment
using the depth camera of Tango. This version of meshing is built
into the Tango Core, and performs much better than the previous
Unity example of 3D meshing. There are two new examples,
ExperimentalMeshBuilderWithColor and
ExperimentalMeshBuilderWithPhysics, which show how to use the 3D
Reconstruction features.

Deprecated methods in TangoPointCloud have been removed.

Support Library

[C] The function TangoSupport_GetTangoVersion has been added to the C
Support Library.

Samples

The C and Java samples have been reorganized. The content is the same,
but directories have been renamed to be more consistent.

[Unity] TangoWithCardboardExperiments
has been added. This sample shows how to combine the Tango SDK with
the Cardboard Unity SDK to experiment with 6-DOF VR on Tango
devices.

[Unity] ExperimentalMeshBuilderWithColor and
ExperimentalMeshBuilderWithPhysics have been added to the SDK
examples.
These samples show how to use the new 3D Reconstruction features in the
Unity SDK.

[C] cpp_point_cloud_example has been added, which allows a user to
measure the distance between two points selected by the user in augmented
reality.

[C] The motion tracking sample now supports screen rotation.

[Java] java_point_to_point_example has been added, which allows a user
to measure the distance between two points selected by the user in augmented
reality.

[Java] The motion tracking sample now supports screen rotation.

February 3, 2016: Gemma (Tango Core 1.31)

The Gemma release consists of software updates only, there is no associated OTA
update.

Unity SDK

The names of the Area Description options in Tango Manager have changed.
Instead of Load ADF and Area Learning, there is the option Enable
Area Descriptions with a Learning Mode option under it. Existing
applications will continue to work, but if you are using area descriptions
and update the SDK, you will need to update your project to adjust.

The UI for handling video overlays has been changed. If Enable Video
Overlay is selected, you'll see a drop-down menu to select the video
overlay method. Selecting TextureID enables the
OnExperimentalTangoImageAvailable
callback of the IExperimentalTangoVideoOverlay interface. This provides
the same functionality as the Experimental Video Overlay did before.
Selecting Raw Bytes enables the
OnTangoImageAvailableEventHandler
callback of the ITangoVideoOverlay interface. This is the same behavior
as having only Enable Video Overlay enabled before. You also have the
option to enable both methods. If you are using the AR Camera prefab, the
TextureID method or Both must be selected.

January 20, 2016: Furud (Tango Core 1.30)

The Furud release consists of software updates only, there is no associated OTA
update.

Support Library

Various functions now return TANGO_INVALID when passed invalid parameters,
instead of killing the application.

Unity SDK

In an upcoming release, the names of the Area Description options in Tango
Manager will change. Instead of "Load ADF" and "Area Learning", there will
be an option "Enable Area Descriptions" with a "Learning Mode" option under
it. Existing applications will continue to work, but if you are using area
descriptions and update the SDK, you will need to update your project to
adjust.

IsTangoCoreUpToDate() has been added to the AndroidHelper class.

Unity Samples

The new example sceneDetectTangoCore shows how to create an application
that knows if it is on a Tango device, and whether Tango is
up todate.

January 11, 2016: Electra (Tango Core 1.29)

Happy New Year! The Electra release consists of software updates only, there is
no associated OTA update.

Java Samples Changes

The Java point cloud and AR samples have been updated to handle depth data
copying and rendering in a thread-safe way. Specifically, they now use the
Java Support Library's
TangoPointCloudManager
to prevent data access or rendering mid-update.

Java samples have been refactored to better separate application and
rendering logic.

Support Library Changes

Depth upsampling functions have been added to C and Java. See the updated
C and
Java support tutorials for
more information, as well as the
C
and Java
API references for details.

UX Library Changes

If the Tango service fails to connect, the connection screen now
goes away after 10 seconds and throws a
UxExceptionEvent.TYPE_TANGO_SERVICE_NOT_RESPONDING exception. Before, the
connection screen would remain up indefinitely.

When an out of date version of Tango Core is detected, the error
screen now provides a link to the Play Store to get the update.

December 9, 2015: Capella (Tango Core 1.27)

The Capella release consists of software updates only, there is no associated
OTA update.

Unity SDK Changes

The Unity SDK now has different versions for Unity 4 and Unity 5. The Unity
5 SDK now bundles the samples by default.

Autostart is now enabled by default.

Previously deprecated functions have been removed from the SDK.

The Unity AR sample now turns off depth when it is not used.

Support Library Changes

The Image Buffer Manager has been added to the
C support
library. This new feature provides a thread-safe triple buffer data
structure to manage transferring image data (TangoImageData) from the
callback thread to a render or computation thread.

The Point Cloud Manager has been added to the
C and
Java
support libraries. This new feature provides a thread safe triple buffer
data structure to manage transferring tango depth data (TangoXYZij) from
the callback thread to a render or computation thread.

The Transformation Helper has been added to the
C
support library. This new feature provides helper utilities to convert
Tango data into various common
coordinate system conventions.

November 25, 2015: Bellatrix - Skipped

The Bellatrix release was skipped.

November 11, 2015: Ancha (Tango Core 1.26)

The Ancha release consists of software updates only, there is no associated OTA
update.

General Changes

Motion Tracking no longer requires permission checks. If Motion
Tracking permissions are requested, they are automatically granted.
You should still remove permission checks for Motion Tracking from your
code.

Unity SDK Changes

Updates:

You should register lifecycle callbacks with the Register function.
Rather than calling RegisterPermissionsCallback,
RegisterOnTangoConnect, and RegisterOnTangoDisconnect, implement the
ITangoLifecycle interface and call Register. The old registration
functions are deprecated and scheduled for removal in a future release.

Simplified initialization of the TangoApplication:

RequestNecessaryPermissionsAndConnect is now RequestPermissions.

InitApplication, InitProviders, and ConnectToService have been
grouped into one method: Startup that takes an optional Area
Description to load.

The old initialization functions are deprecated and scheduled for
removal in a future release.

Added an auto-connect option on TangoApplication. Enabling this option
automatically calls Startup and RequestPermissions. In the next release,
this will be on by default for prefabs and samples.

Added a Unity Area Learning code sample for Points of Interest.

Added a Unity Area Learning code sample for viewing ADF quality.

Other Announcements:

The next release removes the deprecated Unity Area Description API in favor
of the new API released in Zeno. Please move to the new API in this release.

The next release will not support explicit calls to mouse emulation.
Instead, pose updates will provide mouse emulation.

Support Library Changes

C - Added the TangoSupport_calculateRelativePose function to simplify
transform computation between camera frames at different times.

Made a bug fix for compatibility issue with the Zeno version of the support
library. The Zeno version of the library can only be used with the Zeno
Tango Core. Future versions of the support library are compatible across
Tango Core versions.

October 28, 2015: Zeno (Tango Core 1.25)

The Zeno release consists of software updates only, there is no associated OTA
update.

General Changes

The Tango Support Library has been released for C, Java, and Unity.
See the Support Library section below for more details.

config_color_mode_auto, config_color_iso and config_color_exp now
work correctly.

Unity SDK Changes

The Unity Area Description API was refactored to be more organized. The new API
is in the
AreaDescription
class. The old API in the PoseProvider class will be removed in a future
release.

Area descriptions and the associated metadata are now normal C# classes with
members for relevant data. The old classes are replaced with new ones as
follows:

UUIDUnityHolder is now AreaDescription

UUID_list is now AreaDescription[]

Metadata is now AreaDescription.Metadata

UUID is deprecated

These are the important functions in the new API:

You no longer need to call PoseProvider.RefreshADFList() before getting a
list of ADFs.

To get a list of area descriptions, call AreaDescription.GetList().

To get a specific area description, call AreaDescription.ForUUID().

If you are connected to the Tango Service in learning mode and want to save
the current area description, call AreaDescription.SaveCurrent().

This example uses the new API to print out the UUIDs and names of the area
descriptions on the device:

The AR camera prefab now includes an occlusion checkbox, which uses the
latest depth information to show rough occlusion.

The AR camera prefab now accounts for camera distortion.

The Tango Delta Camera prefab's clutch function now works correctly when
using the Tango Point Cloud prefab.

The GitHub examples project now opens without errors.

Support Library Changes

The Tango Support Library has been released for C, Java, and Unity.
The support libraries contain functions to help you manage and use data
from the Tango APIs. For more information, see our pages for
C,
Java and
Unity.

Most code samples which use depth have been updated to use the support
library.

UX Framework Changes

Hold Posture Exceptions can now be set through the Tango Ux component of
the Tango Manager prefab.

October 14, 2015: Yamabe (Tango Core 1.24)

The Yamabe release consists of software updates only, there is no associated
OTA update.

Java API Changes

The code samples for Java have been refactored. The motion tracking, area
learning, and point cloud samples now use
Rajawali as the rendering library.

Unity SDK Changes

An Augmented Reality prefab has been added to the Unity SDK under Assets
> TangoPrefabs, allowing you to properly implement AR in your app in a
drag and drop way.

ADF export and import have been fixed.

The checkbox for high accuracy area learning has been removed from the
Tango Manager prefab.

Code samples working with ADFs now handle save calls asynchronously.

UX Framework Changes

Hold Posture Exceptions have been added to Unity.

September 30, 2015: Xiaotong (Tango Core 1.23)

The Xiaotong release consists of software updates only, there is no associated
OTA update.

Area Learning and ADF Changes

Area learning and ADFs are changing under the hood starting with the Xiaotong
release. New ADFs now use a new algorithm which improves localization speed and
accuracy. The API itself remains essentially the same, but there are a few
important changes in behavior.

Calls to save an area description will run longer than before. For example,
an ADF recorded over 3 minutes takes about 25 seconds to finish saving. As
before, this call maintains a lock and will block other calls, so make sure
not to use the UI thread.

Because save can take some time, we've added a new Tango Event with the
progress of the save call. The type is EVENT_AREA_LEARNING, the key is
KEY_AREA_DESCRIPTION_SAVE_PROGRESS, and the value is a floating point
number from 0 to 1 encoded as a string. Your application should show some
UI while the save is occurring, and show the user the current progress.

Saving an ADF now stops motion tracking and area learning. You must
disconnect and reconnect to resume motion tracking or load the new ADF.
After saving, you can optionally call getPoseAtTime with to get refined
poses at timestamps earlier than the save call.

Extending an ADF (i.e. loading an ADF with learning mode on, localizing to
the ADF, learning additional areas, and then calling save) will now create
a new file with a new UUID. Previously, the loaded ADF was overwritten with
the same UUID.

With these changes, the config_experimental_high_accuracy_small_scale_adf
flag will have no effect and will be removed in a future release.

You can continue to load old ADFs, but you will not be able to extend them
or convert them to the new version. Loading an old ADF with learning mode
on will result in an error.

These changes impact all APIs. See the appropriate reference pages for more
details.

Unity SDK Changes

The framerate of the depth camera can now be adjusted at runtime, including
turning it off entirely. For more information, see the Unity SDK reference
on SetDepthCameraRate.

UX Framework Changes

The Java UX Framework API has changed significantly with this release. To
upgrade, see our guide on the
needed code changes.

A new exception type has been added to the Java UX Framework API which
instructs users on the correct way to hold their device while using your
application. For more information, see the documentation on Hold Posture
Exceptions.

September 16, 2015: Weyl (Tango Core 1.22)

The Weyl release consists of software updates only, there is no associated OTA
update.

Upcoming Changes

We work hard to minimize breaking changes to our APIs, but sometimes it is
unavoidable. In those cases, we will let you know at least a release in advance
to give you time to make any necessary changes.

We are changing the way ADFs work under the hood to improve speed and
accuracy. The APIs will remain the same, but save calls will take
significantly longer than before. Save calls should not be called from the
UI thread. Instead, execute save calls in a background job. In addition, you
will no longer receive new poses after the save call finishes.

The Java UX framework API will be changed significantly in a future release.
These changes will not impact already-compiled applications, but if you
update the UX framework you will need to change your implementation. We will
provide a migration guide where necessary.

Java API Changes

The framerate of the depth camera can now be adjusted at runtime, including
turning it off entirely. For more information, see the Java API reference on
the
KEY_INT_RUNTIME_DEPTH_FRAMERATE
constant of the TangoConfig class and the new
setRuntimeConfig
method of the Tango class.

Unity SDK Changes

The Unity SDK and public API is being cleaned and refactored. Some functions
have been deprecated or made internal to the SDK. Developers using only the
prefabs will be unaffected. If you have implemented custom functionality,
check the Unity API reference where
affected functions are noted in their comments. The changes will occur in a
future update.

September 2, 2015: Von Mises (Tango Core 1.21)

The Von Mises release consists of software updates only, there is no associated
OTA update.

Unity SDK Changes

The YUV to RGB shader for the color camera has been improved. Colors should
render more accurately.

The Tango Manager prefab has been moved to the Assets > TangoPrefabs
folder of the SDK.

A new Tango Delta Camera prefab has been added. It updates the position with
deltas, so movement can be done using a CharacterController, physics, or
anything else that wants deltas. The prefab also includes a "clutch" which
temporarily disables motion tracking, allowing you to reposition yourself
in the real world if you run out of room. The prefab is in the Assets >
TangoPrefabs folder of the SDK.

Most of the example scenes have been updated to use the Tango Delta Camera
prefab.

UX Framework Changes

The Connecting screen art has been updated.

August 19, 2015: Urquhart (Tango Core 1.20 / KOT49H.150811)

OTA / General Changes

The motion tracking algorithm has been updated. New ADFs created in Urquhart
cannot be loaded by older versions of Tango Core, but older ADFs
should continue to work.

Low latency poses (config_low_latency_imu_integration) is now turned on by
default.

Unity SDK Changes

The TangoPointCloud prefab now has a method FindPlane().
Given a screen coordinate and search radius, it finds the plane that most
closely fits depth the values in that area. See
Assets/TangoPrefabs/Scripts/TangoPointCloud.cs for more information.

UX Framework Changes

The Java and Unity UX Frameworks have been updated with bug fixes. Error
detection for runtime version, Tango core version, lying on table,
and depth have been improved.

August 8, 2015: Turing (Tango Core 1.19)

OTA / General Changes

Fixed an issue involving time stamp associations.

Added an option under Settings > Tango > Configuration Options
to correct for banding effects on the cameras due to 50 Hz light.

C API Changes

The C sample code now
includes rgb-depth-sync-example, an example of projecting the depth
information into the color camera.

UX Framework Changes

The Java UX Framework has been updated to improve performance and simplify
the development process. In preparation for future changes, the method
disableMotionTracking() has been removed from TangoUx.Builder. If your
application does not use motion tracking, you should disable the connection
screen instead of calling the removed method. You can do this by calling
mTangoUxLayout.getSettings().setConnectionLayoutEnabled(false); before
calling mTangoUx.start();.

Unity SDK Changes

Removed the Low Latency Pose checkbox from the Tango Application script.
This setting has been on by default, and should be used by all applications.

July 22, 2015: Schur (Tango Core 1.18)

The Schur release consists of software updates only, there is no associated
OTA update.

Unity SDK Changes

The SDK has been refactored and the UX framework is now in a separate
script. This has no impact for compiled applications. If you update the SDK
in an existing application the UX framework settings will be reset to
default values.

The SDK now includes a Tango Simple Camera prefab. See our
tutorial for how
to include it in your project.

July 8, 2015: Ramanujan (Tango Core 1.17)

The Ramanujan release consists of software updates only, there is no associated
OTA update.

Java API Changes

In the Java API, the init method of TangoTextureCameraPreview is now
correctly set to private. If you were using the init method in your code
your application will no longer work.

The UX Framework library has been released and is available from the
downloads page.

Unity SDK Changes

The Unity code
samples structure
has changed. Instead of multiple projects, there is now one project
containing each example as a separate scene.

June 24, 2015: Quine (Tango Core 1.16)

The Quine release consists of software updates only, there is no associated
OTA update.

Upcoming Changes

We work hard to minimize breaking changes to our APIs, but sometimes it is
unavoidable. In those cases, we will let you know at least a release in advance
to give you time to make any necessary changes.

In the Java API, the init method of TangoTextureCameraPreview will be
made private in the upcoming R release. This method was not meant to be made
public.

Unity SDK Changes

The Unity SDK now includes a checkbox for
config_enable_low_latency_imu_integration, which is enabled by default.

June 11, 2015: Pythagoras (KOT49H.150609)

OTA / General Changes

Simultaneous use of color and color texture callbacks is now supported.

Improved stability of the Tango framework.

Motion tracking is less likely to fail when the system is under high load.

Unity SDK Changes

The Unity SDK now includes a Google-Unity folder. This contains files
shared by multiple Google Unity SDKs.

May 13, 2015: Nash (KOT49H.150505)

OTA / General Changes

Area description file names must be the same as their UUID. ADFs
created using first party tools like Tango Explorer already comply
with this requirement.

Performance of relocalization when using large ADFs has been improved.

The Mantis depth library has been updated to 1.9.0, which should reduce
depth noise and error.

C API Changes

Callback functions now support an optional void* context argument. This
allows proper binding of objects to callbacks using the Tango API.

Added the function TangoService_disconnectCamera().

Java API Changes

If you are using depth data in Java, you will need to change to using the
xyz field. An xyz field has been added to the TangoXyzIjData class,
allowing for direct access to a FloatBuffer containing xyz points.
Accessing the xyz field provides much more efficient access to the depth
data over the previous implementations. As such, the getXyzBuffer()
function has been deprecated and will be removed with the next release.

Important: While making this change, we discovered that the
xyzParcelFileDescriptor field had been incorrectly left public when it should
have been private after the introduction of getXyzBuffer(). Unfortunately,
our Java point cloud samples
were not updated to use getXyzBuffer() when that function became available.
The code samples have now been updated to use the xyz field, and
xyzParcelFileDescriptor and the related fields will be made private in the
next release. Please update your code if you based them off our previous code
samples.

Added the function disconnectCamera() to the Tango class.

Added enums corresponding to calibration types to the
TangoCameraIntrinsics class, bringing parity to the C API.

Added a KEY_BOOLEAN_COLORMODEAUTO param to the TangoConfig class. If
true, enables auto-exposure and auto-white balance.

added a KEY_BOOLEAN_COLORCAMERA param to the TangoConfig class. Should
be set to true if using the color camera.

Unity SDK Changes

The experimental VideoOverlayProvider has been changed to provide NV21
data through the texture provided by ExperimentalConnectTexture, bringing
it in line with our other APIs. In our
Unity sample code,
we have an example of using a shader to convert the NV21 values to RGB in a
shader. See the ARUnity sample under ExperimentalProjects - the shader can
be found in assets/scripts/YUV2RGB.shader.

TangoUnityDepth has been modified to use float[] instead of Vector3[].
You will need to adjust your code if you recompile to Nash, but existing
compiled apps will not be affected.

The read-only fields MAX_POINTS_ARRAY_SIZE and MAX_IJ_ARRAY_SIZE have
been added to the TangoUnityDepth class. These files will return the
maximum values supported by the specific device the application is installed
on.

RenderLatestFrame now returns the timestamp.

The UX library has been released for Unity, and can be enabled in the Tango
Manager. With the UX library, you can enable a standard connection screen
and warning toasts to help users use a Tango device correctly.

The Tango Manager inspector now has collapsing contextual menus.

Added a link to documentation in the menu bar at Tango > Documentation.

Note: We have received reports of issues updating the SDK using the normal
Import Package flow in Unity 5, where files are duplicated instead of
replaced. We have included update instructions with the SDK download.

April 29, 2015: Mandelbrot - Skipped

The Mandelbrot release was skipped.

April 15, 2015: Leibniz

OTA / General Fixes

Poses returned by Tango are now set to high rate and smooth by
default. These settings can be controlled by Config flags:
config_high_rate_pose and config_smooth_pose in C,
KEY_BOOLEAN_HIGH_RATE_POSE and KEY_BOOLEAN_SMOOTH_POSE in Java. There
is a known issue in this release that if the high rate pose flag is set to
true, you must also set smooth pose to true.

Warning: With high rate poses, callbacks occur very quickly. It is important
that you keep work done within the callback to a minimum. If you need to do
processing or rendering, follow best practices - do the work in a separate
thread and implement locks on shared data.

Pose callbacks now run on a separate thread than depth and video, so
callbacks may occur simultaneously. If those callbacks touch shared data,
make sure to protect the data from race conditions.

C API Changes

TangoService_connectOnFrameAvailable() has been fixed so that
TangoImageBuffer correctly provides YUV420SP instead of null.

config_enable_color_camera has been added to the configuration flags. We
recommend you always explicitly set this flag to true if accessing the
color camera. You must set the flag true for
TangoService_connectOnFrameAvailable() or
TangoService_connectTextureId() to succeed after TangoService_connect()
is called.

The configuration flag config_depth_framerate has been removed. Devices
will always use their fastest available depth framerate. For the Project
Tango Tablet Development Kit, this rate is approximately 5 Hz.

NV21 has been added to the list of possible formats for camera preview.

Java API Changes

The TangoTextureCameraPreview class has been added to the Java API,
providing a camera preview implemented using an Android
TextureView.
TangoCameraPreview, which uses GLSurfaceView, remains in the API.
TextureViews are less efficient but more flexible than SurfaceView,
allowing you to treat them as a regular
View.

getTimestamp() has been added to the TangoCameraPreview class.

Unity SDK Changes

Tango data is now handled by thread-safe events instead of
callbacks. This change requires you to change your implementation for
any Tango data you are ingesting. For motion tracking based on our
PoseController, this change consists of three lines:

See our updated
samples and
codelab for examples of
the changes for motion tracking, area learning and depth.

Depth data now uses TangoUnityDepth. See the TangoUnityDepth class in
TangoSDK/Core/Scripts/Common/TangoTypes.cs for details, and the
Pointcloud script in our updated Unity
depth sample for a
usage example. Note that the vertices type has changed to a Vector3 from
an array.

March 27, 2015: Kalman

OTA / General Fixes

Java API Changes

Applications using older versions of the Java API jar file and
connectSurface will no longer work. You must update to a current API file
and use connectTextureId() to use OpenGL textures directly, or the
TangoCameraPreview class, which inherits from GLSurfaceView.

Unity SDK Changes

The Unity SDK now uses the Tango client library in /system/lib
instead of embedding its own version. To update existing projects to the
latest SDK, you will need to manually remove the The Tango client
library file. Do this by deleting libtango_client_api.so from
Assets/Plugins/Android in the project.

The experimental UX library is now disabled by default in the Unity SDK
Tango Manager prefab.

March 17, 2015: Jacobi

OTA / General Fixes

Fixed bug that caused the touch panel to trigger a kernel panic.

Fixed critical issue with the MediaServer system component that caused the
Camera app to crash.

Fixed memory leak in Tango Core. If the Tango Core app does
not automatically update for you, go to the Play
Store
and manually update it. You'll need to close any apps running in the
background and relaunch to guarantee they are running on the new Project
Tango Core without problems.

Improved depth flash synchronization. Depth should be produced more reliably
and flash should appear in color image less.

Improved system initialization for motion tracking to handle a wider range
of motions such as stationary, rotating, translating, and roto-translating
at medium and high rates.

C API Changes

Increased default depth framerate to 5 frames per second. A new config flag
(config_depth_framerate) allows setting of depth framerate from 1 to 5
frames per second. See the Configuration
Parameters module for more
information.

Java API Changes

The Java API now uses JNI to communicate with Tango Service instead of AIDL.
Several classes, methods, and fields have been updated in the Java API to
correspond more closely with our C API. Here's a list of changes:

(Interface)
OnTangoUpdateListener:
Added the onFrameAvailable() method. Any class implementing this
interface has to add this callback to have access to the camera RGB data.

Tango: The connectSurface method has been
deprecated/removed. Developers should use connectTextureId() to use OpenGL
textures directly, or the TangoCameraPreview class, which inherits from
GLSurfaceView.

TangoCameraPreview: This class
is entirely new and is the way to get the camera preview. It
inherits from GLSurfaceView, so developers who were using
Tango.connectSurface() before should use this instead.

TangoConfig: Added fields for
KEY_DOUBLE_DEPTHPERIODINSECONDS, KEY_INT_COLOREXP, KEY_INT_COLORISO,
KEY_INT_MAXPOINTCLOUDELEMENTS, KEY_STRING_SERVICEVERSION. These
correspond to the supported configuration parameters that can be queried,
from the C Configuration
Parameters module.

TangoEvent: Both the status and version
fields, which were unused, have been eliminated.

Code Sample Changes

Application Changes

The Permissions Manager application functionality has been moved to Settings
(Device > Tango > Enabled Apps)

February 18, 2015: Hilbert

OTA / General

Several stability improvements to the camera.

Auto-recovery lifecycle fixed.

The patches from Android Security Bulletin 2015 #1 have been applied.

C API Changes

The data format of the
TangoImageBuffer struct
has changed from HAL_PIXEL_FORMAT_YV12 to RGBA8888 format.
Developers using the previous YV12 format should update their
applications.

January 30, 2015: Gauss

OTA / General

The motion tracking camera has been improved for darker environments.

Depth reliability has been improved. If the depth system encounters a
problem, in many cases it can now recover on its own. The color image may
pause occasionally as depth attempts to recover you from errors.

The permissions flow has been streamlined so you only have to request
permission once per app.

Unity SDK Changes

The Unity SDK has a more robust lifecycle with more reliable and faster starts
and stops.

Java API Changes

Known Issues

The Tango Maps application currently will only recognize ADFs created
by the Tango Maps Creator application. ADFs created by any other
app can not be displayed by the Tango Maps app.

January 16, 2015: Fermat

OTA / General

Fixes to a bug that caused the camera app to crash upon opening.

Various fixes to the Tango pose lifecycle providing consistency between pose
callbacks and pose queries. Also, provides stability during the
initialization state for the ADF reference frame.

Known Issues

The device screen sometimes turns black and non-responsive, though it may
still connect to ADB. Performing a hard reboot by holding down the POWER
button for 10 seconds will make the screen responsive again.

November 3, 2014: Archimedes

This is the first release to the public. Future releases will have notes with
updates and changes to this build. Here are the current known issues with this
release.

Known Issues

Lifecycle

The current version of the Tango APIs are designed for a single app
using Tango Service in the foreground. Multi-app usage is undefined so do
not plan on users switching between multiple active Tango apps at
this time.

Java applications should call connectSurface() before calling connect() if
a surface is needed.

Cameras will occasionally crash and cannot be opened. For TangoApps, when
they start, the API call TangoService_connect() will always return an error
after 10 seconds and the app cannot continue. A reboot is usually required
when this happens.

There is an issue with shutting down Unity applications via
Application.Quit() once the API has been initialized.

Depth

The IJ buffer of the XYZij struct is under development and not yet populated
via the API.

Occasionally, or when under high CPU load, the depth flash may appear in
the color image, or no depth points are returned. Let the device cool down
and/or reboot.

Calibration

Getting extrinsics via getPoseAtTime() currently only functions after
connect().

ADFs may become tilted with respect to gravity and you’ll find the horizon
is no longer correct when relocalizing. You will need to delete the ADF and
make a new one if this happens.

Color Camera

It is not yet possible to get YUV data in Unity.

OS/Device

Developers must use the ART runtime, the default runtime Dalvik is not
supported.

The default landscape device orientation is uncommon. Some existing apps,
especially those built with Unity, may not rotate correctly. See One Screen
Turn Deserves Another for more information.

There is no manual method to submit feedback or bug reports yet, or a
button-trigger to capture an Android bug report log.