public void GetValues(IntPtr cameraMetadataHandle, ARCameraMetadataTag tag, List <ARCameraMetadataValue> resultList) { IntPtr ndkMetadataHandle = IntPtr.Zero; NDKAPI.HwArImageMetadata_getNdkCameraMetadata(m_ndkSession.SessionHandle, cameraMetadataHandle, ref ndkMetadataHandle); resultList.Clear(); NdkCameraMetadata entry = new NdkCameraMetadata(); NdkCameraStatus status = NDKAPI.ACameraMetadata_getConstEntry(ndkMetadataHandle, tag, ref entry); if (status != NdkCameraStatus.Ok) { ARDebug.LogError("ACameraMetadata_getConstEntry error with native camera error code: {0}", status); return; } for (int i = 0; i < entry.Count; i++) { switch (entry.Type) { case NdkCameraMetadataType.Byte: sbyte byteValue = MarshalingHelper.GetValueOfUnmanagedArrayElement <sbyte>(entry.Value, i); resultList.Add(new ARCameraMetadataValue(byteValue)); break; case NdkCameraMetadataType.Int32: int intValue = MarshalingHelper.GetValueOfUnmanagedArrayElement <int>(entry.Value, i); resultList.Add(new ARCameraMetadataValue(intValue)); break; case NdkCameraMetadataType.Float: float floatValue = MarshalingHelper.GetValueOfUnmanagedArrayElement <float>(entry.Value, i); resultList.Add(new ARCameraMetadataValue(floatValue)); break; case NdkCameraMetadataType.Int64: long longValue = MarshalingHelper.GetValueOfUnmanagedArrayElement <long>(entry.Value, i); resultList.Add(new ARCameraMetadataValue(longValue)); break; case NdkCameraMetadataType.Double: double doubleValue = MarshalingHelper.GetValueOfUnmanagedArrayElement <double>(entry.Value, i); resultList.Add(new ARCameraMetadataValue(doubleValue)); break; case NdkCameraMetadataType.Rational: ARCameraMetadataRational rationalValue = MarshalingHelper.GetValueOfUnmanagedArrayElement < ARCameraMetadataRational>(entry.Value, i); resultList.Add(new ARCameraMetadataValue(rationalValue)); break; default: return; } } }
public void HitTestArea(float[] inPoints, List <ARHitResult> hitResultList) { hitResultList.Clear(); if (inPoints == null || inPoints.Length == 0) { ARDebug.LogError("HitTestArea inPoints is empty"); return; } float[] tmpIn = new float[inPoints.Length]; inPoints.CopyTo(tmpIn, 0); GCHandle unmanagedInUVHandle = GCHandle.Alloc(tmpIn, GCHandleType.Pinned); IntPtr hitResultListHandle = m_ndkSession.HitResultAdapter.CreateList(); NDKARStatus status = NDKAPI.HwArFrame_hitTestArea(m_ndkSession.SessionHandle, m_ndkSession.FrameHandle, unmanagedInUVHandle.AddrOfPinnedObject(), tmpIn.Length, hitResultListHandle); unmanagedInUVHandle.Free(); if (status != NDKARStatus.HWAR_SUCCESS) { ARDebug.LogError("HitTestArea status is error:{}", status); return; } int cntOfResult = m_ndkSession.HitResultAdapter.GetListSize(hitResultListHandle); ARDebug.LogInfo("HitTestArea hit result count{0}", cntOfResult); for (int i = 0; i < cntOfResult; i++) { //todo refactor the following code when arplaneHitResult is removed IntPtr hitResultHandle = m_ndkSession.HitResultAdapter.AcquireListItem(hitResultListHandle, i); IntPtr trackableHandle = m_ndkSession.HitResultAdapter.GetTrackbaleHandle(hitResultHandle); ARDebug.LogInfo("HitTestArea hittype! {0}", m_ndkSession.TrackableAdapter.GetType(trackableHandle), i); switch (m_ndkSession.TrackableAdapter.GetType(trackableHandle)) { case NDKARTrackableType.Plane: hitResultList.Add(new ARPlaneHitResult(hitResultHandle, m_ndkSession)); break; case NDKARTrackableType.Point: hitResultList.Add(new ARPointCloudHitResult(hitResultHandle, m_ndkSession, ARFrame.AcquirePointCloud())); break; case NDKARTrackableType.Invalid: break; case (NDKARTrackableType)0x41520105: break; default: hitResultList.Add(new ARHitResult(hitResultHandle, m_ndkSession)); break; } } m_ndkSession.HitResultAdapter.DestroyList(hitResultListHandle); }
public ARWorldMappingState GetMappingState() { int ret = (int)ARWorldMappingState.NOT_AVAILABLE; NDKAPI.HwArFrame_getMappingState(m_ndkSession.SessionHandle, m_ndkSession.FrameHandle, ref ret); ARDebug.LogError("NDK world map status " + ret); if (!ValueLegalityChecker.CheckInt("GetMappingState", ret, AdapterConstants.Enum_ARWorldMappingState_MinIntValue, AdapterConstants.Enum_ARWorldMappingState_MaxIntValue)) { return(ARWorldMappingState.NOT_AVAILABLE); } return((ARWorldMappingState)ret); }
public void GetAllCameraMetadataTags(IntPtr cameraMetadataHandle, List <ARCameraMetadataTag> resultList) { IntPtr metadataHandle = IntPtr.Zero; NDKAPI.HwArImageMetadata_getNdkCameraMetadata(m_ndkSession.SessionHandle, cameraMetadataHandle, ref metadataHandle); IntPtr tagsHandle = IntPtr.Zero; int tagsCount = 0; NdkCameraStatus status = NDKAPI.ACameraMetadata_getAllTags(metadataHandle, ref tagsCount, ref tagsHandle); if (status != NdkCameraStatus.Ok) { ARDebug.LogError("ACameraMetadata_getAllTags error with native camera error code: {0}", status); return; } for (int i = 0; i < tagsCount; i++) { resultList.Add((ARCameraMetadataTag)MarshalingHelper.GetValueOfUnmanagedArrayElement <int>(tagsHandle, i)); } }